Issue a card
Cards
Issue Card
Issue a new virtual card to a cardholder. POST /cards. Requires cards:write scope.
POST
Issue a card
Overview
Issue a virtual prepaid card to a cardholder under one of your programs. PassproductId — the program, card type, and spend limits are all derived from the product automatically.
JIT vs pre-funded cards:
- JIT-enabled products (
features.hasJIT: true): The card is funded on-demand at the point of each transaction.amountis optional. - Standard products (
features.hasJIT: false): The card requires an initial balance at issuance.amountis required.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
cardholderId | string | Yes | The cardholder to issue the card to |
productId | string | Yes | The card product — program, card type, and spend limits are derived from this |
amount | number | Conditional | Initial balance in USD. Required when the product is not JIT-enabled |
customName | string | No | Card label. Defaults to the cardholder’s full name |
Example
Success Response (201)
Response Fields
| Field | Type | Description |
|---|---|---|
id | string | Card identifier (prefix crd_) |
cardholderId | string | The cardholder this card belongs to |
productId | string | The product the card was issued under |
status | string | Always ACTIVE at issuance |
cardType | string | VIRTUAL or PHYSICAL |
cardBrand | string | VISA or MASTERCARD |
maskedPan | string | BIN-masked PAN — first 6 digits + 6 stars + last 4 (e.g. 445123******4123) |
last4 | string | Last 4 digits of the PAN |
createdAt | string | ISO 8601 creation timestamp |
updatedAt | string | ISO 8601 last-update timestamp |
nameOnCard | string | Name displayed on the card — customName if provided, otherwise the cardholder’s full name |
expirationDate | string | Card expiry in MM/YYYY format (e.g. 06/2030) |
balance | number | Current card balance in USD |
currency | string | Card currency (always USD) |
features | object | Card capability flags inherited from the product |
features.has3DS | boolean | 3D Secure enabled |
features.hasApplePay | boolean | Apple Pay tokenisation supported |
features.hasGooglePay | boolean | Google Pay tokenisation supported |
features.hasJIT | boolean | Just-In-Time funding enabled (no pre-fund required) |
features.hasSpendControl | boolean | Spend limit control active |
features.hasMccControl | boolean | MCC (merchant category) control active |
features.isReloadable | boolean | Card can be topped up via POST /cards/{id}/fund |
features.isOneTimeUse | boolean | Card terminates automatically after its first settled transaction |
spendingLimit | number | Spend cap per spendingPeriod in USD, inherited from the product |
spendingPeriod | string | Period over which the spend cap applies — TRANSAMOUNT, DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY, or LIFETIME |
billingAddress | object | Billing address registered with the card provider |
billingAddress.address | string | Street address |
billingAddress.city | string | City |
billingAddress.state | string | State or region |
billingAddress.zipCode | string | Postal code |
billingAddress.country | string | Two-letter ISO 3166-1 country code |
Webhook
ACARD_ISSUED event fires after successful provisioning:
Error Codes
| Code | HTTP | Cause |
|---|---|---|
CARD_AMOUNT_REQUIRED | 400 | amount was not provided for a non-JIT product |
INVALID_REQUEST | 400 | Missing required field or unsupported card type |
CARDHOLDER_NOT_FOUND | 404 | Cardholder does not exist or belongs to another business |
PRODUCT_NOT_FOUND | 404 | Product does not exist or belongs to another business |
PROGRAM_NOT_FOUND | 404 | Program linked to the product not found |
PRODUCT_INACTIVE | 422 | Product is not active |
PROGRAM_INACTIVE | 422 | Program is not active |
CARDHOLDER_INACTIVE | 422 | Cardholder is suspended or terminated |
CARDHOLDER_KYC_NOT_APPROVED | 422 | Cardholder KYC is not APPROVED or WAIVED |
CARDHOLDER_CARD_LIMIT_EXCEEDED | 409 | Cardholder has reached the maxCardsPerCardholder limit for this product |
PROVIDER_CREATE_FAILED | 422 | Card creation was rejected by the card provider |
INSUFFICIENT_SCOPE | 403 | Key lacks cards:write scope |
INTERNAL_ERROR | 500 | Server error |
Authorizations
API key from the FYATU CaaS portal. Pass as Authorization: Bearer <key>.
Body
application/json
The cardholder to issue the card to
Example:
"chl_01HXYZ1234ABCDEF5678"
The card product — card type and program are derived from this
Example:
"prd_01HXYZ1111ABCDEF0001"
Initial balance in USD. Required for non-JIT products; optional for JIT-enabled products.
Example:
100
Card label. Defaults to the cardholder's full name when omitted.
Example:
"Travel Card"

