Issue a new virtual Mastercard or Visa prepaid card programmatically. Specify cardholder, amount, and product. POST /cards.
status: ACTIVEamount (in USD) + issuanceFeeACTIVE status| Field | Type | Required | Description |
|---|---|---|---|
cardholderId | string | Yes | ID of the cardholder to issue card to |
amount | number | Yes | Initial funding amount in product currency (minimum $5 or €5) |
name | string | No | Name on card (defaults to cardholder name) |
productId | string | No | Card product to issue (from List Products). Defaults to MCWORLDUSD |
spendingLimit | integer | No | Deprecated — Use productId instead. Monthly spending limit: 5000 or 10000 (default: 5000) |
amount is specified in EUR. Your wallet (USD) is debited the equivalent in USD at the current exchange rate.
| Field | Type | Description |
|---|---|---|
id | string | Unique card identifier |
cardholderId | string | The cardholder this card belongs to |
name | string | Name printed on the card |
last4 | string | null | Last 4 digits of the card number. null when status is PROCESSING |
maskedNumber | string | null | Masked card number (e.g., ****4829). null when status is PROCESSING |
expiryDate | string | null | Card expiration date (MM/YYYY). null when status is PROCESSING |
brand | string | Card brand: MASTERCARD or VISA |
currency | string | Card currency: USD or EUR |
status | string | Card status: ACTIVE or PROCESSING (see below) |
initialBalance | number | Initial funding amount in card currency |
createdAt | string | Card creation timestamp |
status: PROCESSING and card details (last4, maskedNumber, expiryDate) will be null.
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.
| Status | Meaning |
|---|---|
ACTIVE | Card is ready to use immediately |
PROCESSING | Card is being created — listen for card.created or card.failed webhook |
GET /cards/{cardId} to check the card status, but we strongly recommend using webhooks instead of polling.card.createdPROCESSING card becomes active:
card.failedPROCESSING card fails to be created. The held balance is automatically released.
| Error Code | Description |
|---|---|
APP_INACTIVE | Application is not active |
CARDHOLDER_INACTIVE | Cardholder is not active (KYC not verified) |
INSUFFICIENT_BALANCE | Business wallet balance is too low |
PRODUCT_NOT_FOUND | Invalid or unavailable card product |
RATE_UNAVAILABLE | Unable to fetch exchange rate for EUR products |
HOLD_FAILED | Failed to hold balance from business wallet |
PROVIDER_NOT_CONFIGURED | Card provider account not configured |
CARD_CREATION_FAILED | Failed to create card at the bank partner |
CARDHOLDER_REGISTRATION_FAILED | Failed to register cardholder with card provider |
CARDHOLDER_RESTRICTED | Cardholder has been restricted by the card provider |
BUSINESS_KYB_REQUIRED | Business KYB verification incomplete |
JWT access token obtained from /auth/token
ID of the cardholder to issue card to
Initial funding amount in product currency (minimum $5 or €5)
x >= 5Name on card (defaults to cardholder name if not provided)
4Card product to issue (from List Products endpoint). Determines brand, currency, and spending limit. Defaults to MCWORLDUSD if not provided.
"MCWORLDUSD"
Deprecated — Use productId instead. Monthly spending limit in USD.
5000, 10000