Saltar al contenido principal
Un payin es un cobro fiat: tu cliente paga en moneda local y tu cuenta recibe el abono en USDT automáticamente, convertido a tu tasa de payin (payin_rate en GET /v1/rates) menos la comisión fija de payin si tu cuenta la tiene configurada. Sea cual sea la modalidad, todos los caminos terminan igual — abono automático + webhook:

1. Descubre los corredores disponibles

Los países, monedas y modalidades disponibles los define CBPay. Consúltalos siempre por catálogo:
curl https://api.qbank.cl/platform/v1/payins/methods \
  -H "Authorization: Bearer <token>"
{
  "items": [
    { "country": "BO", "currency": "BOB", "method": "qr", "delivery": "push" },
    { "country": "VE", "currency": "VES", "method": "c2p", "delivery": "push+polling" },
    { "country": "MX", "currency": "MXN", "method": "bank_transfer", "delivery": "push" }
  ],
  "meta": { "retrieved": 3 }
}
delivery indica cómo se confirma el pago del lado de CBPay (notificación del banco, sondeo o ambos) — no cambia nada en tu integración: tú siempre recibes el webhook payin_credited. Corredores y modalidades de cobro:
PaísMonedaModalidades
ChileCLPPágina de pago hosted (fintoc), transferencia anunciada
PerúPENTransferencia anunciada
MéxicoMXNCuenta CLABE dedicada, transferencia anunciada
VenezuelaVESCobro activo c2p y debito_inmediato (pull)
BoliviaBOB / USDQR de cobro
ParaguayPYGTransferencia anunciada
BrasilBRLQR PIX dinámico
La disponibilidad puede variar; el catálogo (GET /v1/payins/methods) es siempre la fuente de verdad. En todos los casos el abono llega igual: se convierte a USDT a tu payin_rate del momento y se acredita neto de la comisión fija de payin.

2. Elige la modalidad y crea el cobro

Cada país tiene su propia modalidad de cobro. El request y la respuesta real de cada una:
Página de pago hosted (fintoc) — recomendado: recibes una payment_url; el pagador la abre y transfiere desde cualquier banco o billetera chilena (Banco Estado, Santander, Mach, Tenpo, Mercado Pago…). El pago se detecta y valida automáticamente — sin referencias manuales.
curl -X POST https://api.qbank.cl/platform/v1/payins \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "country": "CL",
    "currency": "CLP",
    "method": "fintoc",
    "amount": "150000",
    "description": "Recarga pedido 8841",
    "idempotency_key": "topup-8841"
  }'
Respuesta 201:
{
  "payin_id": "7a2b…",
  "status": "pending",
  "reference": "7a2b…",
  "payment_url": "https://pay.fintoc.com/plink_K2zwNNSxPyx8w3GZ",
  "expires_at": "2026-07-08T18:48:25Z",
  "note": "share the payment_url with the payer; the deposit is credited automatically once the transfer is detected"
}
Comparte la payment_url con el pagador (link, redirección o WebView). Cuando el pago se confirma, tu cuenta se acredita en USDT y recibes el webhook payin_credited. El monto CLP debe ser entero (el peso chileno no usa decimales) y la sesión de pago vence en 24 horas por defecto. Un retry con la misma idempotency_key devuelve el mismo payin y la misma URL — nunca abre una segunda sesión de pago.Transferencia anunciada (alternativa manual): anuncias el depósito entrante y compartes la referencia con quien transfiere.
curl -X POST https://api.qbank.cl/platform/v1/payins \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "country": "CL",
    "currency": "CLP",
    "method": "bank_transfer",
    "amount": "500000"
  }'
Respuesta 201:
{
  "payin_id": "4f81…",
  "status": "pending",
  "reference": "CBJ6T3W9M2K5",
  "note": "include the reference in the transfer description so the deposit is credited automatically"
}
Cuando la transferencia llega, se matchea por la referencia en la glosa (o por monto+moneda como respaldo) y tu cuenta se acredita automáticamente.

3. Recibe el abono

Cuando el pago llega (por cualquiera de las modalidades), tu cuenta se acredita automáticamente y se emite el webhook payin_credited:
{
  "payin_id": "9c2a…",
  "account_id": "…",
  "country": "BO",
  "currency": "BOB",
  "local_amount": "700.00",
  "fx_rate": "6.91",
  "usdt_credited": "100.302460",
  "fee": "1.000000"
}
fx_rate es tu payin_rate del momento del abono — la conversión se hace exactamente a esa tasa: usdt_gross = 700.00 / 6.91. El objeto payin queda con el detalle completo:
curl https://api.qbank.cl/platform/v1/payins/9c2a… \
  -H "Authorization: Bearer <token>"
{
  "payin_id": "9c2a…",
  "kind": "qr",
  "status": "credited",
  "local_amount": "700.00",
  "fx_rate": "6.91",
  "usdt_gross": "101.302460",
  "fee": "1.000000",
  "usdt_credited": "100.302460"
}

Estados

EstadoSignificado
pendingCargo creado, esperando el pago
creditedPago recibido y abonado en USDT
unassignedDepósito recibido sin match automático (lo asigna el administrador)
expiredEl cargo venció sin pago
failedEl cobro falló
Los depósitos que llegan por transferencia directa sin referencia clara quedan unassigned hasta que el equipo de CBPay los asigna a una cuenta. Al asignarse, se acreditan con la tasa y comisiones de la cuenta destino.

Consulta e historial

# Un payin
curl https://api.qbank.cl/platform/v1/payins/9c2a… \
  -H "Authorization: Bearer <token>"

# Historial con filtros
curl "https://api.qbank.cl/platform/v1/payins?from=2026-07-01&to=2026-07-08&status=credited&page_size=50" \
  -H "Authorization: Bearer <token>"
from/to van en YYYY-MM-DD (UTC); fecha inválida responde 400 invalid_range.

Errores frecuentes

HTTPerrorQué hacer
400invalid_requestRevisa method (qr, bank_transfer, fintoc; collect va en su endpoint)
400idempotency_key_requiredEl collect exige clave de idempotencia (débito real al pagador)
403service_disabledPayins no está habilitado para tu cuenta — ver servicios
422core_rejectedEl procesador rechazó el cargo; revisa el mensaje
502core_unavailableNo se pudo crear el cargo; reintenta la creación (no se cobró nada)
Última modificación el 12 de julio de 2026