Lifecycle
Each transition emits a webhook (card.activated, card.frozen, card.unfrozen, card.blocked, card.closed) — but only when the status actually changes. Freezing an already-frozen card returns 200 without a duplicate event.
Issue a card
Prerequisites (in order):- Applicant
status: APPROVED(pollGET /v1/applicants/{id}/kyc-statusor subscribe toapplicant.status_changed). The applicant needs realfirstName/lastNameindata— the issuer rejects cardholders with empty or non-Latin names. - Funding account created (
POST /v1/accounts) - Funds in place — issuance charges an opening fee from the card’s budget. Deposit stablecoins, then a single
POST /v1/accounts/{id}/transfersdirection: "in"converts the deposit and fills the budget. See Card funding. - Cardholder created (
POST /v1/cardholders) - Issue card with body fields below
product_type on the program).
cURL
202 with an issuance_id:
202 Accepted
GET /v1/cards/issuances/{issuance_id} or wait for the webhook: card.created on success, card.issuance.failed (with error, issuance_id, reference_id) on failure.
Idempotency-Keyis required — omitting it returns400 IDEMPOTENCY_KEY_REQUIRED. Retries with the same key + body replay the original response for 72 hours; a same-key request while issuance is in flight returns409with theissuance_id.reference_idis optional — your own unique id per program + environment. Look up later withGET /v1/cards?reference_id=.budget_idis optional (debit programs) — bind the card to a specific named budget; defaults to the applicant’s default budget. See Budgets.
INACTIVE until shipped and activated.
Batch issue and delete
Batch issuance is asynchronous — the issuer returns atask_id you can poll. Up to 100 cards per request.
cURL
cURL
cURL
Spend controls (MCC / consumption scenarios)
Configure issuer-level whitelist/blacklist rules for MCC codes, transaction scenarios, or currencies.usage is one of MCC, SCENARIO, or TRANSACTION_CURRENCY. For MCC rules, keywords must be a 4-digit MCC string (e.g. "7995"). Optionally scope rules to specific Apocor card_ids or issuer card_bin_ids.
cURL
Fund cards and accounts
fund, fund-from-wallet, and defund require an Idempotency-Key header. Successful funding emits card.funded; failures emit card.funding_failed.
Manage a card
Physical cards
Cardholders
Sandbox testing
POST /v1/sandbox/simulate (TEST keys / sandbox issuer only) drives fake spend through a real card so you can exercise your webhook handlers end to end.
cURL
Get
relatedTransactionId from the transaction.authorized event’s data.cardTransactionId, or from GET /v1/cards/{id}/transactions.
Viewing full card details (PAN / CVV)
List and get card responses never include full PAN or CVV — onlylastFour and similar safe fields.
Apocor supports two reveal methods:
Full walkthrough (SDK URLs, bootstrap example, RSA decrypt sample): Viewing card details (PAN / CVV).
API Reference: group Cards — reveal PAN/CVV.