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
- Create your banking profile (
POST /v1/banking/customer) — once. - Upload verification documents and submit for review.
- Once
approved, open accounts per currency. - Register beneficiaries (counterparties) for third-party payments.
- Send payments: quote with
prepare, execute withoperations.
banking_customer_status_changed and
banking_operation_status_changed webhooks (webhooks).
1. Create your banking profile
Once per account. If you omittype, name or email, they are filled
from your CBPay account:
201:
409 banking_customer_exists. Check the state at any time:
2. Documents and verification
Upload each document as base64 (free):draft → submitted → under_review → approved or
rejected. The banking_customer_status_changed webhook notifies each
change:
3. Open bank accounts
With the profileapproved, create one account per currency. Available
currencies: USD (ACH/Fedwire/SWIFT rails) and EUR (SEPA/SWIFT):
201 — data carries the details to receive funds (account
number/IBAN, routing, bank):
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 theverification_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):
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.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 (samebanking_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 answers422 verification_required/422 verification_not_approved. If you send atypethat 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):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):
banking_operation is charged here):
202:
- The final state arrives through the
banking_operation_status_changedwebhook (completed/failed); you can also pollGET /v1/banking/operations/{id}. Once the operation reaches a final state, the webhook includes itsreceipt_urland you can download the PDF receipt withGET /v1/banking/operations/{id}/receipt(receipts). - Retries with the same
Idempotency-Keyreturn 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.