Skip to guide
AgenticOrgDocsOpen app
Documentation/OACP — agentic commerce, made safe

OACP — agentic commerce, made safe

Example: Nilgiri Tea House, end to end

A live example shop you can try in two minutes: how Nilgiri Tea House was set up, how it got its own address, how a buyer agent searches and checks out, and the same steps for your shop.

Merchants, agent platform teams and anyone new to OACP16 min readReviewed 2026-10-22
On this page

Meet Nilgiri Tea House

Nilgiri Tea House is the example merchant we run in production so that you can see OACP working end to end. It sells loose-leaf teas, a gift sampler and a few tea accessories from a (made-up) store in Ooty, in the Nilgiri hills.

Nilgiri Tea House, from shop to sale

The shop's catalog and limits go into AgenticOrg. Grantex signs those facts. The shop proves its own address with a DNS record. Buyer agents find it and search it, and the arbiter decides every checkout.

Six steps. The shop: Nilgiri Tea House in Ooty, ten teas and accessories priced in rupees. AgenticOrg syncs its catalog and its order limits. Grantex signs those facts: eleven signed artifacts, every one verified. The shop proves its own address, nilgiritea.agenticorg.ai, with a DNS TXT record. Buyer agents find it at /.well-known/ucp and search the catalog. Every checkout is decided by the arbiter's fixed rules and recorded in the ledger; payments are off in this demo.1The shopNilgiri Tea House, Ooty10 teas and accessories, priced in ₹2AgenticOrgCatalog synced, limits setProducts, prices, stock, order limits3GrantexFacts signed11 signed artifacts, all verifiedverified4DNSIts own addressnilgiritea.agenticorg.ai, proven by TXT5Buyer agentsFind it and search itProfile at /.well-known/ucp6AgenticOrg arbiterEvery checkout decidedFixed rules, recorded in the ledgerpayments off

Here is what is switched on for it today.

What Status Where
Shop profile for buyer agents (UCP) Live https://nilgiritea.agenticorg.ai/.well-known/ucp
Catalog search and lookup Live, no key needed https://nilgiritea.agenticorg.ai/ucp/catalog/search
Facts signed by Grantex 11 signed artifacts, all verified Refreshed automatically when they expire
Checkout, cart and order (UCP), ACP feed and checkout On Needs a platform API key issued by the merchant
Shopping from ChatGPT and other MCP apps Live, no sign-in, no payment tools https://mcp.agenticorg.ai/mcp (how to connect)
Payments Off: no payment method chosen, and agent-executed payment is off No money can move in this demo

Try it yourself in two minutes

You need no account. Any computer with curl, or just a web browser for the first step, will do.

  1. 1Open the shop's profile

    Visit https://nilgiritea.agenticorg.ai/.well-known/ucp in your browser. This is the file every buyer agent reads first. It names the UCP version, where to send requests and what the shop can do.

  2. 2Search the catalog

    Send the search below with the word chai. The shop answers with its Masala Chai Blend, its price in paise and whether it is in stock.

  3. 3Search for something else

    Try green, kettle or an empty query for all 10 products. One tea, the Blue Mountain Oolong, is sold out on purpose, so you can see how stock is shown.

The profile, shortened:

curl -s https://nilgiritea.agenticorg.ai/.well-known/ucp
{
  "ucp": {
    "version": "2026-04-08",
    "services": {
      "dev.ucp.shopping": [
        { "transport": "rest", "endpoint": "https://nilgiritea.agenticorg.ai/ucp" }
      ]
    },
    "capabilities": {
      "dev.ucp.shopping.catalog.search": [ ... ],
      "dev.ucp.shopping.checkout": [ ... ],
      "dev.ucp.shopping.ap2_mandate": [ ... ]
    }
  },
  "signing_keys": [ { "kty": "EC", "crv": "P-256", ... } ]
}

The search:

curl -s -X POST https://nilgiritea.agenticorg.ai/ucp/catalog/search \
  -H 'Content-Type: application/json' \
  -d '{"query":"chai","context":{"currency":"INR"}}'
{
  "products": [
    {
      "title": "Masala Chai Blend",
      "description": { "plain": "Synthetic demo product. Black tea with cardamom, ginger, clove and cinnamon." },
      "variants": [
        {
          "sku": "NTH-MASALA-250",
          "title": "250 g",
          "price": { "amount": 44900, "currency": "INR" },
          "availability": { "available": true, "status": "in_stock" }
        }
      ]
    }
  ],
  "pagination": { "has_next_page": false, "total_count": 1 }
}

