Introduction
A saved card is not automatically usable by agents. Before you can issue virtual cards against it, the card must be enrolled for agentic payments. Enrollment is a one-time step per card that produces two things:- Account verification via a one-time code sent to the user’s email.
- A passkey bound to the user’s device, so future virtual card authorizations only need a single passkey tap.
Prerequisites
- A saved card. See Save a Card if you have not done this yet.
- The
paymentMethodIdof the saved card. - An authenticated user with a JWT.
Eligible CardsYou can currently create virtual cards only with eligible U.S.-issued Visa credit and debit cards.Not supported: non-US cards, business cards, prepaid cards, Chase cards, Fidelity cards.For Mastercard, AMEX, and Ramp cards, contact us.
Steps
Check the card's current enrollment status
Before starting enrollment, check whether the card is already enrolled. The API returns a
If the status is
status that is always one of the following:| Status | Meaning |
|---|---|
not_started | Enrollment has not been started yet. |
pending | Enrollment was started; the user still needs to complete verification (email and/or passkey). |
active | Enrollment finished; the card is ready for agentic virtual card issuance. |
active, enrollment is complete and you can skip directly to Create a Virtual Card. If it is pending, reuse the existing enrollment response in the next step rather than creating a new one.Start enrollment
If the card is Example response:
not_started, send a POST request with the user’s email to begin enrollment. The response includes an enrollmentId and a verificationConfig that the verification component uses to run the passkey ceremony.Render the verification component
Pass the pending enrollment response to the When
PaymentMethodAgenticEnrollmentVerification component. It runs the full device-binding ceremony inside your UI — the user receives an email code, enters it, and then creates a passkey bound to the current device.onVerificationComplete fires, the server has flipped the enrollment to active. The card is now ready for virtual card issuance.Understanding the Verification Flow
ThePaymentMethodAgenticEnrollmentVerification component runs the following sequence in order:
- The server sends a one-time code to the user’s email.
- The user enters the code in the component’s UI.
- The component prompts the browser to create a passkey bound to this device.
- The server marks the enrollment
active.
Common Gotchas
The email step only happens during enrollment
The email step only happens during enrollment
Once a card is enrolled, all subsequent virtual card authorizations use the passkey alone. If you see the email code prompt on a non-enrollment flow, the device is not yet bound — complete enrollment first.
A passkey is bound to a single device and browser profile
A passkey is bound to a single device and browser profile
If the user clears browser state, switches browsers, or moves to a new device, they may be asked to re-enroll for future actions on that new device.
Enrollment is per payment method, not per agent
Enrollment is per payment method, not per agent
Once a card is enrolled, any agent on the account can have virtual cards issued from it.

