Introduction
The web can do anything, except the last 3 percent. You can research a product inside a chat, compare options, even negotiate tradeoffs, then buying it still means getting kicked out into tabs, carts, and forms like it’s 2009.
The Universal Commerce Protocol is an attempt to fix that last 3 percent. Not with another one-off integration, but with a shared contract that lets agents and merchants talk in a predictable, auditable way.
Table of Contents
1. What Agentic Commerce Actually Means
Agentic commerce is simple: the user expresses intent, software does the legwork, the user approves, the business fulfills. The agent can search, assemble line items, keep totals consistent, and prepare payment. The human still confirms the parts that matter, identity, shipping, money.
Universal Commerce Protocol Checkout Comparison
A mobile-friendly snapshot of classic checkout vs agentic intent flow.
| Step | Classic Checkout (Cart Funnel) | Agentic Checkout (Intent Flow) | Human Must Confirm? |
|---|---|---|---|
Discovery | Browse pages | Converse, shortlist | No |
Selection | Click variants | Structured line items | No |
Pricing | Late surprises | Early quotes, stable updates | No |
Shipping | Form fill | Agent proposes, user approves | Yes |
Payment | Redirects, card entry | Tokenized instrument, one approval | Yes |
Aftercare | Email portals | Status events, order lifecycle | No |
The Universal Commerce Protocol exists to make that middle column boring and reliable.
1.1 What It Is Not
It’s not a bot with a credit card. A good agentic commerce system feels like autopilot: it can do routine steps, but it must ask for consent at clear boundaries. If the protocol doesn’t make consent obvious, it’s not done.
2. The N×N Integration Problem, And The One-Contract Fix

Today, every platform wants a “buy” flow, apps, search, chat, voice, assistants. Merchants then integrate with each platform, one by one. That is the N×N problem, and it scales like pain.
The Universal Commerce Protocol flips it. A merchant publishes one profile. A platform discovers capabilities dynamically. Both sides negotiate what’s active for this session. “Integrate with everyone” becomes “publish once, interoperate broadly.”
3. The Minimum Vocabulary You Need
The Universal Commerce Protocol looks big until you reduce it to four nouns:
- Profile: a JSON document at /.well-known/ucp.
- Service: a vertical, like shopping.
- Capability: a verb, like checkout, discounts, fulfillment.
- Schema: the canonical shape of payloads.
Everything else is plumbing.
3.1 Why Schemas Matter More Than Endpoints
REST and MCP bindings are thin by design. The transport spec references base schemas. Extensions compose on top. That’s the part that keeps clients honest and lets platforms evolve without breaking merchants. It’s also why the Universal Commerce Protocol feels less like “yet another API” and more like a standard.
4. The Three-Call Purchase Flow

For a first implementation, think in three calls:
- Create a checkout session with line items.
- Update it as the agent adds shipping, discounts, or better info.
- Complete it with a payment credential and final consent.
This fits how agents behave: they iterate, retry, and correct themselves. The Universal Commerce Protocol bakes in the practical necessities, deterministic quoting, idempotency keys, and explicit status codes.
A practical framing that helps teams ship is “agent-safe defaults.” When something goes wrong, the platform should be able to retry without guessing, and the business should be able to prove what happened later.
- Idempotency protects you from double-charges and duplicate orders when networks get flaky.
- Deterministic quotes protect the user from surprise totals, and protect the agent from inventing totals.
- Explicit escalation states let you pause cleanly for buyer input, like address confirmation or a 3DS challenge.
These aren’t academic details. They’re the difference between a nice demo and a checkout that survives real traffic. If you implement only one idea from the Universal Commerce Protocol, implement safe retries. Your future self will thank you.
5. Native Vs Embedded Checkout
There are two integration modes:
- Native: the whole flow stays in protocol primitives. Best conversion, best automation, the clean path for agentic commerce.
- Embedded: an escape hatch for bespoke flows. The platform hosts a delegated UI, usually via an iframe or similar pattern.
Native is where the ecosystem wants to land. Embedded is how you ship while you untangle legacy checkout complexity.
6. Implementing On Google Surfaces, What “Go Live” Means
You’ll likely encounter the Universal Commerce Protocol first via Google agentic shopping experiences on AI Mode in Search and Gemini. The pitch is obvious: if the user already has purchase intent inside a conversation, don’t force a context switch to finish the job. That’s Google agentic commerce in practice.
For merchants, the checklist is pragmatic:
- Merchant Center setup and eligible product feeds.
- A working Universal Commerce Protocol profile and checkout endpoints.
- Comfort staying Merchant of Record, because you keep the transaction, the customer relationship, and the post-purchase obligations.
Rollouts can involve approvals and waitlists, because payments always do. The strategic upside remains, once you expose a protocol-shaped façade, you can support more than one platform with the same core integration.
7. Code Walkthrough Part 1, Publish Discovery
A platform can’t call you if it can’t discover you. So you start with /.well-known/ucp.
7.1 Minimal /.well-known/ucp Response
{
"ucp": {
"version": "2026-01-11",
"services": {
"dev.ucp.shopping": {
"version": "2026-01-11",
"spec": "https://ucp.dev/specification/overview",
"rest": { "schema": "https://example.com/ucp/openapi.json", "endpoint": "https://example.com/ucp/v1" }
}
},
"capabilities": [
{ "name": "dev.ucp.shopping.checkout", "version": "2026-01-11", "spec": "https://ucp.dev/specification/checkout", "schema": "https://ucp.dev/schemas/shopping/checkout.json" }
]
},
"payment": {
"handlers": [
{ "id": "mock", "name": "dev.ucp.mock_payment", "version": "2026-01-11", "spec": "https://ucp.dev/specs/mock", "config_schema": "https://ucp.dev/schemas/mock.json", "instrument_schemas": ["https://ucp.dev/schemas/shopping/types/card_payment_instrument.json"], "config": { "supported_tokens": ["success_token", "fail_token"] } }
]
}
}7.2 Serve It With FastAPI
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
UCP_PROFILE = {...} # paste the JSON above as a dict
@app.get("/.well-known/ucp")
def well_known_ucp():
return JSONResponse(UCP_PROFILE)Most early failures in the Universal Commerce Protocol show up right here, wrong endpoints, broken schema URLs, version mismatches. Treat discovery like production code, because platforms will cache it and depend on it.
8. Code Walkthrough Part 2, Minimal Checkout API
Now implement the three endpoints. This is the smallest useful slice of the Universal Commerce Protocol, and it’s enough to support a guest checkout flow.
8.1 A Tiny FastAPI Implementation
from fastapi import Header, HTTPException
from uuid import uuid4
from datetime import datetime
CHECKOUTS = {} # checkout_id -> session
IDEMPOTENCY = {} # idempotency_key -> checkout_id
def quote(line_items):
subtotal = sum(li["item"]["price"] * li["quantity"] for li in line_items)
return {"subtotal": subtotal, "total": subtotal}
@app.post("/checkout-sessions")
def create_session(
body: dict,
idempotency_key: str = Header(..., alias="idempotency-key"),
ucp_agent: str = Header(None, alias="UCP-Agent"),
):
if idempotency_key in IDEMPOTENCY:
return CHECKOUTS[IDEMPOTENCY[idempotency_key]]
checkout_id = str(uuid4())
session = {
"ucp": {"version": "2026-01-11", "capabilities": [{"name": "dev.ucp.shopping.checkout", "version": "2026-01-11"}]},
"id": checkout_id,
"created_at": datetime.utcnow().isoformat() + "Z",
"currency": body.get("currency", "USD"),
"line_items": body["line_items"],
"buyer": body.get("buyer"),
"status": "ready_for_complete",
"totals": quote(body["line_items"]),
"payment": {"handlers": [], "instruments": []},
}
CHECKOUTS[checkout_id] = session
IDEMPOTENCY[idempotency_key] = checkout_id
return session
@app.put("/checkout-sessions/{checkout_id}")
def update_session(checkout_id: str, body: dict):
if checkout_id not in CHECKOUTS:
raise HTTPException(status_code=404, detail="Unknown checkout session")
s = CHECKOUTS[checkout_id]
s["line_items"] = body["line_items"]
s["buyer"] = body.get("buyer")
s["currency"] = body.get("currency", s["currency"])
s["totals"] = quote(body["line_items"])
return s
@app.post("/checkout-sessions/{checkout_id}/complete")
def complete_session(checkout_id: str, body: dict):
if checkout_id not in CHECKOUTS:
raise HTTPException(status_code=404, detail="Unknown checkout session")
token = body["payment_data"]["token"]
if token == "fail_token":
return {
"status": "requires_escalation",
"messages": [{"type": "error", "code": "payment_failed", "message": "Payment failed, try another method.", "severity": "requires_buyer_input"}],
}
s = CHECKOUTS[checkout_id]
s["status"] = "completed"
s["payment"]["instruments"] = [body["payment_data"]]
return {"id": checkout_id, "status": "completed", "totals": s["totals"]}8.2 A Quick Local Test
export SERVER_URL=http://localhost:8182
curl -s "$SERVER_URL/.well-known/ucp" | jq
curl -s -X POST "$SERVER_URL/checkout-sessions" \
-H 'Content-Type: application/json' \
-H 'UCP-Agent: profile="https://agent.example/profile"' \
-H 'idempotency-key: 0b50cc6b-19b2-42cd-afee-6a98e71eea87' \
-d '{"line_items":[{"item":{"id":"bouquet_roses","title":"Red Rose","price":3500},"quantity":1}],"currency":"USD"}' | jqThat skeleton is enough to prove the flow. Then you replace the toy quote function with your real pricing engine, add taxes, inventory checks, and an order create on completion. The Universal Commerce Protocol doesn’t replace those systems, it gives platforms a stable way to reach them.
9. Payments: Tokenization, Handlers, Mandates

