Status levels
- required
- Leaving it out breaks the protocol or platform contract. Maps to what the spec marks as MUST or required.
- recommended
- Meets the modern expectations of users, search engines, agents and browsers.
- optional
- Useful in some contexts, not all.
- avoid
- Outdated, harmful or actively superseded. Only used when an official source supports it.
This is the default rule. Where context justifies an exception, the item says why. Checkbox state is saved only in this browser.
Also available as JSON API and MCP server. Audit your site against the machine-checkable items.
UCP checkout
Universal Commerce Protocol. Official site (opens in new tab)
The business profile tells agents which UCP version, services, capabilities and payment handlers you support.
Details: goal, note, how to implement, resources, audit
- Goal
Agents start every UCP interaction by fetching this profile. Without it, no UCP platform can find or negotiate with you.
- Note
UCP versions are dated (latest release 2026-08-25). The profile is public and cacheable by design.
- How to implement
- Create a JSON document with a top-level ucp object: version, services, capabilities and payment_handlers.
- Serve it at https://yourdomain/.well-known/ucp over HTTPS.
- List only capabilities you actually implement.
{ "ucp": { "version": "2026-08-25", "services": { ... }, "capabilities": { ... }, "payment_handlers": { ... } } }Snippet from UCP spec overview, Versioned Profiles example (opens in new tab)
Artifacts
/.well-known/ucp- Resources
- Audit
Method
http_getmachine-checkable/.well-known/ucpGET /.well-known/ucp returns 200 JSON with ucp.version, ucp.services and ucp.capabilities.
{ "status": 200, "content_type": "application/json", "json_keys": [ "ucp.version", "ucp.services", "ucp.capabilities" ] }
ucp.discovery.well-known JSON
The spec sets hosting rules for profiles and the artifacts they reference.
Details: goal, note, how to implement, resources, audit
- Goal
Platforms cache profiles and treat them as your stable identity. A redirect or a no-store header can stop a platform from processing your requests.
- Note
These are MUST rules in the UCP overview, section Profile Requirements, Hosting. ETag or Last-Modified is a SHOULD.
- How to implement
- Serve the profile and referenced schemas over HTTPS.
- Return the profile directly with 200; no 3xx redirects.
- Send Cache-Control: public, max-age=60 or higher; never private, no-store or no-cache.
- Add an ETag or Last-Modified validator.
Artifacts
Cache-ControlETagDepends on ucp.discovery.well-known
- Resources
- Audit
Method
http_getmachine-checkable/.well-known/ucpGET without following redirects returns 200 (not 3xx); Cache-Control contains public and max-age >= 60 and no private/no-store/no-cache; ETag or Last-Modified present.
{ "status": 200, "no_redirect": true, "headers": { "cache-control": "public; max-age>=60; not private|no-store|no-cache" }, "headers_any": [ "etag", "last-modified" ] }
ucp.profile.hosting JSON
Expose the checkout capability declared in your profile so an agent can create and complete a checkout.
Details: goal, note, how to implement, resources, audit
- Goal
Checkout is the core UCP transaction. It is what turns agent discovery into an order.
- Note
Bindings exist for REST, MCP, A2A and embedded checkout. Pick the transports your platforms use.
- How to implement
- Declare the checkout capability with its version in /.well-known/ucp.
- Implement the REST or MCP binding from the spec.
- Return continue_url where the buyer must finish on your site.
Artifacts
checkout capabilityDepends on ucp.discovery.well-known
- Resources
- Audit
Method
code_reviewhuman checkRun the official samples or conformance tooling from the UCP repo against your endpoint.
ucp.capabilities.checkout JSON
UCP defines catalog, cart, checkout and order capabilities; advertise only what you implement.
Details: goal, note, how to implement, resources, audit
- Goal
Catalog lets agents search and look up products, cart supports multi-item baskets, order lets agents track status after purchase.
- Note
Capability compatibility is by exact version equality, not by date order.
- How to implement
- Add each implemented capability with its version to the profile.
- Implement the matching REST or MCP binding.
Artifacts
catalogcartorderDepends on ucp.discovery.well-known
- Resources
- Audit
Method
http_getmachine-checkable/.well-known/ucpEach capability listed in the profile carries a version; endpoints respond per the spec.
{ "status": 200, "json_keys": [ "ucp.capabilities" ] }
ucp.capabilities.catalog-cart-order JSON
Identity linking uses OAuth 2.0; metadata sits at /.well-known/oauth-authorization-server.
Details: goal, note, how to implement, resources, audit
- Goal
Lets an agent link to the buyer's existing account so loyalty, addresses and order history carry over.
- Note
Only needed if you support identity linking.
- How to implement
- Expose an OAuth 2.0 authorization server.
- Publish RFC 8414 metadata at /.well-known/oauth-authorization-server.
Artifacts
/.well-known/oauth-authorization-server- Resources
- Audit
Method
http_getmachine-checkable/.well-known/oauth-authorization-serverGET returns 200 JSON with issuer, authorization_endpoint and token_endpoint (RFC 8414).
{ "status": 200, "content_type": "application/json", "json_keys": [ "issuer", "authorization_endpoint", "token_endpoint" ] }
ucp.identity.oauth-metadata JSON
Payments in UCP run through payment handlers supplied by the PSP or platform.
Details: goal, note, how to implement, resources, audit
- Goal
Keeps raw card data out of the agent and the merchant, and lets your PSP plug into UCP.
- Note
Payment handlers are declared in the profile under payment_handlers.
- How to implement
- Ask your PSP for its UCP payment handler.
- Declare it under payment_handlers in /.well-known/ucp.
Artifacts
payment handlerDepends on ucp.discovery.well-known
- Resources
- Audit
Method
http_getmachine-checkable/.well-known/ucpProfile JSON contains a non-empty ucp.payment_handlers object.
{ "status": 200, "json_keys": [ "ucp.payment_handlers" ] }
ucp.payment.handler JSON
AP2 is an optional UCP extension for signed payment mandates.
Details: goal, note, how to implement, resources, audit
- Goal
Gives you cryptographic proof of what the user authorized, which helps with disputes.
- Note
Optional in UCP. AP2 itself is at v0.2 and moving to FIDO Alliance working groups.
- How to implement
- Advertise the AP2 mandates extension in your profile.
- Verify mandates per the extension spec.
Artifacts
AP2 mandates extensionDepends on ap2.mandates.verify
- Resources
- Audit
Method
code_reviewhuman checkProfile advertises the AP2 extension and sample mandates verify.
ucp.payment.ap2-extension JSON
UCP on Google uses existing Merchant Center product data.
Details: goal, note, how to implement, resources, audit
- Goal
Google's agentic checkout reads your Merchant Center data; without it you are not eligible.
- Note
Updated 2026-10-15: Google says UCP checkout is live in the US via Universal Cart in AI Mode in Search and the Gemini app since 15 Oct 2026, with Google Pay checkout or handoff to the merchant cart; the merchant stays seller of record. US only per Google's blog. Merchants join a waitlist (Google Merchant UCP docs, 2026-10-12). ucp.dev: Lodging draft specification available (not yet in a release; latest release v2026-08-25); Food coming soon.
- How to implement
- Keep an active Merchant Center feed.
- Follow Google's UCP onboarding in the Merchant docs.
Artifacts
Merchant Center accountproduct feedDepends on gmc.feed.active
- Resources
- Google Merchant: UCP (opens in new tab) Google docs
- Google blog: Universal Cart launch (15 Oct 2026) (opens in new tab) Google announcement
- UCP on GitHub (opens in new tab) UCP spec
- UCP releases on GitHub (opens in new tab) UCP spec
- Audit
Method
platform_consolehuman checkProducts appear eligible in Merchant Center for the UCP program.
ucp.google.merchant-center JSON
UCP uses date-based versions (YYYY-MM-DD). The profile declares one version; older ones go in supported_versions.
Details: goal, note, how to implement, resources, audit
- Goal
Version selection and capability matching depend on it. A wrong value breaks negotiation.
- Note
Resolved: the spec says the version MUST be a dated release and MUST NOT be a non-date string such as draft. Releases on GitHub: 2026-01-11, 2026-01-23, 2026-04-08, 2026-08-25.
- How to implement
- Set ucp.version to the dated release you implement.
- Optionally map older releases to full profiles in supported_versions.
- Never publish pre-release implementations through public discovery.
Artifacts
ucp.versionsupported_versionsDepends on ucp.discovery.well-known
- Resources
- Audit
Method
http_getmachine-checkable/.well-known/ucpucp.version matches ^\d{4}-\d{2}-\d{2}$ and equals a published release.
{ "status": 200, "json_keys": [ "ucp.version" ], "json_pattern": { "ucp.version": "^\\d{4}-\\d{2}-\\d{2}$" } }
ucp.version.pin JSON
ACP checkout
Agentic Commerce Protocol. Official site (opens in new tab)
ACP defines checkout session endpoints on your commerce backend, over REST or MCP.
Details: goal, note, how to implement, resources, audit
- Goal
These endpoints let an agent create, update and complete a checkout on your backend.
- Note
ACP spec versions are dated folders in the repo (latest seen 2026-04-17).
- How to implement
- Implement the checkout session endpoints from the agentic checkout RFC (POST /checkout_sessions and follow-ups).
- Version your API per the dated spec folder.
Artifacts
checkout endpoints (REST or MCP)- Resources
- Audit
Method
code_reviewhuman checkRun the ACP spec test flow from the repo against your endpoints.
acp.checkout.endpoints JSON
ACP payments use a delegated payment token; Stripe Shared Payment Token was the first compatible one.
Details: goal, note, how to implement, resources, audit
- Goal
The agent never holds raw card data; the PSP issues a scoped token you can charge.
- How to implement
- Pick a PSP that supports ACP delegated payment.
- Charge the token you receive on checkout completion.
Artifacts
Shared Payment TokenDepends on acp.checkout.endpoints
- Resources
- Audit
Method
code_reviewhuman checkComplete a test payment with a Shared Payment Token in Stripe test mode.
acp.payment.delegated-token JSON
Since March 2026 ChatGPT is discovery first: through ACP, merchants share product feeds and promotions, and the purchase happens on the merchant site or app.
Details: goal, note, how to implement, resources, audit
- Goal
OpenAI says feeds give greater control over how products appear and keep pricing and availability current.
Why this status Not a protocol MUST; OpenAI says feeds give more control than crawling.
- Note
Re-verified 2026-10-12. A feed is not strictly needed (ChatGPT also crawls sites), per OpenAI. Shopify and Etsy catalogs are already integrated, no setup needed. Feeds can also arrive via providers such as Salesforce and Stripe. Shopping is live in the US only; new applicants join a waitlist.
- How to implement
- If you sell on Shopify or Etsy, check that your catalog is synced; no application is needed.
- Otherwise apply via chatgpt.com/merchants.
- Build the feed to the OpenAI product feed spec.
Artifacts
product feedDepends on openai.feed.required-fields
- Resources
- OpenAI: powering product discovery in ChatGPT (opens in new tab) OpenAI announcement
- OpenAI product feed spec (opens in new tab) OpenAI spec
- ChatGPT merchants (opens in new tab) OpenAI docs
- Audit
Method
platform_consolehuman checkFeed accepted in OpenAI merchant onboarding; Upload History shows no rejected rows.
acp.feed.openai JSON
An ACP RFC proposes a public discovery document with protocol version, API base URL, transports and capabilities.
Details: goal, note, how to implement, resources, audit
- Goal
Agents can check ACP support and the API base URL from just your domain, without opening a checkout session.
- Note
Resolved: the mechanism is specified in rfc.discovery.md, but its status is Proposal and version unreleased. Treat as optional until it lands in a dated spec.
- How to implement
- Serve /.well-known/acp.json at the origin root, publicly, without auth.
- Include protocol name and version, api_base_url, transports and capabilities.
- Send Cache-Control: public, max-age=3600 (SHOULD).
Artifacts
/.well-known/acp.jsonDepends on acp.checkout.endpoints
- Resources
- Audit
Method
http_getmachine-checkable/.well-known/acp.jsonGET returns 200 JSON with api_base_url and transports; Cache-Control public with max-age >= 3600.
{ "status": 200, "content_type": "application/json", "json_keys": [ "api_base_url", "transports" ], "headers": { "cache-control": "public; max-age>=3600" } }
acp.discovery.mechanism JSON
OpenAI's products spec requires url to be the stable product page with the variant selected. It does not document any UTM tag added by ChatGPT, so shops tag their own feed URLs and also segment on the referrer.
Details: goal, note, how to implement, resources, audit
- Goal
Attribute ChatGPT visits and revenue per product with tags you control.
- Note
The products spec neither allows nor forbids extra query parameters in url. Using chatgpt.com as utm_source keeps it aligned with the referrer hostname. Templates follow Simon Vreeman's convention (vreeman.com/utm): required utm_source and utm_medium; optional utm_campaign, utm_content, utm_term, utm_source_platform, utm_creative_format and utm_marketing_tactic. For AI assistants choose the medium yourself (not referral). Templates use {ai_medium}. Option A: utm_medium=ai-assistant lands in GA4's built-in AI Assistant default channel with no setup (support.google.com/analytics/answer/9756891). Option B: your own medium (for example ai) plus a GA4 custom channel group placed above Referral; without that group the traffic lands in Unassigned. Recommendation, not an OpenAI rule. The audit only checks that source and medium are present and lowercase; it does not enforce a specific medium value.
- How to implement
- Required: append ?utm_source=chatgpt.com&utm_medium={ai_medium} to every url (use & if a query string exists), all lowercase. Replace {ai_medium} with your choice (Option A or B).
- Optional: also add utm_campaign=chatgpt-shopping, utm_content={item_id}, utm_source_platform=openai (and other optional UTMs when useful).
- Keep values static per item so url stays stable.
- Do not strip UTM parameters in redirects.
- Also segment on referrer chatgpt.com; if you pick Option B, create a GA4 custom channel group (see measurement.referrer-segments).
Artifacts
utm_source=chatgpt.comutm_medium{ai_medium}Depends on measurement.utm.feed-links
- Resources
- OpenAI file upload: products spec (opens in new tab) OpenAI spec
- Simon Vreeman: GA4 UTM convention and builder (opens in new tab) Simon Vreeman (convention) docs
- GA4 default channel group (opens in new tab) Google docs
- Audit
Method
feed_checkmachine-checkableEvery OpenAI feed row's url carries utm_source=chatgpt.com and a utm_medium value (any lowercase value; the audit does not enforce a specific medium), no duplicates, and returns 200. Optional UTMs (campaign, content, term, source_platform, creative_format, marketing_tactic) are reported as info only.
{ "url_fields": [ "url" ], "query_params": { "utm_source": "chatgpt.com" }, "required_params": [ "utm_source", "utm_medium" ], "optional_params": [ "utm_campaign", "utm_content", "utm_term", "utm_source_platform", "utm_creative_format", "utm_marketing_tactic" ], "lowercase": true, "no_duplicate_params": true, "http_status": 200 }
acp.analytics.utm JSON
OpenAI (24 March 2026): the initial Instant Checkout 'did not offer the level of flexibility that we aspire to provide', so merchants use their own checkout while OpenAI focuses on product discovery. The ChatGPT merchants page: purchases are completed on merchant-owned websites or apps.
Details: goal, note, how to implement, resources, audit
- Goal
Avoids spending engineering time on a checkout path ChatGPT does not use for most merchants.
Why this status Superseded per OpenAI's own announcement; ACP itself remains a spec.
- Note
Re-verified 2026-10-12 against the OpenAI post and chatgpt.com/merchants. Shopping in ChatGPT is live in the US only. Merchants wanting deeper integration can build a ChatGPT app (Walmart's app supports account linking, loyalty and Walmart payments). The feed spec still lists is_eligible_checkout, but says checkout requires a separately enabled integration.
- How to implement
- Focus on the product feed and your own site checkout.
- For a deeper in-ChatGPT experience, consider a ChatGPT app instead of ACP checkout endpoints.
- Ask OpenAI during onboarding before building ACP checkout for ChatGPT.
- Resources
- OpenAI: powering product discovery in ChatGPT (opens in new tab) OpenAI announcement
- OpenAI product feed spec (opens in new tab) OpenAI spec
- ChatGPT merchants (opens in new tab) OpenAI docs
- Audit
Method
manualhuman checkConfirm with current OpenAI merchant docs before any checkout build for ChatGPT.
acp.checkout.instant-checkout-discovery-only JSON
Personal Agent Protocol (Poppy) identity-trust
Personal Agent Protocol. Official site (opens in new tab)
Draft 0.1 describes a poppy.json discovery file with protocol_version, organization, auth and surfaces.
Details: goal, note, how to implement, resources, audit
- Goal
Personal agents find your sign-in server and APIs or company agent from this file.
- Note
Draft 0.1 published 9 Oct 2026 (frozen at /docs/0.1/spec); draft 0.2 in progress with breaking changes.
- How to implement
- Serve /.well-known/poppy.json over HTTPS.
- Include protocol_version 0.1, organization, auth issuer and the surfaces you offer.
Artifacts
/.well-known/poppy.json- Resources
- Personal Agent Protocol spec (version 0.1) (opens in new tab) Personal Agent Protocol spec
- Personal Agent Protocol changelog (opens in new tab) Personal Agent Protocol spec
- Sierra: introducing Personal Agent Protocol (opens in new tab) Sierra announcement
- Audit
Method
http_getmachine-checkable/.well-known/poppy.jsonGET returns 200 JSON with protocol_version, organization and auth.
{ "status": 200, "content_type": "application/json", "json_keys": [ "protocol_version", "organization", "auth" ] }
poppy.discovery.poppy-json JSON
Personal agents identify with a client metadata document and sign JWT assertions; tokens are bound with DPoP proofs.
Details: goal, note, how to implement, resources, audit
- Goal
Lets a user's own agent act in their account with scoped, revocable access.
- Note
Draft 0.1 published 9 Oct 2026; draft 0.2 in progress with breaking changes. Sign-in variants in 0.1: direct, device and mediated.
- How to implement
- Run an OAuth server listed under auth.issuer in poppy.json.
- Accept JWT-bearer assertions from agents whose client_id is a metadata URL.
- Validate DPoP proofs on each request.
Artifacts
client metadata documentDPoPDepends on poppy.discovery.poppy-json
- Resources
- Personal Agent Protocol spec (version 0.1) (opens in new tab) Personal Agent Protocol spec
- Audit
Method
code_reviewhuman checkA test agent obtains a scoped token and calls an API with a DPoP proof.
poppy.identity.oauth JSON
The spec lets a business offer APIs (for example MCP), conversations and web browsing in one session.
Details: goal, note, how to implement, resources, audit
- Goal
Gives personal agents something to do once signed in.
- Note
Draft 0.1 published 9 Oct 2026; draft 0.2 in progress with breaking changes.
- How to implement
- List your MCP or HTTP APIs, or a company agent, in poppy.json.
Artifacts
APIscompany agentDepends on poppy.discovery.poppy-json
- Resources
- Personal Agent Protocol spec (version 0.1) (opens in new tab) Personal Agent Protocol spec
- Audit
Method
code_reviewhuman checkEndpoints listed in poppy.json respond.
poppy.surface.api-or-agent JSON
Draft 0.1 does not cover payments; the Open topics page lists payments as a deliberate gap.
Details: goal, note, how to implement, resources, audit
- Goal
Prevents building on a part of the protocol that does not exist yet.
- Note
Resolved: personalagentprotocol.org/docs/open-topics lists Payments as not covered yet. Use a payment protocol (for example AP2, MPP or your PSP) alongside. Draft 0.1 published 9 Oct 2026; draft 0.2 in progress with breaking changes.
- How to implement
- Keep payments in your existing checkout or a separate payment protocol.
- Re-check Open topics on each draft update.
- Resources
- Personal Agent Protocol: open topics (opens in new tab) Personal Agent Protocol spec
- Personal Agent Protocol spec (version 0.1) (opens in new tab) Personal Agent Protocol spec
- Audit
Method
manualhuman checkRe-check the Open topics page for a payments section.
poppy.payment.none JSON
AP2 payment
Agent Payments Protocol. Official site (opens in new tab)
AP2 mandates are verifiable credentials for human-present (direct) and human-not-present (autonomous) flows.
Details: goal, note, how to implement, resources, audit
- Goal
Gives proof that the user approved the exact cart and payment, which helps dispute resolution.
- Note
Verifiers always receive closed checkout and payment mandates; autonomous flows add open mandates signed by the user.
- How to implement
- Verify the closed checkout mandate against the checkout you issued.
- Verify the closed payment mandate and any open mandates per the spec.
Artifacts
checkout mandatepayment mandate- Resources
- AP2 specification (opens in new tab) AP2 (Google) spec
- AP2 on GitHub (opens in new tab) AP2 (Google) spec
- AP2 site (opens in new tab) AP2 spec
- Audit
Method
code_reviewhuman checkVerify sample mandates from the AP2 repo.
ap2.mandates.verify JSON
The shopping agent assembles closed mandates the user approves, or signs them under open mandates in autonomous flows.
Details: goal, note, how to implement, resources, audit
- Goal
Merchants and networks can only trust agent purchases they can verify.
- How to implement
- Use the AP2 SDK and samples to create and sign mandates.
Artifacts
mandate signing- Resources
- AP2 specification (opens in new tab) AP2 (Google) spec
- AP2 on GitHub (opens in new tab) AP2 (Google) spec
- Audit
Method
code_reviewhuman checkGenerate mandates with the AP2 samples and verify them.
ap2.mandates.issue JSON
AP2 is at v0.2.0 (GitHub release 2026-04-28). Standardization continues in FIDO Alliance working groups.
Details: goal, note, how to implement, resources, audit
- Goal
Plan for spec changes before building production dependencies on AP2.
Why this status Pre-release; not a live network.
- Note
Resolved: ap2-protocol.org states standardization continues within the FIDO Agentic Authentication and Payments Technical Working Groups, and links the FIDO and Google announcements.
- How to implement
- Pin to v0.2.0 and track the GitHub releases.
- Follow FIDO Alliance working group output.
- Resources
- AP2 site (opens in new tab) AP2 spec
- AP2 releases on GitHub (v0.2.0) (opens in new tab) AP2 (Google) spec
- FIDO Alliance to develop standards for trusted AI agent interactions (opens in new tab) FIDO Alliance announcement
- Google: AP2 and the FIDO Alliance (opens in new tab) Google announcement
- Audit
Method
manualhuman checkCheck ap2-protocol.org and GitHub releases for a stable version.
ap2.status.pre-release JSON
Visa Trusted Agent Protocol identity-trust
Visa Trusted Agent Protocol. Official site (opens in new tab)
Onboarded agents sign requests with RFC 9421 HTTP Message Signatures (aligned with Web Bot Auth), including created, expires, nonce and tag (agent-browser-auth or agent-payer-auth). Visa reports live agentic transactions in Europe since July 2026 with participating merchants and over 30 issuers.
Details: goal, note, how to implement, resources, audit
- Goal
Separates trusted, credentialed agents from anonymous bots, without relying on IP addresses.
- Note
Tag agent-browser-auth marks browsing, agent-payer-auth marks checkout. Ed25519 in the examples. Usually verified at your CDN (Visa names Cloudflare and Akamai).
- How to implement
- Read Signature-Input and Signature headers.
- Fetch the key by keyid and verify the signature.
- Reject expired signatures and reused nonces.
Artifacts
Signature-InputSignatureDepends on visa-tap.keys.retrieve
- Resources
- Audit
Method
code_reviewhuman checkVerify a sample signed request from the Visa TAP repo.
visa-tap.signatures.verify JSON
Visa publishes public keys at https://mcp.visa.com/.well-known/jwks, selected by kid or keyid.
Details: goal, note, how to implement, resources, audit
- Goal
You need the key to verify a signature.
- Note
Cache keys and refresh when an unknown keyid appears.
- How to implement
- Fetch https://mcp.visa.com/.well-known/jwks.
- Select the key by keyid from Signature-Input.
Artifacts
JWKS- Resources
- Audit
Method
http_getmachine-checkablehttps://mcp.visa.com/.well-known/jwksGET https://mcp.visa.com/.well-known/jwks returns a JWKS; your verifier uses it.
{ "status": 200, "json_keys": [ "keys" ] }
visa-tap.keys.retrieve JSON
Visa's spec defines agent providers as certified AI platforms onboarded to payment schemes; only they sign TAP requests.
Details: goal, note, how to implement, resources, audit
- Goal
Without onboarding, merchants cannot treat your agent as trusted.
- Note
Resolved in part: agents onboard through Visa Intelligent Commerce per the Visa spec, but Visa publishes no public step-by-step onboarding guide. Contact Visa.
- How to implement
- Apply to Visa as an agent provider.
- Sign with RFC 9421 and the TAP tags once onboarded.
- Resources
- Visa TAP specifications (opens in new tab) Visa spec
- Visa TAP on GitHub (opens in new tab) Visa spec
- Audit
Method
manualhuman checkVisa onboarding confirmation.
visa-tap.agent.sign JSON
Mastercard Agent Pay payment
Mastercard Agent Pay. Official site (opens in new tab)
Mastercard says merchants should be registered for Agent Pay, Visa Intelligent Commerce and Amex ACE, typically through the acquirer or PSP. Agents pay with agentic tokens.
Details: goal, note, how to implement, resources, audit
- Goal
Registration lets the network recognise agentic transactions and apply the right risk controls.
- Note
Resolved: Mastercard Developers merchant guide. Mastercard reports live agentic transactions in several markets.
- How to implement
- Ask your PSP about readiness for Agent Pay and Visa Intelligent Commerce.
- Request registration for your business through them.
- Recognize registered agents via Web Bot Auth at your CDN.
- Accept agentic tokens in your existing card fields.
Artifacts
agentic tokens- Resources
- Mastercard Developers: the rails for agentic commerce (opens in new tab) Mastercard docs
- Mastercard Developers: getting started with agentic commerce (opens in new tab) Mastercard docs
- Mastercard Agent Pay docs (opens in new tab) Mastercard docs
- Mastercard unveils Agent Pay (opens in new tab) Mastercard announcement
- Mastercard Agent Pay Acceptance Framework (opens in new tab) Mastercard announcement
- Audit
Method
vendor_confirmationhuman checkYour PSP confirms registration for Agent Pay.
mastercard.agent-pay.tokens JSON
Only registered agents transact; each passes a security review and is added to a trusted agent registry. Agents cannot use cards on file; they need an agentic token.
Details: goal, note, how to implement, resources, audit
- Goal
Network recognition and liability rules depend on certification and agentic tokens.
- Note
Resolved: Mastercard Developers Level 1 guide and the Agent Pay Acceptance Framework (Web Bot Auth, built on RFC 9421, verified at the CDN). No public self-service agent registration.
- How to implement
- Apply for agent certification with the network.
- Sign requests with Web Bot Auth.
- Use agentic tokens, never stored cards on file.
Depends on web-bot-auth.verify
- Resources
- Mastercard Developers: Level 1 agentic commerce (opens in new tab) Mastercard docs
- Mastercard Developers: the rails for agentic commerce (opens in new tab) Mastercard docs
- Mastercard Agent Pay docs (opens in new tab) Mastercard docs
- Mastercard Agent Pay Acceptance Framework (opens in new tab) Mastercard announcement
- Audit
Method
vendor_confirmationhuman checkAgent appears in the network's trusted agent registry.
mastercard.agent-pay.platform JSON
Mastercard notes consumer-owned agents will not carry scheme credentials and that this is expected.
Details: goal, note, how to implement, resources, audit
- Goal
Blocking them loses real customers; normal card-not-present controls still apply.
- Note
Mastercard's guidance, not a protocol rule.
- How to implement
- Apply tiered trust: verified agents, then unverified traffic with 3-D Secure, AVS and CVV.
- Do not reject purely on missing Agent Pay, TAP or ACE headers.
- Resources
- Audit
Method
config_reviewhuman checkReview bot rules and WAF policies for blanket blocks on unsigned agents.
mastercard.consumer-agents.no-block JSON
Know-Your-Agent identity-trust
Know-Your-Agent. Official site (opens in new tab)
Visa, Mastercard and Ant International will explore common principles, building on the SAFR framework, via BuildFin.ai; each has its own protocol (TAP, Verifiable Intent, Agentic Mobile Protocol). No spec yet.
Details: goal, note, how to implement, resources, audit
- Goal
Signals where agent onboarding across networks is heading.
- Note
Resolved: announcement only. It names Visa TAP, Mastercard Verifiable Intent and Ant's Agentic Mobile Protocol as inputs. No KYA spec is linked from the official announcement as of 2026-10-19.
- How to implement
- Implement the network protocols that exist today (Visa TAP, Web Bot Auth).
- Re-check the backers' newsrooms for a spec.
- Resources
- Ant International, Mastercard and Visa on Know-Your-Agent (opens in new tab) Ant International announcement
- Audit
Method
manualhuman checkCheck for a published spec on the backers' official sites.
kya.watch JSON
x402 payment
x402 payments over HTTP 402. Official site (opens in new tab)
Unpaid requests get HTTP 402 with a PAYMENT-REQUIRED header; the client pays and retries with PAYMENT-SIGNATURE; the server returns PAYMENT-RESPONSE.
Details: goal, note, how to implement, resources, audit
- Goal
Charge agents per request without accounts or API keys.
- Note
Stablecoin settlement (for example USDC on Base). A facilitator can verify and settle so you need no chain connectivity.
- How to implement
- Install the x402 middleware for your framework (Express, Hono, Next).
- Configure price, network, pay-to address and facilitator per route.
- Test on base-sepolia before base.
Artifacts
HTTP 402 responsePAYMENT-REQUIREDPAYMENT-SIGNATUREPAYMENT-RESPONSE- Resources
- x402 quickstart for sellers (opens in new tab) x402 docs
- x402 on GitHub (opens in new tab) x402 Foundation spec
- Cloudflare Agents: x402 (opens in new tab) Cloudflare docs
- Audit
Method
http_getmachine-checkable{paid_route}Request a paid route without payment: 402 with a PAYMENT-REQUIRED header.
{ "status": 402, "headers_present": [ "payment-required" ] }
x402.middleware JSON
Cloudflare's x402-proxy template returns 402 on protected routes and forwards paid requests to your origin.
Details: goal, note, how to implement, resources, audit
- Goal
Monetise APIs or content for agents without changing origin code.
- Note
With Bot Management you can charge only low bot scores and allowlist crawlers by detection ID.
- How to implement
- Deploy the x402-proxy template.
- Set PAY_TO, NETWORK and PROTECTED_PATTERNS in wrangler.jsonc.
- Optionally add bot_score_threshold and except_detection_ids.
{ "vars": { "PAY_TO": "0xYourWalletAddress", "NETWORK": "base-sepolia", "PROTECTED_PATTERNS": [ { "pattern": "/api/premium/*", "price": "$0.10", "description": "Premium API access" } ] } }Snippet from Cloudflare: charge for HTTP content with x402 (opens in new tab)
Artifacts
x402-proxy Workerwrangler.jsoncDepends on x402.middleware
- Resources
- Cloudflare: charge for HTTP content with x402 (opens in new tab) Cloudflare docs
- Cloudflare Agents: agentic payments (opens in new tab) Cloudflare docs
- Audit
Method
http_getmachine-checkable{paid_route}Protected pattern returns 402 with PAYMENT-REQUIRED; unprotected routes pass through.
{ "status": 402, "headers_present": [ "payment-required" ] }
x402.cloudflare.proxy JSON
The Cloudflare Agents SDK wraps an MCP server with withX402 and adds paidTool for priced tools.
Details: goal, note, how to implement, resources, audit
- Goal
Sell individual agent actions (for example a price check) next to free tools.
- Note
Price is in USD; network base or base-sepolia.
- How to implement
- Wrap McpServer with withX402(config).
- Register priced tools with paidTool(name, description, price, schema, annotations, handler).
server = withX402(new McpServer({ name: "PaidMCP", version: "1.0.0" }), { network: "base", recipient: "0xYourWalletAddress", facilitator: { url: "https://x402.org/facilitator" }, }); this.server.paidTool("square", "Squares a number", 0.01, { number: z.number() }, {}, async ({ number }) => ({ content: [{ type: "text", text: String(number ** 2) }] }));Snippet from Cloudflare: charge for MCP tools with x402 (opens in new tab)
Artifacts
withX402paidToolDepends on mcp.server
- Resources
- Cloudflare: charge for MCP tools with x402 (opens in new tab) Cloudflare docs
- Audit
Method
code_reviewhuman checkCall the paid tool from an x402 client; it requires payment, the free tool does not.
x402.mcp.paid-tool JSON
Facilitators that support the bazaar extension list x402 services at /discovery/resources.
Details: goal, note, how to implement, resources, audit
- Goal
Agents can find your paid endpoints without a pre-built integration.
- Note
The x402 docs call the Bazaar early development; APIs may change.
- How to implement
- Add the bazaar extension to your route configuration.
- Use a facilitator that supports discovery.
Artifacts
bazaar extensionDepends on x402.middleware
- Resources
- Audit
Method
registry_lookuphuman checkYour endpoint appears in the facilitator's /discovery/resources listing.
x402.bazaar JSON
Buyer clients pay and retry on 402. Cloudflare's withX402Client wraps MCP connections with automatic 402 handling and optional human approval.
Details: goal, note, how to implement, resources, audit
- Goal
Your agent can buy access to paid APIs and tools.
- How to implement
- Use an x402 client SDK or withX402Client from the Agents SDK.
- Add a spending confirmation step for users.
Artifacts
x402 clientDepends on x402.middleware
- Resources
- x402 on GitHub (opens in new tab) x402 Foundation spec
- Cloudflare: pay from the Agents SDK with x402 (opens in new tab) Cloudflare docs
- Audit
Method
code_reviewhuman checkClient completes a paid request on testnet.
x402.client JSON
MPP payment
Machine Payments Protocol. Official site (opens in new tab)
MPP uses Challenge, Credential and Receipt over HTTP 402 with WWW-Authenticate: Payment and Authorization: Payment headers.
Details: goal, note, how to implement, resources, audit
- Goal
Accept agent payments by card (via Stripe), stablecoins or custom methods on one interface.
- Note
Intents: charge, session and subscription. MPP is backwards compatible with x402 clients per Cloudflare.
- How to implement
- npm i hono mppx
- Store the signing key: npx wrangler secret put MPP_SECRET_KEY
- Add mppx.charge(...) before the paid handler.
const mppx = Mppx.create({ methods: [tempo.charge({ testnet: true })], secretKey: workerEnv.MPP_SECRET_KEY, }); app.get("/premium", mppx.charge({ amount: "0.01", currency: "0x20c0000000000000000000000000000000000000", description: "Premium API access", recipient: "<YOUR_WALLET_ADDRESS>", }), (c) => c.json({ access: "paid" }));Snippet from Cloudflare: accept payments with MPP (opens in new tab)
Artifacts
mppxWWW-Authenticate: PaymentPayment-Receipt- Resources
- MPP server quickstart (opens in new tab) MPP docs
- MPP specs on GitHub (opens in new tab) Tempo (MPP) spec
- Cloudflare: accept payments with MPP (opens in new tab) Cloudflare docs
- Audit
Method
http_getmachine-checkable{paid_route}Unpaid request returns 402 with WWW-Authenticate: Payment; a paid retry returns a Payment-Receipt header.
{ "status": 402, "headers_present": [ "www-authenticate" ], "header_contains": { "www-authenticate": "Payment" } }
mpp.middleware JSON
Cloudflare's mpp-proxy template returns an MPP challenge on protected routes, forwards paid requests and issues a 1-hour session cookie.
Details: goal, note, how to implement, resources, audit
- Goal
Paywall content or APIs for agents without touching your origin.
- Note
Bot Management can limit the paywall to low bot scores, keeping the site free for humans.
- How to implement
- Deploy cloudflare/mpp-proxy.
- Set PAY_TO, PAYMENT_CURRENCY and PROTECTED_PATTERNS in wrangler.jsonc.
- Use TEMPO_TESTNET true while testing.
Artifacts
mpp-proxy WorkerDepends on mpp.middleware
- Resources
- Cloudflare: charge for HTTP content with MPP (opens in new tab) Cloudflare docs
- Cloudflare Agents: agentic payments (opens in new tab) Cloudflare docs
- Audit
Method
http_getmachine-checkable{paid_route}Protected pattern returns 402 with WWW-Authenticate: Payment.
{ "status": 402, "headers_present": [ "www-authenticate" ] }
mpp.cloudflare.proxy JSON
Cloudflare documents adding the MPP transport to an McpAgent so a tool returns its result only after payment.
Details: goal, note, how to implement, resources, audit
- Goal
Charge per agent action over MCP.
- Note
MCP tools use the same Challenge, Credential, Receipt flow over JSON-RPC.
- How to implement
- npm i agents mppx @modelcontextprotocol/sdk zod
- Bind the McpAgent Durable Object in wrangler.jsonc.
- Wrap paid tools with the MPP transport per the guide.
Artifacts
McpAgentmppxDepends on mcp.server
- Resources
- Cloudflare: accept payments with MPP (opens in new tab) Cloudflare docs
- Audit
Method
code_reviewhuman checkAn MPP client is challenged on the paid tool and receives a receipt after paying.
mpp.mcp.charge JSON
MPP discovery is an OpenAPI 3.1 document at /openapi.json with x-payment-info offers on paid operations.
Details: goal, note, how to implement, resources, audit
- Goal
Agents and registries (MPPScan, mpp.dev services) learn prices before calling.
- Note
Discovery is advisory; the runtime 402 challenge stays authoritative.
- How to implement
- Serve OpenAPI 3.1 at /openapi.json.
- Add x-payment-info per paid operation: intent, method, amount, currency.
- Optionally register with MPPScan or the mpp.dev services directory.
Artifacts
/openapi.jsonx-payment-infoDepends on mpp.middleware
- Resources
- MPP discovery (opens in new tab) MPP docs
- MPP specs on GitHub (opens in new tab) Tempo (MPP) spec
- Audit
Method
http_getmachine-checkable/openapi.jsonGET returns 200 JSON, openapi 3.1.x, and at least one operation with x-payment-info.
{ "status": 200, "content_type": "application/json", "json_keys": [ "openapi", "paths" ], "body_contains": [ "x-payment-info" ] }
mpp.discovery.openapi JSON
Stripe documents MPP support, including cards.
Details: goal, note, how to implement, resources, audit
- Goal
Lets you take agent payments into your existing Stripe balance.
- How to implement
- Follow the Stripe MPP docs to enable machine payments.
- Resources
- Stripe MPP docs (opens in new tab) Stripe docs
- Audit
Method
code_reviewhuman checkTest payment succeeds in the Stripe docs flow.
mpp.psp.stripe JSON
The Cloudflare Agents SDK can pay HTTP services and MCP tools with MPP.
Details: goal, note, how to implement, resources, audit
- Goal
Your agent can buy from MPP and, per Cloudflare, existing x402 services.
- How to implement
- Configure the agent wallet and payment method per the Cloudflare guide.
- Add user approval for spend.
Artifacts
mppx clientDepends on mpp.middleware
- Resources
- Audit
Method
code_reviewhuman checkAgent completes a paid call on testnet.
mpp.client JSON
PayPal Agent Ready payment
PayPal Agent Ready. Official site (opens in new tab)
PayPal Agent Ready: UCP via Braintree or via PayPal Orders v2 (Google Pay payment handler); ACP via Braintree (delegated payment tokens).
Details: goal, note, how to implement, resources, audit
- Goal
One PSP integration covers several agent surfaces.
- How to implement
- Braintree: confirm Agent Ready eligibility in the Braintree control panel.
- PayPal (UCP only): integrate the Google Pay payment handler through PayPal Orders v2.
Artifacts
Braintree- Resources
- PayPal Agent Ready overview (opens in new tab) PayPal docs
- PayPal agentic commerce services (opens in new tab) PayPal announcement
- Audit
Method
platform_consolehuman checkAgent Ready shows enabled in the Braintree control panel.
paypal.braintree JSON
MCP foundation
Model Context Protocol. Official site (opens in new tab)
An MCP server exposes your data and tools to agents; UCP and ACP can use MCP as a transport.
Details: goal, note, how to implement, resources, audit
- Goal
Agents can query catalog, stock or orders directly instead of scraping.
- How to implement
- Build a server with an official MCP SDK.
- Expose read tools first; add write tools with auth.
Artifacts
MCP server- Resources
- Audit
Method
code_reviewhuman checkConnect with the MCP Inspector and list tools.
mcp.server JSON
A2A foundation
Agent2Agent Protocol. Official site (opens in new tab)
Agent Cards sit at /.well-known/agent-card.json and describe your agent's skills and endpoint.
Details: goal, note, how to implement, resources, audit
- Goal
Other agents can discover and call your agent.
- How to implement
- Write the Agent Card JSON per the A2A spec.
- Serve it at /.well-known/agent-card.json.
Artifacts
/.well-known/agent-card.json- Resources
- A2A specification (opens in new tab) A2A spec
- A2A tutorials (opens in new tab) A2A docs
- A2A on GitHub (opens in new tab) A2A spec
- Audit
Method
http_getmachine-checkable/.well-known/agent-card.jsonGET returns 200 JSON with name, url and skills.
{ "status": 200, "content_type": "application/json", "json_keys": [ "name", "skills" ] }
a2a.agent-card JSON
Lets other agents call your agent.
Details: goal, note, how to implement, resources, audit
- Goal
Needed if you run a merchant agent that other agents should talk to.
- How to implement
- Follow the A2A tutorials to implement the server.
Artifacts
A2A serverDepends on a2a.agent-card
- Resources
- A2A tutorials (opens in new tab) A2A docs
- Audit
Method
code_reviewhuman checkRun the tutorial client against your server.
a2a.server JSON
x401 identity-trust
x401: HTTP Proof Requirement Protocol. Official site (opens in new tab)
x401 lets a site or API answer an agent request with a PROOF-REQUEST header; the agent returns a verifiable credential (OpenID4VP over the W3C Digital Credentials API) proving who authorized it. Payment stays with HTTP 402 protocols such as x402.
Details: goal, note, how to implement, resources, audit
- Goal
Signals how sites may ask agents for proof of identity, age or membership before granting access.
- Note
Draft spec v0.2.0 from Proof, open under Apache-2.0; Circle co-endorses it. Launched 25 Jun 2026. Proof says it plans to submit x401 to the FIDO Alliance (stated plan only): "Proof will submit x401 to the FIDO Alliance's agentic authentication standards workgroup." Not needed for retail checkout today.
- How to implement
- Read the draft spec if you gate routes by identity, age or membership.
- Re-check the spec version before building.
- Resources
- x401 spec (draft 0.2.0) (opens in new tab) Proof spec
- x401 on GitHub (opens in new tab) Proof (x401) spec
- Proof launches x401 (PRWeb release by Proof, 25 Jun 2026) (opens in new tab) Proof (via PRWeb) announcement
- Audit
Method
manualhuman checkCheck the spec version on x401.proof.com/spec/latest/.
x401.watch JSON
WebMCP checkout
WebMCP. Official site (opens in new tab)
WebMCP is a proposed web standard: a page registers structured tools, such as checkout, that an AI agent in the user's browser can call, via a JavaScript (imperative) or annotated HTML form (declarative) API. Both are gated by the tools Permissions Policy.
Details: goal, note, how to implement, resources, audit
- Goal
Lets browser agents complete actions on your site through defined tools instead of guessing at the UI.
- Note
Chrome origin trial from Chrome 149; under active discussion and subject to change. Chrome says it is primarily designed for local browser workflows with a human in the loop. Shopify checkout supports WebMCP tools since 28 Sep 2026 with no merchant configuration.
- How to implement
- On Shopify: nothing to configure for checkout tools.
- Elsewhere: read the Chrome docs and consider the origin trial before building.
- Resources
- Chrome for Developers: WebMCP (opens in new tab) Google Chrome docs
- Shopify changelog: WebMCP support for checkout (28 Sep 2026) (opens in new tab) Shopify announcement
- Audit
Method
manualhuman checkCheck the Chrome WebMCP docs for the current origin trial status.
webmcp.watch JSON
Google Merchant Center product-data
Google Merchant Center product data. Official site (opens in new tab)
Google uses this data to match products to queries and as a foundational input for its AI powered formats and experiences.
Details: goal, note, how to implement, resources, audit
- Goal
Google's AI Mode and UCP checkout draw on Merchant Center data.
Why this status UCP on Google uses Merchant Center data; no feed means no eligibility.
- Note
Re-verified 2026-10-12 against the product data specification. Google: if you leave out a Required attribute, the product can't serve in ads and free listings. The field lists are in gmc.feed.required-fields and gmc.feed.conditional-fields.
- How to implement
- Submit a feed per the Google product data specification.
- Also meet Google's other requirements: Shopping ads policies, landing page, shipping rate, checkout, and currency and language requirements.
- Fix disapprovals in Diagnostics.
Artifacts
Merchant Center feed- Resources
- Google product data specification (opens in new tab) Google spec
- Google Merchant: UCP (opens in new tab) Google docs
- Audit
Method
platform_consolehuman checkMerchant Center diagnostics show no disapprovals for key products.
gmc.feed.active JSON
Required for every product: id, title (or structured_title), description (or structured_description), link, image_link, availability, price.
Details: goal, note, how to implement, resources, audit
- Goal
Google: if you don't submit a Required attribute, your product won't be able to serve in ads and free listings.
- Note
Re-verified 2026-10-12. Use structured_title and structured_description for text created with generative AI. Availability and price must match the landing page, checkout and Schema.org markup.
- How to implement
- Map your catalog to the seven attributes.
- Keep availability and price identical across feed, landing page, checkout and structured data.
- Use availability values in_stock, out_of_stock, preorder or backorder; add availability_date for preorder and backorder.
Artifacts
idtitledescriptionlinkimage_linkavailabilitypriceDepends on gmc.feed.active
- Resources
- Audit
Method
feed_checkmachine-checkableEvery feed row has id, title or structured_title, description or structured_description, link, image_link, availability and price.
{ "required_fields": [ "id", "title", "description", "link", "image_link", "availability", "price" ] }
gmc.feed.required-fields JSON
Required only when a condition applies: brand (new products, except movies, books and musical recordings), mpn (no manufacturer GTIN), gtin ('It depends', strongly recommended if available), condition (used or refurbished), availability_date (preorder), shipping (Shopping ads and free listings in 21 countries including the Netherlands), and more.
Details: goal, note, how to implement, resources, audit
- Goal
Missing a conditional attribute that applies to you has the same effect as missing a Required one.
Why this status Required by Google when the stated condition applies.
- Note
Re-verified 2026-10-12. Apparel and variants: age_group, gender, color and size are required for apparel targeting Brazil, France, Germany, Japan, the UK and the US, and item_group_id for variants in those countries; free listings require them for Apparel and Accessories in all countries. Also conditional: adult (adult content), is_bundle and multipack (merchant-made bundles or multipacks in 12 countries including the Netherlands), certification (for example EU energy labels), material and pattern (when they distinguish variants), unit pricing and energy efficiency class (when local law requires), external_seller_id (multi-seller accounts), promotion_id (promotions in Australia, France, Germany, India, the UK and the US), shipping_weight and dimensions (carrier-calculated rates).
- How to implement
- List which conditions apply to your catalog and target countries.
- Add those attributes to your primary or supplemental data source.
- For Dutch shops: shipping cost is required (via the shipping attribute or account settings).
Artifacts
brandmpngtinconditionavailability_dateshippingage_groupgendercolorsizeitem_group_idis_bundlemultipackDepends on gmc.feed.required-fields
- Resources
- Audit
Method
platform_consolehuman checkMerchant Center Diagnostics shows no missing-attribute issues for your target countries.
gmc.feed.conditional-fields JSON
Six attributes: question_and_answer, document_link (PDF), related_product, item_group_title, variant_option, popularity_rank.
Details: goal, note, how to implement, resources, audit
- Goal
Google: they help AI systems and conversational agents understand product nuances and help customers discover your products on AI-driven surfaces like AI Mode in Search.
- Note
Re-verified 2026-10-12. Google calls them completely optional; including them won't affect approval status. Don't duplicate what you already submit in description, product_highlight or product_detail.
- How to implement
- Add them via a supplemental data source (Google's recommendation), your primary data source or the Merchant API.
- related_product takes relationship_type:identifier_type:identifier, for example accessory:gtin:811571013579.
- variant_option takes name:value pairs and works with item_group_id and item_group_title.
- popularity_rank is a percentage of your total inventory; higher means more popular.
Artifacts
question_and_answerdocument_linkrelated_productitem_group_titlevariant_optionpopularity_rankDepends on gmc.feed.active
- Resources
- Audit
Method
platform_consolehuman checkAttributes visible in Merchant Center product details.
gmc.conversational-attributes JSON
OpenAI product feed product-data
OpenAI product feed spec. Official site (opens in new tab)
Required: item_id, title, description, url, brand, seller_name, image_url, availability, price.
Details: goal, note, how to implement, resources, audit
- Goal
Rows missing these are not useful for discovery; invalid availability rejects the row.
- Note
Re-verified 2026-10-12 against the file upload products spec. Omitted, empty or unrecognized availability rejects the row; use unknown explicitly when stock status is unknown. item_id must be stable and never reused for a different item. Price is the regular price in major currency units plus currency code, for example 79.99 USD.
- How to implement
- Map your catalog to the nine fields.
- Use explicit availability values (in_stock, out_of_stock, pre_order, backorder, unknown).
{"item_id":"MUG-350-BLUE","title":"Blue ceramic mug, 350 mL","description":"Dishwasher-safe glazed ceramic mug with a handle.","url":"https://example.com/products/mug-blue","brand":"Northline","seller_name":"Northline Home","image_url":"https://example.com/images/mug-blue.jpg","price":"18.00 USD","availability":"in_stock"}Snippet from OpenAI feed spec, minimal example (opens in new tab)
Artifacts
item_idtitledescriptionurlbrandseller_nameimage_urlavailabilityprice- Resources
- OpenAI file upload: products spec (opens in new tab) OpenAI spec
- OpenAI product feed spec (opens in new tab) OpenAI spec
- Audit
Method
feed_checkmachine-checkableEvery feed row has all nine required fields with valid values.
{ "required_fields": [ "item_id", "title", "description", "url", "brand", "seller_name", "image_url", "availability", "price" ] }
openai.feed.required-fields JSON
Onboarding product feeds in ChatGPT is available to approved partners; apply via chatgpt.com/merchants.
Details: goal, note, how to implement, resources, audit
- Goal
Without approval OpenAI does not ingest your feed.
- Note
Re-verified 2026-10-12. Shopify and Etsy catalogs are already integrated and need no application. Shopping is live in the US. OpenAI's prohibited products policy excludes, among others, adult content, alcohol, nicotine, gambling, weapons and prescription-only medication.
- How to implement
- Check your catalog against OpenAI's prohibited products policy.
- Apply at chatgpt.com/merchants.
- Then follow OpenAI's integration path: decide file upload or API, review the spec, validate required fields, upload, keep current.
Artifacts
merchant application- Resources
- OpenAI commerce: get started (opens in new tab) OpenAI docs
- ChatGPT merchants (opens in new tab) OpenAI docs
- Audit
Method
vendor_confirmationhuman checkOpenAI has confirmed your feed registration.
openai.onboarding.apply JSON
File upload is a full snapshot feed pushed to OpenAI via SFTP, at least daily. OpenAI recommends a daily full file plus API updates during the day; promotions only via the API.
Details: goal, note, how to implement, resources, audit
- Goal
Keeps price and availability in ChatGPT current; stale data hurts how products appear.
Why this status OpenAI's recommended cadence, not a hard requirement.
- Note
Re-verified 2026-10-12. Products missing from a snapshot are retained up to 14 days; set is_eligible_search=false to remove search eligibility at the next processing. OpenAI matches products by item_id, not filename. No completion marker is needed; processing starts once uploads stop changing.
- How to implement
- Push a full snapshot via SFTP at least daily, overwriting a stable file name.
- Shard at up to 500k items or about 500 MB per file; keep the shard set stable and upload all shards without long pauses.
- Start with about 100 sample items, QA the first full snapshot, then automate.
- For small feeds or intraday changes, upsert via the API.
Artifacts
SFTPparquetjsonl.gzDepends on openai.feed.format, openai.onboarding.apply
- Resources
- OpenAI file upload overview (opens in new tab) OpenAI spec
- OpenAI commerce: get started (opens in new tab) OpenAI docs
- Audit
Method
platform_consolehuman checkSFTP upload timestamps show at least one full snapshot per day; no ingestion failures reported.
openai.feed.delivery JSON
OpenAI format file upload: parquet preferred (ideally zstd compressed); jsonl.gz, csv.gz and tsv.gz also supported, UTF-8. Google-compatible path (only after OpenAI confirms it): tab-delimited .txt/.tsv or .csv, optionally gzipped; no JSON, spreadsheets, XML, RSS or Atom.
Details: goal, note, how to implement, resources, audit
- Goal
Files in a non-supported format or with non-spec field names fail ingestion.
- Note
Re-verified 2026-10-12. The Google-compatible path requires id, title, description, link, image_link, availability, price and brand on every row; uses preorder (not pre_order); does not accept unknown; ignores is_eligible_search=false; and keeps checkout disabled.
- How to implement
- Pick the OpenAI format unless OpenAI confirmed the Google-compatible path for your feed.
- Use lowercase, underscore-separated column names; no g: prefixes.
- Encode as UTF-8.
Artifacts
JSONLCSVTSV- Resources
- Audit
Method
platform_consolehuman checkUpload succeeds and Upload History shows the expected format.
openai.feed.format JSON
Microsoft Merchant Center product-data
Microsoft Merchant Center catalog. Official site (opens in new tab)
Required fields include id, title, description, link, image_link, price. Google feeds can be imported.
Details: goal, note, how to implement, resources, audit
- Goal
Feeds Copilot shopping and Copilot Checkout.
- How to implement
- Create a store in Microsoft Merchant Center.
- Import your Google feed or upload a catalog file.
Artifacts
idtitledescriptionlinkimage_linkprice- Resources
- Microsoft Merchant Center catalog file (opens in new tab) Microsoft docs
- Microsoft: Google attributes import (opens in new tab) Microsoft docs
- Audit
Method
platform_consolehuman checkCatalog shows approved offers.
msmc.feed JSON
Onboarding paths: Microsoft Merchant Center (MMC account plus UCP-compliant feed); Microsoft also lists Shopify (merchants auto-enrolled), PayPal (Store Sync) and Stripe (Agentic Commerce Suite) as partners. English-language merchants selling to US buyers in USD only for now.
Details: goal, note, how to implement, resources, audit
- Goal
Copilot Checkout eligibility.
- Note
Re-verified 2026-10-12: the current Microsoft agentic commerce page supersedes the January 2026 blog post, which said MMC was not required. UCP-ready feed attributes include native checkout eligibility, product warnings and Merchant Item ID.
- How to implement
- Add Merchant Item ID to your feed.
- Follow the Microsoft agentic commerce onboarding.
Artifacts
Merchant Item IDDepends on msmc.feed
- Resources
- Microsoft Advertising: agentic commerce (opens in new tab) Microsoft announcement
- Audit
Method
feed_checkhuman checkMerchant Item ID present in the feed.
msmc.copilot-checkout JSON
Schema.org product-data
Schema.org Product and Offer markup. Official site (opens in new tab)
Schema.org Product with Offer, including gtin, mpn, sku and brand.
Details: goal, note, how to implement, resources, audit
- Goal
Keeps on-page data machine readable and consistent with your feeds.
- Note
No AI surface states it uses on-page markup as a checkout source.
- How to implement
- Add JSON-LD Product with offers to each product page.
- Make values match the feed.
Artifacts
ProductOffergtinskumpnDepends on gtin.feeds
- Resources
- schema.org/Product (opens in new tab) Schema.org spec
- schema.org/gtin (opens in new tab) Schema.org spec
- Audit
Method
html_parsemachine-checkable{product_url}Validate with the Schema Markup Validator; values match the feed.
{ "jsonld_types": [ "Product", "Offer" ] }
schema.product-markup JSON
New: consumerNotice, isOftenBoughtWith, specification, itemPopularity, minimumOrderValue, MaximumRetailPrice and EU Digital Product Passport terms.
Details: goal, note, how to implement, resources, audit
- Goal
Early alignment with retail feed vocabulary.
- Note
No consumer has confirmed using these yet.
- How to implement
- Add only properties you can keep accurate.
Artifacts
consumerNoticeisOftenBoughtWithitemPopularityminimumOrderValuehasDigitalProductPassportDepends on schema.product-markup
- Resources
- Schema.org releases (opens in new tab) Schema.org spec
- Audit
Method
code_reviewhuman checkProperties validate against schema.org v30.1.
schema.v30-1-retail JSON
GTIN product-data
Global Trade Item Number. Official site (opens in new tab)
Google: recommended for all products with a manufacturer-assigned GTIN ('It depends, strongly recommended if available' in the spec); accurate matching can't be assured when GTIN is missing, and a product with an assigned GTIN that you don't submit could be disapproved. Microsoft: required if assigned. OpenAI: optional, do not invent an mpn.
Details: goal, note, how to implement, resources, audit
- Goal
GTIN is how agents match the same product across merchants, feeds and markup.
Why this status Microsoft requires GTIN when assigned; Google strongly recommends it and may disapprove products missing an assigned GTIN; OpenAI marks it optional.
- Note
Re-verified 2026-10-12 against Google's GTIN page. Don't submit a GTIN for products without one (store brands, custom items); use brand and mpn instead. Each variant needs its own GTIN. Ideally provide GTIN together with MPN.
- How to implement
- Store manufacturer GTINs in your PIM.
- Export them to every feed and to on-page markup.
Artifacts
gtin- Resources
- Google Merchant Center: GTIN (opens in new tab) Google docs
- Microsoft Merchant Center catalog file (opens in new tab) Microsoft docs
- OpenAI product feed spec (opens in new tab) OpenAI spec
- Audit
Method
feed_checkmachine-checkableMerchant Center reports no missing or invalid GTIN issues.
{ "field_present": "gtin", "when": "manufacturer assigned" }
gtin.feeds JSON
8, 12, 13 or 14 digits with a valid GS1 check digit. Google: no restricted prefixes (02, 04, 2) and no coupon prefixes (05, 98, 99); up to 10 GTINs per product.
Details: goal, note, how to implement, resources, audit
- Goal
Google may disapprove or limit products with invalid or incorrect GTINs.
Why this status Invalid GTINs are rejected by Google Merchant Center.
- Note
Re-verified 2026-10-12. Keep GTINs as strings to preserve leading zeros. Google accepts UPC (GTIN-12; convert UPC-E), EAN (GTIN-13), JAN (8 or 13), ISBN-13 and ITF-14. Don't guess or make up a value.
- How to implement
- Validate check digits in your PIM before export.
- Convert ISBN-10 to ISBN-13 and UPC-E to 12 digits.
- Do not reuse one GTIN for several products with the same variant attributes in the same country and language.
Artifacts
gtin8gtin12gtin13gtin14Depends on gtin.feeds
- Resources
- Google Merchant Center: GTIN (opens in new tab) Google docs
- OpenAI product feed spec (opens in new tab) OpenAI spec
- Audit
Method
feed_checkmachine-checkableAll GTINs pass length and GS1 check digit validation.
{ "gtin_regex": "^(\\d{8}|\\d{12}|\\d{13}|\\d{14})$", "gs1_check_digit": true }
gtin.valid JSON
Measurement foundation
Analytics measurement (UTM and referrer). Official site (opens in new tab)
Feed links (OpenAI url, Google and Microsoft link and ads_redirect, agent hand off URLs) are where AI and shopping surfaces send buyers. Google's link must use your verified domain and an encoded URL; its own example has query parameters. ads_redirect (Google and Microsoft) exists to add parameters for ads clicks and must stay on the same domain; Microsoft's link must not redirect.
Details: goal, note, how to implement, resources, audit
- Goal
See which surface drove each visit. Organic and cpc media map into GA4 Default Channel Groups. For AI assistants, pick Option A (utm_medium=ai-assistant, GA4 built-in channel) or Option B (own medium plus custom channel group; see measurement.referrer-segments). Optional UTMs add campaign and product detail.
- Note
Templates follow Simon Vreeman's convention (vreeman.com/utm): required utm_source and utm_medium (lowercase, no duplicates, URL returns 200); optional utm_campaign, utm_term, utm_content, utm_source_platform, utm_creative_format, utm_marketing_tactic. For AI assistants choose the medium yourself (not referral). Templates use {ai_medium}. Option A: utm_medium=ai-assistant lands in GA4's built-in AI Assistant default channel with no setup (support.google.com/analytics/answer/9756891). Option B: your own medium (for example ai) plus a GA4 custom channel group placed above Referral; without that group the traffic lands in Unassigned. Conflicts: a platform appended utm_source may override or duplicate yours; Google Ads auto-tagging (gclid) usually decides attribution in linked GA4 (assumption). Do not tag a link that both free listings and ads use as organic; use ads_redirect for cpc. No official UCP or ACP guidance on UTMs was found. The audit only checks that source and medium are present and lowercase; it does not enforce a specific medium value.
- How to implement
- Required on every feed URL: utm_source and utm_medium, lowercase, no duplicates; tagged URL returns 200.
- AI assistants: replace {ai_medium} with your choice (Option A ai-assistant, or Option B e.g. ai); sources stay per assistant (chatgpt.com, gemini, perplexity, copilot, claude).
- Optional (examples): OpenAI url also ?utm_campaign=chatgpt-shopping&utm_content={item_id}&utm_source_platform=openai
- Optional: Google free listings also &utm_campaign=shopping-free-listings&utm_content={id}
- Optional: Google or Microsoft ads_redirect also &utm_campaign={campaign}-shopping&utm_content={id}
- Optional: UCP or ACP hand off also &utm_campaign=agentic-checkout&utm_content={item_id}
- Minimal required examples: OpenAI ?utm_source=chatgpt.com&utm_medium={ai_medium}; Google link ?utm_source=google&utm_medium=organic; ads_redirect ?utm_source=google|bing&utm_medium=cpc; hand off ?utm_source={agent host}&utm_medium={ai_medium}.
- Append with & when a query string exists.
- If you pick Option B, create a GA4 custom channel group (see measurement.referrer-segments).
Artifacts
utm_sourceutm_mediumads_redirect{ai_medium}Depends on acp.feed.openai
- Resources
- Simon Vreeman: GA4 UTM convention and builder (opens in new tab) Simon Vreeman (convention) docs
- OpenAI file upload: products spec (opens in new tab) OpenAI spec
- Google product data specification (opens in new tab) Google spec
- Microsoft Merchant Center catalog file (opens in new tab) Microsoft docs
- GA4 default channel group (opens in new tab) Google docs
- Audit
Method
feed_checkmachine-checkableParse every feed URL: utm_source and utm_medium present once (any medium value; the audit does not enforce a specific medium), all lowercase, and the URL returns 200. Optional UTMs (campaign, content, term, source_platform, creative_format, marketing_tactic) are reported as info only.
{ "url_fields": [ "url", "link", "ads_redirect" ], "required_params": [ "utm_source", "utm_medium" ], "optional_params": [ "utm_campaign", "utm_content", "utm_term", "utm_source_platform", "utm_creative_format", "utm_marketing_tactic" ], "lowercase": true, "no_duplicate_params": true, "http_status": 200 }
measurement.utm.feed-links JSON
For AI assistant feed links, choose the medium yourself. Option A: utm_medium=ai-assistant lands in GA4's built-in AI Assistant default channel with no setup (support.google.com/analytics/answer/9756891). Option B: your own medium (for example ai) plus a GA4 custom channel group placed above Referral; without that group the traffic lands in Unassigned. Untagged visits from assistants only show up through the referrer. chatgpt.com, gemini.google.com, perplexity.ai, copilot.microsoft.com and claude.ai are the assistants' public hosts and their appearance as referrers is observed or assumed, not documented.
Details: goal, note, how to implement, resources, audit
- Goal
See AI assistant traffic as one channel: either GA4's built-in AI Assistant channel (Option A) or your own custom channel group (Option B), with referrer matching as a backup.
- Note
Recommendation only. The site does not pick the medium for the shop. Apps and privacy settings often strip referrers, so referrer matching undercounts. Review the host list against your own referral report. GA4 default channel definitions: support.google.com/analytics/answer/9756891.
- How to implement
- Pick Option A (utm_medium=ai-assistant) or Option B (own medium, e.g. ai).
- Option A: no custom channel group needed; confirm sessions land in GA4's AI Assistant default channel.
- Option B: in GA4, create a custom channel group with a channel named AI assistants. Rule: Medium exactly matches your chosen value OR Session source matches regex chatgpt\.com|gemini\.google\.com|perplexity\.ai|copilot\.microsoft\.com|claude\.ai. Place AI assistants above Referral.
- Optionally keep a separate segment on the same source regex for explorations.
Artifacts
{ai_medium}ai-assistantreferrercustom channel groupDepends on measurement.utm.feed-links
- Resources
- GA4 default channel group (opens in new tab) Google docs
- Simon Vreeman: GA4 UTM convention and builder (opens in new tab) Simon Vreeman (convention) docs
- Audit
Method
analyticshuman checkIf Option A: GA4 default AI Assistant channel shows tagged sessions. If Option B: custom channel group shows AI assistants sessions for your medium and matching referrers. Compare with tagged feed traffic.
measurement.referrer-segments JSON
Web Bot Auth identity-trust
Web Bot Auth (HTTP Message Signatures for bots and agents). Official site (opens in new tab)
Web Bot Auth uses HTTP Message Signatures and a public key directory so bots and agents can prove who they are. Mastercard incorporates it into Agent Pay; American Express said it will use it in its agentic commerce program (Cloudflare, 14 Oct 2025). Visa TAP is aligned with it per Visa's own spec.
Details: goal, note, how to implement, resources, audit
- Goal
Lets you allow or charge verified agents and treat others differently, based on cryptography instead of user agent strings.
- Note
Based on IETF drafts (protocol: draft-ietf-webbotauth-httpsig-protocol-00); Cloudflare supports Ed25519. Agents host keys at /.well-known/http-message-signatures-directory.
- How to implement
- Turn on verified bots and agents at your CDN, or verify Signature headers yourself.
- For your own agent: generate an Ed25519 key, host the JWKS directory, register with Cloudflare.
openssl genpkey -algorithm ed25519 -out private-key.pem openssl pkey -in private-key.pem -pubout -out public-key.pemSnippet from Cloudflare: Web Bot Auth (opens in new tab)
Artifacts
/.well-known/http-message-signatures-directory- Resources
- Cloudflare: Web Bot Auth (opens in new tab) Cloudflare docs
- Mastercard Developers: Level 1 agentic commerce (opens in new tab) Mastercard docs
- Cloudflare press release: payments companies and Web Bot Auth (14 Oct 2025) (opens in new tab) Cloudflare announcement
- Audit
Method
config_reviewhuman checkYour CDN or verifier logs show signed agent requests as verified.
web-bot-auth.verify JSON
Access discovery
AI crawler and agent access (robots.txt and edge bot rules). Official site (opens in new tab)
robots.txt is read per user-agent token (RFC 9309). AI vendors publish separate tokens for training, for search or retrieval, and for user-triggered fetches, so one Disallow rarely does what a shop expects.
Details: goal, note, how to implement, resources, audit
- Goal
Make a deliberate choice per kind of bot instead of an accidental one: blocking training crawlers does not have to remove your products from AI answers.
- Note
Each vendor states its own tokens and semantics; we only list tokens from official vendor pages. Google-Extended and Applebot-Extended are control tokens that do not crawl. Applebot follows Googlebot rules when it is not named. Bingbot feeds the Bing index, which Microsoft says also feeds Copilot and grounding results; there is no separate Copilot token, and NOARCHIVE or NOCACHE limit Copilot use (Bing Webmaster Guidelines). Full token list with kind and source per vendor: /commerce/api/bots (MCP tool list_ai_bots).
- How to implement
- List every AI token in /commerce/api/bots and decide allow or disallow per kind (training, search, user).
- Write explicit groups per token in robots.txt; a group for a token replaces the * group for that bot.
- Remember the most specific (longest) rule wins and allow wins a tie (RFC 9309).
- Check product and category paths, not only /.
- Re-check after platform or CDN changes, which can rewrite robots.txt.
Artifacts
/robots.txt- Resources
- RFC 9309: Robots Exclusion Protocol (opens in new tab) IETF spec
- OpenAI: overview of OpenAI crawlers (opens in new tab) OpenAI docs
- Anthropic: crawlers and how to block them (opens in new tab) Anthropic docs
- Google: common crawlers (incl. Google-Extended) (opens in new tab) Google docs
- Google: user-triggered fetchers (incl. Google-Agent) (opens in new tab) Google docs
- Apple: About Applebot (opens in new tab) Apple docs
- Perplexity: crawlers (opens in new tab) Perplexity docs
- Meta: web crawlers (opens in new tab) Meta docs
- Common Crawl: CCBot (opens in new tab) Common Crawl docs
- Bing Webmaster: which crawlers does Bing use (opens in new tab) Microsoft docs
- Bing Webmaster Guidelines (opens in new tab) Microsoft docs
- Audit
Method
robots_txtmachine-checkable/robots.txtFetch /robots.txt, resolve the group for each token in /commerce/api/bots (RFC 9309 matching), and report whether / and a sample product URL are allowed, grouped by kind. A missing robots.txt (4xx) means all allowed.
{ "bot_kinds": [ "training", "search", "user", "classic_search" ], "allow_paths": [ "/", "{product_url}" ] }
access.robots.ai-crawlers JSON
Search or retrieval bots (OAI-SearchBot, Claude-SearchBot, PerplexityBot, Meta-WebIndexer, Applebot) index pages so assistants can cite and link them. User-triggered agents (ChatGPT-User, Claude-User, Perplexity-User, Google-Agent, Meta-ExternalFetcher) fetch a page when a shopper asks.
Details: goal, note, how to implement, resources, audit
- Goal
Shoppers who ask an assistant about your products can only be sent to pages it was allowed to read.
Why this status Recommended for shops because blocking removes products from AI answers per the vendors' own docs; a business can still decide otherwise.
- Note
Recommended for shops, our reading: OpenAI says sites opted out of OAI-SearchBot will not be shown in ChatGPT search answers; Anthropic says blocking Claude-SearchBot or Claude-User may reduce visibility. OpenAI, Perplexity, Google and Meta say their user-triggered fetchers may not follow robots.txt, while Anthropic lets sites control Claude-User through it. Not a vendor requirement.
- How to implement
- Do not disallow search or user tokens on product, category and policy pages.
- If you block bots at the CDN, make sure search and agent bots still reach those pages (see access.cloudflare.ai-bots).
- Allow published IP ranges in your WAF where the vendor publishes them.
Artifacts
/robots.txtDepends on access.robots.ai-crawlers
- Resources
- OpenAI: overview of OpenAI crawlers (opens in new tab) OpenAI docs
- Anthropic: crawlers and how to block them (opens in new tab) Anthropic docs
- Perplexity: crawlers (opens in new tab) Perplexity docs
- Google: user-triggered fetchers (incl. Google-Agent) (opens in new tab) Google docs
- Meta: web crawlers (opens in new tab) Meta docs
- Apple: About Applebot (opens in new tab) Apple docs
- RFC 9309: Robots Exclusion Protocol (opens in new tab) IETF spec
- Audit
Method
robots_txtmachine-checkable/robots.txtFor every search and user token, / and a sample product URL resolve to allowed under RFC 9309 matching.
{ "bot_kinds": [ "search", "user" ], "allow_paths": [ "/", "{product_url}" ] }
access.robots.search-and-user-agents JSON
Training crawlers and tokens (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, Meta-ExternalAgent, CCBot) govern whether content may be used to train models. Vendors state these are separate from search: for example Google-Extended does not affect Google Search, and OpenAI treats GPTBot and OAI-SearchBot independently.
Details: goal, note, how to implement, resources, audit
- Goal
Choose deliberately whether your copy and images may train models, without hurting AI search visibility.
Why this status Training is a business choice, so Optional.
- Note
Optional: no official source ties training access to shopping visibility. Note that Google-Extended also covers grounding in Gemini Apps and Vertex AI, per Google. CCBot builds an open repository of web crawl data (Common Crawl) that anyone can access and analyze.
- How to implement
- Decide allow or disallow per training token; write explicit groups.
- Do not use a blanket User-agent: * Disallow to block training, because it also blocks search bots that fall back to *.
- Document the choice in your robots.txt comments.
Artifacts
/robots.txtDepends on access.robots.ai-crawlers
- Resources
- OpenAI: overview of OpenAI crawlers (opens in new tab) OpenAI docs
- Anthropic: crawlers and how to block them (opens in new tab) Anthropic docs
- Google: common crawlers (incl. Google-Extended) (opens in new tab) Google docs
- Apple: About Applebot (opens in new tab) Apple docs
- Meta: web crawlers (opens in new tab) Meta docs
- Common Crawl: CCBot (opens in new tab) Common Crawl docs
- Audit
Method
robots_txtmachine-checkable/robots.txtReports per training token whether / is allowed. Informational: both outcomes are valid choices.
{ "bot_kinds": [ "training" ], "allow_paths": [ "/", "{product_url}" ] }
access.robots.training-choice JSON
Google's StoreBot crawls product detail, cart and checkout pages to collect price, shipping, availability and payment data and to verify what you submit in Merchant Center; Google calls allowing it highly encouraged. When StoreBot cannot reach an in-store product page, Merchant Center issues a warning or suspension, and Google's fix is to let StoreBot, Googlebot and Googlebot-Image through robots.txt, bot detection, firewalls and CDNs.
Details: goal, note, how to implement, resources, audit
- Goal
Avoid Merchant Center warnings or suspensions and keep Merchant Center data verifiable on Google Shopping surfaces.
Why this status Required: Google issues a warning or suspension when StoreBot cannot access in-store product pages (answer 13484511).
- Note
Required for shops using Merchant Center, based on Google's own warning-or-suspension text for in-store pages (answer 13484511). For online-only product pages, Google's StoreBot page (answer 13294660) says highly encouraged and states no penalty. Google advises reverse DNS verification over static IP allowlists, because StoreBot can use different IPs than search crawlers. Product images often sit on a CDN host with its own robots.txt.
- How to implement
- robots.txt: do not disallow Storebot-Google, Googlebot or Googlebot-Image on product, cart, checkout and image paths; Google's example is a group per token with an empty Disallow.
- Bot detection, WAF or CDN (for example Cloudflare): make sure these crawlers get no 403 or 404; verify Google by reverse DNS rather than static IP lists.
- Keep landing pages fast, since slow pages can cause crawler timeouts.
- Add product structured data: it takes precedence over what StoreBot extracts.
- Then reprocess your feed in Merchant Center.
Artifacts
/robots.txtDepends on access.robots.ai-crawlers
- Resources
- Google Merchant Center: fix StoreBot crawler can't access your in-store product page (opens in new tab) Google docs
- Google Merchant Center: About the Google StoreBot crawler (opens in new tab) Google docs
- Google: common crawlers (incl. Google-Extended) (opens in new tab) Google docs
- RFC 9309: Robots Exclusion Protocol (opens in new tab) IETF spec
- Audit
Method
robots_txtmachine-checkable/robots.txtFor Googlebot, Googlebot-Image and Storebot-Google: / , a sample product URL and a sample product image URL resolve to allowed. WAF, bot detection and CDN blocks need a manual check in Merchant Center diagnostics.
{ "bot_kinds": [ "merchant_center" ], "allow_paths": [ "/", "{product_url}", "{image_url}" ] }
access.robots.merchant-center JSON
Cloudflare can block AI bots at the edge whatever robots.txt says. Its AI bot policies have Search, Agent and Training presets. Per Cloudflare, from 15 September 2026 new domains default to blocking Training and Agent bots on pages with ads, with Search allowed. AI Crawl Control allows or blocks individual crawlers and tracks robots.txt compliance; managed robots.txt can add AI disallow rules.
Details: goal, note, how to implement, resources, audit
- Goal
Avoid an edge rule silently blocking the shopping agents your robots.txt allows.
- Note
Cloudflare's Agent preset covers chat fetch bots and browser-use agents, so blocking it can stop user-triggered shopping agents. A remote audit cannot see dashboard settings and does not impersonate bots, so this is a manual check. Signed agents can be recognised with Web Bot Auth (web-bot-auth.verify).
- How to implement
- In Cloudflare Security Settings, review Configure AI bot policies: Search, Agent and Training.
- For shops, keep Search and Agent allowed at least on product pages; choose Training separately.
- Review AI Crawl Control for blocked crawlers and robots.txt violations.
- If managed robots.txt is on, check the rules it prepends.
Depends on access.robots.search-and-user-agents
- Resources
- Cloudflare: Block AI bots and AI bot policies (opens in new tab) Cloudflare docs
- Cloudflare: AI Crawl Control (opens in new tab) Cloudflare docs
- Cloudflare: managed robots.txt (opens in new tab) Cloudflare docs
- Cloudflare: Web Bot Auth (opens in new tab) Cloudflare docs
- Audit
Method
platform_consolehuman checkCloudflare dashboard: AI bot policies and AI Crawl Control match your robots.txt choices; Agent and Search not blocked on product pages.
access.cloudflare.ai-bots JSON
Last checked: