Skip to main content

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.

API v1 · Legacy

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.approved webhook 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.