Prices are in the smallest unit of the currency, so 44900 means ₹449.00. The whole shelf looks like this:

What a buyer agent sees

The 10 products the shop serves, with prices and stock. Every answer comes from facts that Grantex signed and AgenticOrg verified. If those facts expire and cannot be renewed, the shop stops answering instead of guessing.

The catalog that nilgiritea.agenticorg.ai serves to buyer agents over UCP 2026-04-08: Frost Black Tea from 349 rupees, Doddabetta Green Tea 399, Masala Chai Blend 449, Homemade Chocolate Tea 499, Blue Mountain Oolong 899 and sold out, Silver Tips White Tea 1,299, an Estate Sampler of six teas 999, a Cast Iron Kettle of 800 millilitres 2,499, a Tea Infuser 199 and a Tin Tea Caddy 299. Every other item is in stock. All of it is synthetic demo data.NILGIRITEA.AGENTICORG.AIUCP 2026-04-08 · 10 productsFrost Black Teafrom ₹349in stockDoddabetta Green Tea₹399in stockMasala Chai Blend₹449in stockHomemade Chocolate Tea₹499in stockBlue Mountain Oolong₹899sold outSilver Tips White Tea₹1,299in stockEstate Sampler, 6 teas₹999in stockCast Iron Kettle 800 ml₹2,499in stockTea Infuser₹199in stockTin Tea Caddy₹299in stockSynthetic demo data, prices in Indian rupees.

Part 1. How the shop was set up

These are the steps behind Nilgiri Tea House, in order. For the demo, a setup script runs them in one go, calling the same AgenticOrg functions the dashboard uses. For your shop, the Sell Everywhere page (/dashboard/sell-everywhere) takes you through the same steps and runs the Grantex and publishing steps itself; see Sell everywhere. The detail of each step is in the Merchant setup checklist.

  1. Create the merchantOwner: Merchant

    The shop got its own tenant, an administrator and a merchant record: merchant ID nilgiri_tea_house and seller agent seller_agent_nilgiri_tea. For you: sign up, then type a shop name on Sell Everywhere and select Create shop; the id is generated.

    Blocked / exception

    You need the administrator or merchant role.

  2. Load the catalogOwner: Merchant

    Its 10 products, prices and stock went in, plus one store with opening hours. A real shop connects Shopify read-only, or uploads a CSV or JSON file, on Sell Everywhere.

    Blocked / exception

    A missing Shopify credential, a wrong store domain or a bad file row stops the read and says why.

  3. Set purchase limitsOwner: Merchant

    The largest order, the allowed currency (INR) and the most items per order. For you: the Order limits step on Sell Everywhere, which also asks for your daily maximum.

    Blocked / exception

    Without limits, Sell everywhere stays off for your shop.

  4. Get the facts signedOwner: Platform operator for the demo; AgenticOrg for you

    The operator added the shop to the Grantex allowlist. AgenticOrg then asked Grantex to sign the catalog, prices, stock, policies and capabilities, and got 11 signed artifacts back. For you: turning on Sell everywhere enrols you with Grantex and asks for the signatures, with no allowlist edit for your shop.

    Blocked / exception

    The Grantex enrolment row says Waiting while your deployment's Grantex cannot enrol tenants yet.

  5. Check every signatureOwner: AgenticOrg

    AgenticOrg checked each artifact's signature, key, expiry and revocation status before keeping it. All 11 passed.

    Blocked / exception

    A refusal names the reason, for example revocation_status_unavailable; nothing from that batch is kept.

  6. Create the signing keyOwner: Merchant

    One signing key for the shop. Its public half is published in the profile, so agents can check the shop's own answers. For you: Sell everywhere creates it if it is missing.

    Blocked / exception

    Publishing is refused with signing_key_missing until the key exists.

Part 2. Its own address

Buyer agents need a web address to find a shop. Nilgiri Tea House uses nilgiritea.agenticorg.ai, connected by hand with the two records below, the way you would connect a domain of your own. Your shop can get <your-shop>.agenticorg.ai from Sell everywhere with no DNS work (while fewer than 20 shops have one), or use a subdomain you own, such as agent.your-store.example.

Nilgiri Tea House's two DNS records

