Create Virtual Cards
Virtual cards are created instantly and are ready for online payments and wallet provisioning (Apple Pay / Google Pay) as soon as the backing vault is funded.
This page is part of the reference of the first version of the Web3Card API, kept here for reference. API v1 does not take new integrations: API v2 replaces it, and the platform today works as described in the rest of this manual.
Prerequisites
- User created and email verified
- KYC approved (
kyc.approvedwebhook received) - Vault deployed for the user
Create the card
curl -X POST https://api.web3card.dev/v1/cards \
-H "Authorization: Bearer w3c_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "userId": "usr_9f4c", "type": "virtual" }'
{
"id": "card_3b7c",
"userId": "usr_9f4c",
"type": "virtual",
"status": "active",
"last4": "1234",
"network": "visa",
"vaultId": "vlt_77aa",
"createdAt": "2026-07-19T14:00:00Z"
}
Display card credentials securely
Full card credentials are never returned by the API. To show PAN, expiry, and CVV to the cardholder, embed the secure element: a hosted, PCI-compliant iframe scoped to a single card and session.
curl -X POST https://api.web3card.dev/v1/cards/card_3b7c/secure-session \
-H "Authorization: Bearer w3c_live_xxxxxxxxxxxxxxxx"
{ "url": "https://secure.web3card.dev/e/card_3b7c?st=abc123", "expiresIn": 300 }
Render the returned URL in an iframe inside your app. The session is single-use and expires in five minutes.
Wallet provisioning
Virtual cards can be added to Apple Pay and Google Pay by the cardholder directly from the secure element UI, or programmatically through push provisioning if your app is enrolled with the wallets.
Freezing and voiding
# Freeze (reversible)
curl -X POST https://api.web3card.dev/v1/cards/card_3b7c/freeze \
-H "Authorization: Bearer w3c_live_xxxxxxxxxxxxxxxx"
# Void (terminal)
curl -X POST https://api.web3card.dev/v1/cards/card_3b7c/void \
-H "Authorization: Bearer w3c_live_xxxxxxxxxxxxxxxx"
Voiding a card does not touch the vault: the user's balance stays intact and a new card can be created against the same vault.