Payments are where agentic commerce gets serious. The Universal Commerce Protocol separates two ideas that are often tangled:
- Payment handler: the spec for how a platform should obtain a credential.
- Payment instrument: the opaque credential the platform submits to the business.
In many flows, the platform runs token acquisition client-side, then sends only a token to the merchant backend. That is payment tokenization doing its job, fewer redirects, less raw data moving around, clearer trust boundaries. It also aligns with how major payment tokenization service providers want integrations to behave.
If you squint, you can see the same pattern across wallets and PSPs, including PayPal agentic commerce. The handler tells the platform how to talk to the credential provider. The business charges using its existing provider relationship. Everyone stays in their lane.
Universal Commerce Protocol Payment Concepts
How handlers, instruments, and mandates flow through the platform.
| Concept | What It Is | Who Defines It | Who Executes It | What The Business Receives |
|---|---|---|---|---|
Handler | A processing blueprint | Wallet or PSP | Platform | N/A |
Instrument | The result of processing | Schema-based | Platform | Token or mandate |
Mandate | Proof of user authorization | Protocol extension | Platform or agent | Signed authorization |
Mandates matter for autonomous flows, because “the user clicked confirm” is not always provable later. If you want an agent to complete purchases with minimal human touch, you need non-repudiable consent tied to the exact checkout terms. That’s what an agentic commerce protocol is really buying you.
10. Consent And Identity Linking
Make consent explicit. Log what was approved, items, totals, shipping, and payment method. Require re-approval when terms change. If you don’t do this, your first “the agent bought the wrong thing” incident will feel personal.
Identity linking is the next step. Guest checkout gets you started, but accounts unlock loyalty, returns, and support. The Universal Commerce Protocol supports account-linked flows using OAuth-style authorization, so a user can connect a platform to a merchant account without leaking credentials.
11. Post-Purchase Is The Real Test
Checkout is a moment. Post-purchase is a relationship. Tracking, cancellations, returns, refunds, support, those are where trust is earned or lost. The Universal Commerce Protocol models order lifecycle updates via capabilities and webhook-style events, with signing keys for verification.
If you only implement checkout, you’ve built a demo. If you implement lifecycle, you’ve built a system.
12. UCP, MCP, ACP, The Layered Bet
Here’s the clean way to think about the ecosystem:
- The Universal Commerce Protocol is the commerce contract, discovery, negotiation, checkout, and lifecycle.
- MCP is a tool-calling transport that can carry the same calls.
- Agent-to-agent transports can wrap the same schemas.
So the bet is not “pick the winning surface.” The bet is “make your commerce boundary protocol-shaped.” Keep your internal engine the source of truth. Expose a stable façade, schema-driven payloads, create, update, complete. Then let platforms compete on UX.
If you’re a merchant, your next move is concrete: publish /.well-known/ucp on staging, implement the three checkout calls, wire one tokenized handler end-to-end, and run it through an agent client with obsessive logging. You’ll learn more in a week of traces than in a month of slide decks.
If you’re building a platform, do the mirror image: implement profile advertisement, schema resolution, and safe retries as defaults.
Either way, keep your integration small and testable. A clean Universal Commerce Protocol façade is the kind of boring infrastructure that compounds, because every new surface becomes a configuration problem, not a rewrite.
Either way, contribute back. Standards win when the boring edge cases get written down. The Universal Commerce Protocol is young enough that you can still shape those details, and that’s where the leverage is.
- https://developers.google.com/merchant/ucp
- https://developers.googleblog.com/under-the-hood-universal-commerce-protocol-ucp/
- https://github.com/Universal-Commerce-Protocol/ucp
- https://ucp.dev/specification/overview/#glossary
- https://ucp.dev/
- https://cloud.google.com/blog/products/ai-machine-learning/announcing-agents-to-payments-ap2-protocol
- https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/
- https://blog.google/company-news/inside-google/message-ceo/nrf-2026-remarks/
What Is The Universal Commerce Protocol (UCP)?
Universal Commerce Protocol (UCP) is an open standard that lets AI surfaces and agents complete purchases by discovering a merchant profile, negotiating capabilities, and calling a small set of checkout endpoints. It replaces one-off integrations with a shared, schema-driven contract.
What Does UCP Mean In Commerce Tech?
UCP means Universal Commerce Protocol, a standard for agentic checkout. In practice, you publish /.well-known/ucp, expose create, update, complete checkout endpoints, and support secure payment tokenization so platforms can pay without handling raw card data.
How Does Universal Commerce Protocol Fix The N×N Integration Problem?
Universal Commerce Protocol collapses “every platform integrates every merchant” into “publish once, interoperate broadly.” Platforms discover your capabilities dynamically and negotiate the intersection they can both support, so new AI surfaces don’t require bespoke checkout rebuilds.
Is ACP The Same As MCP, And Where Does UCP Fit?
No. Agentic commerce protocol (ACP) usually describes commerce-focused efforts, while MCP is a general model-to-tools pattern. Universal Commerce Protocol focuses on the commerce contract itself, discovery, negotiation, checkout, post-purchase, and can be transported over REST or MCP-style bindings.
Is Credit Card Tokenization Safe, And How Does UCP Handle It?
Payment tokenization is safer than passing raw PANs because the merchant receives an opaque credential instead of sensitive card details. Universal Commerce Protocol centers payments on handlers and tokenized instruments, plus explicit consent signaling, reducing exposure and simplifying compliance.
