GET /.well-known/agentic-checkout.json
The discovery anchor. The single URL an agent needs to bootstrap everything — catalog URL, checkout URL, supported rails, receiving destinations, accepted mandates, and a policy summary.
The single URL an agent needs to bootstrap everything else. It advertises the catalog and
checkout URLs, supported rails, the merchant's receiving destination(s) (pay_to), the
accepted mandate types, and a summary of the acceptance policy — so a well-behaved
agent can self-screen before it even tries.
Response — 200
{
"protocol": "veto-checkout/0.1",
"merchant": { "id": "acme", "name": "Acme Corp", "domain": "shop.acme.example" },
"catalog_url": "/agent/catalog",
"checkout_url": "/agent/checkout",
"rails": ["x402", "mock"],
"pay_to": { "x402": { "chain": "base", "address": "0x...", "asset": "USDC" } },
"mandate": { "accepted": ["veto", "ap2", "acp", "none"], "preferred": "veto" },
"policy_summary": {
"require_mandate_over_usd": 20,
"max_per_transaction_usd": 500,
"min_reputation_tier": "standard"
}
}Fields
| Field | Meaning |
|---|---|
protocol | The protocol + version string (veto-checkout/0.1). |
merchant | { id, name, domain }. |
catalog_url / checkout_url | Relative paths to the catalog and checkout endpoints. |
rails | The settlement rails this merchant accepts. |
pay_to | Per-rail receiving destination (non-custodial; the merchant's own). |
mandate.accepted | The mandate types accepted on the wire. |
policy_summary | A non-binding summary so agents can self-screen. |
Relative URLs in catalog_url / checkout_url "just work" whether the merchant is hosted
on a subdomain or under a path prefix.
Agentic Checkout Protocol
The self-describing Veto Checkout wire protocol agents talk to — every endpoint, status code, and error shape. All bodies are JSON; status codes are used semantically.
GET /agent/catalog
The product list. Each item carries a sku, name, exact-decimal price, availability, and optional description, category, unit, and metadata.