Skip to main content
CBPay cards spend Just-In-Time from the account’s central balance: no prefunding, no moving balance around. Each card picks which balance it spends from (spending_asset: USDT, USDC, BTC or GOLD). USDT/USDC are 1:1 with the USD; BTC and GOLD convert at the price of the moment of each event. Every purchase is authorized in real time against that asset’s available balance and the card’s own limits, and the debit shows up immediately in the movement history.

How many cards you can hold

Each card spends from the account’s central balance in its configured asset (spending_asset, USDT by default). Fine-grained control is per-card spending limits (per transaction, daily, monthly), always measured in USD, which you can change at any time.

Choosing the spending balance (USDT, USDC, BTC or GOLD)

Set spending_asset when creating the card or change it later with PATCH. It only affects future purchases: in-flight authorizations keep the asset they were debited in (and their reversal returns that same asset).
USDT and USDC are both worth 1 USD, so the conversion is exact 1:1 with no exchange fee: a 25.00 USD purchase debits 25.000000 of the chosen asset. BTC and GOLD convert at the effective price of the moment of each event (the same settlement price you see in GET /v1/rates, settlement block):
  • Authorization: the purchase’s equivalent in your asset is reserved plus a small cushion (not a charge: it covers price drift until clearing and is returned at capture). If the execution price is not available at that moment, the purchase is declined (pricing_unavailable) — your balance is never converted with an untrustworthy price.
  • Settlement (capture): the final amount is re-converted at the price of the capture moment; the cushion’s excess returns to your balance (or the difference is debited if the price moved beyond the cushion).
  • Reversal of an authorization: the EXACT reserved amount is returned, with no conversion.
  • Refunds and adjustments after capture: re-converted at the price of the moment of the event. The price may move between the purchase and the refund — you receive the equivalent in your asset at that moment’s price, not the original quantity.
  • BTC/GOLD purchases share your account’s volatile-asset limits (per operation and 24h volume, visible in GET /v1/settlement).
If the chosen asset’s balance is short, the purchase is declined with insufficient_funds — there is no automatic fallback to another balance.
With BTC/GOLD your balance is exposed to price moves between a purchase’s events (authorization, capture, refund). Every conversion uses the effective price of its moment — CBPay never re-quotes amounts backwards nor deducts “just in case”: the authorization cushion is always returned at settlement.

Costs (configured by your operator, can be 0)

Exact amounts come from GET /v1/rates (fees field). Every issuance charge is automatically refunded if issuance fails.

Create a card

The flow depends on whether your account is a person or a company — pick your tab. The common rule: the cardholder is verified ONCE per account, on the first issuance; subsequent cards reuse it with no data. The idempotency_key is always required (a retry with the same key returns the original card and never double-charges).
A person account issues cards for itself (at most 1 virtual + 1 physical).Your first card creates and verifies your holder at the issuer. Since your account already approved its identity verification, your data and documents auto-fill from your verification — you only add the issuer-specific fields (occupation, salary_usd); any field you send explicitly wins over the autofill:
occupation is a catalog code (see below) and salary_usd is whole US dollars. If your verification was done through the wizard without some data or document the issuer requires, add it explicitly to the cardholder (first_name, email, address, id_front_url…, same format as always).Your second card (the physical one, for example) asks for no data — your holder is already verified:
A third card of the same type responds 409 card_limit_reached (cancel the existing one first).
Response (same shape in every case):
You can pin the spending balance from the start by adding "spending_asset": "USDC" to the creation body (USDT if omitted).
Documents are actually validated by the issuer: URLs must point to legitimate, reachable documents. If they are missing or insufficient, issuance fails (422 core_rejected or 409 cardholder_kyc_pending), the fee is refunded automatically and you can retry with corrected data.
Person or company? The differences between both account types across ALL products are summarized in persons and companies.

Occupation and business activity (catalog codes)

When designating a person, occupation must be a code from the official catalog (not free text); for a company, so must kind_of_business. Look them up (searchable with ?q=):
Each item is { "code": "...", "label": "..." }. Use the code in occupation / kind_of_business. An out-of-catalog value returns 400 invalid_occupation or 400 invalid_kind_of_business before reaching the issuer. salary_usd is in dollars (integer).

Physical cards: activation

A physical card is born pending_activation and travels inactive for security. Once the holder has it in hand:

Reveal PAN and CVV (sensitive data)

Only the owning account can reveal them (never the org admin). The response is one-shot: display it to the holder and discard it.
Never store or log the PAN/CVV. CBPay does not persist it either: the response comes straight from the issuer (PCI standard).

Limits and freeze/unfreeze

Update limits
"0" removes a limit. To freeze (declines every purchase instantly):
Freeze

Transactions and their lifecycle

spend_asset / spend_amount show which balance the purchase actually debited and how much in that asset (amount_usd / amount_usdt remain the USD reference value). For BTC/GOLD, an authorized transaction’s spend_amount includes the reserve cushion; after settlement it shows the final amount. If settlement arrives for a different amount than authorized (tips, merchant conversion), the adjustment is applied automatically: positive debits the difference, negative returns it.

Cancel a card

Irreversible. Bills card_cancellation when configured.

Webhooks

Subscribe the same way as every other event (see Webhooks).

FAQ

No. Cards hold no balance of their own: every purchase is authorized in real time against the account’s balance (in the card’s spending asset). If the balance covers it and the purchase respects the limits, it is approved.
They all spend from the account’s central balances. Each authorization debits atomically: you can never spend more than the asset’s available balance, no matter how many cards operate in parallel.
Purchases are processed in USD and debited from the card’s configured balance (spending_asset). USDT/USDC are 1:1 with the dollar, with no conversion fee; BTC and GOLD convert at the effective price of the moment of each event (the same one in the settlement block of GET /v1/rates).
Yes: spending_asset is per card. A company can have, for example, corporate cards spending USDT, employee cards spending USDC and a personal one spending BTC. Changing it with PATCH only applies to future purchases.
Network settlement arrives 1-2 days after the authorization, and the BTC/gold price can move in between. That is why the authorization reserves the purchase’s equivalent plus a small percentage. It is not a charge: at settlement, the purchase is re-converted at that moment’s price and everything reserved in excess automatically returns to your balance.
The purchase is declined (pricing_unavailable) — CBPay never converts your balance with an untrustworthy price. It is a transient condition (degraded price feed): retry in a few minutes or switch the card to USDT/USDC. Events that cannot be declined (the settlement of an already-approved purchase, a refund) are never blocked: they are processed with the last known price plus a prudential margin, audited in the movement.
Refunds convert at the price of the refund moment, not the purchase’s: you receive the equivalent in your asset of the refunded USD amount. If BTC went up since the purchase you receive less BTC (same USD value); if it went down, more. Your BTC/GOLD balance is always exposed to the price — that is the nature of spending from a volatile asset.
The card is frozen automatically (card_status_changed event with reason: monthly_fee_unpaid). No debt accrues; once the balance is topped up, unfreeze it with PATCH { "frozen": false }.
Company accounts can issue for any designated person. That person must have an approved KYC verification — you pass their verification_id in the cardholder and their data and documents auto-fill. The card always spends from the balance of the issuing company account.
Last modified on July 10, 2026