Three Checkout States, and Where Autonomy Stops

UCP, the Universal Commerce Protocol, models checkout with three states: incomplete when requirements are still missing, requires_escalation when the agent cannot proceed on its own, and ready_for_complete when the order can be finalized. The middle state is where the money leaks. When checkout hits a point that needs a human — a CAPTCHA, a missing address field, a regulatory requirement, a merchant policy, or a capability the agent doesn't support — it transitions to requires_escalation.

continue_url Is a Baton Pass, Not a Dead End

The spec makes it a MUST: on requires_escalation, the merchant response must include a continue_url. The buyer follows that link and picks checkout back up exactly where the agent stopped. So an escalation isn't a severed session — it's a recovery path the protocol deliberately leaves open. Whether you treat that stall as an abandoned cart or as a funnel stage worth observing and optimizing is what separates the conversion outcomes.

Why This Became an Operational Problem Now

UCP was announced on January 11, 2026 by Google alongside Shopify, Etsy, Wayfair, Target, and Walmart, and it is already live across Google AI Mode, Gemini, and YouTube Shopping. In May, a cross-retailer persistent cart — Universal Cart — was added, spanning Search, Gemini, YouTube, and Gmail, so a single session survives across surfaces. The more surfaces there are, the more points where an agent stalls, and the quality of your handoff design becomes your revenue-recovery rate.

Designing Drop-off Recovery: Running Escalation as a Recovery Funnel

(Planning and targets) Making autonomous-completion rate your only KPI turns everything after requires_escalation into a blind spot. Split the metrics out first and declare them: escalation rate by reason, click-to-completion rate on continue_url (start from a 60% handoff-completion floor), median handoff time under 3 minutes, share of buyers who resume with no re-entry above 90%, and state loss from session expiry under 2%. That is a realistic target bundle.

(Failure patterns) Four recur. First, passing a context-free continue_url so the buyer lands and re-enters cart and address from scratch. Second, not tagging the escalation reason, so you can't tell whether the leak is at the CAPTCHA or at a policy check. Third, watching only the autonomous-completion rate while the handoff-completion rate goes unattended. Fourth, letting the continue_url session expire so the state is already gone when the buyer opens the link.

(Recovery strategy) Pin the reasons to a five-way taxonomy and the leak points surface: bot verification (CAPTCHA), missing address or contact fields, regulatory requirements (age or license checks), merchant policy (quantity caps, members-only), and unsupported agent capabilities (gift wrap, specific coupons). Assign each reason a code and carry it in the continue_url payload, so the screen the buyer receives opens at the stalled step rather than the start.

(Operations checklist) Nail the continue_url payload's minimum fields into a contract: a cart/session reference ID, an anchor to the checkout step to resume, the reason code, the field values the agent already filled, an expiry timestamp, and a resume auth token — six in total. Keep expiry short but refreshable on arrival, and have the server retain already-filled fields so re-entry converges to zero.

(Quality and observability) Fix the log schema before cutover too. Session ID, escalation reason code, continue_url issue/click/complete timestamps, a re-entry flag, and an expiry-loss flag are what let you compare leaks by reason on one dashboard. Since addresses and contacts ride in the payload, mask PII at rest and issue the resume token as single-use.

(Improvement loop) Weekly, pull the top drop-off reasons: if CAPTCHA leads, tune the bot-detection threshold; if missing address leads, revise the field list the agent pre-collects. When expiry loss exceeds target, check the on-arrival refresh path before you extend the session TTL. The very fact that this reason ranking shifts week to week is evidence you're running escalation as a recovery funnel.

Turning the Handoff Into a Recovery Funnel

requires_escalation is unavoidable in agentic commerce, and continue_url is the only channel that turns that state back into revenue. Tag reasons across five buckets, freeze the six payload fields as a contract, and hold yourself to a 60% handoff-completion rate, 90% no-re-entry resumption, and under 2% expiry loss — and the moment autonomy stalls stops being an abandonment and becomes a funnel stage you can observe and optimize.

References

Building the Universal Commerce Protocol (2026) — Shopify Engineering

Native checkout — Google Universal Commerce Protocol (UCP) Guide