@@ -56,7 +56,7 @@ section (e.g., `PROCESSING(...)`) represent **logical data flows**, not literal
5656function calls. Spec authors must map these logical flows to the actual
5757transport protocol used by their implementation.
5858
59- ```
59+ ``` text
6060┌──────────────────────────────────────────────────────────────────────────────┐
6161│ Payment Handler Framework │
6262├──────────────────────────────────────────────────────────────────────────────┤
@@ -95,17 +95,17 @@ Specifications **MUST** explicitly document these field mappings.
9595
9696** Standard Participants:**
9797
98- | Participant | Role |
99- | :------------ | :-----|
98+ | Participant | Role |
99+ | :----------- | :-------------------------------------------------------------- |
100100| ** Business** | Advertises handler configuration, processes payment instruments |
101101| ** Platform** | Discovers handlers, acquires payment instruments, submits checkout |
102102
103103** Extended Participants** (example handler-specific participants):
104104
105- | Participant | Example Role |
106- | :------------| :-------------|
105+ | Participant | Example Role |
106+ | :------------ | :-------------------------------------------------- |
107107| ** Tokenizer** | Stores raw credentials and issues token credentials |
108- | ** PSP** | Processes payments on behalf of business using the checkout instrument |
108+ | ** PSP** | Processes payments on behalf of business using the checkout instrument |
109109
110110### Prerequisites
111111
@@ -114,14 +114,14 @@ complete before participating in the handler's flows.
114114
115115** Signature:**
116116
117- ```
117+ ``` text
118118PREREQUISITES(participant, onboarding_input) → prerequisites_output
119119```
120120
121- | Field | Description |
122- | :------| :------------|
123- | ` participant ` | The participant being onboarded (business, platform, etc.) |
124- | ` onboarding_input ` | What the participant provides during setup |
121+ | Field | Description |
122+ | :--------------------- | :----------------------------------------------------- |
123+ | ` participant ` | The participant being onboarded (business, platform, etc.) |
124+ | ` onboarding_input ` | What the participant provides during setup |
125125| ` prerequisites_output ` | The identity and any additional configuration received |
126126
127127** Prerequisites Output:**
@@ -154,14 +154,14 @@ this handler and enable platforms to invoke it.
154154
155155** Signature:**
156156
157- ```
157+ ``` text
158158HANDLER_DECLARATION(prerequisites_output) → handler_declaration
159159```
160160
161- | Field | Description |
162- | :------| :------------|
163- | ` prerequisites_output ` | The identity and configuration from business prerequisites |
164- | ` handler_declaration ` | The complete handler object advertised in ` payment.handlers[] ` |
161+ | Field | Description |
162+ | :--------------------- | :------------------------------------------------------------- |
163+ | ` prerequisites_output ` | The identity and configuration from business prerequisites |
164+ | ` handler_declaration ` | The complete handler object advertised in ` payment.handlers[] ` |
165165
166166** Output Structure:**
167167
@@ -223,9 +223,9 @@ vs. Production). It is recommended to include this in the config schema to
223223
224224** Base Instrument Schemas:**
225225
226- | Schema | Description |
227- | :-------| :------------|
228- | [ ` payment_instrument.json ` ] ( https://ucp.dev/schemas/shopping/types/payment_instrument.json ) | Base: id, handler_id, type, credential, billing_address |
226+ | Schema | Description |
227+ | :-------------------------------------------------------------------------------------------- | :-------------------------------------------------- |
228+ | [ ` payment_instrument.json ` ] ( https://ucp.dev/schemas/shopping/types/payment_instrument.json ) | Base: id, handler_id, type, credential, billing_address |
229229| [ ` card_payment_instrument.json ` ] ( https://ucp.dev/schemas/shopping/types/card_payment_instrument.json ) | Card display: brand, last_digits, expiry |
230230
231231UCP provides base schemas for universal payment instruments like ` card ` . Spec
@@ -253,10 +253,10 @@ handler-specific display data.
253253
254254** Base Credential Schemas:**
255255
256- | Schema | Description |
257- | :-------| :------------|
256+ | Schema | Description |
257+ | :---------------------------------------------------------------------------------------- | :------------------------- |
258258| [ ` payment_credential.json ` ] ( https://ucp.dev/schemas/shopping/types/payment_credential.json ) | Base: type discriminator only |
259- | [ ` token_credential.json ` ] ( https://ucp.dev/schemas/shopping/types/token_credential.json ) | Token: type + token string |
259+ | [ ` token_credential.json ` ] ( https://ucp.dev/schemas/shopping/types/token_credential.json ) | Token: type + token string |
260260
261261UCP provides base schemas for universal payment credentials like ` card ` and
262262` token ` . Authors ** MAY** extend these schemas to include handler-specific
@@ -289,7 +289,7 @@ that can be submitted to the business's checkout.
289289
290290** Signature:**
291291
292- ```
292+ ``` text
293293INSTRUMENT_ACQUISITION(
294294 platform_prerequisites_output,
295295 handler_declaration,
@@ -298,13 +298,13 @@ INSTRUMENT_ACQUISITION(
298298) → checkout_instrument
299299```
300300
301- | Field | Description |
302- | :------| :------------|
301+ | Field | Description |
302+ | :------------------------------ | :----------------------------------------------------- |
303303| ` platform_prerequisites_output ` | platform's prerequisites output (config), if prerequisites were required |
304- | ` handler_declaration.config ` | Handler-specific configuration from the business |
305- | ` binding ` | ** (See 2.6)** Context for binding the credential to a specific checkout |
306- | ` buyer_input ` | Buyer's payment selection or credentials |
307- | ` checkout_instrument ` | The payment instrument to submit at checkout |
304+ | ` handler_declaration.config ` | Handler-specific configuration from the business |
305+ | ` binding ` | ** (See 2.6)** Context for binding the credential to a specific checkout |
306+ | ` buyer_input ` | Buyer's payment selection or credentials |
307+ | ` checkout_instrument ` | The payment instrument to submit at checkout |
308308
309309Payment handler specifications do NOT need to define a formal process for
310310instrument acquisition. Instead, the specification ** SHOULD** clearly document:
@@ -321,7 +321,7 @@ process a received payment instrument and complete the transaction.
321321
322322** Signature:**
323323
324- ```
324+ ``` text
325325PROCESSING(
326326 identity,
327327 checkout_instrument,
@@ -330,13 +330,13 @@ PROCESSING(
330330) → processing_result
331331```
332332
333- | Field | Description |
334- | :------| :------------|
335- | ` identity ` | The processing participant's ` PaymentIdentity ` |
333+ | Field | Description |
334+ | :-------------------- | :---------------------------------------- |
335+ | ` identity ` | The processing participant's ` PaymentIdentity ` |
336336| ` checkout_instrument ` | The instrument received from the platform |
337- | ` binding ` | The binding context for verification |
338- | ` transaction_context ` | Checkout totals, line items, etc. |
339- | ` processing_result ` | Success/failure with payment details |
337+ | ` binding ` | The binding context for verification |
338+ | ` transaction_context ` | Checkout totals, line items, etc. |
339+ | ` processing_result ` | Success/failure with payment details |
340340
341341#### Error Handling
342342
@@ -347,8 +347,8 @@ error messages to the buyer regardless of the underlying processor.
347347
348348### Key Definitions
349349
350- | Term | Definition |
351- | :-----| :-----------|
350+ | Term | Definition |
351+ | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
352352| ** Binding** | A cryptographic or logical association of a payment instrument to a specific checkout transaction and business identity. This prevents replay attacks where a valid credential intended for Business A is intercepted and used at Business B. |
353353
354354---
@@ -427,44 +427,44 @@ specifications:
427427
428428### Schema Design
429429
430- | Practice | Description |
431- | :---------| :------------|
432- | ** Extend, don't reinvent** | Use ` allOf ` to compose base schemas. Don't redefine ` brand ` , ` last_digits ` , etc. |
433- | ** Use const for discriminators** | Define ` credential.type ` as a ` const ` to identify credential types unambiguously. |
434- | ** Validate early** | Publish schemas at stable URLs before finalizing the spec so implementers can validate. |
435- | ** Include Expiry** | When designing token credentials, always include ` expiry ` or ` ttl ` . |
430+ | Practice | Description |
431+ | :------------------------------- | :----------------------------------------------------------------------------------- |
432+ | ** Extend, don't reinvent** | Use ` allOf ` to compose base schemas. Don't redefine ` brand ` , ` last_digits ` , etc. |
433+ | ** Use const for discriminators** | Define ` credential.type ` as a ` const ` to identify credential types unambiguously. |
434+ | ** Validate early** | Publish schemas at stable URLs before finalizing the spec so implementers can validate. |
435+ | ** Include Expiry** | When designing token credentials, always include ` expiry ` or ` ttl ` . |
436436
437437### Documentation
438438
439- | Practice | Description |
440- | :---------| :------------|
441- | ** Show, don't just tell** | Include complete JSON examples for every schema and protocol step. |
442- | ** Document error cases** | Specify what errors can occur and how participants should handle them. |
443- | ** Version independently** | The handler version evolves independently of UCP core versions. |
439+ | Practice | Description |
440+ | :------------------------ | :-------------------------------------------------------------------- |
441+ | ** Show, don't just tell** | Include complete JSON examples for every schema and protocol step. |
442+ | ** Document error cases** | Specify what errors can occur and how participants should handle them. |
443+ | ** Version independently** | The handler version evolves independently of UCP core versions. |
444444
445445### Security
446446
447- | Practice | Description |
448- | :---------| :------------|
449- | ** Require binding** | Always tie credentials to a specific checkout via ` binding ` . |
447+ | Practice | Description |
448+ | :----------------------------- | :--------------------------------------------------------------------------- |
449+ | ** Require binding** | Always tie credentials to a specific checkout via ` binding ` . |
450450| ** Minimize credential exposure** | Design flows so raw credentials (PANs, etc.) touch as few systems as possible. |
451- | ** Specify token lifetimes** | Document whether tokens are single-use, time-limited, or session-scoped. |
451+ | ** Specify token lifetimes** | Document whether tokens are single-use, time-limited, or session-scoped. |
452452
453453### Maintainability
454454
455- | Practice | Description |
456- | :---------| :------------|
457- | ** Host schemas at stable URLs** | Schema URLs should not change; use versioned paths if needed. |
458- | ** Fail gracefully** | Define clear error responses for common failure scenarios. |
459- | ** Link to examples** | Reference existing handler specs and the [ Tokenization Guide] ( tokenization-guide.md ) for common flows. |
455+ | Practice | Description |
456+ | :------------------------------ | :--------------------------------------------------------------------------------------------------- |
457+ | ** Host schemas at stable URLs** | Schema URLs should not change; use versioned paths if needed. |
458+ | ** Fail gracefully** | Define clear error responses for common failure scenarios. |
459+ | ** Link to examples** | Reference existing handler specs and the [ Tokenization Guide] ( tokenization-guide.md ) for common flows. |
460460
461461---
462462
463463## See Also
464464
465465- ** [ Tokenization Guide] ( tokenization-guide.md ) ** — Guide for building
466466 tokenization payment handlers
467- - ** [ Google Pay Handler] ( https://developers.google.com/merchant/ucp/guides/gpay_payment_handler.md ) { target="_ blank" }**
467+ - ** [ Google Pay Handler] ( https://developers.google.com/merchant/ucp/guides/google-pay-payment-handler ) { target="_ blank" }**
468468 — Handler for Google Pay integration
469469- ** [ Shop Pay Handler] ( https://shopify.dev/docs/agents/checkout/shop-pay-handler ) { target="_ blank" }**
470470 — Handler for Shop Pay integration
0 commit comments