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.
Errors
FAQ
Do internal transfers cost anything?
Do internal transfers cost anything?
No — transfers between accounts of your organization are free and
instantaneous.
Can I transfer between different assets?
Can I transfer between different assets?
No — both sides move the same asset (USDT to USDT, USDC to USDC…). To
change asset, convert first with Swaps.
Can a transfer be reversed?
Can a transfer be reversed?
No — transfers are instantaneous and irreversible. If you sent to the wrong
account, coordinate the return with the counterparty.
How does sending by phone work?
How does sending by phone work?
to_phone only resolves verified phone numbers of your organization.
An unverified or unknown number answers 404; if more than one account
matches you get recipient_ambiguous (422) — use to_alias or the account
ID instead.What are to_alias and to_qr_token?
What are to_alias and to_qr_token?
Alternative recipients: the account’s immutable alias and its profile QR
token (
GET /v1/me/qr). All resolve within your organization only.What is checkout_token for?
What is checkout_token for?
It settles a checkout link by internal transfer: the
destination is forced to the link’s account and the amount must cover the
quoted due (
checkout_amount_mismatch, 422, otherwise).