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 OACP10 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
Real payments 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, you do them on the Commerce Runtime and Custom Domains pages. 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 save your merchant settings on Commerce Runtime.

    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 and runs a sync instead.

    Blocked / exception

    A missing Shopify credential or a wrong store domain stops the sync and says why.

  3. Set purchase limitsOwner: Merchant

    The largest order, the allowed currency (INR) and the most items per order. For you: the same fields in your merchant settings.

    Blocked / exception

    Without limits the arbiter refuses every purchase with merchant_limits_missing.

  4. Get the facts signedOwner: Platform operator, then merchant

    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.

    Blocked / exception

    Grantex answers unavailable until your tenant is on its allowlist.

  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.

    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. Your shop would 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. Grantex issues mandates for that exact cart. The arbiter allows or refuses and records the decision. Payments are off in this demo.

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. Grantex issues Intent, Cart and Payment mandates for that exact cart. The arbiter allows or refuses by fixed rules and records the decision in the ledger. A payment provider would charge once, only on allow; payments are off in this demo.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 key5GrantexMandates for this cartIntent, Cart and Payment6AgenticOrg arbiterAllow or refuseFixed rules, sealed in the ledgerrecorded7Payment providerCharges once, on allowSwitched off 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. Get mandatesOwner: Grantex

    Grantex issues three signed mandates: what the buyer allowed (Intent), this exact cart (Cart) and the amount and payment rail (Payment).

    Blocked / exception

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

  5. DecideOwner: AgenticOrg arbiter

    The arbiter applies its fixed rules, such as the shop's limits and the mandates, and answers allow or refuse. The decision is sealed in the ledger.

    Blocked / exception

    A refusal names the first rule that failed; nothing is charged.

  6. PayOwner: Payment provider

    With live payments on, the payment provider would charge once, only on allow. In this demo payments are off: a checkout can be decided, but completing it answers executor_unavailable and nothing is charged.

    Blocked / exception

    Live payment stays off until a payment-provider sandbox run has passed.

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}]}'

Every step of the mandates, the passkey and the decision is in A purchase, step by step.

Do the same for your shop

Nilgiri Tea House did You do Where
Created its merchant and seller agent Sign up and save your merchant settings Commerce Runtime
Loaded 10 synthetic products Connect Shopify read-only and run a sync Commerce Runtime
Set limits in INR Set your order limits and currencies Commerce Runtime
Got 11 artifacts signed and verified Ask your operator to allowlist you at Grantex, then request authority Commerce Runtime
Proved nilgiritea.agenticorg.ai Add a subdomain, its CNAME and TXT records, and the Search Console owner Custom Domains
Published its profile Create the signing key and publish Commerce Runtime
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. Live payments are off, and the demo has no payment provider attached.
  • No shipping rates. Delivery rates need a real Shopify shop. 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.