Saltar al contenido principal

Errores y reintentos

Todos los errores (salvo los del endpoint de token, que siguen OAuth 2.0) llegan como application/problem+json (RFC 9457):

{
"type": "urn:finora:cms-api:validacion",
"title": "Datos inválidos",
"status": 400,
"codigo": "VALIDACION",
"detail": "Uno o más campos no cumplen el esquema.",
"instance": "/v1/cards/9b1f0e2d-3c4b-4a59-8e7f-6a5b4c3d2e10/limits",
"requestId": "01JBX2Q7M8N9P0R1S2T3V4W5X6",
"campos": [{ "campo": "maximoDiario", "motivo": "formato decimal con 2 decimales" }]
}
CampoUso
codigoDecide por él. Es estable. La lista es abierta: tu código debe tolerar códigos nuevos (trátalos según su status)
typeurn:finora:cms-api:<codigo-en-kebab>
detailTexto para personas; no lo analices
camposEn validaciones, el detalle por campo
requestIdInclúyelo al pedir soporte
codigoRespuestaEn RECHAZO_LIBRO, el código ISO 8583 (DE 39) del rechazo
operacionPreviaEn RECARGA_DUPLICADA, la operación que ya usó la referencia
operacionEn OPERACION_NO_DISPONIBLE, la operación del contrato que falta
HTTPcodigoSignificado¿Reintentar?
400VALIDACIONCuerpo o parámetros inválidos (también un campo JSON repetido, un parámetro no declarado o un número de tarjeta); campos detalla cada unoNo. Corrige
400CURSOR_INVALIDOCursor alterado, de otro recurso o con otros filtrosNo. Empieza sin after
400RANGO_FECHAS_INVALIDORango incoherente o de más de 93 días sin hastaNo. Corrige
400VERSION_NO_SOPORTADAX-Finora-Api-Version distinta de 1No
400MONTO_INVALIDO, ESCALA_INVALIDAImporte ≤ 0, con signo o con una escala distinta de la de su unidad (Bs y USD 2, UVC 4). Nunca se redondeaNo. Corrige
400ACCION_INVALIDAAcción de lote incoherente con su tipoNo
401NO_AUTENTICADO, TOKEN_VENCIDOSin token válido o vencidoSí, con un token nuevo
403ALCANCE_INSUFICIENTETe falta el alcance de la operaciónNo. Pide el alcance
403MTLS_REQUERIDOLa operación exige certificado de cliente (fase 2)No
403SIN_PERMISOLa operación solo la puede hacer quien hizo la solicitudNo
403CUATRO_OJOSQuien decide es quien pidióNo. Debe decidir otro
404NO_ENCONTRADONo existe o no pertenece a tus productosNo
405METODO_NO_PERMITIDOLa ruta existe pero no admite el método; trae AllowNo
409IDEMPOTENCIA_EN_CURSOLa misma clave sigue en curso o con resultado inciertoSí, con la misma clave tras Retry-After
409RECARGA_DUPLICADALa referencia bancaria ya se usó en esa cuenta; trae operacionPreviaNo. Consulta la operación previa
409CONFLICTO_VERSIONEl recurso cambió desde que lo leísteRelee y vuelve a decidir
409ESTADO_NO_PERMITEEl estado actual no admite la acción (siempre 409)No
409CURSOR_CONCURRENTEOtra confirmación de cursor ganó la carreraRelee los eventos
409SOLICITUD_PENDIENTE_EXISTEYa hay una solicitud pendiente para ese objetoNo. Espera su decisión o retírala
409BLOQUEO_ADMINISTRATIVO, ES_PRINCIPAL, CAMBIO_DECIDIDOBloqueo de operador, vínculo principal o solicitud ya decididaNo
413LOTE_DEMASIADO_GRANDE, CUERPO_DEMASIADO_GRANDELote por encima de sus topes o cuerpo de más de 64 KBNo. Divide
415TIPO_NO_SOPORTADOEl cuerpo no es application/jsonNo
422IDEMPOTENCIA_CUERPO_DISTINTOMisma Idempotency-Key con otro cuerpoNo. Usa otra clave
422LIMITE_SUPERA_PRODUCTO, PRODUCTO_SIN_TOPES, VIGENCIA_NO_SOPORTADA, DISMINUCION_REQUIERE_AVISOReglas de los topes del plásticoNo
422LINEA_FUERA_DE_FICHA, REQUIERE_CLAUSULA, CAMBIO_REGIMEN_CON_SALDO, UNIDAD_NO_COINCIDE, LINEA_BAJO_PISOReglas de la línea de créditoNo
422MOTIVO_NO_VIGENTE, SALDO_INSUFICIENTE, CUENTA_NO_OPERATIVAReglas del dinero prepagoNo
422RECHAZO_LIBROEl libro rechazó la operación; trae codigoRespuesta (DE 39)No con los mismos datos
422CURSOR_ADELANTADO, REPLAY_FUERA_DE_VENTANA, URL_NO_PERMITIDAEventos y suscripcionesNo
429LIMITE_DE_TASAPor encima de tu límiteSí, tras Retry-After
500ERROR_INTERNOFallo no previsto del gateway, sin detalleSí, con la misma clave y espera exponencial
501OPERACION_NO_DISPONIBLELa operación del contrato aún no está desplegada en la instalación; trae operacionNo. Llegará en una fase posterior
502CMS_ERROR_INTERNO, CMS_RESPUESTA_INVALIDA, CMS_AUTENTICACION, RESPUESTA_CON_DATO_SENSIBLEEl CMS falló, respondió fuera de formato, rechazó la credencial del gateway o devolvió un dato sensible que no se entregaSí, con la misma clave: en una escritura el resultado es incierto (recibirás 409 hasta que venza la retención)
503IDEMPOTENCIA_NO_DISPONIBLE, CMS_SATURADO, CMS_NO_DISPONIBLE, AUTENTICACION_NO_DISPONIBLEEl servicio no puede atender ahora; nada se ejecutóSí, con la misma clave, tras Retry-After
Hoy, 501 en las operaciones de negocio

Mientras el CMS de la instalación no publique una operación del contrato, el gateway responde 501 OPERACION_NO_DISPONIBLE en lugar de inventar una respuesta. Es el comportamiento esperado durante la fase Próximamente.

Política de reintento recomendada​