Getting started
What is the API base URL?
What is the API base URL?
https://api.qbank.cl/platform — every endpoint in this
documentation hangs from it (for example
https://api.qbank.cl/platform/v1/balances).Is there a sandbox environment?
Is there a sandbox environment?
How do I fund my account to get started?
How do I fund my account to get started?
POST /v1/crypto/wallets and send USDT to that address (TRON or
Ethereum); (2) collect fiat with a payin (QR,
announced transfer, etc.). Either way the balance is credited
automatically and a webhook notifies you.Do I need to pass KYC/KYB before operating?
Do I need to pass KYC/KYB before operating?
403 verification_required. Request your link with
POST /v1/me/verification/link and complete the wizard —
full guide. If anything returns 403 account_blocked,
contact the CBPay team.Why does an operation return 403 service_disabled?
Why does an operation return 403 service_disabled?
GET /v1/services
for the full map of what you can use — also handy to decide what to show in
your UI — and contact the CBPay team if you need something enabled. Reads
and money already in flight are never blocked.Which credential should I use: JWT session or API key?
Which credential should I use: JWT session or API key?
pk_…, never
expires). JWT sessions (24 h) are for front-ends with users who log in.
Both travel in Authorization: Bearer <token> (or X-API-Key).Money and rates
What currency is my balance in?
What currency is my balance in?
rate for payouts, payin_rate for payins). See the
money model.How do I know what a payout will cost before creating it?
How do I know what a payout will cost before creating it?
GET /v1/rates (returns your rate per country) and compute:fx_rate,
usdt_amount, fee, total_debit).Is the rate I see in /v1/rates guaranteed?
Is the rate I see in /v1/rates guaranteed?
fx_rate field for audit.Are there minimum or maximum amounts?
Are there minimum or maximum amounts?
invalid_amount or an uneconomic
debit). Maximums depend on your configuration with CBPay.Which fees apply to me and where do I see them?
Which fees apply to me and where do I see them?
GET /v1/rates returns your effective list in the fees
field (FX percentages are already baked into the quoted rate). Details in
fees.Payouts
How long does a payout take to arrive?
How long does a payout take to arrive?
payout_status_changed webhook: don’t assume fixed timings or poll.What exactly happens if a payout fails?
What exactly happens if a payout fails?
available balance
automatically, and the webhook arrives with status: failed and a
status_code explaining the cause. Fix the data and retry with a new
idempotency_key.Can I retry without risking a double payment?
Can I retry without risking a double payment?
idempotency_key is for: repeating the same key
returns the original payout (idempotency_hit: true) without creating or
debiting anything new. Use a different key only when you truly want
another payment. See idempotency.How do I know which beneficiary fields each country takes?
How do I know which beneficiary fields each country takes?
GET /v1/payouts/banks?country=XX returns the current bank codes where
they apply.Can a scanned QR be paid twice?
Can a scanned QR be paid twice?
provider_reference admits a single confirm. Retries with
the same idempotency_key return the original payout.Can I cancel or edit a payout in processing?
Can I cancel or edit a payout in processing?
processing the banking rail already has it; there
is no API cancellation. Wait for the final state: if the rail rejects it,
the full refund is automatic. Verify the beneficiary data before
creating (the free qr/scan exists precisely to confirm the recipient
before paying a QR).Are there minimum, maximum or daily limits?
Are there minimum, maximum or daily limits?
Payins and deposits
When is my balance credited after a collection?
When is my balance credited after a collection?
payin_credited webhook with the net
credited amount.My customer transferred without the reference — is the money lost?
My customer transferred without the reference — is the money lost?
unassigned and the CBPay team routes it to your
account manually (once assigned it is credited with your normal rate and
fees). Meanwhile it does not show in your balance — if you are expecting a
deposit that never arrives, tell your administrator the amount, currency
and approximate time to speed up the assignment. To avoid it, use the
dedicated CLABE account in Mexico, the payment page in Chile, or
make sure the reference travels in the transfer description.How long does a crypto deposit take to confirm?
How long does a crypto deposit take to confirm?
crypto_deposit_credited webhook closes the cycle with
the tx_id so you can verify it on the explorer.How do I get an account statement for my accountant?
How do I get an account statement for my accountant?
format=pdf or
format=xlsx to download the CBPay-branded document, or json to render
it in your web.Are the banking balance and my USDT balance the same thing?
Are the banking balance and my USDT balance the same thing?
GET /v1/banking/accounts/{id}/balance. Your CBPay balance is USDT and is
only touched to charge the fixed banking fees (refunded if the operation
fails).Are a crypto deposit and a payin the same thing?
Are a crypto deposit and a payin the same thing?
funding). Both end
up in the same USDT balance, with different webhooks (payin_credited vs
crypto_deposit_credited).Webhooks and errors
Are webhooks mandatory?
Are webhooks mandatory?
GET /v1/payouts/{id},
GET /v1/payins/{id}…) at any time.How do I test webhooks from my machine (localhost)?
How do I test webhooks from my machine (localhost)?
What is the difference between GET /v1/movements and the statement?
What is the difference between GET /v1/movements and the statement?
movements is the paginated programmatic view
(for automatic reconciliation and your UI); the statement is the period
snapshot with totals, breakdowns and a guaranteed balance (for accounting
closes). They never disagree. Details in
movements and reconciliation.Why did I receive the same webhook twice?
Why did I receive the same webhook twice?
X-Webhook-Event-ID header, unique per event.