Skip to main content
POST
Issue a card
A business client cannot currently issue a card through this API. customerId is required for a business client, and that customer must be at tier 2 or above — but every customer is created at tier 1 and no endpoint raises it. Every attempt therefore ends in 404 card_holder_not_found. This is recorded as an open contract decision.

What issuance does

Four things happen in one call: a hidden USD balance account is opened for the card, the card is created at the provider, your funding account is debited, and the card is funded. The operation in the response tracks all of it.

Idempotency, and retrying a failure

externalReference is the key. Reusing it returns the existing card and operation — except when the previous issuance failed, in which case the same reference re-drives it rather than returning the failure.
This is the opposite of transfers, where a failed attempt keeps its reference and resending returns the failure. Cards retry; transfers do not.

Funding

debitAccountId and amount are required — there is no unfunded card. amount is in the card’s own currency, so USD minor units. The account must be one of your own; a customer wallet is refused with 403 card_client_account_required. When that account is not in the card’s currency, Sakawave quotes the FX itself at issuance and debits the equivalent — you do not pass a quote. POST /v1/card-fx-quotes is still there if you want to show an indicative rate first, but issuance does not take one. Funding and withdrawal on an existing card do.

Types

Error codes

Authorizations

Authorization
string
header
required

A secret API key, sent as Authorization: Bearer sk_test_… in sandbox or Bearer sk_live_… in live.

Body

application/json

A card is always issued funded. A disposable card cannot carry spending controls.

type
enum<string>
required
Available options:
virtual,
disposable
brand
enum<string>
required
Available options:
mastercard
currency
enum<string>
required
Available options:
USD
externalReference
string
required

Your idempotency key for the issuance operation.

Required string length: 1 - 120
label
string
required
Required string length: 1 - 80
debitAccountId
string
required

One of your own accounts. A customer wallet is refused.

Required string length: 26
Pattern: ^[0-7][0-9A-HJKMNP-TV-Z]{25}$
Example:

"01K2Z3AB4C5D6E7F8G9HJKMNPQ"

amount
string
required

A positive integer number of minor units.

Pattern: ^[1-9]\d*$
Example:

"2500000"

customerId
string

Required for a business client. The customer must be an individual at tier 2 or above with a full name, email, and phone number.

Required string length: 26
Pattern: ^[0-7][0-9A-HJKMNP-TV-Z]{25}$
Example:

"01K2Z3AB4C5D6E7F8G9HJKMNPQ"

spendingControls
object

Per-card limits, in USD minor units. Not available on a disposable card.

Response

Successful response.

card
object
required
operation
object
required