Cart Handoff Reachability
What it checks
Tests whether the URL an agent would hand a buyer to — the ACP Cart API’s continue_url, or the storefront cart for a computer-use agent — is actually reachable without an account and without a bot challenge.
Why it matters
Falsifiable claim: ACP 2026-04-17 adds a seller-hosted Cart API whose response carries a continue_url (e.g. seller.example.com/…/cart_abc123) used to hand the buyer off to the seller’s own checkout UI; this is the low-lift adoption path that requires no delegated payment. For merchants with no ACP integration at all, a computer-use shopping agent drives that same storefront cart directly. In both cases, if the cart or checkout URL 302s to a login page, or serves a CAPTCHA/bot-challenge on the checkout document, the handoff dead-ends at the final step after every upstream signal worked. ACP even reserves a message code requires_sign_in for the sign-in wall case. Disproof condition: agent handoffs completing normally through a login-walled cart.
Evidence
- openapi.cart.yaml (spec version 2026-04-17) — Agentic Commerce Protocol (spec, URL verified 2026-08-20)
- Seller-hosted pre-checkout Cart API at seller.example.com: POST /carts, GET /carts/{id}, PUT /carts/{id} (full replacement), POST /carts/{id}/cancel. Required headers Authorization (Bearer) and API-Version (e.g. 2026-04-17); Idempotency-Key required on POST; Content-Type application/json on POST/PUT; optional Accept-Language, Request-Id. The cart response carries a
continue_url(e.g. seller.example.com/…/cart_abc123) used to hand the buyer off to the seller’s own checkout UI. No payment configuration in this phase; expired carts return 404. This is the lower-lift adoption path versus full delegated-payment Instant Checkout. - openapi.agentic_checkout.yaml (spec version 2026-04-17) — Agentic Commerce Protocol (spec, URL verified 2026-08-20)
- CheckoutSession carries nine REQUIRED fields and three enums.
- Required fields: id, status, currency, line_items, totals, fulfillment_options, messages, links, capabilities.
links[].type, expanded to 8 values: terms_of_use, privacy_policy, return_policy, shipping_policy, contact_us, about_us, faq, support.status, 11 values: incomplete, not_ready_for_payment, requires_escalation, authentication_required, ready_for_payment, pending_approval, complete_in_progress, completed, canceled, in_progress, expired.totals[].type, 12 values: items_base_amount, items_discount, subtotal, discount, fulfillment, tax, fee, gift_wrap, tip, store_credit, total, amount_refunded. Message error codes extended with low_stock, quantity_exceeded, coupon_invalid, coupon_expired, minimum_not_met, maximum_exceeded, region_restricted, age_verification_required, approval_required, unsupported, not_found, conflict, rate_limited, expired, intervention_required. API-Version is YYYY-MM-DD, required on all requests. Response headers Idempotency-Key and Request-Id are required echoes.- OpenAI Bots / Crawler documentation — OpenAI (vendor-doc, URL verified 2026-08-20)
- Four distinct user agents with separate robots.txt tokens and separate published IP-range files: OAI-SearchBot (surfaces sites in ChatGPT search — openai.com/searchbot.json), OAI-AdsBot (validates ad landing pages — openai.com/adsbot.json), GPTBot (model training — openai.com/gptbot.json), ChatGPT-User (user-initiated actions: web visits and GPT Actions — openai.com/chatgpt-user.json). ChatGPT-User is the agent that fetches on a shopper’s behalf. Crucially these are separately controllable: blocking GPTBot does not block OAI-SearchBot or ChatGPT-User, and vice versa.
- ACP Concepts: Architecture — Agentic Commerce Protocol (spec, URL verified 2026-08-20)
- Four roles: Buyer, Agent, Seller (merchant of record, implements Checkout API), Payment Provider (tokenizes credentials with allowance constraints). A negative result worth stating: the architecture documents no seller discovery mechanism — no registry, no .well-known URL, no automatic endpoint discovery. Seller onboarding is out-of-band/manual. This means any ‘ACP endpoint discovery’ audit check would be speculative today, and endpoint conformance testing must accept an operator-supplied base URL.
How it scores
Tier per evidence policy: scored — grade B meets the A/B bar required for scored audits.
Example failure
A store’s /cart renders fine but /checkout issues a 302 to /account/login?checkout_url=… because guest checkout is disabled. Feed data, policy links and structured markup all score perfectly; the agent walks the buyer to a login form for an account they do not have and the purchase dies at the last click. Variant: Cloudflare Turnstile is mounted on the checkout document only, so every other page in the audit passes cleanly.
Sources
- openapi.cart.yaml (spec version 2026-04-17) — Agentic Commerce Protocol, spec (verified 2026-08-20)
- openapi.agentic_checkout.yaml (spec version 2026-04-17) — Agentic Commerce Protocol, spec (verified 2026-08-20)
- OpenAI crawlers and user agents — OpenAI, vendor-doc (verified 2026-08-21)
- OAI-SearchBot published IP ranges — OpenAI, dataset (verified 2026-08-20)
- ACP Concepts: Architecture — Agentic Commerce Protocol, spec (verified 2026-08-20)