Scenario 7
A Mastercard Virtual Card Token in an existing checkout form
A registered agent signs its requests with RFC 9421 and Mastercard's single tag Agent-pay-auth, verified at the edge against a key directory whose public location is unknown. At checkout it types a Mastercard Virtual Card Token and a one-time DTVC into the merchant's standard card fields. Verifiable Intent L3a and L3b, linked by checkout_hash, are specified; live use is not shown publicly.
The situation
A consumer asks an to buy one item from a small merchant that has changed nothing for agents: it has an ordinary guest checkout form and a CDN in front of its site. The consumer approves the purchase up front and lets the agent finish it.
Three pieces meet here, and they are not equally deployed. Agent Pay is a proprietary Mastercard program with no public specification or version of its own.Source [1, 2] Mastercard says all its issuers in Europe are enabled at a network level, yet most transactions it has named ran in controlled environments or pilots.Source [3, 4, 5, 6] is a Draft at v0.1.Source [7] Mastercard said on 2026-03-24 that it is embedding Verifiable Intent into the .Source [4] No public source shows it in a live purchase, so its steps below are marked “specified; live use not shown publicly”.
Actors
- Consumer, who holds an L1 and signs the L2 .
- platform, registered and certified; only registered agents can transact through the network.Source [8]
- CDN or edge, which verifies agent signatures; merchants can also do this in their own backend.Source [9]
- Mastercard key directory, hosted by Mastercard for its registered agents.Source [10]
- Merchant, registered through its acquirer or PSP.Source [8]
- Mastercard network and token service, acquirer and issuer.
Step by step
- Delegate (, specified; live use not shown publicly). Verifiable Intent chains credentials from to user to .Source [7, 11] In the consumer signs L2 that bind the agent’s key, with a lifetime of 24 hours to 30 days.Source [12]
- Sign the request (Agent Pay). Mastercard documents
keyid,alg,created,expires,nonceandtaginSignature-Input.Source [9] Its Level 1 guide gives one ,Agent-pay-auth, while the testing glossary writes it in lower case.Source [9, 13] Cloudflare says Agent Pay uses as its agent authentication layer.Source [10] - Fetch the key (Agent Pay). The guide’s example sends
Signature-Agentpointing atagentpay-key-directory.mastercard.com.Source [9] That host did not resolve on 2026-10-11, and Cloudflare names no Mastercard directory URL.Source [9, 10] The directory’s public location is unknown. - Verify and forward (Agent Pay). The edge checks the window, , tag and signature.Source [10] Mastercard’s own sample verification code only the two Visa tag values, so a verifier copied from it would reject this agent.Source [9]
- Checkout page. The merchant serves its ordinary form. Verifiable Intent needs a
checkout_jwt, whose schema and signing are implementation-defined in v0.1.Source [12] - Request a token (Agent Pay). Mastercard directs integrators to Virtual Card Tokens for web guest checkouts with a simple form.Source [14] A one-time may be requested after user validation and consent.Source [14]
- Receive token and DTVC (Agent Pay). A DTVC is a one-time security code issued with a virtual card token, not an itself.Source [14, 15] Mastercard expands it both as Dynamic Token Validation Code and as Dynamic Token Verification Code.Source [14, 16]
- Sign L3a and L3b (Verifiable Intent, specified; live use not shown publicly). L3a carries the final payment mandate to the network and L3b the final checkout mandate to the merchant.Source [11]
checkout_hashis the base64url SHA-256 ofcheckout_jwt, and L3atransaction_idmust equal L3bcheckout_hash.Source [12] Both expire after 5 minutes by recommendation and one hour at most.Source [12] - Fill the form (Agent Pay). The agent types the token into the standard card fields, where it looks like a card number.Source [9] The merchant’s PCI scope stays unchanged.Source [9]
- Merchant checks L3b (Verifiable Intent, specified; live use not shown publicly). The merchant recomputes
checkout_hash. Transport is out of scope for Verifiable Intent, so how a form-based checkout receives L3b is not defined.Source [7] - Authorize (card rails). The merchant submits through its usual acquirer.
- Network checks (Agent Pay; Verifiable Intent per spec). Mastercard validates the DTVC at authorization.Source [15] Per spec the network validates the chain before authorization and enforces one L3 pair per L2 pair.Source [11, 17]
- Issuer decides. The issuer is told whether DTVC validation was performed and makes the final decision.Source [11, 15]
- After the sale. Standard rights and dispute processes apply.Source [9]
Which protocol does what
| Steps | Protocol | Object or message | Spec version |
|---|---|---|---|
| 2 to 4, 9 | Pay (edge) | Signature-Input with tag="Agent-pay-auth" | developer guides, unversioned, read 2026-10-11 |
| 6, 7, 12, 13 | Agent Pay (tokens) | , expiry, one-time DTVC | developer guides, unversioned, read 2026-10-11 |
| 1, 8, 10, 12 | L2, mandate.checkout.1 (L3b), mandate.payment.1 (L3a) | 0.1 Draft, main at 356c296 (2026-04-20) | |
| 11, 14 | Card rails | authorization, chargebacks | outside both |
Verifiable Intent’s main branch has had no commits since 2026-04-20.Source [18, 19]
Where controls apply
- Before authorization. For the agentic-token path, Mastercard says agentic tokens may be single-use, merchant-specific or time-limited; the path in this scenario uses a Virtual Card Token, which is a different product.Source [9] Agents may not use a card already on file at the merchant, because the network could not see the purchase as agentic.Source [9]
- At signing. A controls layer can review L2 before the consumer signs. registers eight constraint types, among them allowed merchants, amount range and budget.Source [20]
- At the edge. Mastercard’s decision table sends requests without a to the non-agent bot policy and blocks unknown keys.Source [9] With no public directory, only partners that Mastercard supplies with keys can verify.
- At settlement. Budget enforcement cannot be done cryptographically and needs stateful tracking by the network.Source [17] Networks and are still developing support for agentic flows.Source [9]
- After the fact. Verifiable Intent gives evidence for disputes but assigns no liability.Source [17] It defines no revocation protocol beyond short lifetimes and key removal.Source [17]
What is observable from outside
Program milestones appear in Mastercard releases, and the repository is public.Source [18] Everything per transaction is private: signature headers, tokens, DTVCs, and authorization messages. No public Pay SDK, API reference or sandbox was found.Source [21, 22] Mastercard has published no Agent Pay volume or value figures.Source [23, 24] It began US testing of a score for the likelihood that an AI agent started a transaction, which implies agent involvement is not always marked reliably.Source [23]
What can go wrong
- Unknown key. The edge blocks the request.Source [9] Because the directory location is not public, a merchant’s own verifier may have no key to check at all.
- Wrong spelling or Visa-only code. A verifier that matches case exactly or copies the sample code rejects a valid .Source [9, 13]
- Checkout and payment disagree. Checkout-payment mismatch is in the threat model; the
transaction_idandcheckout_hashlink exists to catch it.Source [17] - Library rejects L2. An open issue reports that L2 lists each twice, which says verifiers must reject (reported).Source [25, 26]
- Who bears the loss. No agent-specific liability rule or reason code for Agent Pay was published.Source [24, 27] Standard chargeback rules apply.Source [9]
Variants
- Immediate mode. With the consumer present at the end, L2 Immediate carries the final , about 15 minutes long, and no L3 is needed.Source [11, 12]
- instead of a virtual card token. At Levels 1 and 2 an agentic token goes into the same card fields.Source [9] For form-fill checkouts a signed Payment Data object can hold a hash of the tokenized payment data for the merchant to compare.Source [28]
Flow player: A Mastercard Virtual Card Token in an existing checkout form: a signed agent at the edge, a DTVC in card fields, Verifiable Intent L3a and L3b
A registered agent signs its requests with RFC 9421 and Mastercard's single tag Agent-pay-auth, and the merchant's CDN verifies them against a Mastercard key directory whose public location is unknown. At checkout the agent gets a Mastercard Virtual Card Token with a one-time DTVC and types them into the merchant's standard card fields. Verifiable Intent L3a (payment, for the network) and L3b (checkout, for the merchant) are linked by checkout_hash; that layer is specified, and its live use is not shown publicly.
Spec version: Agent Pay developer guides (unversioned, read 2026-10-11); Verifiable Intent 0.1 (main at 356c296) (2026-04-20).
Crosses a trust boundary
Use the left and right arrow keys to step, space to play or pause, Home and End to jump.
Step 1 of 14Consumer to Agent platform (registered agent)
Delegate the purchase: sign Verifiable Intent L2 (specified; live use not shown publicly)
The consumer holds an L1 credential signed by the issuer, a bank or Mastercard on its behalf. To let the agent finish the purchase, the consumer signs an L2 Autonomous mandate pair (typ kb-sd-jwt+kb) that binds the agent's key in cnf.jwk and carries constraints such as allowed merchants and an amount range. This layer is specified in Verifiable Intent 0.1; live use is not shown publicly.
Spec: 4.5 for step 1 (external link)
// Illustrative example, Verifiable Intent 0.1 on main (356c296). Specified; live use not shown publicly.
{
"vct": "mandate.payment.open.1",
"cnf": { "jwk": { "kty": "EC", "crv": "P-256", "x": "<agent-key-x>", "y": "<agent-key-y>", "kid": "agent-key-1" } },
"payment_instrument": { "type": "mastercard.srcDigitalCard", "id": "<token-uuid>" },
"constraints": [
{ "type": "mandate.payment.amount_range", "currency": "USD", "max": 20000 },
{ "type": "mandate.payment.reference", "conditional_transaction_id": "<B64U(SHA-256(checkout_disclosure))>" }
]
}Control point: At signing: a policy engine can review the constraints before the consumer signs L2.
Observable: Private: credentials pass between the consumer's device and the agent.
Step 1 of 14: Consumer to Agent platform (registered agent). Delegate the purchase: sign Verifiable Intent L2 (specified; live use not shown publicly). Crosses a trust boundary.
Which protocol owns each step
- Mastercard Agent Pay
| Step | From and to | Protocol | Control point | Observable from outside |
|---|---|---|---|---|
| 1. Delegate the purchase: sign Verifiable Intent L2 (specified; live use not shown publicly) (crosses a trust boundary) | Consumer to Agent platform (registered agent) | Mastercard Agent Pay | At signing: a policy engine can review the constraints before the consumer signs L2. | Private: credentials pass between the consumer's device and the agent. |
| 2. GET product page, RFC 9421 signature with tag Agent-pay-auth (crosses a trust boundary) | Agent platform (registered agent) to CDN or merchant edge | Mastercard Agent Pay | At signing: the agent platform signs only for merchants inside the L2 allowed-merchant constraint. | Private: signature headers reach only the edge, the merchant and intermediaries on the path. |
| 3. Fetch the agent key by keyid (directory location unknown) (crosses a trust boundary) | CDN or merchant edge to Mastercard key directory (location not public) | Mastercard Agent Pay | None | Not observable: no public Mastercard key directory could be found on 2026-10-11. |
| 4. Verify window, nonce, tag and signature, then forward (crosses a trust boundary) | CDN or merchant edge to Merchant checkout | Mastercard Agent Pay | At the edge: accept Agent-pay-auth in either case, keep a nonce record, block unknown keys. | Private to the zone owner, for example through the CDN's bot management fields. |
| 5. Checkout page with standard card fields (and a checkout_jwt, per spec) (crosses a trust boundary) | Merchant checkout to Agent platform (registered agent) | Mastercard Agent Pay | None | Private |
| 6. Request a Virtual Card Token checkout for the merchant domain (crosses a trust boundary) | Agent platform (registered agent) to Mastercard network and token service | Mastercard Agent Pay | Before authorization: user validation and consent; token limits such as single use, one merchant or a time window are set here. | Private: bilateral between the agent platform and Mastercard. |
| 7. Return the token, its expiry and a one-time DTVC (crosses a trust boundary) | Mastercard network and token service to Agent platform (registered agent) | Mastercard Agent Pay | None | Private |
| 8. Sign L3a and L3b linked by checkout_hash (specified; live use not shown publicly) | Agent platform (registered agent) to Agent platform (registered agent) | Mastercard Agent Pay | At signing: the agent's own policy refuses to sign an L3 pair outside the L2 constraints. | Private |
| 9. POST the card form: token, expiry and DTVC in standard fields (crosses a trust boundary) | Agent platform (registered agent) to CDN or merchant edge | Mastercard Agent Pay | At the edge: verify the checkout path as well as product paths. | Private: a normal form post. |
| 10. Present L1, L2 and L3b to the merchant (specified; transport not defined) (crosses a trust boundary) | Agent platform (registered agent) to Merchant checkout | Mastercard Agent Pay | At the edge (merchant side): reject when checkout_hash does not match or a checkout constraint such as allowed merchants fails. | Private |
| 11. Submit the authorization (crosses a trust boundary) | Merchant checkout to Acquirer or PSP | Not protocol-specific | None | Private |
| 12. Authorization: detokenize, validate the DTVC, check L3a (per spec) (crosses a trust boundary) | Acquirer or PSP to Mastercard network and token service | Mastercard Agent Pay | At settlement: token limits, DTVC validation, Verifiable Intent constraints and cumulative budget at the network. | Private |
| 13. Route with the DTVC result and assurance data (crosses a trust boundary) | Mastercard network and token service to Issuer | Mastercard Agent Pay | None | Private: authorization messages. |
| 14. Approve or decline, then disputes under standard rules (crosses a trust boundary) | Issuer to Merchant checkout | Not protocol-specific | After the fact: chargebacks under standard rules, with intent records and Verifiable Intent chains as evidence. | Private |
Sequence diagram: A Mastercard Virtual Card Token in an existing checkout form: a signed agent at the edge, a DTVC in card fields, Verifiable Intent L3a and L3b
Scroll to see the whole diagram
Diagram loads when it scrolls into view.
Generated from the flow definition (spec version Agent Pay developer guides (unversioned, read 2026-10-11); Verifiable Intent 0.1 (main at 356c296), 2026-04-20). The player above uses the same data.
Text alternative
Sequence diagram: A Mastercard Virtual Card Token in an existing checkout form: a signed agent at the edge, a DTVC in card fields, Verifiable Intent L3a and L3b. 8 participants: Consumer, Agent platform (registered agent), CDN or merchant edge, Mastercard key directory (location not public), Merchant checkout, Acquirer or PSP, Mastercard network and token service, and Issuer. 14 steps, 13 crossing a trust boundary, 6 failure branches. Based on several protocols Agent Pay developer guides (unversioned, read 2026-10-11); Verifiable Intent 0.1 (main at 356c296) (2026-04-20). Step 1: Consumer to Agent platform (registered agent): Delegate the purchase: sign Verifiable Intent L2 (specified; live use not shown publicly). This step crosses a trust boundary. Step 2: Agent platform (registered agent) to CDN or merchant edge: GET product page, RFC 9421 signature with tag Agent-pay-auth. This step crosses a trust boundary. Step 3: CDN or merchant edge to Mastercard key directory (location not public): Fetch the agent key by keyid (directory location unknown). This step crosses a trust boundary. If Key not found in the directory: Mastercard's Level 1 decision table blocks the request. Step 4: CDN or merchant edge to Merchant checkout: Verify window, nonce, tag and signature, then forward. This step crosses a trust boundary. If No Signature-Input or no scheme tag: Sent to the merchant's non-agent bot policy. If A required field is missing: Blocked. Step 5: Merchant checkout to Agent platform (registered agent): Checkout page with standard card fields (and a checkout_jwt, per spec). This step crosses a trust boundary. Step 6: Agent platform (registered agent) to Mastercard network and token service: Request a Virtual Card Token checkout for the merchant domain. This step crosses a trust boundary. Step 7: Mastercard network and token service to Agent platform (registered agent): Return the token, its expiry and a one-time DTVC. This step crosses a trust boundary. Step 8: Agent platform (registered agent) to Agent platform (registered agent): Sign L3a and L3b linked by checkout_hash (specified; live use not shown publicly). Step 9: Agent platform (registered agent) to CDN or merchant edge: POST the card form: token, expiry and DTVC in standard fields. This step crosses a trust boundary. Step 10: Agent platform (registered agent) to Merchant checkout: Present L1, L2 and L3b to the merchant (specified; transport not defined). This step crosses a trust boundary. If checkout_hash differs from the merchant's own checkout_jwt hash: Checkout-payment mismatch; the merchant rejects the order. Step 11: Merchant checkout to Acquirer or PSP: Submit the authorization. This step crosses a trust boundary. Step 12: Acquirer or PSP to Mastercard network and token service: Authorization: detokenize, validate the DTVC, check L3a (per spec). This step crosses a trust boundary. If The DTVC fails or was already used: The issuer is told the DTVC result and can decline. If The amount exceeds the L2 amount_range or budget: Per spec the network rejects the chain; no published response code. Step 13: Mastercard network and token service to Issuer: Route with the DTVC result and assurance data. This step crosses a trust boundary. Step 14: Issuer to Merchant checkout: Approve or decline, then disputes under standard rules. This step crosses a trust boundary.
- Step 1: Consumer to Agent platform (registered agent): Delegate the purchase: sign Verifiable Intent L2 (specified; live use not shown publicly). This step crosses a trust boundary.
- Step 2: Agent platform (registered agent) to CDN or merchant edge: GET product page, RFC 9421 signature with tag Agent-pay-auth. This step crosses a trust boundary.
- Step 3: CDN or merchant edge to Mastercard key directory (location not public): Fetch the agent key by keyid (directory location unknown). This step crosses a trust boundary. If Key not found in the directory: Mastercard's Level 1 decision table blocks the request.
- Step 4: CDN or merchant edge to Merchant checkout: Verify window, nonce, tag and signature, then forward. This step crosses a trust boundary. If No Signature-Input or no scheme tag: Sent to the merchant's non-agent bot policy. If A required field is missing: Blocked.
- Step 5: Merchant checkout to Agent platform (registered agent): Checkout page with standard card fields (and a checkout_jwt, per spec). This step crosses a trust boundary.
- Step 6: Agent platform (registered agent) to Mastercard network and token service: Request a Virtual Card Token checkout for the merchant domain. This step crosses a trust boundary.
- Step 7: Mastercard network and token service to Agent platform (registered agent): Return the token, its expiry and a one-time DTVC. This step crosses a trust boundary.
- Step 8: Agent platform (registered agent) to Agent platform (registered agent): Sign L3a and L3b linked by checkout_hash (specified; live use not shown publicly).
- Step 9: Agent platform (registered agent) to CDN or merchant edge: POST the card form: token, expiry and DTVC in standard fields. This step crosses a trust boundary.
- Step 10: Agent platform (registered agent) to Merchant checkout: Present L1, L2 and L3b to the merchant (specified; transport not defined). This step crosses a trust boundary. If checkout_hash differs from the merchant's own checkout_jwt hash: Checkout-payment mismatch; the merchant rejects the order.
- Step 11: Merchant checkout to Acquirer or PSP: Submit the authorization. This step crosses a trust boundary.
- Step 12: Acquirer or PSP to Mastercard network and token service: Authorization: detokenize, validate the DTVC, check L3a (per spec). This step crosses a trust boundary. If The DTVC fails or was already used: The issuer is told the DTVC result and can decline. If The amount exceeds the L2 amount_range or budget: Per spec the network rejects the chain; no published response code.
- Step 13: Mastercard network and token service to Issuer: Route with the DTVC result and assurance data. This step crosses a trust boundary.
- Step 14: Issuer to Merchant checkout: Approve or decline, then disputes under standard rules. This step crosses a trust boundary.
Source of truth: 4.5 (external link) Generated from src/content/flows/multi-mastercard-token-in-checkout-form.json.
Actors and protocol boundaries
A Mastercard agentic token in an existing checkout form: actors and protocol boundaries
Scroll to see the whole diagram
Diagram loads when it scrolls into view.
Solid lines are documented in Mastercard's developer guides: an RFC 9421 agent signature with the tag Agent-pay-auth verified at the edge, and a Virtual Card Token with a one-time DTVC typed into standard card fields and validated by the network. Dashed lines are specified in Verifiable Intent 0.1 with live use not shown publicly: the consumer's L2 mandate and the L3a and L3b layers linked by checkout_hash. The Mastercard key directory's public location is unknown.
Text alternative
Flowchart. A dashed line from the consumer to the registered agent platform marks the Verifiable Intent L2 mandate as specified with live use not shown publicly. The agent sends RFC 9421 signed requests with the tag Agent-pay-auth to the merchant's CDN, which fetches the key by keyid from a Mastercard key directory whose location is not public, then forwards verified requests to the existing checkout form. The agent requests a token from Mastercard's token service after user consent and receives a virtual card token, its expiry and a one-time DTVC, which it types into the card fields. A dashed line carries the L3b checkout mandate with checkout_hash to the checkout. The checkout sends the authorization to the acquirer, which goes to Mastercard's network to detokenize and validate the DTVC. A dashed line carries the L3a payment mandate, whose transaction_id equals checkout_hash, to the network, with transport not defined. The network sends the DTVC result and assurance data to the issuer.
Source of truth: Mastercard Virtual Card Tokens guide and Agent Pay Level 1 guide (read 2026-10-11), with Verifiable Intent 0.1 (external link) Generated from src/content/diagrams/multi-mastercard-token-in-checkout-form-context.mmd.
Sources
- Mastercard Unveils Agent Pay, Pioneering Agentic Payments Technology to Power Commerce in the Age of AI (external link)
- Level 3 Agentic Commerce: Advanced Programmatic Checkout (external link)
- Europe is Building the Foundations for Trusted Agentic Commerce (external link)
- Mastercard advances agentic payments in Latin America and the Caribbean with live transactions completed across the region (external link)
- Santander and Mastercard complete Europe’s first live end-to-end payment executed by an AI agent (external link)
- Mastercard accelerates AI-powered commerce with Australia’s first authenticated agentic transactions using Agent Pay (external link)
- Verifiable Intent README (external link)
- The Rails for Agentic Commerce (external link)
- Level 1 Agentic Commerce: Enable Agent Support with Minimal Changes (external link)
- Securing agentic commerce: helping AI Agents transact with Visa and Mastercard (external link)
- Verifiable Intent (VI): Specification Overview, version 0.1-draft (external link)
- Verifiable Intent: Credential Format Specification, version 0.1-draft (external link)
- Preparing for Agentic Commerce: Testing, Validation, and Reference Guide (external link)
- Mastercard Virtual Card Tokens (external link)
- Mastercard Virtual Card Tokens: Making Payments (external link)
- Mastercard Virtual Card Tokens test cases (external link)
- Verifiable Intent: Security Model and Threat Analysis, version 0.1-draft (external link)
- GitHub API: agent-intent/verifiable-intent repository metadata (external link)
- Verifiable Intent issue tracker (external link)
- Verifiable Intent: Constraint Type Definitions and Validation Rules (external link)
- Mastercard Developers llms.txt service index (external link)
- Mastercard Checkout Solutions: Release History (external link)
- Mastercard Advances Agentic Commerce With New Trust and Intelligence Services (external link)
- Mastercard Agent Pay review (external link)
- VI v0.1 L2 format lists each mandate disclosure digest in both _sd and delegate_payload; RFC 9901 requires verifiers to reject the credentials (external link)
- RFC 9901: Selective Disclosure for JSON Web Tokens (external link)
- Merchant Cost Consulting note on agentic card fees (external link)
- Level 2 Agentic Commerce: Optimization and Best Practices (external link)