Schema Reference
This page provides a reference for all the capability data models and types used
within the UCP.
Capability Schemas
Location Lookup
Location lookup by identifiers. Supports batch retrieval and single-location detail.
Location Search
Location search capability. Supports natural language queries, distance and serviceability relations, structured filtering including current item availability, and pagination.
Cart
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required; omitted in requests |
UCP metadata for cart responses. No payment handlers needed pre-checkout. |
| id |
string |
Required; omitted in requests |
Unique cart identifier. |
| line_items |
Array[Line Item] |
Required |
Cart line items. Same structure as checkout. Full replacement on update. |
| context |
Context |
Optional |
Buyer signals for localization (country, region, postal_code). Merchant uses for pricing, availability, currency. Falls back to geo-IP if omitted. |
| signals |
Signals |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
Attribution |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| buyer |
Buyer |
Optional |
Optional buyer information for personalized estimates. |
| currency |
string |
Required; omitted in requests |
ISO 4217 currency code. Determined by merchant based on context or geo-IP. |
| totals |
Totals |
Required; omitted in requests |
Estimated cost breakdown. May be partial if shipping/tax not yet calculable. |
| actions |
Actions |
Optional; omitted in requests |
Outstanding extension-defined Actions for this cart. |
| messages |
Array[Message] |
Optional; omitted in requests |
Validation messages, warnings, or informational notices. |
| links |
Array[Link] |
Optional; omitted in requests |
Optional merchant links (policies, FAQs). |
| policies |
Array[Policy] |
Optional; omitted in requests |
Policies (e.g., return/refund terms) that apply to the items in this cart. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| continue_url |
string |
Optional; omitted in requests |
URL for cart handoff and session recovery. Enables sharing and human-in-the-loop flows. |
| expires_at |
string |
Optional; omitted in requests |
Cart expiry timestamp (RFC 3339). Optional. |
Catalog Lookup
Product/variant lookup by identifier. Supports batch retrieval (lookup_catalog) and single-product detail (get_product).
Catalog Search
Product catalog search capability.
Checkout
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required; omitted in requests |
UCP metadata for checkout responses. |
| id |
string |
Required; omitted in requests |
Unique identifier of the checkout session. |
| line_items |
Array[Line Item] |
Required; omitted on complete |
List of line items being checked out. |
| buyer |
Buyer |
Optional; omitted on complete |
Representation of the buyer. |
| context |
Context |
Optional; omitted on complete |
Provisional buyer signals for relevance and localization—not authoritative data. Businesses SHOULD use these values when verified inputs (e.g., shipping address) are absent, and MAY ignore or down-rank them if inconsistent with higher-confidence signals (authenticated account, risk detection) or regulatory constraints (export controls). Eligibility and policy enforcement MUST occur at checkout time using binding transaction data. Context SHOULD be non-identifying and can be disclosed progressively—coarse signals early, finer resolution as the session progresses. Higher-resolution data (shipping address, billing address) supersedes context. |
| signals |
Signals |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
Attribution |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| status |
string |
Required; omitted in requests |
Checkout state indicating the current phase and required processing. See Checkout Status lifecycle documentation for state transition details. Enum: incomplete, requires_escalation, ready_for_complete, complete_in_progress, completed, canceled |
| currency |
string |
Required; omitted in requests |
ISO 4217 currency code reflecting the merchant's market determination. Derived from address, context, and geo IP—buyers provide signals, merchants determine currency. |
| totals |
Totals |
Required; omitted in requests |
Different cart totals. |
| actions |
Actions |
Optional; omitted in requests |
Outstanding extension-defined Actions for this checkout. |
| messages |
Array[Message] |
Optional; omitted in requests |
List of messages with error and info about the checkout session state. |
| links |
Array[Link] |
Required; omitted in requests |
Links to be displayed by the platform (Privacy Policy, TOS). Mandatory for legal compliance. |
| policies |
Array[Policy] |
Optional; omitted in requests |
Policies (e.g., return/refund terms) that apply to the items in this checkout. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| expires_at |
string |
Optional; omitted in requests |
RFC 3339 expiry timestamp. Default TTL is 6 hours from creation if not sent. |
| continue_url |
string |
Optional; omitted in requests |
URL for checkout handoff and session recovery. MUST be provided when status is requires_escalation. See specification for format and availability requirements. |
| payment |
Payment |
Optional; required on complete |
Payment configuration containing handlers. |
| order |
Order Confirmation |
Optional; omitted in requests |
Details about an order created for this checkout session. |
Order
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for order responses. No payment handlers needed post-purchase. |
| id |
string |
Required |
Unique order identifier. |
| label |
string |
Optional |
Human-readable label for identifying the order. MUST only be provided by the business. |
| checkout_id |
string |
Required |
Associated checkout ID for reconciliation. |
| permalink_url |
string |
Required |
Permalink to access the order on merchant site. |
| line_items |
Array[Order Line Item] |
Required |
Line items representing what was purchased — can change post-order via edits or exchanges. |
| fulfillment |
object |
Required |
Fulfillment data: buyer expectations and what actually happened. |
| adjustments |
Array[Adjustment] |
Optional |
Post-order events (refunds, returns, credits, disputes, cancellations, etc.) that exist independently of fulfillment. |
| currency |
string |
Required; omitted in requests |
ISO 4217 currency code. MUST match the currency from the originating checkout session. |
| totals |
Totals |
Required |
Different totals for the order. |
| policies |
Array[Policy] |
Optional; omitted in requests |
Snapshot of the policies that applied to the items at checkout, captured on the order as a durable record. applies_to targets are relative to the response root. |
| messages |
Array[Message] |
Optional |
Business outcome messages (errors, warnings, informational). Present when the business needs to communicate status or issues to the platform. |
| attribution |
Attribution |
Optional; omitted in requests |
Snapshot of the attribution associated with the originating checkout. Read-only on the order. |
Type Schemas
Actions
Outstanding extension-defined Action instances, keyed by reverse-domain Action type, not extension name.
Amenity Type
| Name |
Type |
Requirement |
Description |
| Reverse-domain identifier used for collision-safe namespacing of capabilities, services, handlers, eligibility claims, and extension-contributed keys. Must contain at least two dot-separated segments (e.g., 'dev.ucp.shopping.checkout', 'com.example.loyalty_gold'). Segments after the first are domain- or identifier-derived: they may contain interior hyphens, may start with a digit, and may contain underscores (e.g., 'com.example-shop.checkout', 'com.2example.cart', 'dev.ucp.common.identity_linking'), but must not start or end with a hyphen. The first segment (the reversed top-level domain) is letters and digits, and may contain interior hyphens to support internationalized (punycode) top-level domains such as 'xn--p1ai'. |
|
|
|
Pattern: ^[a-z](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9_-]*[a-z0-9_])?)+$
Amount
Monetary amount in the currency's minor unit as defined by ISO 4217. Refer to the currency's exponent to determine minor-to-major ratio (e.g., 2 for USD, 0 for JPY, 3 for KWD).
Available Payment Instrument
| Name |
Type |
Requirement |
Description |
| type |
string |
Required |
The instrument type identifier (e.g., 'card', 'gift_card'). References an instrument schema's type constant. |
| constraints |
Constraint Expression |
Optional |
A Constraint Expression describing the instrument this entry makes available. Keys in properties name members of the constraint_target declared by the instrument schema for this type. Requirements on submitted request data belong in ucp.request_constraints instead. |
Binding
| Name |
Type |
Requirement |
Description |
| type |
Reverse Domain Name |
Required |
The capability that owns the bound resource, for example dev.ucp.shopping.checkout. MUST be a capability name declared in the UCP namespace. |
| id |
string |
Required |
Opaque identifier of the bound resource within the owning capability, for example a checkout identifier. |
Business Split Payments Config
| Name |
Type |
Requirement |
Description |
| allowed_combinations |
Array[array] |
Required |
Array of valid instrument combinations. Each combination is an array of instrument groups. A payment is valid if it matches any combination. |
Card Credential
| Name |
Type |
Requirement |
Description |
| type |
string |
Required |
The credential type discriminator. Specific schemas will constrain this to a constant value. |
| type |
any |
Required |
Constant = card. The credential type identifier for card credentials. |
| card_number_type |
string |
Required |
Deprecated: the credential type now carries this distinction. The type of card number. Network tokens are preferred with fallback to FPAN. See PCI Scope for more details. Enum: fpan, network_token, dpan |
| number |
string |
Optional |
Card number. |
| expiry_month |
integer |
Optional |
The month of the card's expiration date (1-12). |
| expiry_year |
integer |
Optional |
The year of the card's expiration date. |
| name |
string |
Optional |
Cardholder name. |
| cvc |
string |
Optional |
Card CVC number. |
| cryptogram |
string |
Optional |
Cryptogram provided with network tokens. |
| eci_value |
string |
Optional |
Electronic Commerce Indicator / Security Level Indicator provided with network tokens. |
Card Payment Instrument
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
A unique identifier for this instrument instance. Typically assigned by the platform for instruments it collects. For a business-owned saved instrument returned on an identity-linked response, this identifier is assigned by the business; the platform MUST treat it as an opaque, business-scoped reference, and the business resolves it server-side when the buyer selects it. |
| handler_id |
string |
Required |
The unique identifier for the handler instance that produced this instrument. This corresponds to the 'id' field in the Payment Handler definition. |
| type |
string |
Required |
The broad category of the instrument (e.g., 'card', 'tokenized_card'). Specific schemas will constrain this to a constant value. |
| billing_address |
Postal Address |
Optional |
The billing address associated with this payment method. |
| credential |
Payment Credential |
Optional |
The base definition for any payment credential. Handlers define specific credential types. |
| display |
object |
Optional |
Display information for this payment instrument. Each payment instrument schema defines its specific display properties, as outlined by the payment handler. |
| type |
string |
Required |
Constant = card. Indicates this is a card payment instrument. |
| network |
string |
Optional |
Card network elected for this transaction, typically a co-badged selection. When present, the business MAY decline if the card cannot route over it and MUST NOT substitute another. |
| display |
object |
Optional |
Display information for this card payment instrument. |
Constraint Expression
| Name |
Type |
Requirement |
Description |
| required |
Array[string] |
Optional |
Property names required by the constrained object. Must be non-empty: an empty array applies no constraint. |
| properties |
object |
Optional |
Constraints keyed by property name. Must be non-empty: an empty object applies no constraint. |
| anyOf |
Array[Constraint Expression] |
Optional |
Alternative Object Constraints. The constrained object must satisfy at least one. A branch must be non-empty: an empty branch is satisfied by every object and neutralizes the alternation. |
Context
| Name |
Type |
Requirement |
Description |
| address_country |
string |
Optional |
The country, as a 2-letter ISO 3166-1 alpha-2 code (e.g. "US"). A 3-letter alpha-3 code or full country name MAY also be used. |
| address_region |
string |
Optional |
The first-level administrative region within the country (e.g. a state or province such as California). |
| postal_code |
string |
Optional |
The postal code (e.g. "94043"). |
| location |
string |
Optional |
Stable, opaque identifier for a Location in the Business's namespace. This provisional, non-binding hint is distinct from the Buyer's locality. The operation specification or an active capability/extension defines its effects. A common example in retail shopping is the default home store ID selected and saved by the user when purchasing groceries. |
| intent |
string |
Optional |
Background context describing buyer's intent (e.g., 'looking for a gift under $50', 'need something durable for outdoor use'). Informs relevance, recommendations, and personalization. |
| language |
string |
Optional |
Preferred language for content. Use IETF BCP 47 language tags (e.g., 'en', 'fr-CA', 'zh-Hans'). For REST, equivalent to Accept-Language header—platforms SHOULD fall back to Accept-Language when this field is absent; when provided, overrides Accept-Language. Businesses MAY return content in a different language if unavailable. |
| currency |
string |
Optional |
Preferred currency (ISO 4217, e.g., 'EUR', 'USD'). Businesses determine presentment currency from context and authoritative signals; this hint MAY inform selection in multi-currency markets. Also serves as the denomination for price filter values — platforms SHOULD include this field when sending price filters. Response prices include explicit currency confirming the resolution. |
| eligibility |
Array[Reverse Domain Name] |
Optional |
Buyer claims about eligible benefits such as loyalty membership, payment instrument perks, and similar. Recognized claims MAY inform the Business response (e.g., member-only product availability, adjusted pricing in catalog, provisional discounts at cart or checkout). Businesses MUST ignore unrecognized values without error. Values MUST use reverse-domain naming (e.g., 'com.example.loyalty_gold', 'org.school.student') and MUST be non-identifying. |
| payment |
Array[object] |
Optional |
Buyer-preferred payment handlers in priority order (most preferred first). Each entry names a handler advertised in the Business profile's ucp.payment_handlers, optionally narrowed to preferred instrument types. The Business SHOULD use it to preselect or prioritize the handler (and type, when given) and MAY ignore unavailable or ineligible entries; unrecognized values MUST be ignored without error. |
Daily Hour
| Name |
Type |
Requirement |
Description |
| opens |
string |
Required; omitted in requests |
Opening time in 24-hour HH:MM format. |
| closes |
string |
Required; omitted in requests |
Closing time in 24-hour HH:MM format. |
| day |
string |
Required; omitted in requests |
A stable UCP day-of-week identifier for the day on which this recurring local civil-time interval begins in the containing Location's timezone. It is not localized display text. Enum: monday, tuesday, wednesday, thursday, friday, saturday, sunday |
Description
| Name |
Type |
Requirement |
Description |
| plain |
string |
Optional |
Plain text content. |
| html |
string |
Optional |
HTML-formatted content. Security: Platforms MUST sanitize before rendering—strip scripts, event handlers, and untrusted elements. Treat all rich text as untrusted input. |
| markdown |
string |
Optional |
Markdown-formatted content. |
Error Code
Error code identifying the type of error. Standard errors are defined in capability specifications (see examples) and have standardized semantics; freeform codes are permitted.
Error Response
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP protocol metadata. Status MUST be 'error' for error response. |
| messages |
Array[Message] |
Required |
Array of messages describing why the operation failed. |
| continue_url |
string |
Optional |
URL for buyer handoff or session recovery. |
Exception Hour
| Name |
Type |
Requirement |
Description |
| opens |
string |
Optional; omitted in requests |
Opening time in 24-hour HH:MM format. |
| closes |
string |
Optional; omitted in requests |
Closing time in 24-hour HH:MM format. |
| title |
string |
Optional; omitted in requests |
A short human-readable heading naming the exception (for example, 'Thanksgiving'). Presentation metadata that does not affect schedule evaluation. |
| valid_from |
string |
Required; omitted in requests |
The first local civil date to which this exception applies, interpreted in the containing Location's timezone. |
| valid_through |
string |
Required; omitted in requests |
The last local civil date to which this exception applies, interpreted in the containing Location's timezone. |
Geo
| Name |
Type |
Requirement |
Description |
| latitude |
number |
Required |
WGS 84 latitude in decimal degrees. |
| longitude |
number |
Required |
WGS 84 longitude in decimal degrees. |
Info Code
Info code identifying the type of informational message. Standard codes are defined in capability specifications (see examples) and have standardized semantics; freeform codes are permitted.
Instrument Group
| Name |
Type |
Requirement |
Description |
| types |
Array[string] |
Required |
Instrument types accepted by this group (OR logic). Any listed type qualifies. |
| min |
integer |
Optional |
Minimum number of instruments required from this group. Defaults to 0 (optional). |
| max |
integer |
Optional |
Maximum number of instruments allowed from this group. Defaults to 1. MUST be greater than or equal to min. |
Link
| Name |
Type |
Requirement |
Description |
| type |
string |
Required |
Type of link. Well-known values: privacy_policy, terms_of_service, refund_policy, shipping_policy, faq. Consumers SHOULD handle unknown values gracefully by displaying them using the title field or omitting the link. |
| url |
string |
Required |
The actual URL pointing to the content to be displayed. |
| title |
string |
Optional |
Optional display text for the link. When provided, use this instead of generating from type. |
Locality
| Name |
Type |
Requirement |
Description |
| address_country |
string |
Optional |
The country, as a 2-letter ISO 3166-1 alpha-2 code (e.g. "US"). A 3-letter alpha-3 code or full country name MAY also be used. |
| address_region |
string |
Optional |
The first-level administrative region within the country (e.g. a state or province such as California). |
| postal_code |
string |
Optional |
The postal code (e.g. "94043"). |
Location
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Stable, opaque, Business-scoped Location identifier. |
| name |
string |
Required; omitted in requests |
Buyer-facing, Business-owned display name. |
| address |
Postal Address |
Optional; omitted in requests |
Physical address of the location. |
| geo |
Geo |
Optional; omitted in requests |
Geographic coordinates for the location. |
| amenities |
object |
Optional; omitted in requests |
Static features, services, or capabilities of the Location, keyed by reverse-domain amenity identifier. Each value provides a buyer-facing description; the key alone defines amenity identity and filter matching. |
| hours |
Array[Daily Hour] |
Optional; omitted in requests |
Regular weekly operating hours whose day and time values use this Location's canonical local civil-time frame. Multiple entries for the same day support split shifts. An omitted day has no regular interval beginning that day; an interval beginning on the preceding day can carry into it. Omission of the entire hours property means the regular schedule is unknown. |
| exception_hours |
Array[Exception Hour] |
Optional; omitted in requests |
Date-specific operating-hour exceptions, including full closures, whose date and time values use this Location's canonical local civil-time frame. |
| timezone |
string |
Optional; omitted in requests |
The Business-owned IANA Time Zone Database identifier (e.g., 'America/New_York') defining this Location's canonical local civil-time frame for all returned schedule day, time, and date fields. The Business does not vary this canonical framing by the requesting Platform's or Buyer's timezone. Required when hours or exception_hours is present. |
Location Distance
| Name |
Type |
Requirement |
Description |
| center |
Geo |
Required |
Explicit center of the radius. The Platform MUST supply it; the Business MUST NOT derive it from context, signals, an IP address, or serves. |
| max |
number |
Required |
Inclusive maximum distance in RFC 7035 distance unit (meters). A Business unable to honor the supplied value MUST reject the request rather than clamp it or substitute another radius. |
Location Filter
| Name |
Type |
Requirement |
Description |
| hours |
object |
Optional |
Filter by operating hours, evaluated at the one supplied instant. |
| amenities |
Array[Amenity Type] |
Optional |
Filter by amenity identifier. A Location matches only when its amenities map contains every supplied identifier as an exact key; descriptions and namespace prefixes do not participate in matching. |
| items |
Array[string] |
Optional |
Current item-availability filter. A candidate Location matches only when the Business can currently provide every referenced item at that Location; all references combine with AND. |
Location Serves
| Name |
Type |
Requirement |
Description |
| point |
Geo |
Optional |
WGS 84 coordinates of the service target. |
| address |
any |
Optional |
Coarse locality of the service target. |
Location Summary
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Stable, opaque, Business-scoped Location identifier. |
| name |
string |
Required; omitted in requests |
Buyer-facing, Business-owned display name. |
| address |
Postal Address |
Optional; omitted in requests |
Physical address of the location. |
Measure
| Name |
Type |
Requirement |
Description |
| unit |
string |
Required |
Stable machine identifier. The Business SHOULD use the exact UN/CEFACT Rec20 Common Code when one accurately identifies the unit. Otherwise, the Business MAY use a custom unit identifier and MUST use it consistently for the same unit. The Platform MUST treat an unrecognized identifier as opaque. |
| scale |
integer |
Optional |
One step equals 10^-scale of unit. When unit is C62, scale, if present, MUST be 0. The maximum of 15 is derived from the interoperable integer range: at scale 16 a single whole unit (10^16 steps) is no longer representable, so larger scales cannot denominate one unit of their own basis. Businesses needing finer granularity use a smaller unit. |
| display_text |
string |
Required |
Required printable unit label provided by the Business. The Platform MUST use it when it does not recognize unit; for a recognized UN/CEFACT Rec 20 Common Code, the Platform MAY substitute its own localized label. It does not participate in unit identity or mismatch comparison. |
| value |
integer |
Required |
Integer count of 10^-scale units of unit. |
| Name |
Type |
Requirement |
Description |
| type |
string |
Required |
Media type. Well-known values: image, video, model_3d. |
| url |
string |
Required |
URL to the media resource. |
| alt_text |
string |
Optional |
Accessibility text describing the media. |
| width |
integer |
Optional |
Width in pixels (for images/video). |
| height |
integer |
Optional |
Height in pixels (for images/video). |
Message
This object MUST be one of the following types: Message Error, Message Warning, Message Info.
Message Error
| Name |
Type |
Requirement |
Description |
| type |
string |
Required |
Constant = error. Message type discriminator. |
| code |
Error Code |
Required |
Error code identifying the type of error. Standard errors are defined in capability specifications (see examples) and have standardized semantics; freeform codes are permitted. |
| path |
string |
Optional |
RFC 9535 JSONPath to the component the message refers to (e.g., $.line_items[0]). |
| content_type |
string |
Optional |
Content format, default = plain. Enum: plain, markdown |
| content |
string |
Required |
Human-readable message. |
| severity |
string |
Required |
Reflects the resource state and recommended action. 'recoverable': platform can resolve the condition in band, for example by modifying inputs or processing a related Action, and submit a new operation when needed. 'requires_buyer_input': merchant requires information their API doesn't support collecting programmatically (checkout incomplete). 'requires_buyer_review': buyer must authorize before order placement due to policy, regulatory, or entitlement rules. 'unrecoverable': no valid resource exists to act on, retry with new resource or inputs. Errors with 'requires_' severity contribute to 'status: requires_escalation'. Enum:* recoverable, requires_buyer_input, requires_buyer_review, unrecoverable |
Message Info
| Name |
Type |
Requirement |
Description |
| type |
string |
Required |
Constant = info. Message type discriminator. |
| path |
string |
Optional |
RFC 9535 JSONPath to the component the message refers to (e.g., $.line_items[0]). |
| code |
Info Code |
Optional |
Info code identifying the type of informational message. Standard codes are defined in capability specifications (see examples) and have standardized semantics; freeform codes are permitted. |
| content_type |
string |
Optional |
Content format, default = plain. Enum: plain, markdown |
| content |
string |
Required |
Human-readable message. |
Message Warning
| Name |
Type |
Requirement |
Description |
| type |
string |
Required |
Constant = warning. Message type discriminator. |
| path |
string |
Optional |
RFC 9535 JSONPath to the component the message refers to (e.g., $.line_items[0]). |
| code |
Warning Code |
Required |
Warning code identifying the type of warning. Standard codes are defined in capability specifications (see examples) and have standardized semantics; freeform codes are permitted. |
| content |
string |
Required |
Human-readable warning message that MUST be displayed. |
| content_type |
string |
Optional |
Content format, default = plain. Enum: plain, markdown |
| presentation |
string |
Optional |
Rendering contract for this warning. 'notice' (default): platform MUST display, MAY dismiss. 'disclosure': platform MUST display in proximity to the path-referenced component, MUST NOT hide or auto-dismiss. See specification for full contract. |
| image_url |
string |
Optional |
URL to a required visual element (e.g., warning symbol, energy class label). |
| url |
string |
Optional |
Reference URL for more information (e.g., regulatory site, registry entry, policy page). |
Network Token Credential
| Name |
Type |
Requirement |
Description |
| type |
string |
Required |
The credential type discriminator. Specific schemas will constrain this to a constant value. |
| type |
any |
Required |
Constant = network_token. The credential type identifier for network token credentials. |
| number |
string |
Required |
Network token or wallet-provisioned token replacing the underlying FPAN. |
| expiry_month |
integer |
Optional |
The month of the token's expiration date (1-12). |
| expiry_year |
integer |
Optional |
The year of the token's expiration date. |
| name |
string |
Optional |
Cardholder name. |
| cryptogram |
string |
Required |
Transaction cryptogram or dynamic CVC (dCVV), in the long or short form expected by the card network or processor. |
| eci_value |
string |
Optional |
Electronic Commerce Indicator / Security Level Indicator associated with the transaction. |
| token_requestor_id |
string |
Optional |
Payment network token requestor identifier, when required by the processor or network-token program. |
Cursor-based pagination for list operations.
PAN Credential
| Name |
Type |
Requirement |
Description |
| type |
string |
Required |
The credential type discriminator. Specific schemas will constrain this to a constant value. |
| type |
any |
Required |
Constant = pan. The credential type identifier for PAN credentials. |
| number |
string |
Required |
Funding primary account number (FPAN). |
| expiry_month |
integer |
Optional |
The month of the card's expiration date (1-12). |
| expiry_year |
integer |
Optional |
The year of the card's expiration date. |
| name |
string |
Optional |
Cardholder name. |
| cvc |
string |
Optional |
Card verification code. |
Payment
| Name |
Type |
Requirement |
Description |
| instruments |
Array[Payment Instrument Selected Payment Instrument] |
Optional |
The payment instruments available for this payment. Each instrument is associated with a specific handler via the handler_id field. Handlers can extend the base payment_instrument schema to add handler-specific fields. |
Payment Credential
| Name |
Type |
Requirement |
Description |
| type |
string |
Required |
The credential type discriminator. Specific schemas will constrain this to a constant value. |
Payment Identity
| Name |
Type |
Requirement |
Description |
| access_token |
string |
Required |
Unique identifier for this participant, obtained during onboarding with the tokenizer. |
Payment Instrument
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
A unique identifier for this instrument instance. Typically assigned by the platform for instruments it collects. For a business-owned saved instrument returned on an identity-linked response, this identifier is assigned by the business; the platform MUST treat it as an opaque, business-scoped reference, and the business resolves it server-side when the buyer selects it. |
| handler_id |
string |
Required |
The unique identifier for the handler instance that produced this instrument. This corresponds to the 'id' field in the Payment Handler definition. |
| type |
string |
Required |
The broad category of the instrument (e.g., 'card', 'tokenized_card'). Specific schemas will constrain this to a constant value. |
| billing_address |
Postal Address |
Optional |
The billing address associated with this payment method. |
| credential |
Payment Credential |
Optional |
The base definition for any payment credential. Handlers define specific credential types. |
| display |
object |
Optional |
Display information for this payment instrument. Each payment instrument schema defines its specific display properties, as outlined by the payment handler. |
Payment Schedule
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Identifier for this payment schedule, unique within its payment term. Businesses SHOULD keep it stable across responses while the schedule remains the same payment. |
| type |
string |
Required |
Timing class, drawn from an open vocabulary. immediate is the only value with defined meaning: the payment is due when the checkout is completed. Any other value means the payment is not due at completion, and description states when it is due. Whether a due payment is authorized, captured, or settled at that moment is payment-handler behavior and outside this extension. Businesses MAY use additional values (e.g. deferred, on_shipment); Platforms MUST treat unrecognized values as not due at completion. |
| description |
Description |
Required |
Complete buyer-facing statement of when and how this payment is due. Businesses MUST make this field sufficient on its own: a Platform that recognizes no type value and reads no other field MUST be able to present this schedule correctly. Platforms MAY use type and due_at for enhanced presentation, but MUST NOT present derived timing that contradicts this field. |
| due_at |
string |
Optional |
Absolute RFC 3339 date-time when this payment is due, when the Business can determine one at checkout. Supplementary to description, never a replacement for it. Omitted when the due date depends on a future event (e.g. 'due on delivery'); the timing is then stated in description alone. |
| amount |
Amount |
Required |
The amount charged when this payment is taken, inclusive of tax and every other charge, in the Checkout currency's minor units (ISO 4217). A schedule states an amount rather than a totals breakdown: the purchase is priced once at the Checkout, and a schedule moves part or all of that price. Where the selected term changes what the purchase costs, that difference appears in checkout.totals, not here. |
Payment Term
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Unique identifier for this payment term within the checkout. Referenced by payment.selected_term_id. |
| title |
string |
Required |
Short label that distinguishes this term from its siblings (e.g. 'Pay now', 'Pay in 4', 'Deposit + balance at check-in'). |
| description |
Description |
Optional |
Supplementary context for the title (e.g. 'Save 5% by paying today'). Directly renderable; MUST NOT repeat the title. |
| schedules |
Array[Payment Schedule] |
Required |
Payment schedules that settle this checkout under this term, in the order they come due. |
Policy
| Name |
Type |
Requirement |
Description |
| type |
Reverse Domain Name |
Required |
Policy type discriminator. Open reverse-DNS vocabulary. Well-known values: dev.ucp.shopping.policy.return (return terms), dev.ucp.shopping.policy.warranty (warranty terms). Businesses MAY define custom types in their own domain (e.g., com.example.policy.price_match). Platforms MUST tolerate unknown values. |
| description |
Description |
Required |
Human-readable policy summary in one or more formats (plain, markdown, html). Required on every policy so a platform can present it without understanding any type-specific fields. This is not the buyer-facing disclosure — display is compelled by a messages[] warning (see the Policies section). |
| applies_to |
Array[string] |
Optional |
RFC 9535 JSONPath expressions identifying the nodes this policy applies to, relative to the embedding response root (e.g., $.line_items[0] in cart/checkout, $.products[2] in catalog). Each target covers the node it names and everything nested under it, so a target on a product also covers its variants. A singular query (RFC 9535 Section 2.3.5.1; name and index selectors only) names a single node; filters, wildcards, and slices match a set. When omitted, the policy applies to the entire response. When policies of the same type contest a node, the narrowest target wins and overrides the rest. See the Policies section for how specificity resolves. |
| url |
string |
Optional |
Optional link to the full policy document. |
Postal Address
| Name |
Type |
Requirement |
Description |
| extended_address |
string |
Optional |
An address extension such as an apartment number, C/O or alternative name. |
| street_address |
string |
Optional |
The street address. |
| address_locality |
string |
Optional |
The locality in which the street address is, and which is in the region. For example, Mountain View. |
| address_region |
string |
Optional |
The region in which the locality is, and which is in the country. Required for applicable countries (i.e. state in US, province in CA). For example, California or another appropriate first-level Administrative division. |
| address_country |
string |
Optional |
The country. Recommended to be in 2-letter ISO 3166-1 alpha-2 format, for example "US". For backward compatibility, a 3-letter ISO 3166-1 alpha-3 country code such as "SGP" or a full country name such as "Singapore" can also be used. |
| postal_code |
string |
Optional |
The postal code. For example, 94043. |
| first_name |
string |
Optional |
Optional. First name of the contact associated with the address. |
| last_name |
string |
Optional |
Optional. Last name of the contact associated with the address. |
| phone_number |
string |
Optional |
Optional. Phone number of the contact associated with the address. |
Price
| Name |
Type |
Requirement |
Description |
| amount |
Amount |
Required |
Amount in ISO 4217 minor units. Use 0 for free items. |
| currency |
string |
Required |
ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP'). |
Price Filter
| Name |
Type |
Requirement |
Description |
| min |
Amount |
Optional |
Minimum price in ISO 4217 minor units. |
| max |
Amount |
Optional |
Maximum price in ISO 4217 minor units. |
Price Range
| Name |
Type |
Requirement |
Description |
| min |
Price |
Required |
Minimum price in the range. |
| max |
Price |
Required |
Maximum price in the range. |
Quantity Unit
| Name |
Type |
Requirement |
Description |
| unit |
string |
Required |
Stable machine identifier. The Business SHOULD use the exact UN/CEFACT Rec20 Common Code when one accurately identifies the unit. Otherwise, the Business MAY use a custom unit identifier and MUST use it consistently for the same unit. The Platform MUST treat an unrecognized identifier as opaque. |
| scale |
integer |
Optional |
One step equals 10^-scale of unit. When unit is C62, scale, if present, MUST be 0. The maximum of 15 is derived from the interoperable integer range: at scale 16 a single whole unit (10^16 steps) is no longer representable, so larger scales cannot denominate one unit of their own basis. Businesses needing finer granularity use a smaller unit. |
| display_text |
string |
Required |
Required printable unit label provided by the Business. The Platform MUST use it when it does not recognize unit; for a recognized UN/CEFACT Rec 20 Common Code, the Platform MAY substitute its own localized label. It does not participate in unit identity or mismatch comparison. |
| increment |
integer |
Optional |
Ordering granularity, denominated in steps: the Business sells this item in integer multiples of increment steps. Its effective value is the provided value or 1. Advisory merchandising policy, not a representational bound: Platform-authored quantities SHOULD be integer multiples of the effective increment; the Business MAY accept, revise, or reject an off-increment request with a recoverable business outcome and MUST NOT silently reinterpret it. Business-authored quantities (checkout revisions, fulfillment events, adjustments) are bounded only by scale. |
Request Constraints
| Name |
Type |
Requirement |
Description |
| path |
string |
Optional |
A complete RFC 9535 JSONPath query evaluated against the next logical UCP request to the same resource. |
| required |
Array[string] |
Optional |
Property names required by the constrained object. Must be non-empty: an empty array applies no constraint. |
| properties |
object |
Optional |
Constraints keyed by property name. Must be non-empty: an empty object applies no constraint. |
| anyOf |
Array[Constraint Expression] |
Optional |
Alternative Object Constraints. The constrained object must satisfy at least one. A branch must be non-empty: an empty branch is satisfied by every object and neutralizes the alternation. |
Reverse Domain Name
Reverse-domain identifier used for collision-safe namespacing of capabilities, services, handlers, eligibility claims, and extension-contributed keys. Must contain at least two dot-separated segments (e.g., 'dev.ucp.shopping.checkout', 'com.example.loyalty_gold'). Segments after the first are domain- or identifier-derived: they may contain interior hyphens, may start with a digit, and may contain underscores (e.g., 'com.example-shop.checkout', 'com.2example.cart', 'dev.ucp.common.identity_linking'), but must not start or end with a hyphen. The first segment (the reversed top-level domain) is letters and digits, and may contain interior hyphens to support internationalized (punycode) top-level domains such as 'xn--p1ai'.
Pattern: ^[a-z](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9_-]*[a-z0-9_])?)+$
Signals
| Name |
Type |
Requirement |
Description |
| dev.ucp.buyer_ip |
string |
Optional |
Client's IP address (IPv4 or IPv6). |
| dev.ucp.user_agent |
string |
Optional |
Client's HTTP User-Agent header or equivalent. |
Signed Amount
Monetary amount in the currency's minor unit as defined by ISO 4217. Refer to the currency's exponent to determine minor-to-major ratio (e.g., 2 for USD, 0 for JPY, 3 for KWD). May be negative — the sign is intrinsic to the value (e.g., discounts are negative, charges are positive).
Time Interval
| Name |
Type |
Requirement |
Description |
| opens |
string |
Optional; omitted in requests |
Opening time in 24-hour HH:MM format. |
| closes |
string |
Optional; omitted in requests |
Closing time in 24-hour HH:MM format. |
Token Credential
| Name |
Type |
Requirement |
Description |
| type |
string |
Required |
The credential type discriminator. Specific schemas will constrain this to a constant value. |
| type |
string |
Required |
The specific type of token produced by the handler (e.g., 'stripe_token'). |
| token |
string |
Required |
The token value. |
Total
| Name |
Type |
Requirement |
Description |
| type |
string |
Required; omitted in requests |
Cost category. Well-known values: subtotal, items_discount, discount, fulfillment, tax, fee, total. Businesses MAY use additional values. |
| display_text |
string |
Optional; omitted in requests |
Text to display against the amount. Should reflect appropriate method (e.g., 'Shipping', 'Delivery'). |
| amount |
Signed Amount |
Required; omitted in requests |
Monetary amount in the currency's minor unit as defined by ISO 4217. Refer to the currency's exponent to determine minor-to-major ratio (e.g., 2 for USD, 0 for JPY, 3 for KWD). May be negative — the sign is intrinsic to the value (e.g., discounts are negative, charges are positive). |
Totals
Pricing breakdown provided by the business. MUST contain exactly one subtotal and one total entry. Detail types (tax, fee, discount, fulfillment) may appear multiple times for itemization. Platforms MUST render all entries in order using display_text and amount.
Unit
| Name |
Type |
Requirement |
Description |
| unit |
string |
Required |
Stable machine identifier. The Business SHOULD use the exact UN/CEFACT Rec20 Common Code when one accurately identifies the unit. Otherwise, the Business MAY use a custom unit identifier and MUST use it consistently for the same unit. The Platform MUST treat an unrecognized identifier as opaque. |
| scale |
integer |
Optional |
One step equals 10^-scale of unit. When unit is C62, scale, if present, MUST be 0. The maximum of 15 is derived from the interoperable integer range: at scale 16 a single whole unit (10^16 steps) is no longer representable, so larger scales cannot denominate one unit of their own basis. Businesses needing finer granularity use a smaller unit. |
| display_text |
string |
Required |
Required printable unit label provided by the Business. The Platform MUST use it when it does not recognize unit; for a recognized UN/CEFACT Rec 20 Common Code, the Platform MAY substitute its own localized label. It does not participate in unit identity or mismatch comparison. |
Warning Code
Warning code identifying the type of warning. Standard codes are defined in capability specifications (see examples) and have standardized semantics; freeform codes are permitted.
Adjustment
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Adjustment event identifier. |
| type |
string |
Required |
Type of adjustment (open string). Typically money-related like: refund, return, credit, price_adjustment, dispute, cancellation. Can be any value that makes sense for the merchant's business. |
| occurred_at |
string |
Required |
RFC 3339 timestamp when this adjustment occurred. |
| status |
string |
Required |
Adjustment status. Enum: pending, completed, failed |
| line_items |
Array[object] |
Optional |
Which line items and quantities are affected (optional). |
| totals |
Array[Total] |
Optional |
Adjustment totals breakdown. Signed values - negative for money returned to buyer (refunds, credits), positive for additional charges (exchanges). |
| description |
string |
Optional |
Human-readable reason or description (e.g., 'Defective item', 'Customer requested'). |
Attribution
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows.
Availability
| Name |
Type |
Requirement |
Description |
| available |
boolean |
Optional |
Whether this can be obtained. See status for fulfillment details. |
| status |
string |
Optional |
Qualifies available with fulfillment state. Well-known values: in_stock, backorder, preorder, out_of_stock, discontinued. |
Business Fulfillment Config
| Name |
Type |
Requirement |
Description |
| multi_destination |
Array[object] |
Optional |
Method types that permit multiple destinations within one cart (e.g. split shipping across addresses). Listing a method permits it; an omitted method does not. Open — businesses MAY list any method type. |
| method_combinations |
Array[array] |
Optional |
Method-type combinations the business permits within one cart. Each inner array is a permitted set of method type values (e.g. shipping + pickup). |
Buyer
| Name |
Type |
Requirement |
Description |
| first_name |
string |
Optional |
First name of the buyer. |
| last_name |
string |
Optional |
Last name of the buyer. |
| email |
string |
Optional |
Email of the buyer. |
| phone_number |
string |
Optional |
E.164 standard. |
Category
| Name |
Type |
Requirement |
Description |
| value |
string |
Required |
Category value or path (e.g., 'Apparel > Shirts', '1604'). |
| taxonomy |
string |
Optional |
Source taxonomy. Well-known values: google_product_category, shopify, merchant. |
Detail Option Value
| Name |
Type |
Requirement |
Description |
| available |
boolean |
Optional |
Whether a variant matching this value and the current option selections is purchasable. |
| exists |
boolean |
Optional |
Whether a variant matching this value and the current option selections exists in the catalog. |
Expectation
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Expectation identifier. |
| line_items |
Array[object] |
Required |
Which line items and quantities are in this expectation. |
| method_type |
string |
Required |
Delivery method type. Well-known values: shipping, pickup, digital; additional values MAY be used. |
| destination |
Postal Address |
Required |
Delivery destination address. |
| description |
string |
Optional |
Human-readable delivery description (e.g., 'Arrives in 5-8 business days'). |
| fulfillable_on |
string |
Optional |
When this expectation can be fulfilled: 'now' or ISO 8601 timestamp for future date (backorder, pre-order). |
Fulfillment
Fulfillment Available Method
| Name |
Type |
Requirement |
Description |
| type |
string |
Required; omitted in requests |
Fulfillment method type this availability applies to. Well-known values: shipping, pickup; businesses MAY use additional values. |
| line_item_ids |
Array[string] |
Required; omitted in requests |
Line items available for this fulfillment method. |
| fulfillable_on |
['string', 'null'] |
Optional; omitted in requests |
'now' for immediate availability, or ISO 8601 date for future (preorders, transfers). |
| description |
string |
Optional; omitted in requests |
Human-readable availability info (e.g., 'Available for pickup at Downtown Store today'). |
Fulfillment Destination
| Name |
Type |
Requirement |
Description |
| type |
string |
Required; optional in requests |
Destination contract discriminator. Required in Business responses and optional in Platform requests. Well-known values: shipping_address, business_location. The enclosing method contract defines request defaults and which fields the Platform may write; negotiated extensions define additional values. |
| id |
string |
Required; optional in requests |
Fulfillment destination identifier. |
Fulfillment Destination Filter
| Name |
Type |
Requirement |
Description |
| address_country |
string |
Optional |
The country, as a 2-letter ISO 3166-1 alpha-2 code (e.g. "US"). A 3-letter alpha-3 code or full country name MAY also be used. |
| address_region |
string |
Optional |
The first-level administrative region within the country (e.g. a state or province such as California). |
| postal_code |
string |
Optional |
The postal code (e.g. "94043"). |
| location |
string |
Optional |
A reference to the destination (e.g. store, pickup location, saved address). |
Fulfillment Event
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Fulfillment event identifier. |
| occurred_at |
string |
Required |
RFC 3339 timestamp when this fulfillment event occurred. |
| type |
string |
Required |
Fulfillment event type. Common values include: processing (preparing to ship), shipped (handed to carrier), in_transit (in delivery network), delivered (received by buyer), failed_attempt (delivery attempt failed), canceled (fulfillment canceled), undeliverable (cannot be delivered), returned_to_sender (returned to merchant). |
| line_items |
Array[object] |
Required |
Which line items and quantities are fulfilled in this event. |
| tracking_number |
string |
Optional |
Carrier tracking number (required if type != processing). |
| tracking_url |
string |
Optional |
URL to track this shipment (required if type != processing). |
| carrier |
string |
Optional |
Carrier name (e.g., 'FedEx', 'USPS'). |
| description |
string |
Optional |
Human-readable description of the shipment status or delivery information (e.g., 'Delivered to front door', 'Out for delivery'). |
Fulfillment Group
| Name |
Type |
Requirement |
Description |
| id |
string |
Required; omitted on create |
Group identifier for referencing merchant-generated groups in updates. |
| line_item_ids |
Array[string] |
Required; omitted in requests |
Line item IDs included in this group/package. |
| options |
Array[Fulfillment Option] |
Optional; omitted in requests |
Available fulfillment options for this group. |
| selected_option_id |
['string', 'null'] |
Optional |
ID of the selected fulfillment option for this group. |
Fulfillment Method
| Name |
Type |
Requirement |
Description |
| id |
string |
Required; omitted on create, optional on update |
Unique fulfillment method identifier. |
| type |
string |
Required; optional on update |
Fulfillment method type. Well-known values: shipping, pickup. Businesses MAY use additional values. |
| line_item_ids |
Array[string] |
Required; omitted on create |
Line item IDs fulfilled via this method. |
| destinations |
Array[Fulfillment Destination] |
Optional; omitted in requests |
Available destinations for this method. In Business responses, each destination carries a type and id. |
| selected_destination_id |
['string', 'null'] |
Optional |
ID of the selected destination. Accepts any stable, Business-scoped ID the Business recognizes for this method, including Location IDs not yet enumerated in destinations. |
| groups |
Array[Fulfillment Group] |
Optional |
Fulfillment groups for selecting options. Agent sets selected_option_id on groups to choose shipping method. |
Fulfillment Option
| Name |
Type |
Requirement |
Description |
| id |
string |
Required; omitted in requests |
Unique identifier for this fulfillment option. |
| title |
string |
Required; omitted in requests |
Short label that distinguishes this option from its siblings (e.g. 'Standard', 'Express Shipping', 'Curbside Pickup'). |
| description |
Description |
Optional; omitted in requests |
Supplementary context for the title (e.g. 'Arrives in 4 business days', 'Arrives Dec 12-15 via FedEx'). Directly renderable; MUST NOT repeat the title. |
| carrier |
string |
Optional; omitted in requests |
Carrier name (for shipping). |
| earliest_fulfillment_time |
string |
Optional; omitted in requests |
Earliest fulfillment date. |
| latest_fulfillment_time |
string |
Optional; omitted in requests |
Latest fulfillment date. |
| totals |
Array[Total] |
Required; omitted in requests |
Fulfillment option totals breakdown. |
Fulfillment Option Base
| Name |
Type |
Requirement |
Description |
| id |
string |
Required; omitted in requests |
Unique identifier for this fulfillment option. |
| title |
string |
Required; omitted in requests |
Short label that distinguishes this option from its siblings (e.g. 'Standard', 'Express Shipping', 'Curbside Pickup'). |
| description |
Description |
Optional; omitted in requests |
Supplementary context for the title (e.g. 'Arrives in 4 business days', 'Arrives Dec 12-15 via FedEx'). Directly renderable; MUST NOT repeat the title. |
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
The identifier from the lookup request that resolved to this variant. |
| match |
string |
Optional |
How the request identifier resolved to this variant. Well-known values: exact (input directly identifies this variant, e.g., variant ID, SKU), featured (server selected this variant as representative, e.g., product ID resolved to best match). Businesses MAY implement and provide additional resolution strategies. |
Item
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
The product identifier, often the SKU, required to resolve the product details associated with this line item. Should be recognized by both the Platform, and the Business. |
| title |
string |
Required; omitted in requests |
Product title. |
| price |
Amount |
Required; omitted in requests |
Unit price in ISO 4217 minor units. Price is the amount per one whole quantity_unit.unit (for example, per lb or per hour); when quantity_unit is absent, it is per each. |
| quantity_unit |
Quantity Unit |
Optional |
Sale basis this item's quantity is denominated in. On an authoritative Business response, absence encodes the default each machine identity (C62, 0); the Business MUST include this descriptor for every non-each response. On Platform requests, omission makes no assertion: the Business interprets quantity using the item's authoritative sale basis. If the Platform includes this descriptor, it asserts the unit-descriptor machine identity. The Business MUST compare that machine identity (unit, effective scale), ignore display_text and increment, and resolve a mismatch by conversion surfaced as a visible line revision with a warning, or by rejection with a recoverable business outcome; silent reinterpretation is forbidden. An explicit C62 descriptor at effective scale 0 matches an authoritative basis represented by an absent descriptor. |
| unit_price |
Unit Price |
Optional; omitted in requests |
Pricing basis for this item. On an authoritative Business response, the Business MUST include unit_price on every line whose pricing basis differs from its sale basis (for example, priced per pound but sold per each); presence on a line marks the rate as transactional rather than display-only. When the pricing basis is the sale basis, item.price fully denominates the charge and this field MAY be omitted. |
| image_url |
string |
Optional; omitted in requests |
Product image URI. |
Line Item
| Name |
Type |
Requirement |
Description |
| id |
string |
Required; omitted on create, optional on update |
|
| item |
Item |
Required |
|
| quantity |
integer |
Required |
Always an integer step count. On Platform requests, steps use the item's Business-authoritative sale basis; omitting item.quantity_unit makes no assertion and does not imply each. On Business responses, item.quantity_unit describes the basis; if absent, it encodes the each machine identity (C62, 0) and quantity counts whole items. |
| totals |
Array[Total] |
Required; omitted in requests |
Line item totals breakdown. |
| parent_id |
string |
Optional; omitted on create |
Parent line item identifier for any nested structures. |
Business Location Destination
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Stable, opaque, Business-scoped Location identifier. |
| name |
string |
Required; omitted in requests |
Buyer-facing, Business-owned display name. |
| address |
Postal Address |
Optional; omitted in requests |
Physical address of the location. |
| type |
string |
Required; omitted in requests |
Constant = business_location. Destination type discriminator. Response-only. |
Option Value
| Name |
Type |
Requirement |
Description |
| id |
string |
Optional |
Optional server-assigned identifier for this option value. When present in a selected_option, the server SHOULD use it for matching instead of label. |
| label |
string |
Required |
Display text for this option value (e.g., 'Small', 'Blue'). |
Order Confirmation
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Unique order identifier. |
| label |
string |
Optional |
Human-readable label for identifying the order. MUST only be provided by the business. |
| permalink_url |
string |
Required |
Permalink to access the order on merchant site. |
Order Line Item
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Line item identifier. |
| item |
Item |
Required |
Purchased item data, including identity, price, and sale basis. |
| quantity |
object |
Required |
Tracks the line item's original, current active, and fulfilled quantities. All three values use the same inherited item.quantity_unit. When item.quantity_unit is absent on an authoritative order response, each step is one whole item (each) under the shared default. |
| totals |
Array[Total] |
Required |
Line item totals breakdown. |
| status |
string |
Required |
Derived status: removed if quantity.total == 0, fulfilled if quantity.total > 0 and quantity.fulfilled == quantity.total, partial if quantity.total > 0 and quantity.fulfilled > 0, otherwise processing. Enum: processing, partial, fulfilled, removed |
| parent_id |
string |
Optional |
Parent line item identifier for any nested structures. |
| Name |
Type |
Requirement |
Description |
| supports_multi_group |
boolean |
Optional |
Enables multiple groups per method. |
Product
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Global ID (GID) uniquely identifying this product. |
| handle |
string |
Optional |
URL-safe slug for SEO-friendly URLs (e.g., 'blue-runner-pro'). Use id for stable API references. |
| title |
string |
Required |
Product title. |
| description |
Description |
Required |
Product description in one or more formats. |
| url |
string |
Optional |
Canonical product page URL. |
| categories |
Array[Category] |
Optional |
Product categories with optional taxonomy identifiers. |
| price_range |
Price Range |
Required |
Price range across all variants. |
| list_price_range |
Price Range |
Optional |
List price range before discounts (for strikethrough display). |
| media |
Array[Media] |
Optional |
Product media (images, videos, 3D models). First item is the featured media for listings. |
| options |
Array[Product Option] |
Optional |
Product options (Size, Color, etc.). |
| variants |
Array[Variant] |
Required |
Purchasable variants of this product. First item is the featured variant for listings. |
| rating |
Rating |
Optional |
Aggregate product rating. |
| tags |
Array[string] |
Optional |
Product tags for categorization and search. |
| metadata |
object |
Optional |
Business-defined custom data extending the standard product model. |
Product Option
| Name |
Type |
Requirement |
Description |
| name |
string |
Required |
Option name (e.g., 'Size', 'Color'). |
| values |
Array[Option Value] |
Required |
Available values for this option. |
Rating
| Name |
Type |
Requirement |
Description |
| value |
number |
Required |
Average rating value. |
| scale_min |
number |
Optional |
Minimum value on the rating scale (e.g., 1 for 1-5 stars). |
| scale_max |
number |
Required |
Maximum value on the rating scale (e.g., 5 for 5-star). |
| count |
integer |
Optional |
Number of reviews contributing to the rating. |
Search Filters
| Name |
Type |
Requirement |
Description |
| categories |
Array[string] |
Optional |
Filter by product categories (OR logic — matches products in any listed categories). Values match against the value field in product category entries. Valid values can be discovered from the categories field in search results, merchant documentation, or standard taxonomies that businesses may align with. |
| price |
Price Filter |
Optional |
Price range filter denominated in context.currency. When context.currency matches the presentment currency, businesses apply the filter directly. When it differs, businesses SHOULD convert filter values to the presentment currency before applying; if conversion is not supported, businesses MAY ignore the filter and SHOULD indicate this via a message. When context.currency is absent, filter denomination is ambiguous and businesses MAY ignore it. |
Selected Option
| Name |
Type |
Requirement |
Description |
| name |
string |
Required |
Option name (e.g., 'Size'). |
| id |
string |
Optional |
Optional option value identifier from option_value.id. When present, the server SHOULD use it for matching; name and label remain required for display. |
| label |
string |
Required |
Selected option label (e.g., 'Large'). |
Shipping Destination
| Name |
Type |
Requirement |
Description |
| extended_address |
string |
Optional |
An address extension such as an apartment number, C/O or alternative name. |
| street_address |
string |
Optional |
The street address. |
| address_locality |
string |
Optional |
The locality in which the street address is, and which is in the region. For example, Mountain View. |
| address_region |
string |
Optional |
The region in which the locality is, and which is in the country. Required for applicable countries (i.e. state in US, province in CA). For example, California or another appropriate first-level Administrative division. |
| address_country |
string |
Optional |
The country. Recommended to be in 2-letter ISO 3166-1 alpha-2 format, for example "US". For backward compatibility, a 3-letter ISO 3166-1 alpha-3 country code such as "SGP" or a full country name such as "Singapore" can also be used. |
| postal_code |
string |
Optional |
The postal code. For example, 94043. |
| first_name |
string |
Optional |
Optional. First name of the contact associated with the address. |
| last_name |
string |
Optional |
Optional. Last name of the contact associated with the address. |
| phone_number |
string |
Optional |
Optional. Phone number of the contact associated with the address. |
| id |
string |
Required; optional in requests |
ID specific to this shipping destination. |
| type |
string |
Required; optional in requests |
Constant = shipping_address. Destination type discriminator. |
Unit Price
| Name |
Type |
Requirement |
Description |
| amount |
Amount |
Required |
Unit price in ISO 4217 minor units. After satisfying the same-unit invariant, the Business MUST compute the comparator as (price.amount / (measure.value × 10^-measure.scale)) × (reference.value × 10^-reference.scale) and round it once to ISO 4217 minor units according to its pricing rules. The returned unit_price.amount is authoritative; the Platform MUST NOT recompute or substitute its own result. |
| currency |
string |
Required |
ISO 4217 currency code. |
| measure |
any |
Required |
Product quantity in packaging/content (for example, a 750 mL bottle), distinct from quantity_unit, which defines the sale basis. Its integer value MUST be at least 1. |
| reference |
any |
Required |
Denominator for unit price display (for example, per 100 mL or per 1 kg). Its integer value MUST be at least 1. |
Variant
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Global ID (GID) uniquely identifying this variant. Used as item.id in checkout. |
| sku |
string |
Optional |
Business-assigned identifier for inventory and fulfillment. |
| barcodes |
Array[object] |
Optional |
Industry-standard product identifiers for cross-reference and correlation. |
| handle |
string |
Optional |
URL-safe variant handle/slug. |
| title |
string |
Required |
Variant display title (e.g., 'Blue / Large'). |
| description |
Description |
Required |
Variant description in one or more formats. |
| url |
string |
Optional |
Canonical variant page URL. |
| categories |
Array[Category] |
Optional |
Variant categories with optional taxonomy identifiers. |
| price |
Price |
Required |
Current selling price. Price is the amount per one whole quantity_unit.unit (for example, per lb or per hour); when quantity_unit is absent, it is per each. Line total is price × quantity × 10^-scale, computed and rounded once by the Business; totals remain authoritative. |
| quantity_unit |
Quantity Unit |
Optional |
Sale basis this variant's quantity is denominated in. The default sale basis is each, whose machine identity is (C62, 0); C62 is the UN/CEFACT Rec20 code for one/each. An absent catalog descriptor encodes that default. An increment advertises the ordering granularity in steps (for example, scale 2 with increment 25 sells in 0.25-unit multiples). |
| list_price |
Price |
Optional |
List price before discounts (for strikethrough display). |
| unit_price |
Unit Price |
Optional |
Price per standard unit of measurement, for shelf-style comparison display. MAY be omitted when unit pricing does not apply. |
| availability |
Availability |
Optional |
Variant availability for purchase. |
| options |
Array[Selected Option] |
Optional |
Option values that define this variant (e.g., Color: Blue, Size: Large). |
| media |
Array[Media] |
Optional |
Variant media (images, videos, 3D models). First item is the featured media for listings. |
| rating |
Rating |
Optional |
Variant rating. |
| tags |
Array[string] |
Optional |
Variant tags for categorization and search. |
| metadata |
object |
Optional |
Business-defined custom data extending the standard variant model. |
| seller |
object |
Optional |
Optional seller context for this variant. |
Selected Payment Instrument
A payment instrument with selection state.
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
A unique identifier for this instrument instance. Typically assigned by the platform for instruments it collects. For a business-owned saved instrument returned on an identity-linked response, this identifier is assigned by the business; the platform MUST treat it as an opaque, business-scoped reference, and the business resolves it server-side when the buyer selects it. |
| handler_id |
string |
Required |
The unique identifier for the handler instance that produced this instrument. This corresponds to the 'id' field in the Payment Handler definition. |
| type |
string |
Required |
The broad category of the instrument (e.g., 'card', 'tokenized_card'). Specific schemas will constrain this to a constant value. |
| billing_address |
object |
Optional |
The billing address associated with this payment method. |
| credential |
object |
Optional |
The base definition for any payment credential. Handlers define specific credential types. |
| display |
object |
Optional |
Display information for this payment instrument. Each payment instrument schema defines its specific display properties, as outlined by the payment handler. |
| selected |
boolean |
Optional |
Whether this instrument is selected by the user. |
Pagination parameters for requests.
| Name |
Type |
Requirement |
Description |
| cursor |
string |
Optional |
Opaque cursor from previous response. |
| limit |
integer |
Optional |
Requested page size, not a guaranteed result count. When omitted, the Business MUST apply a default page size. A default of 10 is RECOMMENDED, but the Business MAY choose another value. The Business MAY return fewer results than the requested or default page size, including when enforcing its maximum page size. A Platform MUST NOT assume that the response count equals either value. |
Pagination information in responses.
| Name |
Type |
Requirement |
Description |
| cursor |
string |
Optional |
Cursor to fetch the next page of results. MUST be present when has_next_page is true. |
| has_next_page |
boolean |
Required |
Whether more results are available. |
| total_count |
integer |
Optional |
Total number of matching items, if available. |
Error Code
Error code identifying the type of error. Standard errors are defined in capability specifications (see examples) and have standardized semantics; freeform codes are permitted.
Warning Code
Warning code identifying the type of warning. Standard codes are defined in capability specifications (see examples) and have standardized semantics; freeform codes are permitted.
Info Code
Info code identifying the type of informational message. Standard codes are defined in capability specifications (see examples) and have standardized semantics; freeform codes are permitted.
Extension Schemas
Loyalty Extension
Reward Amount
Non-negative integer amount denominated in the minor unit of the associated reward currency. The associated reward currency's decimal_places defines the minor-to-major ratio and defaults to 0 when omitted.
Earning Breakdown
Breakdown rule of the reward earnings
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Unique rewards breakdown rule identifier. |
| amount |
integer |
Required |
Rewards earned from this rule. |
| description |
string |
Required |
A display-ready, human-readable rationale for the specific rewards (e.g. 2x on footwear). |
| benefit_id |
string |
Optional |
Optional id of the membership_tier_benefit that produced this rewards rule. Resolves against membership_tier_benefit.id within the same parent loyalty membership. |
Earning Forecast
Preview of rewards to be earned from the current transaction.
| Name |
Type |
Requirement |
Description |
| amount |
integer |
Required |
Total rewards to be earned if the transaction completes. |
| breakdown |
Array[object] |
Optional |
List of breakdown of earning contributing to the total. |
Reward Currency
The currency of the loyalty reward.
| Name |
Type |
Requirement |
Description |
| name |
string |
Required |
Human-readable name of the currency (e.g. 'LoyaltyStars'). |
| code |
string |
Required |
Business-specific representation of the currency (e.g. 'LST'). |
| decimal_places |
integer |
Optional |
The position of a digit to the right of a decimal point. Applies to all amount related fields for rewards. |
Membership Reward
Quantifiable reward type and optional earning forecast for the current transaction.
| Name |
Type |
Requirement |
Description |
| currency |
object |
Required |
A unit of value that customers can accumulate through various commercial activities. |
| earning_forecast |
object |
Optional |
Preview of rewards to be earned from the current transaction. |
Membership Tier Benefit
Benefits associated with a membership tier.
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Unique identifier for the tier benefit. |
| description |
string |
Required |
A display-ready, human-readable explanation of this benefit (e.g. 'Early access to sales'). |
Membership Tier
Specific achievement rank or status milestone that unlocks escalating value as a member progresses through activity or spend.
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Unique identifier for the membership tier. |
| name |
string |
Required |
The human-readable name of the tier (e.g., 'Platinum'). |
| benefits |
Array[object] |
Optional |
List of benefits associated with this tier. |
Loyalty Membership
Loyalty membership the business has accepted for the eligibility claim represented by the parent map key. Programs that can be joined independently MUST be modeled as separate sibling entries under the loyalty map, distinguished by reverse-domain naming (e.g., 'com.example.rewards' and 'com.example.rewards.card').
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Unique loyalty membership identifier. |
| name |
string |
Required |
Business specific name of the loyalty membership/program. |
| display_id |
string |
Optional |
A masked or partial version of the membership id for user recognition (e.g., '****5678'). MUST NOT be set if the membership has not been verified. |
| tiers |
Array[object] |
Optional |
Active or display-safe tier context for this membership. Most programs are single-status (one entry); programs with parallel status dimensions (e.g., current and lifetime) populate one entry per active tier. Omitted when no tier context has been resolved. |
| rewards |
Array[object] |
Optional |
Reward types and earning forecasts associated with this membership. Each object encapsulates one type of reward. |
| provisional |
boolean |
Required |
True if this membership requires additional verification. |
Loyalty
Key-value map whose keys represent buyer/platform asserted eligibility claims and whose values represent associated membership information. All loyalty keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace.
Catalog Search with Loyalty
Catalog Search response extended with Loyalty capability.
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for catalog responses. |
| products |
Array[object] |
Required |
Products matching the search criteria. |
| pagination |
object |
Optional |
Pagination information in responses. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this catalog search response. |
| messages |
Array[object] |
Optional |
Errors, warnings, or informational messages about the search results. |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the products in these search results. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| loyalty |
object |
Optional |
Key-value map whose keys represent buyer/platform asserted eligibility claims and whose values represent associated membership information. All loyalty keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
Catalog Lookup with Loyalty
Catalog Lookup response extended with Loyalty capability.
| Name |
Type |
Requirement |
Description |
|
|
|
|
Cart with Loyalty
Cart extended with Loyalty capability.
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for cart responses. No payment handlers needed pre-checkout. |
| id |
string |
Required |
Unique cart identifier. |
| line_items |
Array[object] |
Required |
Cart line items. Same structure as checkout. Full replacement on update. |
| context |
object |
Optional |
Buyer signals for localization (country, region, postal_code). Merchant uses for pricing, availability, currency. Falls back to geo-IP if omitted. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| buyer |
object |
Optional |
Optional buyer information for personalized estimates. |
| currency |
string |
Required |
ISO 4217 currency code. Determined by merchant based on context or geo-IP. |
| totals |
Array[Total] |
Required |
Estimated cost breakdown. May be partial if shipping/tax not yet calculable. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this cart. |
| messages |
Array[object] |
Optional |
Validation messages, warnings, or informational notices. |
| links |
Array[object] |
Optional |
Optional merchant links (policies, FAQs). |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the items in this cart. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| continue_url |
string |
Optional |
URL for cart handoff and session recovery. Enables sharing and human-in-the-loop flows. |
| expires_at |
string |
Optional |
Cart expiry timestamp (RFC 3339). Optional. |
| loyalty |
object |
Optional |
Key-value map whose keys represent buyer/platform asserted eligibility claims and whose values represent associated membership information. All loyalty keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
Checkout with Loyalty
Checkout extended with Loyalty capability.
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for checkout responses. |
| id |
string |
Required |
Unique identifier of the checkout session. |
| line_items |
Array[object] |
Required |
List of line items being checked out. |
| buyer |
object |
Optional |
Representation of the buyer. |
| context |
object |
Optional |
Provisional buyer signals for relevance and localization—not authoritative data. Businesses SHOULD use these values when verified inputs (e.g., shipping address) are absent, and MAY ignore or down-rank them if inconsistent with higher-confidence signals (authenticated account, risk detection) or regulatory constraints (export controls). Eligibility and policy enforcement MUST occur at checkout time using binding transaction data. Context SHOULD be non-identifying and can be disclosed progressively—coarse signals early, finer resolution as the session progresses. Higher-resolution data (shipping address, billing address) supersedes context. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| status |
string |
Required |
Checkout state indicating the current phase and required processing. See Checkout Status lifecycle documentation for state transition details. Enum: incomplete, requires_escalation, ready_for_complete, complete_in_progress, completed, canceled |
| currency |
string |
Required |
ISO 4217 currency code reflecting the merchant's market determination. Derived from address, context, and geo IP—buyers provide signals, merchants determine currency. |
| totals |
Array[Total] |
Required |
Different cart totals. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this checkout. |
| messages |
Array[object] |
Optional |
List of messages with error and info about the checkout session state. |
| links |
Array[object] |
Required |
Links to be displayed by the platform (Privacy Policy, TOS). Mandatory for legal compliance. |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the items in this checkout. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| expires_at |
string |
Optional |
RFC 3339 expiry timestamp. Default TTL is 6 hours from creation if not sent. |
| continue_url |
string |
Optional |
URL for checkout handoff and session recovery. MUST be provided when status is requires_escalation. See specification for format and availability requirements. |
| payment |
object |
Optional |
Payment configuration containing handlers. |
| order |
object |
Optional |
Details about an order created for this checkout session. |
| loyalty |
object |
Optional |
Key-value map whose keys represent buyer/platform asserted eligibility claims and whose values represent associated membership information. All loyalty keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
Payment AP2 Mandate Extension
Merchant Authorization
JWS Detached Content signature (RFC 7515 Appendix F) over the checkout response body (excluding ap2 field). Format: <base64url-header>..<base64url-signature>. The header MUST contain 'alg' (ES256/ES384/ES512) and 'kid' claims. The signature covers both the header and JCS-canonicalized checkout payload.
Pattern: ^[A-Za-z0-9_-]+\.\.[A-Za-z0-9_-]+$
Checkout Mandate
SD-JWT+kb credential in ap2.checkout_mandate. Proving user authorization for the checkout. Contains the full checkout including ap2.merchant_authorization.
Pattern: ^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]*\.[A-Za-z0-9_-]+(~[A-Za-z0-9_-]+)*$
Ap2 With Merchant Authorization
AP2 extension data including merchant authorization.
| Name |
Type |
Requirement |
Description |
| merchant_authorization |
string |
Optional |
Merchant's signature proving checkout terms are authentic. |
Ap2 With Checkout Mandate
AP2 extension data including checkout mandate.
| Name |
Type |
Requirement |
Description |
| checkout_mandate |
string |
Optional |
SD-JWT+kb proving user authorized this checkout. |
Checkout with AP2 Mandate
Checkout extended with AP2 mandate support.
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for checkout responses. |
| id |
string |
Required |
Unique identifier of the checkout session. |
| line_items |
Array[object] |
Required |
List of line items being checked out. |
| buyer |
object |
Optional |
Representation of the buyer. |
| context |
object |
Optional |
Provisional buyer signals for relevance and localization—not authoritative data. Businesses SHOULD use these values when verified inputs (e.g., shipping address) are absent, and MAY ignore or down-rank them if inconsistent with higher-confidence signals (authenticated account, risk detection) or regulatory constraints (export controls). Eligibility and policy enforcement MUST occur at checkout time using binding transaction data. Context SHOULD be non-identifying and can be disclosed progressively—coarse signals early, finer resolution as the session progresses. Higher-resolution data (shipping address, billing address) supersedes context. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| status |
string |
Required |
Checkout state indicating the current phase and required processing. See Checkout Status lifecycle documentation for state transition details. Enum: incomplete, requires_escalation, ready_for_complete, complete_in_progress, completed, canceled |
| currency |
string |
Required |
ISO 4217 currency code reflecting the merchant's market determination. Derived from address, context, and geo IP—buyers provide signals, merchants determine currency. |
| totals |
Array[Total] |
Required |
Different cart totals. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this checkout. |
| messages |
Array[object] |
Optional |
List of messages with error and info about the checkout session state. |
| links |
Array[object] |
Required |
Links to be displayed by the platform (Privacy Policy, TOS). Mandatory for legal compliance. |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the items in this checkout. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| expires_at |
string |
Optional |
RFC 3339 expiry timestamp. Default TTL is 6 hours from creation if not sent. |
| continue_url |
string |
Optional |
URL for checkout handoff and session recovery. MUST be provided when status is requires_escalation. See specification for format and availability requirements. |
| payment |
object |
Optional |
Payment configuration containing handlers. |
| order |
object |
Optional |
Details about an order created for this checkout session. |
| ap2 |
any |
Optional |
|
AP2 Error Code
Error codes specific to AP2 mandate verification.
Enum: mandate_required, agent_missing_key, mandate_invalid_signature, mandate_expired, mandate_scope_mismatch, merchant_authorization_invalid, merchant_authorization_missing
Payment Authentication Extension
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for checkout responses. |
| id |
string |
Required |
Unique identifier of the checkout session. |
| line_items |
Array[object] |
Required |
List of line items being checked out. |
| buyer |
object |
Optional |
Representation of the buyer. |
| context |
object |
Optional |
Provisional buyer signals for relevance and localization—not authoritative data. Businesses SHOULD use these values when verified inputs (e.g., shipping address) are absent, and MAY ignore or down-rank them if inconsistent with higher-confidence signals (authenticated account, risk detection) or regulatory constraints (export controls). Eligibility and policy enforcement MUST occur at checkout time using binding transaction data. Context SHOULD be non-identifying and can be disclosed progressively—coarse signals early, finer resolution as the session progresses. Higher-resolution data (shipping address, billing address) supersedes context. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| status |
string |
Required |
Checkout state indicating the current phase and required processing. See Checkout Status lifecycle documentation for state transition details. Enum: incomplete, requires_escalation, ready_for_complete, complete_in_progress, completed, canceled |
| currency |
string |
Required |
ISO 4217 currency code reflecting the merchant's market determination. Derived from address, context, and geo IP—buyers provide signals, merchants determine currency. |
| totals |
Array[Total] |
Required |
Different cart totals. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this checkout. |
| messages |
Array[object] |
Optional |
List of messages with error and info about the checkout session state. |
| links |
Array[object] |
Required |
Links to be displayed by the platform (Privacy Policy, TOS). Mandatory for legal compliance. |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the items in this checkout. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| expires_at |
string |
Optional |
RFC 3339 expiry timestamp. Default TTL is 6 hours from creation if not sent. |
| continue_url |
string |
Optional |
URL for checkout handoff and session recovery. MUST be provided when status is requires_escalation. See specification for format and availability requirements. |
| payment |
object |
Optional |
Payment configuration containing handlers. |
| order |
object |
Optional |
Details about an order created for this checkout session. |
| actions |
object |
Optional |
|
Payment Split Payments Extension
Instrument Group
A constraint within an allowed combination that defines which instrument types can fill this group and how many are permitted.
| Name |
Type |
Requirement |
Description |
| types |
Array[string] |
Required |
Instrument types accepted by this group (OR logic). Any listed type qualifies. |
| min |
integer |
Optional |
Minimum number of instruments required from this group. Defaults to 0 (optional). |
| max |
integer |
Optional |
Maximum number of instruments allowed from this group. Defaults to 1. MUST be greater than or equal to min. |
Payment Instrument (Split Payments)
Payment instrument extended with an optional per-instrument amount for split payments.
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
A unique identifier for this instrument instance. Typically assigned by the platform for instruments it collects. For a business-owned saved instrument returned on an identity-linked response, this identifier is assigned by the business; the platform MUST treat it as an opaque, business-scoped reference, and the business resolves it server-side when the buyer selects it. |
| handler_id |
string |
Required |
The unique identifier for the handler instance that produced this instrument. This corresponds to the 'id' field in the Payment Handler definition. |
| type |
string |
Required |
The broad category of the instrument (e.g., 'card', 'tokenized_card'). Specific schemas will constrain this to a constant value. |
| billing_address |
object |
Optional |
The billing address associated with this payment method. |
| credential |
object |
Optional |
The base definition for any payment credential. Handlers define specific credential types. |
| display |
object |
Optional |
Display information for this payment instrument. Each payment instrument schema defines its specific display properties, as outlined by the payment handler. |
| amount |
integer |
Optional |
Contribution amount for this instrument expressed in ISO 4217 minor units of the containing capability object's currency. On request: the platform's requested contribution (omit for open-amount). On response: the actual amount authorized or charged (omitted when not finally processed). |
Checkout with Split Payments
Checkout extended with split payment instrument amounts.
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for checkout responses. |
| id |
string |
Required |
Unique identifier of the checkout session. |
| line_items |
Array[object] |
Required |
List of line items being checked out. |
| buyer |
object |
Optional |
Representation of the buyer. |
| context |
object |
Optional |
Provisional buyer signals for relevance and localization—not authoritative data. Businesses SHOULD use these values when verified inputs (e.g., shipping address) are absent, and MAY ignore or down-rank them if inconsistent with higher-confidence signals (authenticated account, risk detection) or regulatory constraints (export controls). Eligibility and policy enforcement MUST occur at checkout time using binding transaction data. Context SHOULD be non-identifying and can be disclosed progressively—coarse signals early, finer resolution as the session progresses. Higher-resolution data (shipping address, billing address) supersedes context. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| status |
string |
Required |
Checkout state indicating the current phase and required processing. See Checkout Status lifecycle documentation for state transition details. Enum: incomplete, requires_escalation, ready_for_complete, complete_in_progress, completed, canceled |
| currency |
string |
Required |
ISO 4217 currency code reflecting the merchant's market determination. Derived from address, context, and geo IP—buyers provide signals, merchants determine currency. |
| totals |
Array[Total] |
Required |
Different cart totals. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this checkout. |
| messages |
Array[object] |
Optional |
List of messages with error and info about the checkout session state. |
| links |
Array[object] |
Required |
Links to be displayed by the platform (Privacy Policy, TOS). Mandatory for legal compliance. |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the items in this checkout. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| expires_at |
string |
Optional |
RFC 3339 expiry timestamp. Default TTL is 6 hours from creation if not sent. |
| continue_url |
string |
Optional |
URL for checkout handoff and session recovery. MUST be provided when status is requires_escalation. See specification for format and availability requirements. |
| payment |
object |
Optional |
Payment configuration containing handlers. |
| order |
object |
Optional |
Details about an order created for this checkout session. |
| payment |
object |
Optional |
|
Payment Terms Extension
Payment Term
A way of paying for the checkout: one or more payment schedules that together cover its total.
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Unique identifier for this payment term within the checkout. Referenced by payment.selected_term_id. |
| title |
string |
Required |
Short label that distinguishes this term from its siblings (e.g. 'Pay now', 'Pay in 4', 'Deposit + balance at check-in'). |
| description |
object |
Optional |
Supplementary context for the title (e.g. 'Save 5% by paying today'). Directly renderable; MUST NOT repeat the title. |
| schedules |
Array[object] |
Required |
Payment schedules that settle this checkout under this term, in the order they come due. |
Payment with Terms
Payment object extended with selectable payment terms.
| Name |
Type |
Requirement |
Description |
| terms |
Array[object] |
Optional |
Payment terms the Buyer can choose from. An unselected term's amounts are indicative; the selected term's schedule amounts sum to the checkout total. |
| selected_term_id |
string |
Optional |
ID of the selected payment term. MUST match one terms[].id from the latest Checkout response. Present in a response whenever terms is, and absent when it is not: the Checkout total is the selected term's total, so a list of terms without a selection would show an amount that matches no stated term. Where the Buyer has made no choice, the Business selects a default. Omitted on create requests because term IDs are checkout-scoped and no terms exist yet, and on complete requests because the term is already agreed by then. Selecting a term is an Update Checkout mutation: the Business response is authoritative for all derived state. |
Order Payment with Accepted Term
Order payment details carrying the term the Buyer accepted at checkout.
| Name |
Type |
Requirement |
Description |
| accepted_term |
object |
Optional |
The payment term the Buyer accepted at checkout. Businesses MUST carry it forward so the Order states the amounts owed and when, and MUST ensure its schedule amounts sum to the Order total. The available terms are checkout state and are not projected. |
Checkout with Payment Terms
Checkout extended with selectable payment terms.
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for checkout responses. |
| id |
string |
Required |
Unique identifier of the checkout session. |
| line_items |
Array[object] |
Required |
List of line items being checked out. |
| buyer |
object |
Optional |
Representation of the buyer. |
| context |
object |
Optional |
Provisional buyer signals for relevance and localization—not authoritative data. Businesses SHOULD use these values when verified inputs (e.g., shipping address) are absent, and MAY ignore or down-rank them if inconsistent with higher-confidence signals (authenticated account, risk detection) or regulatory constraints (export controls). Eligibility and policy enforcement MUST occur at checkout time using binding transaction data. Context SHOULD be non-identifying and can be disclosed progressively—coarse signals early, finer resolution as the session progresses. Higher-resolution data (shipping address, billing address) supersedes context. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| status |
string |
Required |
Checkout state indicating the current phase and required processing. See Checkout Status lifecycle documentation for state transition details. Enum: incomplete, requires_escalation, ready_for_complete, complete_in_progress, completed, canceled |
| currency |
string |
Required |
ISO 4217 currency code reflecting the merchant's market determination. Derived from address, context, and geo IP—buyers provide signals, merchants determine currency. |
| totals |
Array[Total] |
Required |
Different cart totals. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this checkout. |
| messages |
Array[object] |
Optional |
List of messages with error and info about the checkout session state. |
| links |
Array[object] |
Required |
Links to be displayed by the platform (Privacy Policy, TOS). Mandatory for legal compliance. |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the items in this checkout. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| expires_at |
string |
Optional |
RFC 3339 expiry timestamp. Default TTL is 6 hours from creation if not sent. |
| continue_url |
string |
Optional |
URL for checkout handoff and session recovery. MUST be provided when status is requires_escalation. See specification for format and availability requirements. |
| payment |
object |
Optional |
Payment configuration containing handlers. |
| order |
object |
Optional |
Details about an order created for this checkout session. |
| payment |
object |
Optional |
Payment details with available and selected payment terms. |
Order with Accepted Payment Term
Order extended with the payment term accepted at checkout.
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for order responses. No payment handlers needed post-purchase. |
| id |
string |
Required |
Unique order identifier. |
| label |
string |
Optional |
Human-readable label for identifying the order. MUST only be provided by the business. |
| checkout_id |
string |
Required |
Associated checkout ID for reconciliation. |
| permalink_url |
string |
Required |
Permalink to access the order on merchant site. |
| line_items |
Array[object] |
Required |
Line items representing what was purchased — can change post-order via edits or exchanges. |
| fulfillment |
object |
Required |
Fulfillment data: buyer expectations and what actually happened. |
| adjustments |
Array[object] |
Optional |
Post-order events (refunds, returns, credits, disputes, cancellations, etc.) that exist independently of fulfillment. |
| currency |
string |
Required |
ISO 4217 currency code. MUST match the currency from the originating checkout session. |
| totals |
Array[Total] |
Required |
Different totals for the order. |
| policies |
Array[object] |
Optional |
Snapshot of the policies that applied to the items at checkout, captured on the order as a durable record. applies_to targets are relative to the response root. |
| messages |
Array[object] |
Optional |
Business outcome messages (errors, warnings, informational). Present when the business needs to communicate status or issues to the platform. |
| attribution |
object |
Optional |
Snapshot of the attribution associated with the originating checkout. Read-only on the order. |
| payment |
object |
Optional |
Payment details for the Order, including the accepted payment term. |
Buyer Consent Extension
Consent Purpose
A buyer's consent decision for a purpose (e.g., marketing, analytics). Carries the current binary state, its source (business default or platform-captured buyer decision), human-readable context, and optional refinements scoping the decision to specific channels, vendors, or programs.
| Name |
Type |
Requirement |
Description |
| granted |
boolean |
Required |
Whether consent has been granted for this purpose. The source field identifies who asserted this state (business default or platform-captured buyer preference). |
| source |
string |
Required |
Identifies the party that asserted the current granted value. business means the value reflects the business's default policy; platform means the value reflects an explicit buyer decision captured by the platform. Enum: business, platform |
| description |
string |
Required |
Human-readable description of what the buyer is consenting to (e.g., 'Promotional communications across all channels'). |
| links |
Array[object] |
Optional |
Optional links providing context (e.g., privacy policy, terms). |
| segments |
object |
Optional |
Optional refinements scoping this purpose to specific channels, vendors, or programs. Keys are reverse-DNS identifiers. UCP currently defines two well-known segment identifiers under dev.ucp.consent.marketing: dev.ucp.consent.marketing.email, dev.ucp.consent.marketing.sms. Other segments follow vendor or merchant reverse-DNS conventions. |
Consent Segment
A buyer's consent decision for a specific refinement of a parent purpose (e.g., email marketing under the marketing purpose). Overrides the parent's granted value for this scope. Segments do not nest further.
| Name |
Type |
Requirement |
Description |
| granted |
boolean |
Required |
Whether consent has been granted for this segment. Overrides the parent purpose's granted value for this specific scope. |
| source |
string |
Required |
Identifies the party that asserted the current granted value for this segment. business means the value reflects the business's default policy; platform means the value reflects an explicit buyer decision captured by the platform. Enum: business, platform |
| description |
string |
Required |
Human-readable description of what the buyer is consenting to within this segment (e.g., 'Promotional emails and exclusive offers'). |
| links |
Array[object] |
Optional |
Optional segment-specific links (e.g., channel terms or privacy disclosures). |
Consent
Per-purpose consent. Keys are reverse-DNS purpose identifiers. UCP defines four well-known purposes: dev.ucp.consent.marketing, dev.ucp.consent.analytics, dev.ucp.consent.preferences, dev.ucp.consent.sale_or_sharing. Vendors and merchants may define additional purposes under their own reverse-DNS namespace.
Buyer with Consent
Buyer object extended with per-purpose consent.
| Name |
Type |
Requirement |
Description |
| first_name |
string |
Optional |
First name of the buyer. |
| last_name |
string |
Optional |
Last name of the buyer. |
| email |
string |
Optional |
Email of the buyer. |
| phone_number |
string |
Optional |
E.164 standard. |
| consent |
object |
Optional |
Per-purpose consent decisions and business-advertised consent options. |
Cart with Buyer Consent
Cart extended with buyer consent.
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for cart responses. No payment handlers needed pre-checkout. |
| id |
string |
Required |
Unique cart identifier. |
| line_items |
Array[object] |
Required |
Cart line items. Same structure as checkout. Full replacement on update. |
| context |
object |
Optional |
Buyer signals for localization (country, region, postal_code). Merchant uses for pricing, availability, currency. Falls back to geo-IP if omitted. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| buyer |
object |
Optional |
Optional buyer information for personalized estimates. |
| currency |
string |
Required |
ISO 4217 currency code. Determined by merchant based on context or geo-IP. |
| totals |
Array[Total] |
Required |
Estimated cost breakdown. May be partial if shipping/tax not yet calculable. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this cart. |
| messages |
Array[object] |
Optional |
Validation messages, warnings, or informational notices. |
| links |
Array[object] |
Optional |
Optional merchant links (policies, FAQs). |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the items in this cart. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| continue_url |
string |
Optional |
URL for cart handoff and session recovery. Enables sharing and human-in-the-loop flows. |
| expires_at |
string |
Optional |
Cart expiry timestamp (RFC 3339). Optional. |
| buyer |
any |
Optional |
Buyer with consent tracking. |
Checkout with Buyer Consent
Checkout extended with buyer consent.
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for checkout responses. |
| id |
string |
Required |
Unique identifier of the checkout session. |
| line_items |
Array[object] |
Required |
List of line items being checked out. |
| buyer |
object |
Optional |
Representation of the buyer. |
| context |
object |
Optional |
Provisional buyer signals for relevance and localization—not authoritative data. Businesses SHOULD use these values when verified inputs (e.g., shipping address) are absent, and MAY ignore or down-rank them if inconsistent with higher-confidence signals (authenticated account, risk detection) or regulatory constraints (export controls). Eligibility and policy enforcement MUST occur at checkout time using binding transaction data. Context SHOULD be non-identifying and can be disclosed progressively—coarse signals early, finer resolution as the session progresses. Higher-resolution data (shipping address, billing address) supersedes context. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| status |
string |
Required |
Checkout state indicating the current phase and required processing. See Checkout Status lifecycle documentation for state transition details. Enum: incomplete, requires_escalation, ready_for_complete, complete_in_progress, completed, canceled |
| currency |
string |
Required |
ISO 4217 currency code reflecting the merchant's market determination. Derived from address, context, and geo IP—buyers provide signals, merchants determine currency. |
| totals |
Array[Total] |
Required |
Different cart totals. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this checkout. |
| messages |
Array[object] |
Optional |
List of messages with error and info about the checkout session state. |
| links |
Array[object] |
Required |
Links to be displayed by the platform (Privacy Policy, TOS). Mandatory for legal compliance. |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the items in this checkout. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| expires_at |
string |
Optional |
RFC 3339 expiry timestamp. Default TTL is 6 hours from creation if not sent. |
| continue_url |
string |
Optional |
URL for checkout handoff and session recovery. MUST be provided when status is requires_escalation. See specification for format and availability requirements. |
| payment |
object |
Optional |
Payment configuration containing handlers. |
| order |
object |
Optional |
Details about an order created for this checkout session. |
| buyer |
any |
Optional |
Buyer with consent tracking. |
Discount Extension
Allocation
Breakdown of how a discount amount was allocated to a specific target.
| Name |
Type |
Requirement |
Description |
| path |
string |
Required |
RFC 9535 JSONPath to the allocation target (e.g., '$.line_items[0]', '$.totals[?@.type == "fulfillment"]'). |
| amount |
integer |
Required |
Amount allocated to this target in ISO 4217 minor units. |
Applied Discount
A discount that was successfully applied.
| Name |
Type |
Requirement |
Description |
| code |
string |
Optional |
The discount code. Omitted for automatic discounts. |
| title |
string |
Required |
Human-readable discount name (e.g., 'Summer Sale 20% Off'). |
| amount |
integer |
Required |
Total discount amount in ISO 4217 minor units. |
| automatic |
boolean |
Optional |
True if applied automatically by merchant rules (no code required). |
| method |
string |
Optional |
Allocation method. 'each' = applied independently per item. 'across' = split proportionally by value. Enum: each, across |
| priority |
integer |
Optional |
Stacking order for discount calculation. Lower numbers applied first (1 = first). |
| provisional |
boolean |
Optional |
True if this discount requires additional verification. |
| eligibility |
string |
Optional |
The eligibility claim accepted by the Business for this discount. Corresponds to a value from context.eligibility. Omitted for code-based and non-eligibility automatic discounts. |
| allocations |
Array[object] |
Optional |
Breakdown of where this discount was allocated. Sum of allocation amounts equals total amount. |
Discounts Object
Discount codes input and applied discounts output.
| Name |
Type |
Requirement |
Description |
| codes |
Array[string] |
Optional |
Discount codes to apply. Case-insensitive. Replaces previously submitted codes. Send empty array to clear. |
| applied |
Array[object] |
Optional |
Discounts successfully applied (code-based and automatic). |
Cart with Discount
Cart extended with discount capability.
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for cart responses. No payment handlers needed pre-checkout. |
| id |
string |
Required |
Unique cart identifier. |
| line_items |
Array[object] |
Required |
Cart line items. Same structure as checkout. Full replacement on update. |
| context |
object |
Optional |
Buyer signals for localization (country, region, postal_code). Merchant uses for pricing, availability, currency. Falls back to geo-IP if omitted. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| buyer |
object |
Optional |
Optional buyer information for personalized estimates. |
| currency |
string |
Required |
ISO 4217 currency code. Determined by merchant based on context or geo-IP. |
| totals |
Array[Total] |
Required |
Estimated cost breakdown. May be partial if shipping/tax not yet calculable. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this cart. |
| messages |
Array[object] |
Optional |
Validation messages, warnings, or informational notices. |
| links |
Array[object] |
Optional |
Optional merchant links (policies, FAQs). |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the items in this cart. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| continue_url |
string |
Optional |
URL for cart handoff and session recovery. Enables sharing and human-in-the-loop flows. |
| expires_at |
string |
Optional |
Cart expiry timestamp (RFC 3339). Optional. |
| discounts |
object |
Optional |
Discount codes input and applied discounts output. |
Checkout with Discount
Checkout extended with discount capability.
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for checkout responses. |
| id |
string |
Required |
Unique identifier of the checkout session. |
| line_items |
Array[object] |
Required |
List of line items being checked out. |
| buyer |
object |
Optional |
Representation of the buyer. |
| context |
object |
Optional |
Provisional buyer signals for relevance and localization—not authoritative data. Businesses SHOULD use these values when verified inputs (e.g., shipping address) are absent, and MAY ignore or down-rank them if inconsistent with higher-confidence signals (authenticated account, risk detection) or regulatory constraints (export controls). Eligibility and policy enforcement MUST occur at checkout time using binding transaction data. Context SHOULD be non-identifying and can be disclosed progressively—coarse signals early, finer resolution as the session progresses. Higher-resolution data (shipping address, billing address) supersedes context. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| status |
string |
Required |
Checkout state indicating the current phase and required processing. See Checkout Status lifecycle documentation for state transition details. Enum: incomplete, requires_escalation, ready_for_complete, complete_in_progress, completed, canceled |
| currency |
string |
Required |
ISO 4217 currency code reflecting the merchant's market determination. Derived from address, context, and geo IP—buyers provide signals, merchants determine currency. |
| totals |
Array[Total] |
Required |
Different cart totals. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this checkout. |
| messages |
Array[object] |
Optional |
List of messages with error and info about the checkout session state. |
| links |
Array[object] |
Required |
Links to be displayed by the platform (Privacy Policy, TOS). Mandatory for legal compliance. |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the items in this checkout. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| expires_at |
string |
Optional |
RFC 3339 expiry timestamp. Default TTL is 6 hours from creation if not sent. |
| continue_url |
string |
Optional |
URL for checkout handoff and session recovery. MUST be provided when status is requires_escalation. See specification for format and availability requirements. |
| payment |
object |
Optional |
Payment configuration containing handlers. |
| order |
object |
Optional |
Details about an order created for this checkout session. |
| discounts |
object |
Optional |
Discount codes input and applied discounts output. |
Fulfillment Extension
Fulfillment Option
A fulfillment option within a group (e.g., Standard Shipping $5, Express $15). Extends the fulfillment option base with cost and timing.
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Unique identifier for this fulfillment option. |
| title |
string |
Required |
Short label that distinguishes this option from its siblings (e.g. 'Standard', 'Express Shipping', 'Curbside Pickup'). |
| description |
object |
Optional |
Supplementary context for the title (e.g. 'Arrives in 4 business days', 'Arrives Dec 12-15 via FedEx'). Directly renderable; MUST NOT repeat the title. |
| carrier |
string |
Optional |
Carrier name (for shipping). |
| earliest_fulfillment_time |
string |
Optional |
Earliest fulfillment date. |
| latest_fulfillment_time |
string |
Optional |
Latest fulfillment date. |
| totals |
Array[object] |
Required |
Fulfillment option totals breakdown. |
Fulfillment Group
A merchant-generated package/group of line items with fulfillment options.
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Group identifier for referencing merchant-generated groups in updates. |
| line_item_ids |
Array[string] |
Required |
Line item IDs included in this group/package. |
| options |
Array[object] |
Optional |
Available fulfillment options for this group. |
| selected_option_id |
['string', 'null'] |
Optional |
ID of the selected fulfillment option for this group. |
Fulfillment Method
A fulfillment method with destinations and groups.
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Unique fulfillment method identifier. |
| type |
string |
Required |
Fulfillment method type. Well-known values: shipping, pickup. Businesses MAY use additional values. |
| line_item_ids |
Array[string] |
Required |
Line item IDs fulfilled via this method. |
| destinations |
Array[object] |
Optional |
Available destinations for this method. In Business responses, each destination carries a type and id. |
| selected_destination_id |
['string', 'null'] |
Optional |
ID of the selected destination. Accepts any stable, Business-scoped ID the Business recognizes for this method, including Location IDs not yet enumerated in destinations. |
| groups |
Array[object] |
Optional |
Fulfillment groups for selecting options. Agent sets selected_option_id on groups to choose shipping method. |
Fulfillment Available Method
Inventory availability hint for a fulfillment method type.
| Name |
Type |
Requirement |
Description |
| type |
string |
Required |
Fulfillment method type this availability applies to. Well-known values: shipping, pickup; businesses MAY use additional values. |
| line_item_ids |
Array[string] |
Required |
Line items available for this fulfillment method. |
| fulfillable_on |
['string', 'null'] |
Optional |
'now' for immediate availability, or ISO 8601 date for future (preorders, transfers). |
| description |
string |
Optional |
Human-readable availability info (e.g., 'Available for pickup at Downtown Store today'). |
Fulfillment
Container for fulfillment methods and availability.
| Name |
Type |
Requirement |
Description |
| methods |
Array[object] |
Optional |
Fulfillment methods for cart items. |
| available_methods |
Array[object] |
Optional |
Inventory availability hints. |
Catalog Fulfillment Method
A fulfillment method on a catalog variant: how the variant can be fulfilled, and its availability.
| Name |
Type |
Requirement |
Description |
| type |
string |
Required |
Fulfillment method type. Well-known values: shipping, pickup. Businesses MAY use additional values. |
| description |
object |
Optional |
Short buyer-facing summary (e.g. 'Ships in 2–4 business days'). |
| availability |
object |
Optional |
Availability of this variant via this method at the specified or inferred location. |
| location |
string |
Optional |
Stable, opaque identifier for the Business Location resolved for this place-based fulfillment method. The Business recognizes the same ID when submitted as selected_destination_id for that method; recognition does not reserve inventory or guarantee eligibility, and current terms are revalidated. |
| options |
Array[object] |
Optional |
Representative fulfillment options for this method (e.g. Standard, Express). Without a destination or full cart, a Business SHOULD preview meaningful boundary options (e.g. cheapest, fastest); more specific options are negotiated in Checkout once line items and destination are known. |
Catalog Fulfillment
How a catalog variant can be fulfilled. Mirrors checkout fulfillment.
| Name |
Type |
Requirement |
Description |
| methods |
Array[object] |
Optional |
Fulfillment methods for this variant. |
Fulfillment Variant
A catalog variant with fulfillment.
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Global ID (GID) uniquely identifying this variant. Used as item.id in checkout. |
| sku |
string |
Optional |
Business-assigned identifier for inventory and fulfillment. |
| barcodes |
Array[object] |
Optional |
Industry-standard product identifiers for cross-reference and correlation. |
| handle |
string |
Optional |
URL-safe variant handle/slug. |
| title |
string |
Required |
Variant display title (e.g., 'Blue / Large'). |
| description |
object |
Required |
Variant description in one or more formats. |
| url |
string |
Optional |
Canonical variant page URL. |
| categories |
Array[object] |
Optional |
Variant categories with optional taxonomy identifiers. |
| price |
object |
Required |
Current selling price. Price is the amount per one whole quantity_unit.unit (for example, per lb or per hour); when quantity_unit is absent, it is per each. Line total is price × quantity × 10^-scale, computed and rounded once by the Business; totals remain authoritative. |
| quantity_unit |
any |
Optional |
Sale basis this variant's quantity is denominated in. The default sale basis is each, whose machine identity is (C62, 0); C62 is the UN/CEFACT Rec20 code for one/each. An absent catalog descriptor encodes that default. An increment advertises the ordering granularity in steps (for example, scale 2 with increment 25 sells in 0.25-unit multiples). |
| list_price |
object |
Optional |
List price before discounts (for strikethrough display). |
| unit_price |
object |
Optional |
Price per standard unit of measurement, for shelf-style comparison display. MAY be omitted when unit pricing does not apply. |
| availability |
object |
Optional |
Variant availability for purchase. |
| options |
Array[object] |
Optional |
Option values that define this variant (e.g., Color: Blue, Size: Large). |
| media |
Array[object] |
Optional |
Variant media (images, videos, 3D models). First item is the featured media for listings. |
| rating |
object |
Optional |
Variant rating. |
| tags |
Array[string] |
Optional |
Variant tags for categorization and search. |
| metadata |
object |
Optional |
Business-defined custom data extending the standard variant model. |
| seller |
object |
Optional |
Optional seller context for this variant. |
| fulfillment |
object |
Optional |
How a catalog variant can be fulfilled. Mirrors checkout fulfillment. |
Fulfillment Product
A catalog product whose variants are fulfillment-enriched. Used by search.
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Global ID (GID) uniquely identifying this product. |
| handle |
string |
Optional |
URL-safe slug for SEO-friendly URLs (e.g., 'blue-runner-pro'). Use id for stable API references. |
| title |
string |
Required |
Product title. |
| description |
object |
Required |
Product description in one or more formats. |
| url |
string |
Optional |
Canonical product page URL. |
| categories |
Array[object] |
Optional |
Product categories with optional taxonomy identifiers. |
| price_range |
object |
Required |
Price range across all variants. |
| list_price_range |
object |
Optional |
List price range before discounts (for strikethrough display). |
| media |
Array[object] |
Optional |
Product media (images, videos, 3D models). First item is the featured media for listings. |
| options |
Array[object] |
Optional |
Product options (Size, Color, etc.). |
| variants |
Array[object] |
Required |
Purchasable variants of this product. First item is the featured variant for listings. |
| rating |
object |
Optional |
Aggregate product rating. |
| tags |
Array[string] |
Optional |
Product tags for categorization and search. |
| metadata |
object |
Optional |
Business-defined custom data extending the standard product model. |
| variants |
Array[Variant] |
Required |
|
Fulfillment Lookup Variant
A lookup variant (carrying input correlation) enriched with fulfillment.
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Global ID (GID) uniquely identifying this variant. Used as item.id in checkout. |
| sku |
string |
Optional |
Business-assigned identifier for inventory and fulfillment. |
| barcodes |
Array[object] |
Optional |
Industry-standard product identifiers for cross-reference and correlation. |
| handle |
string |
Optional |
URL-safe variant handle/slug. |
| title |
string |
Required |
Variant display title (e.g., 'Blue / Large'). |
| description |
object |
Required |
Variant description in one or more formats. |
| url |
string |
Optional |
Canonical variant page URL. |
| categories |
Array[object] |
Optional |
Variant categories with optional taxonomy identifiers. |
| price |
object |
Required |
Current selling price. Price is the amount per one whole quantity_unit.unit (for example, per lb or per hour); when quantity_unit is absent, it is per each. Line total is price × quantity × 10^-scale, computed and rounded once by the Business; totals remain authoritative. |
| quantity_unit |
any |
Optional |
Sale basis this variant's quantity is denominated in. The default sale basis is each, whose machine identity is (C62, 0); C62 is the UN/CEFACT Rec20 code for one/each. An absent catalog descriptor encodes that default. An increment advertises the ordering granularity in steps (for example, scale 2 with increment 25 sells in 0.25-unit multiples). |
| list_price |
object |
Optional |
List price before discounts (for strikethrough display). |
| unit_price |
object |
Optional |
Price per standard unit of measurement, for shelf-style comparison display. MAY be omitted when unit pricing does not apply. |
| availability |
object |
Optional |
Variant availability for purchase. |
| options |
Array[object] |
Optional |
Option values that define this variant (e.g., Color: Blue, Size: Large). |
| media |
Array[object] |
Optional |
Variant media (images, videos, 3D models). First item is the featured media for listings. |
| rating |
object |
Optional |
Variant rating. |
| tags |
Array[string] |
Optional |
Variant tags for categorization and search. |
| metadata |
object |
Optional |
Business-defined custom data extending the standard variant model. |
| seller |
object |
Optional |
Optional seller context for this variant. |
| inputs |
Array[object] |
Required |
Which request identifiers resolved to this variant, and how. Each entry maps a request ID to its match type. |
| fulfillment |
object |
Optional |
How a catalog variant can be fulfilled. Mirrors checkout fulfillment. |
Fulfillment Lookup Product
A lookup product whose variants are fulfillment-enriched, preserving input correlation. Used by lookup.
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Global ID (GID) uniquely identifying this product. |
| handle |
string |
Optional |
URL-safe slug for SEO-friendly URLs (e.g., 'blue-runner-pro'). Use id for stable API references. |
| title |
string |
Required |
Product title. |
| description |
object |
Required |
Product description in one or more formats. |
| url |
string |
Optional |
Canonical product page URL. |
| categories |
Array[object] |
Optional |
Product categories with optional taxonomy identifiers. |
| price_range |
object |
Required |
Price range across all variants. |
| list_price_range |
object |
Optional |
List price range before discounts (for strikethrough display). |
| media |
Array[object] |
Optional |
Product media (images, videos, 3D models). First item is the featured media for listings. |
| options |
Array[object] |
Optional |
Product options (Size, Color, etc.). |
| variants |
Array[object] |
Required |
Purchasable variants of this product. First item is the featured variant for listings. |
| rating |
object |
Optional |
Aggregate product rating. |
| tags |
Array[string] |
Optional |
Product tags for categorization and search. |
| metadata |
object |
Optional |
Business-defined custom data extending the standard product model. |
| variants |
Array[object] |
Required |
|
Fulfillment Detail Product
A get_product detail product (carrying selected/options availability signals) whose variants are fulfillment-enriched. Used by get_product.
| Name |
Type |
Requirement |
Description |
| selected |
Array[object] |
Optional |
Effective option selections that anchor the featured variant and availability signals. Required when the product has configurable options; may be empty or omitted for products with no option axes. |
| options |
Array[object] |
Optional |
Product options with availability signals relative to the effective selections. |
| variants |
Array[Variant] |
Optional |
|
Fulfillment Search Filters
Catalog filters extended with a fulfillment destination filter and a method-type filter.
| Name |
Type |
Requirement |
Description |
| categories |
Array[string] |
Optional |
Filter by product categories (OR logic — matches products in any listed categories). Values match against the value field in product category entries. Valid values can be discovered from the categories field in search results, merchant documentation, or standard taxonomies that businesses may align with. |
| price |
object |
Optional |
Price range filter denominated in context.currency. When context.currency matches the presentment currency, businesses apply the filter directly. When it differs, businesses SHOULD convert filter values to the presentment currency before applying; if conversion is not supported, businesses MAY ignore the filter and SHOULD indicate this via a message. When context.currency is absent, filter denomination is ambiguous and businesses MAY ignore it. |
| fulfills_to |
object |
Optional |
Explicit destination where items are fulfilled. It may differ from the locality or Business Location supplied in context (e.g. a gift delivered directly to the recipient). The filter restricts results to what can be fulfilled there and seeds method availability. It supersedes context only for fulfillment destination and availability resolution. |
| methods |
Array[string] |
Optional |
Restrict results to these fulfillment method types (e.g. ["pickup"]). Well-known values: shipping, pickup. |
Fulfillment Search Request
| Name |
Type |
Requirement |
Description |
| query |
string |
Optional |
Free-text search query. |
| context |
object |
Optional |
Provisional buyer signals for relevance and localization—not authoritative data. Businesses SHOULD use these values when verified inputs (e.g., shipping address) are absent, and MAY ignore or down-rank them if inconsistent with higher-confidence signals (authenticated account, risk detection) or regulatory constraints (export controls). Eligibility and policy enforcement MUST occur at checkout time using binding transaction data. Context SHOULD be non-identifying and can be disclosed progressively—coarse signals early, finer resolution as the session progresses. Higher-resolution data (shipping address, billing address) supersedes context. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| filters |
object |
Optional |
Filter criteria to narrow search results. All specified filters combine with AND logic. |
| pagination |
object |
Optional |
Pagination parameters for requests. |
| filters |
any |
Optional |
Catalog filters extended with a fulfillment destination filter and a method-type filter. |
Fulfillment Search Response
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for catalog responses. |
| products |
Array[object] |
Required |
Products matching the search criteria. |
| pagination |
object |
Optional |
Pagination information in responses. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this catalog search response. |
| messages |
Array[object] |
Optional |
Errors, warnings, or informational messages about the search results. |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the products in these search results. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| products |
Array[Product] |
Required |
|
Fulfillment Lookup Request
| Name |
Type |
Requirement |
Description |
| ids |
Array[string] |
Required |
Identifiers to lookup. Implementations MUST support product ID and variant ID; MAY support secondary identifiers (SKU, handle, etc.). |
| filters |
object |
Optional |
Filter criteria to narrow returned products and variants. All specified filters combine with AND logic. |
| context |
object |
Optional |
Provisional buyer signals for relevance and localization—not authoritative data. Businesses SHOULD use these values when verified inputs (e.g., shipping address) are absent, and MAY ignore or down-rank them if inconsistent with higher-confidence signals (authenticated account, risk detection) or regulatory constraints (export controls). Eligibility and policy enforcement MUST occur at checkout time using binding transaction data. Context SHOULD be non-identifying and can be disclosed progressively—coarse signals early, finer resolution as the session progresses. Higher-resolution data (shipping address, billing address) supersedes context. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| filters |
any |
Optional |
Catalog filters extended with a fulfillment destination filter and a method-type filter. |
Fulfillment Lookup Response
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for catalog responses. |
| products |
Array[Product] |
Required |
Products matching the requested identifiers. May contain fewer items if some identifiers not found, or more if identifiers match multiple products. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this catalog lookup response. |
| messages |
Array[object] |
Optional |
Errors, warnings, or informational messages about the requested items. |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the products in this response. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| products |
Array[Product] |
Required |
|
Fulfillment Get Product Request
| Name |
Type |
Requirement |
Description |
| id |
string |
Required |
Product or variant identifier. Implementations MUST support product ID and variant ID. |
| selected |
Array[object] |
Optional |
Partial or full option selections for interactive variant narrowing. When provided, response option values include availability signals (available, exists) relative to these selections. |
| preferences |
Array[string] |
Optional |
Option names in relaxation priority order. When no exact variant matches all selections, the server drops options from the end of this list first. E.g., ['Color', 'Size'] keeps Color and relaxes Size. |
| filters |
object |
Optional |
Filter criteria to narrow returned variants. All specified filters combine with AND logic. |
| context |
object |
Optional |
Provisional buyer signals for relevance and localization—not authoritative data. Businesses SHOULD use these values when verified inputs (e.g., shipping address) are absent, and MAY ignore or down-rank them if inconsistent with higher-confidence signals (authenticated account, risk detection) or regulatory constraints (export controls). Eligibility and policy enforcement MUST occur at checkout time using binding transaction data. Context SHOULD be non-identifying and can be disclosed progressively—coarse signals early, finer resolution as the session progresses. Higher-resolution data (shipping address, billing address) supersedes context. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| filters |
any |
Optional |
Catalog filters extended with a fulfillment destination filter and a method-type filter. |
Fulfillment Get Product Response
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for catalog responses. |
| product |
object |
Required |
The requested product with full detail. Singular — this is a single-resource operation. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this product response. |
| messages |
Array[object] |
Optional |
Warnings or informational messages about the product (e.g., price recently changed, limited availability). |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to this product. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| product |
any |
Required |
A get_product detail product (carrying selected/options availability signals) whose variants are fulfillment-enriched. Used by get_product. |
Checkout with Fulfillment
Checkout extended with hierarchical fulfillment.
| Name |
Type |
Requirement |
Description |
| ucp |
any |
Required |
UCP metadata for checkout responses. |
| id |
string |
Required |
Unique identifier of the checkout session. |
| line_items |
Array[object] |
Required |
List of line items being checked out. |
| buyer |
object |
Optional |
Representation of the buyer. |
| context |
object |
Optional |
Provisional buyer signals for relevance and localization—not authoritative data. Businesses SHOULD use these values when verified inputs (e.g., shipping address) are absent, and MAY ignore or down-rank them if inconsistent with higher-confidence signals (authenticated account, risk detection) or regulatory constraints (export controls). Eligibility and policy enforcement MUST occur at checkout time using binding transaction data. Context SHOULD be non-identifying and can be disclosed progressively—coarse signals early, finer resolution as the session progresses. Higher-resolution data (shipping address, billing address) supersedes context. |
| signals |
object |
Optional |
Environment data provided by the platform to support authorization and abuse prevention. Values MUST NOT be buyer-asserted claims — platforms provide signals based on direct observation or independently verifiable third-party attestations. All signal keys MUST use reverse-domain naming to ensure provenance and prevent collisions when multiple extensions contribute to the shared namespace. |
| attribution |
object |
Optional |
Platform-emitted referral and conversion-event context — campaign identifiers, click IDs, source/medium markers, etc. The same parameters platforms communicate via URL query parameters in browser-based flows. |
| status |
string |
Required |
Checkout state indicating the current phase and required processing. See Checkout Status lifecycle documentation for state transition details. Enum: incomplete, requires_escalation, ready_for_complete, complete_in_progress, completed, canceled |
| currency |
string |
Required |
ISO 4217 currency code reflecting the merchant's market determination. Derived from address, context, and geo IP—buyers provide signals, merchants determine currency. |
| totals |
Array[Total] |
Required |
Different cart totals. |
| actions |
object |
Optional |
Outstanding extension-defined Actions for this checkout. |
| messages |
Array[object] |
Optional |
List of messages with error and info about the checkout session state. |
| links |
Array[object] |
Required |
Links to be displayed by the platform (Privacy Policy, TOS). Mandatory for legal compliance. |
| policies |
Array[object] |
Optional |
Policies (e.g., return/refund terms) that apply to the items in this checkout. applies_to targets are relative to the response root; when absent or empty, refer to the URLs in links[]. |
| expires_at |
string |
Optional |
RFC 3339 expiry timestamp. Default TTL is 6 hours from creation if not sent. |
| continue_url |
string |
Optional |
URL for checkout handoff and session recovery. MUST be provided when status is requires_escalation. See specification for format and availability requirements. |
| payment |
object |
Optional |
Payment configuration containing handlers. |
| order |
object |
Optional |
Details about an order created for this checkout session. |
| fulfillment |
object |
Optional |
Fulfillment details. |
The following schemas define the structure of UCP metadata used in discovery
and responses.
The top-level structure of a platform profile document (hosted at a URI advertised by the platform).
Full UCP metadata for platform-level configuration. Hosted at a URI advertised by the platform in request headers.
| Name |
Type |
Requirement |
Description |
| version |
string |
Required |
Version identifier in YYYY-MM-DD format. |
| map_order |
object |
Optional |
Preferred key-traversal order for sibling registry fields inside the root ucp envelope (services, capabilities, and payment_handlers). |
| status |
string |
Optional |
Application-level status of the UCP operation. Enum: success, error |
| services |
object |
Required |
Service registry keyed by reverse-domain name. |
| capabilities |
object |
Optional |
Capability registry keyed by reverse-domain name. |
| payment_handlers |
object |
Required |
Payment handler registry keyed by reverse-domain name. |
| services |
any |
Required |
|
| capabilities |
any |
Optional |
|
| payment_handlers |
any |
Required |
|
Business Discovery Profile
The top-level structure of a business discovery document (/.well-known/ucp).
UCP metadata for business/merchant-level configuration. Subset of platform schema with business-specific settings.
| Name |
Type |
Requirement |
Description |
| version |
string |
Required |
Version identifier in YYYY-MM-DD format. |
| map_order |
object |
Optional |
Preferred key-traversal order for sibling registry fields inside the root ucp envelope (services, capabilities, and payment_handlers). |
| status |
string |
Optional |
Application-level status of the UCP operation. Enum: success, error |
| services |
object |
Required |
Service registry keyed by reverse-domain name. |
| capabilities |
object |
Optional |
Capability registry keyed by reverse-domain name. |
| payment_handlers |
object |
Required |
Payment handler registry keyed by reverse-domain name. |
| supported_versions |
object |
Optional |
Previous protocol versions this business supports, mapped to profile URIs. Businesses that support older protocol versions SHOULD advertise each version and link to its profile. Each URI points to a complete, self-contained profile for that version. When omitted, only version is supported. |
| services |
any |
Required |
|
| capabilities |
any |
Optional |
|
| payment_handlers |
any |
Required |
|
Checkout Response Metadata
The ucp object included in checkout responses.
UCP metadata for checkout responses.
| Name |
Type |
Requirement |
Description |
| version |
string |
Required |
Version identifier in YYYY-MM-DD format. |
| map_order |
object |
Optional |
Preferred key-traversal order for sibling registry fields inside the root ucp envelope (services, capabilities, and payment_handlers). |
| status |
string |
Optional |
Application-level status of the UCP operation. Enum: success, error |
| services |
object |
Optional |
Service registry keyed by reverse-domain name. |
| capabilities |
object |
Optional |
Capability registry keyed by reverse-domain name. |
| payment_handlers |
object |
Required |
Payment handler registry keyed by reverse-domain name. |
| services |
any |
Optional |
|
| capabilities |
any |
Optional |
|
| payment_handlers |
any |
Required |
|
Cart Response Metadata
The ucp object included in cart responses.
UCP metadata for cart responses. No payment handlers needed pre-checkout.
| Name |
Type |
Requirement |
Description |
| version |
string |
Required |
Version identifier in YYYY-MM-DD format. |
| map_order |
object |
Optional |
Preferred key-traversal order for sibling registry fields inside the root ucp envelope (services, capabilities, and payment_handlers). |
| status |
string |
Optional |
Application-level status of the UCP operation. Enum: success, error |
| services |
object |
Optional |
Service registry keyed by reverse-domain name. |
| capabilities |
object |
Optional |
Capability registry keyed by reverse-domain name. |
| payment_handlers |
object |
Optional |
Payment handler registry keyed by reverse-domain name. |
| capabilities |
any |
Optional |
|
Catalog Response Metadata
The ucp object included in catalog responses.
UCP metadata for catalog responses.
| Name |
Type |
Requirement |
Description |
| version |
string |
Required |
Version identifier in YYYY-MM-DD format. |
| map_order |
object |
Optional |
Preferred key-traversal order for sibling registry fields inside the root ucp envelope (services, capabilities, and payment_handlers). |
| status |
string |
Optional |
Application-level status of the UCP operation. Enum: success, error |
| services |
object |
Optional |
Service registry keyed by reverse-domain name. |
| capabilities |
object |
Optional |
Capability registry keyed by reverse-domain name. |
| payment_handlers |
object |
Optional |
Payment handler registry keyed by reverse-domain name. |
| capabilities |
any |
Optional |
|
Order Response Metadata
The ucp object included in order responses or events.
UCP metadata for order responses. No payment handlers needed post-purchase.
| Name |
Type |
Requirement |
Description |
| version |
string |
Required |
Version identifier in YYYY-MM-DD format. |
| map_order |
object |
Optional |
Preferred key-traversal order for sibling registry fields inside the root ucp envelope (services, capabilities, and payment_handlers). |
| status |
string |
Optional |
Application-level status of the UCP operation. Enum: success, error |
| services |
object |
Optional |
Service registry keyed by reverse-domain name. |
| capabilities |
object |
Optional |
Capability registry keyed by reverse-domain name. |
| payment_handlers |
object |
Optional |
Payment handler registry keyed by reverse-domain name. |
| capabilities |
any |
Optional |
|
Location Response Metadata
The ucp object included in location responses.
UCP metadata for location responses.
| Name |
Type |
Requirement |
Description |
| version |
string |
Required |
Version identifier in YYYY-MM-DD format. |
| map_order |
object |
Optional |
Preferred key-traversal order for sibling registry fields inside the root ucp envelope (services, capabilities, and payment_handlers). |
| status |
string |
Optional |
Application-level status of the UCP operation. Enum: success, error |
| services |
object |
Optional |
Service registry keyed by reverse-domain name. |
| capabilities |
object |
Optional |
Capability registry keyed by reverse-domain name. |
| payment_handlers |
object |
Optional |
Payment handler registry keyed by reverse-domain name. |
| capabilities |
any |
Optional |
|
Capability
This object describes a single capability or extension. It appears in the
capabilities array in discovery profiles and responses, with slightly
different required fields in each context.
Capability (Discovery)
As seen in discovery profiles.
Full capability declaration for platform-level discovery. Includes spec/schema URLs for agent fetching.
| Name |
Type |
Requirement |
Description |
| version |
string |
Required |
Entity version in YYYY-MM-DD format. |
| spec |
string |
Required |
URL to human-readable specification document. |
| schema |
string |
Required |
URL to JSON Schema defining this entity's structure and payloads. |
| id |
string |
Optional |
Unique identifier for this entity instance. Used to disambiguate when multiple instances exist. |
| config |
object |
Optional |
Entity-specific configuration. Structure defined by each entity's schema. |
| extends |
OneOf[string, array] |
Optional |
Parent capability(s) this extends. Present for extensions, absent for root capabilities. Use array for multi-parent extensions. |
Capability (Response)
As seen in response messages.
Capability reference in responses. Only name/version required to confirm active capabilities.
| Name |
Type |
Requirement |
Description |
| version |
string |
Required |
Entity version in YYYY-MM-DD format. |
| spec |
string |
Optional |
URL to human-readable specification document. |
| schema |
string |
Optional |
URL to JSON Schema defining this entity's structure and payloads. |
| id |
string |
Optional |
Unique identifier for this entity instance. Used to disambiguate when multiple instances exist. |
| config |
object |
Optional |
Entity-specific configuration. Structure defined by each entity's schema. |
| extends |
OneOf[string, array] |
Optional |
Parent capability(s) this extends. Present for extensions, absent for root capabilities. Use array for multi-parent extensions. |