A CNAME routes the address to AgenticOrg. A TXT record with a one-time code proves the shop controls the address. With both in place, the address was attested and the profile went live.

Both records live in the agenticorg.ai DNS zone. Record 1 routes the host: a CNAME named nilgiritea pointing to ghs.googlehosted.com. Record 2 proves ownership: a TXT record named _agenticorg-ucp.nilgiritea whose value is agenticorg-ucp-verify followed by the code AgenticOrg issued. With both in place the host was attested and the profile published under the namespace ai.agenticorg.nilgiritea.RECORD 1 · ROUTES THE HOSTTypeCNAMEName, in the agenticorg.ai zonenilgiriteaValueghs.googlehosted.comRECORD 2 · PROVES OWNERSHIPTypeTXTName, in the agenticorg.ai zone_agenticorg-ucp.nilgiriteaValueagenticorg-ucp-verify=rYSvH2jU…Host attested, profile liveNamespace ai.agenticorg.nilgiritea
  1. Ask for the challengeOwner: Merchant

    AgenticOrg issued a one-time code for nilgiritea.agenticorg.ai and showed the TXT record to create. On Custom Domains you see the same thing, with copy buttons.

    Blocked / exception

    An IP address or a one-word host is not accepted.

  2. Add the two DNS recordsOwner: Merchant

    A CNAME from nilgiritea to ghs.googlehosted.com, and the TXT record _agenticorg-ucp.nilgiritea with the code. Your own domain also needs one Search Console owner; see the custom domain guide.

    Blocked / exception

    DNS changes can take up to an hour to show; check again later.

  3. Verify and publishOwner: AgenticOrg and Grantex

    AgenticOrg looked the TXT record up, matched the code and linked the address to the shop. The shop opted in to public discovery, Grantex allowed it, and the profile went live.

    Blocked / exception

    The page lists each failed check with its fix, for example serving_host_not_attested.

  4. CertificateOwner: Google

    Google issued the HTTPS certificate for the address. That usually takes 15 minutes and at most 24 hours.

    Blocked / exception

    After 48 hours without a certificate, check CAA records and that the CNAME is DNS only.

Full instructions for your own domain, including every check and its fix, are in Your own domain for buyer agents.

Part 3. A buyer agent shops

This is what happens when an AI shopping agent buys tea for someone.

A buyer agent shops at Nilgiri Tea House

The agent reads the profile, searches, and opens a checkout with its API key. The mandate step belongs to agent-executed payment, which is switched off. The arbiter allows or refuses and records the decision. This demo has no payment method, so it stops before payment.

Seven steps. The buyer agent reads the shop's profile at /.well-known/ucp. It searches the catalog: chai finds the Masala Chai Blend at 449 rupees. AgenticOrg answers only from facts Grantex signed. The agent opens a checkout with its platform API key. When the checkout is ready, the agent asks for the payment link. The arbiter allows or refuses by fixed rules and records the decision in the ledger. A shop with payments set up hands the buyer its own payment page; this demo shop has none, so the buyer is told to pay with the shop.1Buyer agentReads the shop's profileGET /.well-known/ucp2Buyer agentSearches the catalog"chai" finds Masala Chai Blend, ₹4493AgenticOrgAnswers from signed factsPrice and stock verified, never guessed4Buyer agentOpens a checkoutWith its own platform API key5Buyer agentAsks for the payment linkcomplete_checkout on a ready checkout6AgenticOrg arbiterAllow or refuseFixed rules, sealed in the ledgerrecorded7Shop's payment pageBuyer pays the shopNo payment page in this demooff in demo
  1. DiscoverOwner: Buyer agent

    The agent reads /.well-known/ucp and learns the address of the shop's API and which UCP features it supports.

    Blocked / exception

    A 404 means the profile is not published, or its signed facts have lapsed and could not be renewed.

  2. SearchOwner: Buyer agent

    The agent searches for chai and gets the Masala Chai Blend at ₹449, in stock. The answer comes only from verified facts.

    Blocked / exception

    A catalog_unavailable message means the verified facts lapsed and could not be renewed; nothing is guessed. Try again shortly.

  3. Open a checkoutOwner: Buyer agent

    The agent creates a checkout for NTH-MASALA-250, quantity 1, using the API key the merchant issued to its platform. The shop prices it from the same verified facts.

    Blocked / exception

    Without a valid key the shop answers 401.

  4. Mandates, switched offOwner: Grantex

    On the agent-executed path, Grantex would issue three signed mandates: what the buyer allowed (Intent), this exact cart (Cart) and the amount and payment rail (Payment). That path is off, so no mandate is issued here.

    Blocked / exception

    A mandate is refused when it goes beyond what the buyer allowed.

  5. DecideOwner: AgenticOrg arbiter

    For a shop with a payment method, the arbiter checks its signed facts and its limits before any payment link exists, and answers allow or refuse. The decision is sealed in the ledger.

    Blocked / exception

    A refusal names the first rule that failed; no link is issued and nothing is charged.

  6. PayOwner: The shop's payment page

    Nilgiri Tea House has no payment method, so there is no payment step: once pickup is chosen the checkout is ready, and completing it answers payment_failed, "A payment instrument is required to complete." Nothing is charged. A shop that chose where buyers pay answers requires_escalation with continue_url instead: the link to its own Shopify checkout or Plural page, where the buyer pays.

    Blocked / exception

    Without a payment method, buyers get no payment link.

