Authenticate to your card issuing platform (e.g., Stripe Issuing) using a server-side API key scoped to card creation only — never embed this key in the agent runtime.
Create a virtual card with type=single_use, a spending_controls object that sets spending_limits (amount + interval=all_time), and optionally locks allowed_categories to specific MCC codes relevant to the purchase.
Set the card expiration to the shortest window that covers the transaction — 15–60 minutes for synchronous purchases, longer only if the checkout flow is asynchronous.
Pass the card PAN, expiry, and CVC to the agent in a short-lived, in-memory context; do not log these values anywhere.
After the charge is attempted, poll the authorization events on the card; once a successful authorization appears (or the card expires), mark the card record as consumed in your own DB.
Reconcile the authorization amount against the intended purchase amount; if they differ, trigger an alert and initiate a review before settlement.
Known gotchas
Single-use cards can still be re-authorized if the first authorization is reversed — treat 'consumed' as 'first auth seen', not 'card destroyed'; cancel the card explicitly via API after the first auth.
Some merchants pre-authorize a higher amount (e.g., hotels, gas stations) before settling the real amount — set your spend limit at least 10–20% above the expected purchase price or the auth will decline.
Stripe Issuing is only available to platforms with an approved Issuing program; self-service signup is not instant — factor in onboarding time before committing to this architecture.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp