Skip to main content
Your crypto balances are connected to the blockchain. Supported combinations: Every deposit credits the balance of its own asset (a USDC wallet credits your USDC balance; the Bitcoin wallet credits your BTC balance). GOLD is the only balance with no on-chain rail: it moves only via internal transfers and operator credits.

Your account is born with its wallets

Every account — person and company — is created with one deposit wallet per supported combination (tron/usdt, eth/usdt, eth/usdc and btc/btc), free of charge and automatically: as soon as you register, your four addresses are ready to receive funds.
Provisioning runs in the background when the account is created: if you query at the very second of registration an address may still be missing — retry a few seconds later.
Deposit wallets are entry doors, not operating wallets: they only receive crypto that credits your virtual balance. They cannot send funds, and cannot be exported or imported (that is what segregated wallets are for).
Two products, two routes: deposit wallets live under /v1/crypto/wallets and segregated wallets under /v1/segregated-wallets. Every wallet response carries a type discriminator (deposit / segregated) so you can always tell them apart.

Can I create more deposit wallets?

No. Every account — person and company — holds exactly one deposit wallet per network+asset pair, and all of them are born with the account. POST /v1/crypto/wallets exists only to restore a missing pair (an exceptional case): with the four wallets already provisioned it responds 422 wallet_limit_reached.
With the pair already provisioned — 422:
  • Birth wallets are always free; the wallet_creation fee would only apply to a manual restoration (with a fee of 0, the default, it is free; if creation fails, the charge is refunded automatically).
  • Need several wallets with their own balance (per client, per project, per business unit)? That is the segregated wallets product: companies have no limit, persons hold 1 per network+asset pair.

View my wallets

Bitcoin addresses are native bech32 (bc1q…): any modern wallet or exchange can send funds to them. BTC amounts use 8 decimals ("0.00050000").

Deposit

Send the wallet’s asset to its address, over the correct network. When the deposit confirms on-chain, that asset’s balance is credited automatically (net of the funding fee if CBPay configured one) and the crypto_deposit_credited webhook fires:
Send only the wallet’s asset over its network (USDT to a USDT wallet, USDC to a USDC wallet, BTC to the Bitcoin wallet). Addresses are yours and stable: you can reuse them for every deposit.

Confirmation times

The credit always arrives with the webhook and the tx_id so you can verify it on the network explorer.

Transfer (on-chain withdrawals)

Send USDT, USDC or BTC from its balance to any external address (asset is optional: default USDT on tron/eth and BTC on btc; USDC only over eth):
On Bitcoin the destination can be a bech32 (bc1q…), taproot (bc1p…) or legacy (1… / 3…) address. The Bitcoin network fee is covered by the operation itself — you receive the final status via webhook like any other withdrawal.
Response 202amount + fee is debited and the transaction broadcasts:
Every withdrawal saves the address as a contact automatically — name it with "contact_name" in the body, or disable it with "save_contact": false. To repeat a send, use "to_contact_id" instead of to_address (the contact’s saved address for that chain is used).
The final state arrives via the crypto_withdrawal_status_changed webhook: completed (the tx_id is your receipt) or failed (the full debit is refunded). You can also query the withdrawal at any time:
To move balance to another CBPay account, skip the blockchain: internal transfers are instant and free.

Travel Rule (withdrawals above the threshold)

International regulation (FATF R.16, the “Travel Rule”) requires on-chain withdrawals from 1,000 USD to declare who receives the funds before moving the money. Below the threshold nothing changes. There are two paths:
If the destination is a wallet owned by the account holder (not an exchange), declare wallet_type and the beneficiary name:
The response includes "travel_rule_status": "self_hosted_attested".

Movements

Every deposit credits the balance of its wallet’s asset (USDT, USDC or BTC); wallets are entry points, each currency has a single balance.

Errors

Last modified on July 16, 2026