Cards
A card is a virtual prepaid payment instrument. It carries a PAN, CVV, expiry date, and a spendable balance. Cards are issued against a product — the product is the template that determines the card’s scheme (Visa/Mastercard), currency, spending limits, 3DS, and tokenization support.Prerequisites for Issuance
Two conditions must be met before a card can be issued:- Cardholder
kycStatusmust beAPPROVED— attempting to issue to an unapproved cardholder returns422 CARDHOLDER_KYC_NOT_APPROVED - The product’s program must be
ACTIVE— a paused or closed program blocks card creation under that product
SANDBOX and LIVE.
Issuing a Card
You need acardholderId and a productId. The product determines everything else — program, scheme, currency, and limits — so there is no need to specify a programId.
POST /cards/{id}/fund to load it before the cardholder can spend.
Discover available productId values via GET /programs/{programId}/products.
Card Lifecycle
Card Statuses
| Status | Can transact | Can fund | Can unload | Description |
|---|---|---|---|---|
ACTIVE | Yes | Yes | Yes | Normal operating state |
FROZEN | No | Yes | Yes | Purchases blocked — balance intact |
TERMINATED | No | No | No | Permanently closed |
Balance Flow
All card operations move money between the program ledger and the card balance:| Operation | Program ledger | Card balance |
|---|---|---|
POST /cards/{id}/fund | Debited | Credited |
POST /cards/{id}/unload | Credited | Debited |
POST /cards/{id}/terminate | Credited (full refund) | → 0 |
| Authorization (APPROVED) | No change | Held (reduces available) |
| Clearing | No change | Decreases |
| Reversal | No change | Increases |
Fund a Card
amountis in dollars (100.00= $100)- Always use
Idempotency-Key— if your request times out and you retry, the card won’t be double-funded CARD_FUNDEDwebhook fires on success;CARD_FUND_FAILEDon failure- Funding a frozen card is allowed — balance is added; spending re-enables after unfreezing
Unload a Card
- Cannot unload more than the card’s current available balance →
422 INSUFFICIENT_CARD_BALANCE CARD_UNLOADEDwebhook fires on success;CARD_UNLOAD_FAILEDon failure
Freeze and Unfreeze
Temporarily block a card from making purchases without touching its balance:- A frozen card rejects all authorization attempts at the card network level
- Frozen cards can still be funded and unloaded
409 CARD_ALREADY_FROZEN/409 CARD_NOT_FROZENguard against double-transitions
Terminate a Card
Termination is permanent and irreversible. The"confirm" field prevents accidental calls:
"confirm": "TERMINATE_CARD" returns 400 CONFIRMATION_REQUIRED.
What happens:
- All pending authorizations are reversed
- Remaining balance is returned to the program ledger
- Card status becomes
TERMINATEDpermanently CARD_TERMINATEDwebhook fires
409 CARD_HAS_PENDING_TRANSACTIONS. Authorizations typically clear within 24–72 hours. Retry after they settle.
Replace a Card
Issue a replacement for a compromised or lost card:CARD_TERMINATED fires for the old card and CARD_ISSUED for the new one.
Masking and Sensitive Data
The CaaS API never returns full card numbers or CVV. All card data is masked:| Field | Returned value |
|---|---|
maskedPan | **** **** **** 4242 |
last4 | 4242 |
expiryMonth / expiryYear | 5 / 2029 |
| Full PAN | Never returned via API |
| CVV | Never returned via API |
Just-In-Time (JIT) Cards
Some products support JIT funding — cards issued with no pre-loaded balance. When the cardholder makes a purchase, Fyatu checks your program ledger balance in real time and approves or declines the authorization automatically. JIT is controlled by the product (hasJIT: true). If a product has JIT enabled, amount is optional at card creation time:
CARD_ISSUED webhook will include "isJitfEnabled": true. Every authorization attempt then fires CARD_AUTHORIZATION with the decision.
See the JIT Cards guide for the full flow, sandbox testing, and program balance management.
Webhook Events
| Event | Fired when |
|---|---|
CARD_ISSUED | Card successfully issued (isJitfEnabled: true for JIT cards) |
CARD_AUTHORIZATION | Authorization approved or declined (JIT and pre-funded) |
CARD_FUNDED | Balance added to a card |
CARD_FUND_FAILED | Fund operation failed |
CARD_UNLOADED | Balance returned from a card to the program ledger |
CARD_UNLOAD_FAILED | Unload operation failed |
CARD_FROZEN | Card frozen |
CARD_UNFROZEN | Card unfrozen |
CARD_TERMINATED | Card permanently closed |
Endpoints
POST /cards— Issue cardGET /cards— List cardsGET /cards/{id}— Get cardPOST /cards/{id}/fund— Fund cardPOST /cards/{id}/unload— Unload cardPOST /cards/{id}/freeze— Freeze cardPOST /cards/{id}/unfreeze— Unfreeze cardPOST /cards/{id}/terminate— Terminate card

