Introduction
A virtual card is issued as an order intent — a request to spend a specific amount against an enrolled payment method, scoped by one or more mandates (spending limits, a description, frequency and more). The user authorizes the intent with their passkey, after which the virtual card becomesactive and its credentials can be retrieved by the agent.
Prerequisites
- A saved card that has been enrolled for agentic payments. See Save a Card and Enroll a Card if you have not done this yet.
- The
agentIdfrom Register an Agent. - The
paymentMethodIdof the enrolled 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
Create the order intent
Send a For the full list of supported mandate types and their fields, see the Create Order Intent API Reference.What to persist
POST request to /api/unstable/order-intents with the agent, the card to charge, and one or more mandates defining the spending rules.| Data | When |
|---|---|
orderIntentId | Always — every later operation keys off of it. |
Merchant descriptor (name, url, countryCode) | When the card will charge the same merchant repeatedly. You pass it on every credential fetch, so saving it once avoids re-collecting it. |
| Card credentials | Never — short-lived and merchant-scoped. Fetch fresh on each purchase. |
Authorize the intent via passkey
If the order intent’s This step is passkey-only. The user does not receive an email code — the one-time email verification was completed during enrollment, and the device is already bound.After
phase is requires-verification, the user must authorize the spending with their passkey. Use the OrderIntentVerification component:onVerificationComplete fires, the order intent’s phase changes to active and the virtual card is ready for credential retrieval.requires-verification → active → expired. For the full phase semantics, see the Get Order Intent API Reference.
Example Response
Example Response
Common Gotchas
Virtual card issuance requires an enrolled card
Virtual card issuance requires an enrolled card
If the
paymentMethodId has not been enrolled, the order intent creation call will fail. Confirm status: "active" on the enrollment before creating an order intent.Each new order intent needs a fresh passkey tap
Each new order intent needs a fresh passkey tap
Unless the response returns
phase: "active" immediately, do not reuse a previous verification — each order intent has its own authorization.Treat `onVerificationError` distinctly from `onVerificationComplete`
Treat `onVerificationError` distinctly from `onVerificationComplete`
A denied or failed verification leaves the order intent in
requires-verification. Do not attempt to fetch credentials until the phase is active.Next Steps
Retrieve Virtual Card Credentials
Fetch the card number, expiration, and CVC to complete a purchase.
Remove Cards
Remove saved cards, delete agents, or rotate a virtual card.

