Las comisiones de banking vienen en dos formas. Las fijas standalone
(
banking_customer, banking_account, banking_operation) se debitan de tu
saldo USDT al ejecutar cada operación y se reembolsan automáticamente
si falla. Las transaccionales por riel (banking_deposit,
banking_transfer_ach, banking_transfer_swift, banking_transfer_wire,
banking_transfer_sepa) son un porcentaje más un monto fijo cobrado en la
moneda de la operación (tu saldo BANK_USD / BANK_EUR) — ver
comisiones por riel. Con
comisión 0 (el default) el servicio es gratis. Los campos banking_fee y
banking_fee_asset de cada respuesta te muestran lo cobrado y en qué moneda.El flujo completo
- Crea tu perfil bancario (
POST /v1/banking/customer) — una sola vez. - Sube documentos de verificación y envíalo a revisión.
- Cuando quede
approved, abre cuentas por moneda. - Registra beneficiarios (counterparties) para pagos a terceros.
- Envía pagos: cotiza con
preparey ejecuta conoperations.
banking_customer_status_changed y banking_operation_status_changed
(webhooks).
1. Crea tu perfil bancario
Una vez por cuenta. Si no envíastype, name o email, se completan con
los datos de tu cuenta CBPay:
201:
409 banking_customer_exists.
Revisión de solicitudes. Si tu organización activó la revisión de solicitudes banking, esta llamada puede responder
202 Accepted con {"status":"in_review","kind":"banking_application","review_id":"…"} en vez de 201 — el perfil se crea solo cuando compliance aprueba la revisión. El fee del perfil banking se cobra al retener la solicitud y se reembolsa automáticamente si se rechaza. Sigue el resultado con el webhook txn_review_status_changed o en Revisiones de operaciones.2. Documentos y verificación
Sube cada documento en base64 (gratis):draft → submitted → under_review →
approved o rejected. El webhook
banking_customer_status_changed te avisa cada cambio — del perfil propio
(customer_kind: self) y de los terceros que registres
(customer_kind: third_party, con su third_party_id):
3. Abre cuentas bancarias
Con el perfilapproved, crea una cuenta por moneda. Monedas disponibles:
USD (rieles ACH/Fedwire/SWIFT) y EUR (SEPA/SWIFT):
201 — data incluye los datos para recibir (número de
cuenta/IBAN, routing, banco):
GET /v1/banking/accounts/{id}) devuelve la cuenta EN VIVO —
nombre, moneda, estado y bajo data los requisitos para recibir
fondos (rieles wire y locales: banco, número de cuenta/IBAN, routing).
Úsalo para mostrar las instrucciones de depósito de una cuenta específica
sin recorrer el listado:
source indica de dónde salió el detalle: live (el banco respondió en
vivo) o mirror (el banco no pudo servir la cuenta en ese momento y se
devuelve el último snapshot conocido — los requisitos de depósito siguen
disponibles).
El listado expone solo las cuentas habilitadas para tu operación según
la configuración del corredor. Una cuenta no habilitada no aparece en el
listado y sus consultas por id responden
404 not_found.Límite para cuentas persona: una cuenta persona puede tener máximo 1
cuenta bancaria. Al intentar la segunda recibirás
409 banking_account_limit. Las cuentas empresa no tienen límite.Usuarios de terceros (solo empresas)
Si tu cuenta es empresa, además de tus cuentas propias puedes dar de alta usuarios banking de terceros — tus clientes finales (personas o empresas) — cada uno con su identidad y verificación propias y cuentas bancarias a su nombre. Sin límite de terceros ni de cuentas por tercero.Alta del tercero
El alta exige elverification_id de una verificación KYC/KYB
aprobada del tercero — su identidad única en CBPay. El
tipo sale del kind de la verificación (KYC ⇒ INDIVIDUAL, KYB ⇒
COMPANY), los datos (nombre, email, dirección) se completan solos desde
el perfil verificado (lo que envíes explícito gana) y los documentos ya
validados se re-entregan automáticamente al proveedor bancario. Se cobra
el fee de perfil bancario (se reembolsa si el alta falla):
201:
documents_synced cuenta los documentos de la verificación que quedaron
cargados automáticamente en el perfil bancario del tercero. Si alguno no se
pudo sincronizar (o el banco pide categorías adicionales), súbelo por el
flujo manual de documentos de más abajo y luego haz submit.Revisión de solicitudes. Con la revisión de solicitudes banking activada, registrar un tercero también puede responder
202 Accepted (kind: banking_application): el tercero se registra solo cuando la revisión se aprueba, y el fee de registro se reembolsa automáticamente si se rechaza. Síguelo vía txn_review_status_changed o en Revisiones de operaciones.third_party_id: todas las rutas del tercero lo usan. Lista y
consulta (el GET trae el estado de verificación en vivo):
Verificación del tercero (gratis)
Igual que tu propio perfil, pero sobre el tercero:Cuentas del tercero
Con el tercero aprobado, ábrele cuentas (mismo feebanking_account) y
opera igual que con las tuyas:
- Cada tercero es tuyo y solo tuyo: otra cuenta CBPay jamás puede verlo ni
operarlo (responde
404). - Una cuenta persona que intente crear terceros recibe
403 company_required. - Sin
verification_id(o con una verificación no aprobada) el alta responde422 verification_required/422 verification_not_approved. Si envías untypeque no calza con el kind de la verificación,422 verification_kind_mismatch. Los terceros creados antes de esta regla siguen operando con normalidad. - Los terceros dados de alta alimentan la métrica “usuarios nuevos” de tu resumen de cuenta.
4. Registra beneficiarios
Para pagar a terceros, primero registra al beneficiario con sus datos bancarios (gratis; pasa por moderación antes de poder usarse):GET /v1/banking/counterparties y agrega más cuentas a
un beneficiario existente con
POST /v1/banking/counterparties/{id}/accounts.
5. Envía pagos
Dos tipos de operación:
Cotiza primero (gratis, no mueve dinero):
banking_operation cuando el riel no tiene configuración):
202:
banking_fee y banking_fee_asset solo aparecen cuando se cobró una
comisión. Con una comisión por riel el asset es la moneda de la operación
(BANK_USD / BANK_EUR); con el fallback legacy es USDT.
- El estado final llega por el webhook
banking_operation_status_changed(completed/failed); también puedes consultarGET /v1/banking/operations/{id}. Cuando la operación queda en estado final, el webhook incluye sureceipt_urly puedes descargar el comprobante PDF conGET /v1/banking/operations/{id}/receipt(comprobantes). - Reintentos con la misma
Idempotency-Keydevuelven la operación original (idempotency_hit: true) sin volver a cobrar la comisión.
Trazabilidad completa. Cada operación bancaria queda registrada en tu
cuenta: aparece en la sección
banking_operations de la
cartola, su dinero cuadra en los saldos espejo
BANK_USD/BANK_EUR (sección assets), y su volumen suma al
gross_volume de analytics. El saldo autoritativo
sigue siendo el del banco: el espejo se reconcilia periódicamente.Toda operación bancaria — incluidos los depósitos entrantes y las comisiones
bancarias descubiertas automáticamente desde el banco — expone su
direction (in / out), amount neto, currency, counterparty y
reference cuando el banco los reporta. Estos campos son opcionales y
aparecen en GET /v1/banking/operations y
GET /v1/banking/operations/{id}.banking_operation_status_changed se mantiene liviano por
diseño: lleva los identificadores y el nuevo estado, nunca los campos
enriquecidos. Cuando llegue, consulta el detalle de la operación para leer
la dirección, el monto, la contraparte y la referencia. Ver
webhooks.
Comisiones por riel (depósitos y transferencias)
Además de las comisiones fijas standalone, banking soporta comisiones transaccionales por riel — un porcentaje más un monto fijo, siempre cobradas en la moneda de la operación (BANK_USD / BANK_EUR), nunca
en USDT:
En las transferencias el saldo disponible debe cubrir
monto + comisión
— si no alcanza, la API responde 402 insufficient_funds y la operación
no se crea. Si la operación es rechazada de forma definitiva justo
después del despacho, la comisión se reembolsa automáticamente (la misma
disciplina de la comisión legacy).
Fallback: si el riel no tiene configuración específica (ni a nivel cuenta
ni plataforma), se cobra la legacy banking_operation (fija, en USDT). Un
riel configurado con 0% + 0 fijo queda explícitamente gratis — NO cae al
fallback.
Estados de operación
Errores
FAQ
¿El dinero banking aparece en mi saldo USDT?
¿El dinero banking aparece en mi saldo USDT?
No. El dinero banking vive en tus cuentas bancarias y se consulta con
GET /v1/banking/accounts/{id}/balance. El saldo autoritativo es el del
banco; tu cartola lo concilia en los saldos espejo
BANK_USD/BANK_EUR. Las comisiones por riel se cobran en la moneda de
la operación (tu saldo BANK_USD/BANK_EUR); solo la comisión legacy
banking_operation se debita de tu saldo USDT.¿Qué pasa con la comisión si una operación falla?
¿Qué pasa con la comisión si una operación falla?
Se reembolsa automáticamente — comisiones de perfil, cuenta y operación por
igual, incluidas las comisiones por riel (reembolsadas en el rechazo
definitivo síncrono). Un reintento con la misma
Idempotency-Key devuelve
la operación original (idempotency_hit: true) y jamás cobra dos veces.¿Cuántas cuentas bancarias puedo abrir?
¿Cuántas cuentas bancarias puedo abrir?
Una por moneda (USD, EUR). Además, las cuentas persona pueden tener
como máximo 1 cuenta bancaria en total (
409 banking_account_limit); las
cuentas empresa no tienen límite.¿Por qué una de mis cuentas no aparece en el listado?
¿Por qué una de mis cuentas no aparece en el listado?
El listado solo expone las cuentas habilitadas para tu operación según
la configuración del corredor. Una cuenta no habilitada no aparece y sus
consultas por id responden
404 not_found — contacta a tu equipo CBPay si
necesitas habilitarla.¿Una cuenta persona puede registrar usuarios terceros?
¿Una cuenta persona puede registrar usuarios terceros?
No — los terceros son una capacidad de empresa (
403 company_required). El
registro además exige el verification_id de una verificación KYC/KYB
aprobada del tercero.¿Cómo sé cuándo un pago llegó a su estado final?
¿Cómo sé cuándo un pago llegó a su estado final?
Suscríbete a
banking_operation_status_changed: se dispara en completed
/ failed e incluye el receipt_url una vez final. También puedes
consultar GET /v1/banking/operations/{id}.