USD, USDT, USDC,
BTC, GOLD, SILVER and PLATINUM — synchronously and instantly, without the money ever
leaving your account. Any pair works (including direct BTC ↔ GOLD,
and USD ↔ USDT at exact 1:1); local fiat (BOB, MXN, ARS) is not
swappable yet (invalid_pair).
The rate you see in the quote is the rate you execute at: no separate
fees — quoted = received.
1. Quote (optional, free)
POST
moment (BTC and GOLD prices move). Stablecoin pairs (USDT ↔ USDC) are
stable.
2. Execute the swap
amount is in the source currency (from_asset), with up to its
decimals (6 for USDT/USDC/GOLD/SILVER/PLATINUM, 8 for BTC).
201 response — the swap is synchronous, your balance changes instantly:
idempotency_key → 200 with the original swap
and idempotency_hit: true — never re-executed.
3. Query and history
GET /v1/movements) and in the
statement the swap shows as swap_out in the
source currency and swap_in in the destination, each reconciling in its
own section.
Rules and limits
- Same account: the money never leaves your account — it only changes currency. That is why no OTP is required.
- Any pair between
USDT,USDC,BTCandGOLD(source ≠ destination). - Execution rate of the moment: BTC and GOLD use the live execution
price; if it is unavailable or stale the swap is rejected with
503 pricing_unavailable(it never executes on an old price). - Volatile-currency limits (BTC/GOLD/SILVER/PLATINUM, shared with payouts and card
purchases): per-operation cap and 24h rolling volume cap per account
(
GET /v1/settlementshows yours). USDT ↔ USDC has no limit. - Requires your approved identity verification and the
swapsservice enabled.
BTC price protection
For BTC swaps valued at USD 1,000 or more, CBPay checks the execution reference against the current market book before the swap. If the divergence exceeds the configured threshold, the request returns422 guard_diverged;
wait for convergence or split the operation and retry with the same
idempotency_key. If market data is temporarily unavailable, the swap may
continue with an operational alert and the execution-price safeguards still
apply. This protection does not apply to internal checkout/payin conversions
or OTC flows.
Errors
FAQ
Why does the swap rate differ from the market price I see elsewhere?
Why does the swap rate differ from the market price I see elsewhere?
The quoted rate is your account’s execution rate: it includes the cost
of providing instant, guaranteed conversion (immediate liquidity, no
slippage, without leaving your account). Same philosophy as payout and
payin rates: what is quoted is exactly what you receive, with no surprise
fees afterwards.
Is the quote guaranteed?
Is the quote guaranteed?
No — it is indicative. BTC and GOLD move, so execution uses the price at
the POST moment. Between stablecoins (USDT ↔ USDC) the difference is
negligible. For the final figure, check the
to_amount in the swap
response (already credited).Can I undo a swap?
Can I undo a swap?
There is no undo: an executed swap is final (your balance already changed).
You can swap back any time, at that moment’s rate.
Why was my BTC→GOLD swap rejected by limit if it was my first swap of the day?
Why was my BTC→GOLD swap rejected by limit if it was my first swap of the day?
Volatile-currency limits are shared across swaps, payouts paid from
BTC/GOLD/SILVER/PLATINUM and card purchases from BTC/GOLD/SILVER/PLATINUM — they all count against the same
24h rolling volume of your account. Check your caps at
GET /v1/settlement.What do I gain by holding GOLD or BTC balance?
What do I gain by holding GOLD or BTC balance?
GOLD represents grams of fine gold and BTC bitcoin: price exposure without
leaving the ecosystem. You can pay payouts, fees and card purchases straight
from those balances (multi-asset settlement), and swap back to USDT/USDC
whenever you want.
USD as the principal ledger asset
Accounts useUSD as the default for settlement_asset and
payin_settlement_asset; change it any time with PUT /v1/settlement.
In-flight operations are never re-quoted.
USD ledger amounts use cents (two decimal places). Direct credits and debits,
fees, and supported payout, checkout, POS, and card paths use USD only where
their asset field accepts it. Swaps between USD and USDT use 1:1 pricing and
do not use an FX oracle. BOB, MXN, and ARS remain separate fiat-ledger
assets; v1 money-out pricing for those assets remains unavailable.
Swap execution may have an internal back-office coverage workflow. This does
not change the POST /v1/swaps request or response, the execution rate, or
the account ledger contract.
A payin credited directly to a USD-principal account exposes
credit_asset: USD and the credited fiat amount in cents; usdt_credited
remains the USD-equivalent reporting field. A controversy hold follows the
credited asset: USD credits use hold_asset: USD. disputed and held use hold-asset units;
disputed_usdt and held_usdt are normalized equivalents.