Catálogo de errores
Todo error trae un code estable junto al message para humanos. Las respuestas exitosas no traen
code.
| HTTP | code |
Cuándo |
|---|---|---|
| 401 | missing_authorization |
Falta el encabezado Authorization |
| 401 | invalid_api_key |
El encabezado está, la llave fue rechazada |
| 404 | payment_not_found |
Identificador bien formado, no hay pago con ese id para esa llave |
| 404 | transaction_id_expected |
Id numérico del pago donde va el UUID de la transacción (13.1) |
| 404 | payment_method_not_found |
No hay tarjeta guardada con ese id pm_ |
| 404 | not_found |
La ruta no está en el router. {"message":"The route ... could not be found."} - siempre en inglés, el único error que ignora Accept-Language |
| 405 | method_not_allowed |
Método equivocado: {"message":"The GET method is not supported for route ... Supported methods: POST."} |
| 422 | tokenized_charge_disabled |
El modo 3A no está habilitado en la cuenta: listar, cobrar y token-charge lo rechazan antes que cualquier otra validación (23.1.0) |
| 422 | amount_required, currency_code_invalid, idempotency_key_required, ... |
Validación o regla de negocio, más un objeto errors por campo |
Ramificá por code, nunca por message. El code no cambia con Accept-Language; todos los
mensajes menos el del 404 de ruteo sí.
El message de un 422 contiene el primer error, con el sufijo (and N more errors) cuando hay
varios; errors los agrupa por campo.
Trampa en un 422 con varios errores: el
codenombra uno de los campos que fallaron, y no necesariamente el que citamessage.POST /paymentscon el cuerpo vacío contestamessagesobreamountycode: "external_reference_required", con los tres campos enerrors. Usácodepara fallas de un solo campo y para las familias 401/404/405; en un 422 de varios campos, recorré las llaves deerrors, que son estables y completas.
Cambió el 2026-08-21. Las versiones anteriores de esta guía afirmaban que esta API no tenía códigos de error legibles por máquina, y por eso los clientes de ejemplo clasificaban los errores comparando texto. Ahora existen, en todos los errores, y los ejemplos ya usan
code. Si copiaste un ejemplo viejo, esa es la línea a cambiar: comparar texto ya no es solo frágil - para el error del id numérico es directamente incorrecto (12.3).
15.0 Cuando rechazan una tarjeta: qué código leer y qué reintentar
Un cobro rechazado vuelve como card_declined a nivel de Connect. Eso no dice por qué, y el por
qué es lo que decide el siguiente paso. La razón está en IsoResponseCode (y a veces en
Errors), y ese es el campo por el que hay que ramificar.
Connect no reintenta un pago rechazado por vos, y no hay una bandera retryable. Decidir si
invitar al cliente a intentar de nuevo es trabajo de tu checkout. No confundir esto con los
reintentos de webhook de la §14: aquellos reenvían una notificación, nunca reintentan un cobro.
Los cuatro grupos que importan en la práctica:
| Qué hacer | Códigos | Por qué |
|---|---|---|
| Reintentar después, como un pago nuevo | 51, 91, 96, 98 |
Fondos insuficientes, emisor caído, problemas de sistema o de host: la tarjeta está bien, el momento no |
| No insistir | 05 |
"Do not honor". Es una negativa genérica; reintentarla en bucle es como un comercio termina en un programa de monitoreo |
| Corregir la entrada primero | 12, 13, 14, 30, 54, 82, N7, 97 |
Transacción, monto o número inválidos; tarjeta vencida; CVV incorrecto; petición mal formada. Reintentar los mismos datos da la misma respuesta |
| Nunca reintentar | 04, 07, 34, 41, 43, 59 |
Retener la tarjeta, sospecha de fraude, tarjeta perdida, tarjeta robada |
Esa última fila es la que hay que acertar. No son "probá más tarde": son el emisor diciendo que hay algo mal con la tarjeta misma, y repetir el intento es una señal en la cuenta del comercio, no una oportunidad de venta.
Los códigos comunes, después de un intento de cobro:
| Código | Significa | Código | Significa | |
|---|---|---|---|---|
00 |
Aprobada | 51 |
Fondos insuficientes | |
01 / 02 |
Consultar al emisor | 55 |
PIN incorrecto | |
03 |
Comercio inválido | 57 / 58 |
Transacción no permitida | |
04 / 07 |
Retener la tarjeta | 61 / 65 |
Límite o actividad excedidos | |
05 |
Do not honor | 82 / N7 |
El CVV no coincide | |
12 |
Transacción inválida | 91 |
Emisor o switch inoperativo | |
13 |
Monto inválido | 96 |
Falla del sistema | |
14 |
El número de tarjeta no existe | 97 |
Error de formato | |
19 |
Reingresar la transacción | 98 |
Host inalcanzable | |
30 |
Error de formato | 99 |
Transacción con error | |
33 / 54 |
Tarjeta vencida | |||
34 / 59 |
Sospecha de fraude | |||
41 |
Tarjeta perdida | |||
43 |
Tarjeta robada |
Este es el juego ISO 8583. El procesador publica más, menos frecuentes (06–11, 15–29,
31–32, 35–40, 52–53, 60, 62–68, 75–90, 92–95, N0, N3, N4, varios
códigos P, XA / XD). Tratá un código que no reconozcas como "no reintentar" y registralo, en
vez de adivinar a qué grupo pertenece.
Códigos del paso de 3-D Secure, que ocurren antes o alrededor del cobro y no son aprobaciones:
| Código | Significa |
|---|---|
3D0 |
El proceso 3DS terminó. Hay que leer el estado de autenticación: esto por sí solo no significa que el pago pasó |
3D1 |
La tarjeta no soporta 3DS. El flujo puede seguir como un pago sin 3DS |
3D3 |
Error de 3DS. No es una aprobación |
SP4 |
El componente está listo para el siguiente paso en el navegador. Seguí normal |
Fuente: el equipo del API, 25/08/2026, transmitiendo la referencia del procesador. La §16.2 lista las tarjetas de sandbox que producen varios de estos a demanda.
15.1 Mensajes 422 comunes
| Mensaje | Causa |
|---|---|
El campo amount es obligatorio. |
Falta un campo obligatorio |
El campo amount debe ser al menos 0.01. |
Monto por debajo del mínimo |
La moneda seleccionada no esta disponible en su terminal de enlaces de pago. |
currency_code no habilitado |
La fecha de vencimiento debe ser en el futuro. |
expires_at en el pasado |
El campo metadata debe ser un array. |
metadata enviado como cadena de texto |
Ingrese un monto o porcentaje de impuesto cuando el impuesto esta habilitado. |
Falta sales_tax_value |
El porcentaje no puede superar 100%. |
sales_tax_value mayor a 100 en modo porcentaje |
Seleccione un tipo de propina o permita la seleccion del cliente en el checkout. |
tip_enabled sin un modo |
Los limites de propina no pueden ser mayores que el monto del plan. |
tip_max_amount mayor que amount |
El entorno sandbox no esta configurado para enlaces de pago... |
Sandbox no aprovisionado para ese comercio (16.2) |