For an agent platform, the checkout request looks like this. The key and the platform profile are your own.

curl -s -X POST https://nilgiritea.agenticorg.ai/ucp/checkout-sessions \
  -H "X-API-Key: $PLATFORM_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H 'UCP-Agent: profile="https://your-agent-platform.example/.well-known/ucp"' \
  -H 'Content-Type: application/json' \
  -d '{"line_items":[{"item":{"id":"NTH-MASALA-250"},"quantity":1}]}'

How a payment link is issued, and how the switched-off mandate path works, is in A purchase, step by step.

See it with real agents

These are real runs against the live shop on 22 and 25 October 2026, not mock-ups. Each one searches the catalog, opens a checkout and stops at the payment step. Nothing was charged.

ChatGPT, through the hosted AgenticOrg MCP server

ChatGPT connects straight to AgenticOrg's hosted MCP server at https://mcp.agenticorg.ai/mcp. The server needs no sign-in and offers shop tools only: search, product lookup, and opening or updating a checkout. It has no tool that pays, and each caller is rate-limited.

For these runs the server served Nilgiri Tea House alone. For Sell everywhere the same address serves every shop on the AgenticOrg network and adds two tools: list_shops, and complete_checkout, which returns the shop's payment link for a ready checkout. It still has no tool that pays. See Sell everywhere.

Connect it once:

  1. 1Add the server

    In ChatGPT on the web, open Plugins, choose Add, then Add custom MCP server.

  2. 2Fill in three fields

    Name it Nilgiri Tea House, set Server URL to https://mcp.agenticorg.ai/mcp and set Authentication to No authentication.

  3. 3Create it

    Tick that you trust the server, then choose Create as a plugin.

  4. 4Shop

    In any chat, type @Nil, pick the plugin and ask in plain words.

The run below used a free ChatGPT account on 25 October 2026. ChatGPT's menu names may change over time.

ChatGPT's message box with @Nil typed; the picker offers the plugin Nilgiri Tea House (AgenticOrg demo).

  1. Pick the plugin. Type @Nil in the message box and choose Nilgiri Tea House.

The buyer's message, sent with the Nilgiri Tea House plugin: find masala chai, tell me the price, open a checkout for 1 pack for store pickup in INR, and stop before any payment. ChatGPT worked for 24 seconds and shows Masala Chai Blend from Nilgiri Tea House, a 250 g pack at Rs 449.00, in stock, black tea blended with cardamom, ginger, clove and cinnamon.

  1. Ask in plain words. Ask it to find masala chai, open a checkout for one pack for store pickup, and stop before paying. In 24 seconds ChatGPT searched the catalog and found Masala Chai Blend (250 g, in stock, ₹449.00).

ChatGPT's checkout card: checkout created successfully, store pickup selected at Nilgiri Tea House, Ooty, India (demo store). Item 1 at Rs 449.00, pickup fee Rs 0.00, total Rs 449.00, checkout status Ready for completion, payment: no payment made. Checkout ID chk_b874442731f24f9f8308752406904b57. What this means: the checkout is ready for the next step with one 250 g pack and store pickup configured; it stopped before payment, no payment instrument was added and no charge was made.

  1. Checkout, then stop at payment. ChatGPT opened the checkout and chose pickup at the Ooty store, which costs nothing. The checkout is ready for completion with a total of ₹449.00, and no payment was added or charged. A shop that has chosen where buyers pay would give the buyer a link to its own payment page here, only after the arbiter allows it.

