Skip to main content
POST
Create Card

Overview

Issue a new virtual card to a cardholder. The cardholder must have verified KYC status and your business wallet must have sufficient balance for the card amount plus fees.
Card creation is asynchronous. A successful response means the request was accepted; the card may be returned with status CREATING and no PAN yet, and is confirmed only when the card.created webhook fires (or the card’s status becomes ACTIVE). If the response is delayed, the card is still being provisioned — poll Get Card or wait for the webhook rather than treating the immediate response as final. A card.failed webhook indicates a genuine failure.

Prerequisites

  1. Verified Cardholder: The cardholder must exist and have status: ACTIVE
  2. Sufficient Balance: Wallet must cover: amount (in USD) + issuanceFee
  3. Active Application: Your app must be in ACTIVE status

Request Body

Deprecation Notice: The spendingLimit field is deprecated and will be removed in a future version. Use productId to select the card product, which determines the spending limit, brand, and currency automatically. If both productId and spendingLimit are provided, productId takes precedence.

Example Usage

EUR Card Example

When issuing a EUR-denominated card, the amount is specified in EUR. Your wallet (USD) is debited the equivalent in USD at the current exchange rate.

Response Fields

Card Status on Creation

Cards are provisioned asynchronously by the card provider. When a card is not ready in the create response, the API returns immediately with status: CREATING (or PROCESSING on legacy products) and card details (last4, maskedNumber, expiryDate) will be null. Provisioning usually completes within seconds but can take up to ~1 hour. Once the card is ready, a card.created webhook is sent with the full card details and status: ACTIVE. If creation fails, a card.failed webhook is sent and the held balance is released.
You can poll GET /cards/{cardId} to check the card status, but we strongly recommend using webhooks instead of polling.

Webhook Events

card.created

Sent when a PROCESSING card becomes active:

card.failed

Sent when a PROCESSING card fails to be created. The held balance is automatically released.

Error Responses

Use the List Products endpoint to discover available card products and their fees before creating a card.

Authorizations

Authorization
string
header
required

JWT access token obtained from /auth/token

Body

application/json
cardholderId
string
required

ID of the cardholder to issue card to

amount
number
required

Initial funding amount in product currency (minimum $5 or €5)

Required range: x >= 5
name
string

Name on card (defaults to cardholder name if not provided)

Minimum string length: 4
productId
string

Card product to issue (from List Products endpoint). Determines brand, currency, and spending limit. Defaults to the product marked isDefault if not provided.

Example:

"MCUSD1"

spendingLimit
enum<integer>
default:5000
deprecated

Deprecated — Use productId instead. Monthly spending limit in USD.

Available options:
5000,
10000

Response

Card created successfully

success
boolean
Example:

true

status
integer
message
string
data
object
meta
object