Scope and draft status
UCP 2026-08-25 is the primary wire handoff; ACP is secondary. The UQP plug-in artifacts have entity version2026-11-05. Everything here is reference, not production, and no live merchant checkout is provided. This is mapping to draft proposals; subject to change: UCP issue #929 / draft PR #930 and ACP’s unreleased quote fields and attribution RFC are not stable contracts. No UCP or ACP conformance is claimed.
The UCP schema fixtures are credited to the UCP authors, © UCP authors, Apache-2.0. The original authoritative schema identifiers are https://ucp.dev/2026-08-25/schemas/...; UQP artifacts refer to those identifiers rather than republishing UCP schemas as UQP definitions. Offline test fixtures preserve the supplied schema text and accompanying NOTICE. The explanations on this page are original UQP documentation.
Optional deposit policy
The existingdeposit amount, currency and policy strings remain valid. Additive fields are capture_on (accept, booking or immediate), nullable RFC 3339 refundable_until, and policy_url. These express the provider’s policy, not an instruction to a processor. A null deadline does not by itself explain refund eligibility; retain the policy text and URL. UQP never holds funds or performs PSP authorization/capture.
Client approval must still explicitly cover the exact deposit and policy before external handoff. Silence is never acceptance. Only trusted processor confirmation establishes payment. UCP #929 explicitly leaves deposits, holds and payment execution outside its scope; this policy bridges metadata, not execution.
UCP composition
UCP checkout statuses are
incomplete, requires_escalation, ready_for_complete, complete_in_progress, completed and canceled. They are checkout states, not the draft quotation statuses below. Pending provider review requires a continuation URL; it must not be treated as checkout completion.
Draft quote mapping
The legacy
valid_until remains supported; do not remove it when adding expires_at. ACP’s quote_id, quote_expires_at and shared payment token (SPT) are secondary mapping points, not a PSP integration. Neutral attribution resembles ACP affiliate-attribution metadata without importing a vendor identity or promising token redemption.
Quote lock and precise wire data
quote_lock uses the UCP extensionallOf pattern for both checkout and order. Its optional quote_lock carries quote_id, lowercase SHA-256 quote_hash, intake_summary, scope_exclusions and RFC 3339 quote_expires_at. The hash is SHA-256 over RFC 8785 JCS-canonicalized Quote JSON. It binds the exact quote data; it is not a signature or proof of payment. The typed mappings and conversion helpers live in spec/handoff.ts.
UCP wire money is an integer in currency minor units, between zero and 9007199254740991. For example, 15000 denotes USD 150.00. Example data, not real prices. Native UQP retains its existing numeric min/max/amount; optional min_minor, max_minor and amount_minor add precise representations without breaking old quotes. toMinorUnits uses ISO 4217 currency exponents, including zero-, three- and four-decimal exceptions (for example JPY, KWD and CLF respectively), and rejects non-representable amounts rather than silently rounding. See the helper’s checked-in exponent table for the supported exceptions; do not assume every currency uses two decimal places.
quantity is an integer from 1 through 9007199254740991. quantityUnit supplies unit, optional scale and required display_text. The scale is a decimal exponent from 0 through 15, defaults to 0, and makes one quantity step equal to 10^-scale of the unit; displayed quantity is quantity × 10^-scale. The discrete unit C62 permits only scale 0. This matches UCP’s unit representation, not a divisor-valued scale. Units are UN/CEFACT Rec 20 C62 (each), INH (inch), CMT (cm), FTK (square foot), MTK (square metre), HUR (hour) or MIN (minute). All handoff timestamps use RFC 3339 date-time strings. These transport helpers do not alter pack pricing or lifecycle transitions.