ChatGPT may show a product photo it found on its own. The shop's catalog has no real photos, so any picture you see there does not come from Nilgiri Tea House.

Gemini, through the AgenticOrg MCP server

Gemini CLI was connected to the agenticorg-mcp-server UCP tools, pointed at the shop's profile. Gemini asked before every tool call, and each call was approved by hand.

Gemini summarises its run: it found Masala Chai Blend, NTH-MASALA-250, at Rs 449 in stock, opened checkout chk_b07d…f2d for one 250 g pack with a total of Rs 449, and the shop answered that the order still needs a fulfilment choice, shipping or pickup.

  1. Search and checkout. Gemini found Masala Chai Blend (NTH-MASALA-250) at ₹449, in stock, and opened a checkout for one pack. The shop priced it at ₹449 and marked it incomplete: it still needed to know how the tea reaches the buyer.

Gemini updates the checkout to in-store pickup at Nilgiri Tea House, Ooty, with a pickup fee of Rs 0; the session moves to ready_for_complete with totals of 44900 subtotal, 0 fulfilment and 44900 total.

  1. Pickup chosen. Gemini chose in-store pickup at the Ooty store, which costs nothing. The checkout moved to ready_for_complete with a total of ₹449.

The shop's answer to completing the checkout: an error message with code payment_failed, "A payment instrument is required to complete.", severity recoverable, path $.payment.

  1. Stop at payment. Asked to complete, the shop answered payment_failed: "A payment instrument is required to complete." That is the payment layer. A shop that has chosen where buyers pay would answer with a link to its own payment page here, only after the arbiter allows it.

Telegram, through an AgenticOrg agent

An AgenticOrg agent with the ucp_buyer connector answers in a Telegram bot. It may search, read and open checkouts at sandbox shops, and it has no tool that pays. Asked "Find masala chai at Nilgiri Tea House and open a checkout for one", it replied:

In Telegram, the buyer asks "Find masala chai at Nilgiri Tea House and open a checkout for one." The bot replies: Item found: Masala Chai Blend, 250 g, Rs 449, in stock. Checkout ID: chk_de0b0a92da6446259b4147662d72c60f. Status: incomplete. Total: Rs 449. The order stops before payment, which the buyer would complete with the shop.

Behind that one message the agent searched the catalog, opened the checkout at the shop (HTTP 201) and answered, in about 30 seconds. To give your own agent these tools, see the UCP buyer connector.

Do the same for your shop

Nilgiri Tea House did You do Where
Created its merchant and seller agent Sign up and create your shop Sell Everywhere
Loaded 10 synthetic products Connect Shopify read-only, or upload a CSV or JSON file Sell Everywhere
Had no shipping fee Write your policies, and set a shipping fee if you have no Shopify Sell Everywhere
Set limits in INR Set your order limits, daily maximum and currency Sell Everywhere
Had no payment method Choose your Shopify checkout or your Plural account Sell Everywhere, Payments
Got 11 artifacts signed and verified Turn on Sell everywhere; it enrols you with Grantex and asks for the signatures Sell Everywhere
Proved nilgiritea.agenticorg.ai Take the address Sell everywhere gives you, or add your own subdomain and its records Sell Everywhere, or Custom Domains
Published its profile Nothing: Sell everywhere creates the key and publishes, and Publish shows why if it waits Sell Everywhere
Opened checkout and the ACP feed Issue each agent platform its own API key Settings, API keys

Most steps take a few minutes. Waiting for DNS and the certificate usually takes the longest.

What this demo does not do

  • No real products or customers. Every product, price, store and address is synthetic, and each product description starts with "Synthetic demo product".
  • No money moves. The demo has no payment method, so no checkout gets a payment link, and agent-executed payment is off.
  • No shipping rates. The demo sets no shipping fee, so buyers choose store pickup. A real shop gets its rates from Shopify, or sets a flat fee on Sell Everywhere. The demo is for discovery, search and checkout decisions.
  • No store-location search yet. Store locations are part of UCP 2026-08-25. The shop serves UCP 2026-04-08, so a location search answers that the feature is not served.

Implementation references

This guide is checked against repository sources. Enabled features and deployed versions may differ by environment.