GET /v1/rates) y se debita usdt_amount + fee (el fijo,
si está configurado) de tu saldo.
Así se ve el ciclo completo, incluido qué pasa con tu saldo en cada paso:
1. Descubre los corredores disponibles
Los países, monedas y métodos disponibles los define CBPay. Consúltalos siempre por catálogo:
La disponibilidad puede variar; el catálogo (
GET /v1/payouts/methods) es
siempre la fuente de verdad. Si un país tiene un solo método, method es
opcional. Todos los métodos se cobran igual: tu tasa + fijo.
Para transferencias bancarias necesitas además el catálogo de bancos (de
ahí sale el bank_code del beneficiario):
2. Crea el payout
Cada payout guarda al beneficiario como contacto
automáticamente (
"save_contact": false para no guardarlo). Para repetirle
un pago sin re-tipear sus datos, envía "beneficiary_contact_id" en vez de
beneficiary — se usa su beneficiario guardado más reciente para ese país
y método (422 no_saved_destination si no tiene).202 Accepted:
total_debit pasó de
available a held (en el saldo del settlement_asset).
Pagar desde otro saldo (settlement_asset)
Por defecto el débito sale de tu asset de settlement predeterminado (USDT
salvo que lo cambies con PUT /v1/settlement). Para pagar una operación
puntual desde otro saldo, agrega settlement_asset al request. Ejemplo:
un payout de 100.000 CLP pagado desde el saldo BTC pasa por cuatro
transformaciones, todas registradas en la respuesta:
- CLP → USDT a tu tasa:
100000 / 950.25 = 105.235465 USDT. - + comisión fija:
105.235465 + 0.30 = 105.535465 USDT(total_debit). - USDT → BTC al precio efectivo de settlement (
settlement_rate109029.34070000):105.535465 / 109029.3407 = 0.00096795 BTC(redondeo hacia arriba al satoshi). - Débito y hold en BTC:
settlement_amount0.00096795sale de tu saldo BTC; el beneficiario recibe sus 100.000 CLP igual que siempre.
settlement_amount exacto a tu saldo
BTC — nunca se re-cotiza. Si el precio de ejecución de BTC/GOLD no está
disponible en ese momento recibirás 503 pricing_unavailable, y los
assets volátiles tienen un límite por operación
(422 settlement_limit_exceeded; consúltalo en GET /v1/settlement).
3. Recibe el estado final
Suscríbete al eventopayout_status_changed (webhooks):
completed: el dinero llegó; el hold se consume.failed: se reembolsa el débito completo automáticamente (payout_refunden tu ledger).
Estados del payout
Consulta e historial
Cada payout se puede leer individualmente y el listado acepta filtros:from/to van en YYYY-MM-DD (UTC, ambos inclusive); una fecha inválida
responde 400 invalid_range.
Ejemplos por país
Cada corredor con subeneficiary exacto, el request completo y la
respuesta real. Las tasas (fx_rate) son ilustrativas — siempre aplican
las de tu cuenta en GET /v1/rates; el débito es usdt_amount + fee
(fijo, si está configurado; aquí 0.30).
Campos del beneficiary por corredor
- Chile
- Perú
- México
- Venezuela
- Bolivia
- Brasil
- Ecuador
- Paraguay
Transferencia bancaria en CLP. Requiere RUT, banco y cuenta:El catálogo de bancos (
GET /v1/payouts/banks?country=CL) da los
bank_code vigentes.Payout QR
En Bolivia (QR interoperable local) y en Brasil (QR PIX, incluido el código “copia e cola”) también puedes pagar a un QR de cobro en dos pasos: escanear y confirmar. El escaneo es gratis; solo se cobra al confirmar, igual que un payout normal (tu tasa + fijo). Si no envíascountry/currency, se asume Bolivia (BOB); para Brasil envía
country: "BR" y currency: "BRL".
1. Escanea el QR (gratis)
- Bolivia
- Brasil (QR PIX)
2. Confirma el pago (se cobra aquí)
- Bolivia
- Brasil (QR PIX)
- Se debita
usdt_amount + fijoa tu tasa, igual que unbank_transfer. - El resultado es síncrono: la respuesta ya trae el estado final
(
completedofailedcon reembolso automático) — sin esperas. - Reintentos con la misma
idempotency_keydevuelven el payout original. En Bolivia la referencia del scan es de un solo uso (un QR escaneado solo puede pagarse una vez); en Brasil el QR PIX estático es reutilizable y cada pago lleva su propia clave.
Errores frecuentes
Rechazo inmediato vs fallo posterior
Si el procesador rechaza el payout al crearlo, recibes422 con el objeto
en status: failed y el reembolso ya aplicado. Si falla después (por
ejemplo, cuenta destino inexistente detectada por el banco), te llega el
webhook con status: failed y el reembolso automático en ese momento.
Cómo leer status_code en un payout fallido
En todos los casos el reembolso ya está aplicado — verifícalo con la
entrada
payout_refund en
movimientos.
Un payout en
processing no se puede cancelar por API: el rail ya lo tiene.
Espera el estado final por webhook o GET — llega siempre, con reembolso
automático si falla.