50+ errors documented · Spec v2026-04-08

UCP Help

Troubleshooting guides, common errors, and answers to the questions developers ask when implementing the Universal Commerce Protocol.

Browse Troubleshooting → Error Reference
Unofficial community resource. Answers reference the official UCP specification (version 2026-04-08). The spec is still evolving, so some answers may change.

Common Questions

What is the Universal Commerce Protocol (UCP)?

UCP is an open-source standard co-developed by Google and Shopify that lets AI agents discover products, build carts, negotiate terms, and complete purchases with any merchant. It covers the full commerce lifecycle: discovery, cart, checkout, payment, and post-purchase. It was announced January 11, 2026 at NRF and is now backed by 50+ partners including Walmart, Target, Amazon, Visa, Mastercard, and Stripe.

Read the full docs at UCP Docs →

How is UCP different from ACP (Agentic Commerce Protocol)?

UCP (Google/Shopify) covers the full commerce lifecycle: discovery, comparison, cart, checkout, fulfillment, returns, and loyalty. ACP (OpenAI/Stripe) is primarily focused on checkout. UCP delegates payments to AP2 (Agent Payments Protocol) and is payment-agnostic. ACP uses Stripe SPTs. UCP supports REST, MCP, A2A, and embedded transports. ACP supports REST and MCP. UCP is in early access on Google surfaces. ACP is in production on ChatGPT.

See full comparison →

Does my Shopify store already support UCP?

Yes. Shopify merchants get UCP support out of the box through Agentic Storefronts. You manage your presence across AI platforms (Google AI Mode, Gemini, ChatGPT, Microsoft Copilot) directly from the Shopify Admin. No additional code is needed. Check your Shopify Admin under Settings > Agentic Storefronts to see which surfaces are active.

I'm not on Shopify. How do I add UCP support?

For non-Shopify platforms, you have three options:

  • UCP Proxy (easiest): Deploy Shopify's open-source ucp-proxy. It acts as a translation layer between UCP and your existing store API. Adapters are available for WooCommerce, Wix, and BigCommerce.
  • Community module: Platform-specific modules like angeo/module-ucp for Magento generate spec-compliant UCP profiles. Currently limited to discovery layer.
  • Custom implementation: Implement the UCP spec directly using the OpenAPI schemas as your contract. Most work, but most control.

See platform guides →

What is the .well-known/ucp endpoint?

This is the UCP discovery endpoint. Every UCP-enabled merchant must serve a JSON profile at /.well-known/ucp on their domain. This profile declares the merchant's supported UCP version, services (shopping, lodging, food), transports (REST, MCP, A2A, embedded), capabilities (checkout, catalog, cart, fulfillment, etc.), and payment handlers. Agents fetch this profile to discover what the merchant supports before making any requests.

It works like robots.txt or .well-known/openid-configuration - a standardized discovery mechanism that requires no central registry.

What transports does UCP support?

UCP supports four transports, and merchants can expose the same business logic through multiple transports simultaneously:

  • REST - Standard HTTP/JSON with OpenAPI 3.x schemas. Most common for direct API integration.
  • MCP - Model Context Protocol (JSON-RPC over HTTP). Works with Claude, Cursor, and any MCP-compatible agent.
  • A2A - Agent-to-Agent Protocol. For agent-to-agent delegation and task handoff.
  • Embedded - Embedded Commerce Protocol (ECP). For rendering merchant checkout UI inside an agent surface.
What is capability negotiation?

UCP uses a server-selects architecture. The merchant (server) determines the active capabilities from the intersection of both parties' declared capabilities. The agent sends its profile URL with each request (via the UCP-Agent header for REST, or meta.ucp-agent.profile for MCP). The merchant intersects the agent's capabilities with its own and responds with the active set. This means no integration meetings - the protocol handles compatibility automatically.

What is AP2 and how do payments work?

AP2 (Agent Payments Protocol) is the payment layer UCP delegates to. It separates payment instruments (what consumers use to pay - cards, wallets, bank transfers) from payment handlers (payment processors - Stripe, Adyen, Braintree). This separation means UCP is payment-agnostic: any processor, any wallet. Payments are backed by cryptographic proof of user consent via payment mandates and verifiable credentials.

What happens when a transaction needs human input?

UCP supports seamless escalations. When a checkout requires human intervention (e.g. 3D Secure authentication, address selection, final-sale confirmation), the merchant returns a requires_escalation status with a continue_url. The agent hands this URL to the buyer, who completes the step in their browser, then the agent can resume. Every transaction finds a path to completion.

