Skip to main content
Banking gives you real bank accounts in the name of your verified profile: you receive funds over international rails (SEPA, SWIFT, ACH depending on the currency), hold fiat balances and send payments to third parties. It is a separate product from your USDT balance: banking money lives in your bank accounts, not in the CBPay balance.
Banking fees (banking_customer, banking_account, banking_operation) are fixed, debited from your USDT balance when each operation executes, and refunded automatically if the operation fails. With a fee of 0 (the default) the service is free. The banking_fee field on each response shows what was charged.

The full flow

  1. Create your banking profile (POST /v1/banking/customer) — once.
  2. Upload verification documents and submit for review.
  3. Once approved, open accounts per currency.
  4. Register beneficiaries (counterparties) for third-party payments.
  5. Send payments: quote with prepare, execute with operations.
State changes arrive through the banking_customer_status_changed and banking_operation_status_changed webhooks (webhooks).

1. Create your banking profile

Once per account. If you omit type, name or email, they are filled from your CBPay account:
Response 201:
If your account already has a banking profile — 409 banking_customer_exists. Check the state at any time:

2. Documents and verification

Upload each document as base64 (free):
Then submit the profile for review (free):
Profile states: draftsubmittedunder_reviewapproved or rejected. The banking_customer_status_changed webhook notifies each change:

3. Open bank accounts

With the profile approved, create one account per currency. Available currencies: USD (ACH/Fedwire/SWIFT rails) and EUR (SEPA/SWIFT):
Response 201data carries the details to receive funds (account number/IBAN, routing, bank):
List your accounts and check balances:
Limit for person accounts: a person account can hold at most 1 bank account. Attempting a second one returns 409 banking_account_limit. Company accounts have no limit.

Third-party users (companies only)

If your account is a company, besides your own accounts you can register third-party banking users — your end clients (persons or companies) — each with their own identity and verification and bank accounts in their name. No limit on third parties or accounts per third party.

Registering the third party

Registration requires the verification_id of an approved KYC/KYB verification of the third party — their single identity inside CBPay. The type comes from the verification kind (KYC ⇒ INDIVIDUAL, KYB ⇒ COMPANY), the data (name, email, address) auto-fills from the verified profile (whatever you send explicitly wins), and the already-validated documents are re-delivered automatically to the banking provider. The banking profile fee is charged (refunded if the registration fails):
Response 201:
documents_synced counts the verification documents that were loaded automatically into the third party’s banking profile. If one could not be synced (or the bank requests additional categories), upload it through the manual document flow below and then submit.
Save the third_party_id: every third-party route uses it. List and fetch (the GET carries the live verification status):

Third-party verification (free)

Same as your own profile, but on the third party:

Third-party accounts

Once the third party is approved, open accounts for them (same banking_account fee) and operate just like your own:
  • Each third party belongs to you and only you: another CBPay account can never see or operate it (it gets 404).
  • A person account attempting to create third parties receives 403 company_required.
  • Without verification_id (or with a non-approved verification) the registration answers 422 verification_required / 422 verification_not_approved. If you send a type that does not match the verification kind, 422 verification_kind_mismatch. Third parties created before this rule keep operating normally.
  • Registered third parties feed the “new users” metric of your account summary.

4. Register beneficiaries

To pay third parties, first register the beneficiary with their banking details (free; it goes through moderation before it can be used):
List yours with GET /v1/banking/counterparties and attach more accounts to an existing beneficiary with POST /v1/banking/counterparties/{id}/accounts.

5. Send payments

Two operation types: Quote first (free, moves no money):
Execute with an idempotency key (banking_operation is charged here):
Response 202:
  • The final state arrives through the banking_operation_status_changed webhook (completed / failed); you can also poll GET /v1/banking/operations/{id}. Once the operation reaches a final state, the webhook includes its receipt_url and you can download the PDF receipt with GET /v1/banking/operations/{id}/receipt (receipts).
  • Retries with the same Idempotency-Key return the original operation (idempotency_hit: true) without charging the fee again.
Complete traceability. Every banking operation is recorded on your account: it shows up in the banking_operations section of the statement, its money reconciles in the BANK_USD/BANK_EUR mirror balances (assets section), and its volume adds to the gross_volume in analytics. The authoritative balance remains the bank’s: the mirror is reconciled periodically.
The full history, with filters:

Operation statuses

Errors

Last modified on July 11, 2026