USDT, USDC, BTC,
GOLD) and always between balances of the same currency: the asset
you send is the asset the destination receives, with no conversion.
They work between any combination of accounts:
Create a transfer
The destination is identified byto_account_id, to_email,
to_phone (verified phone) or to_contact_id (a
contact from your book):
asset is
optional and defaults to USDT; it accepts USDT, USDC, BTC or
GOLD, and the destination receives in that same currency.
Response 201 — the transfer is synchronous and immediate:
idempotency_key — 200 with the original transfer:
transfer_received webhook, and both
sides see the movement in their history (transfer_out / transfer_in).
Every transfer saves the recipient as a contact
automatically (send
"save_contact": false to skip it). For safety,
to_phone only resolves accounts with an OTP-verified phone; if more
than one account shares the number it answers 422 recipient_ambiguous.Querying transfers
List your account’s transfers (sent and received), with pagination and date filters:direction (sent or received) from your perspective.
Rules
- Only between active CBPay accounts; internal system accounts cannot receive.
- Always the same currency on both sides: there is no conversion
between balances (
USDT→USDT,GOLD→GOLD, …). - You cannot transfer to yourself (
400 self_transfer). - Requires
idempotency_key(body orIdempotency-Keyheader); replays return200withidempotency_hit: true. amountaccepts up to the currency’s decimals: 6 forUSDT/USDC/GOLD, 8 forBTC.