{"name":"Jiagon","title":"Jiagon merchant negotiator agent","description":"Quote-first real-world merchant ordering, fulfillment handoff, and receipt proof for personal agents.","version":"0.1.0","homepage":"https://jiagon.vercel.app","privacy":"Recommendations use published or aggregate receipt-backed review signals. Private receipt inbox data stays user-scoped.","humanDocs":"https://jiagon.vercel.app/api/agent","openapi":"https://jiagon.vercel.app/openapi.json","wellKnown":"https://jiagon.vercel.app/.well-known/jiagon-agent.json","primaryUseCase":"Let a personal agent negotiate real-world merchant orders by checking budget, time, stock, and fulfillment constraints before creating an order handoff.","capabilityOrder":["/api/agent/merchants/{merchantId}/capabilities","/api/agent/merchants/{merchantId}/quote","/api/agent/merchants/{merchantId}/orders","/api/merchant/orders/{id}/action","/api/agent/proofs/{receiptHash}","/api/agent/merchants/{merchantId}/trust","/api/agent/credit-eligibility","/api/agent/rerank","/api/agent/recommendations","/api/agent/orders","/api/agent/orders/{id}/verify-solana-pay","/api/agent/shopify/products","/api/agent/shopify/orders","/api/webhooks/shopify/orders-paid","/api/webhooks/moonpay"],"adapterHandoff":{"boundary":"For the YC Call My Agent demo, merchant negotiation is the core path. Receipt memory is the proof that the agent completed useful work.","orderAgent":{"role":"Personal Order Agent","responsibility":"Captures user intent, checks merchant capabilities, asks for a feasible quote, then creates an order or checkout pass only after constraints are satisfied.","entrypoints":["/api/agent/merchants/{merchantId}/capabilities","/api/agent/merchants/{merchantId}/quote","/api/agent/merchants/{merchantId}/orders","/api/agent/orders","/api/agent/orders/{id}/verify-solana-pay","/api/agent/shopify/orders"]},"takeOrderAgent":{"role":"Merchant Take-Order Agent","responsibility":"Receives the pass in the merchant queue, Telegram terminal, Shopify checkout, or MoonPay Commerce payment flow, then confirms the paid or fulfilled event.","entrypoints":["/merchant","/api/merchant/orders/{id}/action","/api/merchant/orders/{id}/complete","/api/webhooks/shopify/orders-paid","/api/webhooks/moonpay"]},"receiptPassport":{"role":"Receipt Passport","responsibility":"Turns paid or merchant-fulfilled events into claimable receipt proof after the real-world task is complete.","entrypoints":["/claim/{token}","/passport","/api/agent/proofs/{receiptHash}","/api/agent/credit-eligibility"]}},"exampleUserIntent":"Get me an iced latte from Raposa under $10, ready in 15 minutes.","exampleProofCall":{"method":"GET","url":"https://jiagon.vercel.app/api/agent/proofs/{receiptHash}"},"exampleTrustCall":{"method":"GET","url":"https://jiagon.vercel.app/api/agent/merchants/raposa-coffee/trust"},"exampleCreditEligibilityCall":{"method":"GET","url":"https://jiagon.vercel.app/api/agent/credit-eligibility?owner=11111111111111111111111111111111"},"exampleRerankCall":{"method":"POST","url":"https://jiagon.vercel.app/api/agent/rerank","body":{"query":"coffee irvine","candidates":[{"provider":"google","placeId":"ChIJ...","name":"85C Bakery Cafe","branch":"Irvine","category":"Cafe","rating":4.4,"openNow":true}]}},"endpoints":{"receiptProof":{"method":"GET","url":"https://jiagon.vercel.app/api/agent/proofs/{receiptHash}","capability":"core proof API","returns":["public merchant receipt proof","claim and mint status","Solana credential metadata when available","proof boundary for agent decisions"]},"merchantTrust":{"method":"GET","url":"https://jiagon.vercel.app/api/agent/merchants/{merchantId}/trust","capability":"core merchant trust API","returns":["agent-readable merchant trust score","aggregate verified receipt and review memory","whether the merchant should be boosted in an agent recommendation","purpose-bound credit eligibility caveats"]},"merchantCapabilities":{"method":"GET","url":"https://jiagon.vercel.app/api/agent/merchants/{merchantId}/capabilities","capability":"merchant negotiation capability API","returns":["merchant catalog and fulfillment mode","which constraints the merchant adapter can quote","available negotiation and order actions","caveats separating estimates from final merchant acceptance"]},"merchantQuote":{"method":"POST","url":"https://jiagon.vercel.app/api/agent/merchants/{merchantId}/quote","capability":"merchant negotiation quote API","body":{"userIntent":"Natural-language request. Example: get me an iced latte within 15 minutes under $10.","itemId":"Optional exact catalog item id.","maxSpendUsd":"Optional budget constraint.","deadlineMinutes":"Optional pickup deadline for local merchants.","deliverByDays":"Optional shipping deadline for ecommerce merchants."},"returns":["whether the request is feasible","matched item and subtotal","pickup queue / ready-time or shipping estimate","reasons and alternatives when constraints cannot be met"]},"merchantScopedOrder":{"method":"POST","url":"https://jiagon.vercel.app/api/agent/merchants/{merchantId}/orders","capability":"merchant-scoped order execution after quote","body":{"agentId":"Stable id for the user's personal agent.","userIntent":"Natural order request already checked with the quote endpoint.","maxSpendUsd":"Optional user spending policy enforced before order creation.","paymentMode":"Optional: crypto_pay for external wallet approval, or pay_at_counter for a pilot fallback."},"returns":["same order pass, payment intent, pickup estimate, and receipt-source handoff as /api/agent/orders","merchantId is pinned from the URL to avoid the agent drifting after quote"]},"creditEligibility":{"method":"GET","url":"https://jiagon.vercel.app/api/agent/credit-eligibility","capability":"core purpose-bound credit eligibility API","query":{"owner":"Solana wallet public key."},"returns":["eligible or not eligible state","unlocked demo credit from minted receipt credentials","allowed purpose: dining deposit","bounded recipient and max demo cap"]},"rerank":{"method":"POST","url":"https://jiagon.vercel.app/api/agent/rerank","capability":"core rerank and recommendation API","body":{"query":"Free text user intent. Example: coffee irvine.","candidates":"Candidate places from Google Places or another place graph. Jiagon does not need to own the full place graph."},"returns":["candidate ranking with Jiagon proof boost","matched receipt-backed signals when available","proof caveats for candidates without Jiagon data"]},"recommendations":{"method":"GET","url":"https://jiagon.vercel.app/api/agent/recommendations","capability":"core rerank and recommendation API","query":{"query":"Free text need, category, merchant, or location. Example: coffee irvine.","limit":"Optional integer from 1 to 5."},"returns":["ranked merchant recommendations","proof level boundaries","agent-readable reasons","aggregate verified visits and wallets","credential and proof-level context"]},"publishedReviews":{"method":"GET","url":"https://jiagon.vercel.app/api/receipts/reviews","query":{"limit":"Optional integer from 1 to 100."},"returns":["published receipt-backed review signals","public proof ids","credential transaction metadata","storage URI and data hash"]},"orderAdapter":{"method":"POST","url":"https://jiagon.vercel.app/api/agent/orders","capability":"optional Personal Order Agent adapter, not the core Jiagon capability","body":{"agentId":"Stable id for the user's personal agent.","userIntent":"Natural order request. Example: get me a coffee under $10.","merchantId":"Optional known Jiagon merchant id. Defaults to raposa-coffee in the demo.","items":"Optional structured menu items instead of natural language.","maxSpendUsd":"Optional user spending policy enforced before the order pass is created.","paymentMode":"Optional: crypto_pay for external wallet approval, or pay_at_counter for a pilot fallback."},"returns":["Personal Order Agent to Merchant Take-Order Agent handoff","adapter-created order pass and pickup code","pickup estimate","optional external Solana wallet payment request","merchant staff dispatch status","NFC receipt station URL for claim after merchant fulfillment"]},"shopifyProducts":{"method":"GET","url":"https://jiagon.vercel.app/api/agent/shopify/products","capability":"optional Shopify product search adapter for checkout creation, not the core Jiagon capability","query":{"query":"Required Shopify product search query. Example: beanie.","limit":"Optional integer from 1 to 10."},"returns":["Shopify product variants available for agent checkout","variant ids usable by the Shopify order adapter","price and availability metadata when Shopify is configured"]},"shopifyOrderAdapter":{"method":"POST","url":"https://jiagon.vercel.app/api/agent/shopify/orders","capability":"optional Shopify checkout adapter for the Personal Order Agent handoff, not the core Jiagon capability","body":{"agentId":"Stable id for the user's personal agent.","userIntent":"Natural purchase request. Example: buy a beanie under $100.","query":"Optional Shopify product search query.","variantId":"Optional exact Shopify Storefront variant id.","maxSpendUsd":"Optional user spending policy enforced before checkout creation."},"returns":["selected Shopify product variant","Jiagon order pass","Shopify checkout URL","cart attributes carrying jiagon_order_id for paid-order receipt issuance after merchant integration"]},"paymentReceiptAdapters":{"capability":"optional Merchant Take-Order Agent payment adapters, not the core Jiagon capability","endpoints":[{"method":"POST","url":"https://jiagon.vercel.app/api/merchant/orders/{id}/action","requires":"Merchant dashboard key; action is accept, preparing, paid_done, reject, or cancel."},{"method":"POST","url":"https://jiagon.vercel.app/api/webhooks/shopify/orders-paid","requires":"Merchant-configured Shopify orders/paid webhook with valid HMAC."},{"method":"POST","url":"https://jiagon.vercel.app/api/webhooks/moonpay","requires":"Merchant-configured MoonPay Commerce webhook with bearer token and HMAC signature."}],"returns":["payment-backed receipt issuance for an existing Jiagon order pass when orderId is present","claimable receipt for a merchant-configured paid Shopify order when no Jiagon order pass is attached","receipt passport claim URL, proof hash, and payment provider/status metadata"]}},"proofLevels":{"A":"Verified payment plus merchant fulfillment plus passport claim.","B":"Bubblegum receipt cNFT minted from merchant-completed, passport-claimed receipt.","C":"Merchant-completed order receipt claimed into passport memory.","L4":"Payment-backed order receipt from Shopify, MoonPay Commerce, or verified Solana Pay.","D":"Order intent only; not credit-grade until merchant completion."},"architecture":{"source":"receipt-passport-api","credentialChain":"solana-devnet","storageLayer":"receipt metadata URI","flow":"Paid or merchant-verified commerce event -> claimable Jiagon receipt -> passport claim -> Bubblegum receipt cNFT -> agent proof/trust API -> purpose-bound dining deposit eligibility","adapters":"Personal Order Agent, Merchant Take-Order Agent, merchant dashboard, NFC/QR, Telegram, Shopify checkout, and MoonPay Commerce can create receipt memory but are not the primary API surface."},"howAgentsUseThis":["Read /api/agent or /.well-known/jiagon-agent.json to discover endpoints.","For the Call My Agent demo, treat Jiagon as a merchant negotiator: it quotes first, orders second, and leaves proof after fulfillment.","For commerce execution, first call /api/agent/merchants/{merchantId}/capabilities, then /quote, and only call /orders if the quote is feasible or the user accepts an alternative.","If the quote cannot satisfy budget, time, stock, or shipping constraints, return the reasons and alternatives instead of ordering blindly.","Call /api/agent/proofs/{receiptHash} to inspect a public receipt proof without reading a private passport inbox.","Use /api/agent/merchants/{merchantId}/orders as the primary YC order path. Older /api/agent/orders and Shopify routes are optional adapters.","Use Google Places, recommendations, rerank, trust, or credit endpoints only outside the core hackathon demo.","Use proofLevel, proofBoundary, reasons, freshness, verifiedVisits, and verifiedWallets to decide whether to recommend a merchant.","Do not treat user-claimed merchant identity as an official merchant fact unless a stronger proof level is present."],"coffeeExample":{"userIntent":"Get me an iced latte from Raposa under $10, ready in 15 minutes.","agentRequest":{"method":"POST","url":"https://jiagon.vercel.app/api/agent/merchants/raposa-coffee/quote","body":{"userIntent":"Get me an iced latte from Raposa under $10, ready in 15 minutes.","maxSpendUsd":"10.00","deadlineMinutes":15}},"agentDecisionProcess":["Read Raposa capabilities.","Quote the requested item against budget and pickup deadline.","If feasible, call the merchant-scoped order endpoint with the same constraints.","Return pickup code and merchant handoff status, not a fake receipt."]},"ecommerceCoffeeExample":{"userIntent":"Ship me Raposa whole bean Sunrise Blend under $25 this week.","agentRequest":{"method":"POST","url":"https://jiagon.vercel.app/api/agent/merchants/raposa-shop/quote","body":{"userIntent":"Ship me Raposa whole bean Sunrise Blend under $25 this week.","maxSpendUsd":"25.00","deliverByDays":7}},"agentDecisionProcess":["Read Raposa Shop shipping capabilities.","Quote the requested coffee product against budget, inventory, and shipping deadline.","If feasible, call the merchant-scoped order endpoint with the same constraints.","Return checkout-adapter-required status, not a fake payment-backed receipt."]},"trustExample":{"userIntent":"Can I trust Raposa Coffee enough to order through my agent?","agentRequest":{"method":"GET","url":"https://jiagon.vercel.app/api/agent/merchants/raposa-coffee/trust"},"agentDecisionProcess":["Read aggregate receipt and review memory for the merchant.","Use shouldBoostRecommendation as a reranking signal, not as official merchant identity proof.","Use receipt and credit fields outside the core YC merchant-negotiator demo."]},"orderingExample":{"adapterBoundary":"This is the primary Call My Agent flow: negotiate first, then create the merchant handoff.","userIntent":"Get me an iced latte within 15 minutes under $10 and use Solana Pay.","quoteFirst":{"method":"POST","url":"https://jiagon.vercel.app/api/agent/merchants/raposa-coffee/quote","body":{"userIntent":"Get me an iced latte within 15 minutes under $10 and use Solana Pay.","maxSpendUsd":"10.00","deadlineMinutes":15}},"orderIfFeasible":{"method":"POST","url":"https://jiagon.vercel.app/api/agent/merchants/raposa-coffee/orders","body":{"agentId":"hermes-demo-agent","userIntent":"Get me an iced latte within 15 minutes under $10 and use Solana Pay.","maxSpendUsd":"10.00","deadlineMinutes":15,"paymentMode":"crypto_pay"}},"agentDecisionProcess":["Personal Order Agent reads merchant capabilities and asks for a quote before creating the order.","If the quote cannot meet budget or time constraints, return alternatives instead of ordering blindly.","If the quote is feasible, create a merchant-scoped order and route user-approved payment.","Merchant Take-Order Agent receives the order pass through Jiagon's merchant queue, Telegram terminal, Shopify checkout, or payment webhook.","Return only the user-visible pickup result plus payment approval step until fulfillment or payment proof arrives.","Track merchant fulfillment and receipt claim so completed real-world action leaves proof."]}}