ROKIConnect
Conectores Empezar API SDK Migrar MCP Portal EN

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 code nombra uno de los campos que fallaron, y no necesariamente el que cita message. POST /payments con el cuerpo vacío contesta message sobre amount y code: "external_reference_required", con los tres campos en errors. Usá code para fallas de un solo campo y para las familias 401/404/405; en un 422 de varios campos, recorré las llaves de errors, 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)