Every error code you might encounter when implementing or consuming UCP, with causes and fixes.
version_unsupportedThe agent's protocol version does not match the merchant's declared version or any version in supported_versions.
supported_versions for backward compatibility{
"ucp": { "version": "2026-01-11", "status": "error" },
"messages": [{
"type": "error",
"code": "version_unsupported",
"content": "Version 2026-01-12 is not supported. This business implements version 2026-01-11.",
"severity": "unrecoverable"
}],
"continue_url": "https://merchant.com/"
}
/.well-known/ucp profile for their current version. Update your client to match.supported_versions with a version-specific profile URI, or upgrade your implementation.capability_not_supporteddev.ucp.shopping.loyalty when the merchant only supports dev.ucp.shopping.checkout)/.well-known/ucp for the merchant's advertised capabilitiesrequires_escalationThe checkout needs human input. Not an error per se - it is a normal part of the checkout lifecycle.
{
"status": "requires_escalation",
"continue_url": "https://merchant.com/checkout/chk_xyz/verify"
}
continue_url to the buyerinvalid_profile/.well-known/ucp returns invalid JSONversion, services)dev.ucp.* capability pointing to non-ucp.dev URL)# Validate your profile structure
curl -s https://your-store.com/.well-known/ucp | jq .
# Check required fields exist
curl -s https://your-store.com/.well-known/ucp | \
jq '{version: .ucp.version, services: (.ucp.services | keys), capabilities: (.ucp.capabilities | keys)}'
# Verify spec URLs match namespace
curl -s https://your-store.com/.well-known/ucp | \
jq '.ucp.capabilities["dev.ucp.shopping.checkout"][0].spec'
# Must start with https://ucp.dev/
schema_resolution_failed$defs key does not match parent capability namerequires constraints not satisfied by negotiated versions$defs has an entry matching every parent in extendsrequires constraints against your declared versionspayment_handler_errorcheckout_expirednamespace_mismatchPlatforms SHOULD reject capabilities where the spec origin does not match the namespace authority.
dev.ucp.* capability has a spec or schema URL not on ucp.devcom.example.* capability has a spec URL not on example.comEnsure spec and schema URLs match their namespace authority:
| Namespace | Required Origin |
|---|---|
dev.ucp.* | https://ucp.dev/... |
com.example.* | https://example.com/... |
org.myorg.* | https://myorg.org/... |
Agent gets a CORS error when fetching /.well-known/ucp or making API calls. Browser console shows "Access-Control-Allow-Origin" errors.
Access-Control-Allow-Origin header# nginx: add CORS headers to UCP endpoints
location = /.well-known/ucp {
default_type application/json;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
add_header Access-Control-Allow-Headers "Content-Type, UCP-Agent";
}
location /api/ucp/ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
add_header Access-Control-Allow-Headers "Content-Type, UCP-Agent";
if ($request_method = OPTIONS) {
return 204;
}
}