Skip to main content
Internal transfers move balance between two CBPay accounts, atomically in the ledger and always free of charge — the money never leaves the ecosystem. They work with all four currencies (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 by to_account_id, to_email, to_phone (verified phone) or to_contact_id (a contact from your book):
The request shape is identical for every combination (person or company, in any direction) — only the calling credential changes. 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:
Replay with the same idempotency_key200 with the original transfer:
The recipient can be notified via the 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:
Or fetch one by ID (visible only to the two parties):
Each row carries 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 (USDTUSDT, GOLDGOLD, …).
  • You cannot transfer to yourself (400 self_transfer).
  • Requires idempotency_key (body or Idempotency-Key header); replays return 200 with idempotency_hit: true.
  • amount accepts up to the currency’s decimals: 6 for USDT/USDC/ GOLD, 8 for BTC.

Errors

Last modified on July 10, 2026