UCP profile
Universal Commerce Protocol discovery for agentic shopping.
Why an agent cares
The profile is how an agent discovers that a business supports agentic commerce and how to connect to it. A profile that declares no usable capability or no connectable transport is discoverable and useless, which is the shape we look for.
Adoption
Platform default. A major platform ships it by default or in one click, so its footprint is measurable at web scale. For this one in particular, the entire measurable footprint comes from a single platform enabling it by default.
Direction of travel: ▲ rising, as at .
Shopify turned UCP on by default for every store (Jun 17, 2026). A Lumar probe of 12 hosts on 2026-08-22 found four live profiles, all Shopify-hosted; Target, Walmart, Wayfair, Etsy and Nike serve no profile at all.
| Adopter | Depth | Evidence |
|---|---|---|
| Shopify (all stores) | default-on | shopify.engineering |
| Google (AI Mode and Gemini checkout, Merchant Center) | production | blog.google |
| Fenty Beauty, Steve Madden, Allbirds, Gymshark (verified by probe) | production | shopify.engineering |
| Etsy, Walmart, Target, Wayfair (co-developers) | announced | nrf.com |
| Salesforce, BigCommerce | announced | bigcommerce.com |
What we check
ucpPresent is true, so a site that has not adopted this is not assessed on it and appears in no report. 4 of these 5 can fail it. In a Lumar crawl these land on one row per site, in the crawl-level table where itemType is ucp.| Check | Severity | Raises | On whose authority |
|---|---|---|---|
ucpInvalidDocument | high | conformance, usability | specification (Universal Commerce Protocol (ucp.dev) v2026-04-08, specification overview §Profile Structure) |
ucpMissingRequiredRegistries | high | conformance, usability | specification (Universal Commerce Protocol (ucp.dev) v2026-04-08, ucp.json $defs.business_schema) |
ucpMissingTransports | high | usability | Lumar readiness profile |
ucpInvalidVersion | medium | conformance, usability | specification (Universal Commerce Protocol (ucp.dev) v2026-04-08, ucp.json $defs.version + $defs.base) |
ucpMissingCapabilities | informational | nothing | specification (Universal Commerce Protocol (ucp.dev) v2026-04-08, ucp.json $defs.business_schema) |
Examples
Both of these are fixtures the test suite runs through the real collector, not snippets written for a document: the first is a shape we score as valid, the second is one we flag.
{
"ucp": {
"version": "2026-01-01",
"services": {
"dev.ucp.shopping": [
{
"version": "2026-01-01",
"spec": "https://ucp.dev/2026-01-01/specification/overview",
"transport": "rest",
"schema": "https://ucp.dev/2026-01-01/services/shopping/rest.openapi.json",
"endpoint": "https://business.example.com/ucp/v1"
}
]
},
"capabilities": {
"dev.ucp.shopping.checkout": [
{ "version": "2026-01-01", "schema": "https://ucp.dev/2026-01-01/schemas/shopping/checkout.json" }
],
"dev.ucp.common.identity_linking": [
{ "version": "2026-01-01", "schema": "https://ucp.dev/2026-01-01/schemas/common/identity_linking.json" }
]
},
"payment_handlers": {}
}
}{
"ucp": {
"version": "v1",
"services": {},
"capabilities": {}
}
}Specifications
| Document | Revision | Kind |
|---|---|---|
| Universal Commerce Protocol | living | guidance |
| UCP profile schema (pinned tag; cite ucp.json, not the later profile.json on main) | v2026-04-08 | specification |
Last re-read against the published documents: .
profile.json is a later addition on main and does not exist at the tag, so cite ucp.json; and the key set is signing_keys here, renamed to keys on main afterwards.