Is UCP production-ready?

Partially. Shopify merchants have production UCP support via Agentic Storefronts. Google surfaces (AI Mode in Search, Gemini) are in early access with limited US merchants. The spec is live but still evolving - features are being added. Non-Shopify platforms are at various stages. Payment flow via AP2 is itself pre-production. If you are building on UCP today, expect changes and track the spec version you implement against.

Can I extend UCP with custom capabilities?

Yes. UCP uses reverse-domain naming for capabilities. The dev.ucp.* namespace is reserved for the UCP governing body. Vendors use their own namespace: com.example.payments.installments for an installments capability owned by example.com. Extensions use the extends field to declare parent capabilities. Multi-parent extensions are supported (e.g. a discount capability extending both checkout and cart). The spec origin must match the namespace authority.

Common Errors

The errors developers hit most often when working with UCP:

Error Code Meaning Fix
version_unsupported Agent and merchant cannot agree on a protocol version View fix →
capability_not_supported Agent requested a capability the merchant does not advertise View fix →
requires_escalation Checkout needs human intervention (3DS, address, etc.) View fix →
invalid_profile Merchant's .well-known/ucp profile is malformed or missing required fields View fix →
schema_resolution_failed Could not fetch or compose extension schemas View fix →
payment_handler_error Payment processor returned an error during checkout completion View fix →
checkout_expired Checkout session has expired and is no longer valid View fix →
namespace_mismatch Capability spec URL origin does not match the namespace authority View fix →
View Full Error Reference

Troubleshooting by Symptom

🔍

Agent can't find my store

Your /.well-known/ucp profile is missing, returns 404, or is not reachable. Check DNS, HTTPS, CORS headers, and JSON validity.

Troubleshoot →
🤝

Capability negotiation fails

Agent and merchant cannot agree on capabilities. Check version compatibility, profile structure, and namespace bindings.

Troubleshoot →
💳

Checkout won't complete

Payment fails or escalates unexpectedly. Check AP2 configuration, payment handler setup, and instrument validation.

Troubleshoot →
📦

Order webhooks not firing

Fulfillment events not reaching the agent. Check webhook subscription, endpoint accessibility, and signature validation.

Troubleshoot →
🔄

Schema resolution errors

Extension schemas not composing correctly. Check $defs keys, extends declarations, and requires constraints.

Troubleshoot →
🌐

CORS and cross-origin issues

Agent requests blocked by CORS. Check Access-Control-Allow-Origin headers and preflight handling.

Troubleshoot →

Quick Diagnostics

Run these checks to diagnose common UCP issues:

# 1. Check if your UCP profile is reachable
curl -I https://your-store.com/.well-known/ucp
# Expected: 200 OK with Content-Type: application/json

# 2. Validate profile structure
curl -s https://your-store.com/.well-known/ucp | jq .ucp.version
# Expected: "2026-04-08" (or your version)

# 3. List advertised capabilities
curl -s https://your-store.com/.well-known/ucp | jq '.ucp.capabilities | keys'
# Expected: Array of capability names

# 4. Check available transports
curl -s https://your-store.com/.well-known/ucp | \
  jq '.ucp.services["dev.ucp.shopping"][] | .transport'
# Expected: ["rest", "mcp", "a2a", "embedded"] (or subset)

# 5. Verify spec URL matches namespace authority
curl -s https://your-store.com/.well-known/ucp | \
  jq '.ucp.capabilities["dev.ucp.shopping.checkout"][].spec'
# Expected: URL starting with https://ucp.dev/
Need deeper help?

Check the troubleshooting guides for step-by-step fixes, or the error reference for specific error codes. For protocol questions, the official GitHub repo has discussions and issues.

Resources

📖

Official Spec

The authoritative specification at ucp.dev. Always cross-reference for the latest details.

Visit ucp.dev →
📋

UCP Docs

Plain-English documentation and annotated spec walkthroughs.

Visit UCP Docs →
🎓

UCP Tutorials

Step-by-step implementation guides for every platform.

Visit Tutorials →
💻

GitHub Repository

Source code, reference implementations, and community discussions.

Visit GitHub →
🔌

UCP Proxy

Shopify's open-source proxy for non-Shopify platforms.

Visit repo →

UCP CLI

Agent-side shopping skill for UCP. Search, cart, checkout, orders.

Visit repo →