Skip to main content
Todos los errores comparten el mismo formato:
  • error: código estable en snake_case — úsalo en tu lógica.
  • message: explicación legible — puede cambiar, no lo parsees.
Mensajes de error saneados. El message de un error nunca expone nombres de proveedores, detalles de infraestructura, URLs, bodies crudos del proveedor (JSON/HTML) ni configuración interna — ni en respuestas de la API, ni en webhooks, ni en los campos de estado persistidos. Los rechazos de negocio del procesador conservan su motivo accionable (por ejemplo, por qué se rechazó un documento o una cuenta); las fallas de infraestructura se reemplazan por el mensaje genérico fijo "the payment provider could not process the request" — reintenta esas operaciones con la misma idempotency_key.
| payin_corridor_unsupported | El corredor solicitado no tiene un proveedor de payin activo — vuelve a leer GET /v1/payins/methods | | 502 | deposit_account_failed | No se pudo aprovisionar la cuenta receptora dedicada; lee la lista antes de reintentar |

Códigos por categoría

Autenticación y permisos

OTP / 2FA

Detalle y flujo completo en seguridad y 2FA.

Login social (OAuth)

Detalle y flujo completo en login social.

Panel de administración de organización

Estos códigos provienen de superficies de administración de organización (el panel CBPay Admin), no de la API a nivel cuenta documentada arriba — nunca aparecen en los endpoints /v1/* de cuenta.

Validación (400)

Idempotencia de payins QR

En POST /v1/payins con method: "qr", idempotency_key es opcional. Puedes enviarla en el body JSON o como Idempotency-Key; si envías ambas, gana la del body. La clave admite hasta 256 caracteres y no puede contener CR/LF. La plataforma la scopea por cuenta del lado servidor; el integrador envía su clave sin modificarla.
  • 400 invalid_idempotency_key: la clave supera 256 caracteres o contiene CR/LF. Acórtala o elimina esos caracteres y reintenta el mismo request corregido.
  • 409 idempotency_conflict: la misma clave se usó con otro país, moneda, método o monto numérico. Conserva el payload original para replay o usa una clave nueva para crear otro cobro.
Con la misma clave y el mismo payload, la API devuelve el cobro original con idempotency_hit: true y no crea otro. Los montos se comparan por valor (100 equivale a 100.00); glosa es texto de presentación y no forma parte de la identidad del replay. Consulta el estado vivo con GET /v1/payins/{payinID}.

Dinero y estado (402 / 404 / 409 / 422 / 429)

| 422 | deposit_account_not_recoverable | El destino pendiente no es un instrumento MX/MXN/bank_transfer recuperable | | 422 | export_rejected | El procesador rechazó el export de la llave de la wallet segregada | | 422 | stored_card_corridor_mismatch | La tarjeta guardada pertenece a otro corredor país/moneda distinto del cobro | | 409 | subscription_state | La suscripción no está en un estado que permita esa acción (ej. pausar un plan cancelado) | | 409 | email_required | El login no tiene un email real; configura uno con POST /v1/me/email/change | | 422 | payin_not_refundable | El cobro no está acreditado o no tiene credencial del procesador; no se puede devolver | | 422 | refund_not_supported | Ese rail no admite devoluciones (QR, transferencia anunciada, cuenta dedicada, collect). Los cobros POS se devuelven por el riel crypto | | 422 | refund_exceeds_payin | La devolución supera lo que queda por devolver del cobro; tu saldo no se tocó | | 422 | settlement_pending | El saldo del cobro sigue programado para settlement y no se puede devolver hasta liberarse (a settle_at o por liberación del admin de la organización) | | 400 | invalid_amount | El amount de la devolución debe ser un decimal positivo en la moneda del cobro | | 503 | refund_event_pending | El resultado de la devolución quedó guardado, pero todavía se está persistiendo su evento final. Reintenta con la misma clave de idempotencia; no envíes otra devolución | | 503 | payin_event_pending | El payin quedó acreditado, pero su evento final todavía se está reconciliando. Reintenta con la misma clave de idempotencia; no crees un nuevo payin |

Cumplimiento (403 / 503)

Qscore

Errores de los endpoints del buró de crédito (guía).

Firewall transaccional

Errores de la revisión de operaciones retenidas por el firewall transaccional (guía). La retención en sí no es un error: el create responde 202 Accepted con status: in_review y review_id.

Eventos en tiempo real (SSE)

Códigos de GET /v1/events y su historial.

Firma de mensajes y vinculación de wallets

Códigos de la firma de mensajes con wallets (EIP-191 en EVM, TIP-191 en TRON): firma server-side con wallets segregadas (POST /v1/segregated-wallets/{id}/signatures, que emite un comprobante de firma verificable públicamente) y vinculación de wallets externas por desafío (POST /v1/wallet-links/challenges → firmas el desafío con tu wallet → POST /v1/wallet-links/verify).

Servicio (5xx)

Cómo manejarlos

  • 4xx de validación: corrige el request. No reintentes igual.
  • 402: fondea la cuenta y reintenta (clave de idempotencia nueva solo si la operación nunca se creó).
  • 5xx / timeouts: reintenta con la misma clave de idempotencia; la operación nunca se duplicará.

Qscore fraude e Index

Ciclo de vida del corredor

Banking creation recovery errors

Errores de recuperación de creaciones banking

Errores de Banking EUR y vIBAN

Códigos de mensajería masiva

Estos códigos provienen de los endpoints de administración de organización. Se incluyen aquí para que los SDK compartidos mantengan un solo catálogo.

Errores de Banking EUR y wallets de empresa

Política de integraciones de cuenta

Disputas y fraude

Errores de cuenta de fondeo SEPA

Estos errores se devuelven antes de debitar o despachar un payout cliente o una operación Banking EUR:

Errores de límites money-out

dispute_fiat_unsupported

No se puede abrir una controversia para un payin acreditado en BOB, MXN o ARS retenidos. Usa un crédito USDT soportado o espera soporte para controversias fiat.

Aliases bancarios argentinos y alias del perfil

Ceremonia del Contrato Marco Grupo CB

Estos errores aplican a POST /v1/me/contracts/envelopes/{envelopeID}/sign y a los recursos de sobres. El mensaje puede generalizarse por privacidad; el código es el contrato estable para la integración.

Handoff de ambiente

2FA y passkeys

Documentos de checkout y de payouts

destination_recently_rejected

El acuse solo es válido para el rechazo más reciente de ese destino. Reutilizar la misma clave con options diferentes devuelve idempotency_conflict (409). Los demás métodos y los destinos sin un rechazo reciente siguen su flujo normal de validación y despacho.

Errores de endurecimiento antiataques de autenticación

POST /v1/auth/password/forgot siempre responde 200 para evitar enumeración. Silencia envíos reales después de 5 por cuenta por hora; POST /v1/auth/password/reset permite 8 intentos de código por cuenta cada 15 minutos.

Validación de payouts US/USD

Estos errores se devuelven antes del débito en payouts ach, wire y swift:
Última modificación el 17 de octubre de 2026