Skip to content
FINORA Academy
SistemaFINORA Core

FINORA Core · Reference

Códigos de error del gateway de API

ImplementedImplemented

This content is not available in your language yet.

Transcrita del código del gateway (main, la versión desplegada). Todo error es application/problem+json con:

PropiedadQué es
typeurn:finora:core-gateway:<tipo>
title, status, detailLo de RFC 7807
codigoEl código estable de esta página: es el que tu programa debe leer
requestIdEl mismo valor de la cabecera X-Request-Id
timestampMomento del error
errorCodeEl estado HTTP, para clientes que esperan ese campo
errorReasonCategoría: INVALID_PARAMETERS (400), INVALID_CREDENTIALS (401), PERMISSION_DENIED (403), NOT_FOUND (404), INVALID_API_OPERATION (405, 406, 415), CONFLICT (409), BUSINESS_RULE_VIOLATION (422), TENANT_SUSPENDED (423), TOO_MANY_REQUESTS (429), METHOD_NOT_IMPLEMENTED (501), SERVICE_UNAVAILABLE (503), INTERNAL_ERROR (otros 5xx)
errorSourceEl campo, parámetro o cabecera culpable, cuando se conoce (limit, Idempotency-Key, filterCriteria[0], Content-Type…)

Lee siempre codigo, nunca el texto de detail: el texto puede cambiar, el código no.

EstadocodigoTipoCuándoQué hacer
400GW_GRANT_NO_SOPORTADOgrant-no-soportadogrant_type distinto de client_credentialsUsa client_credentials
400GW_CREDENCIAL_AMBIGUAsolicitud-invalidaEl client_id del cuerpo no coincide con el de Authorization: BasicManda la credencial por una sola vía
400GW_ALCANCE_INVALIDOalcance-invalidoPediste en scope un alcance que tu credencial no tienePide un subconjunto de los tuyos, o ninguno
401GW_CREDENCIAL_INVALIDAcredencial-invalidaCliente o secreto incorrectosRevisa el par; cada fallo suma al bloqueo
401GW_NO_AUTENTICADOno-autenticadoPetición sin token ni apiKey, o token vencido o alteradoPide un token nuevo
429GW_LOGIN_BLOQUEADOdemasiados-intentosDemasiados fallos seguidos de esa credencialEspera el tiempo de bloqueo y corrige el secreto
429GW_IP_BLOQUEADAdemasiados-intentosDemasiadas credenciales inválidas desde tu direcciónEspera; el bloqueo vale incluso con una credencial válida

En /v1/oauth/token el error trae además la propiedad error de OAuth 2.0: invalid_client, invalid_request, invalid_scope, unsupported_grant_type o unauthorized_client.

EstadocodigoTipoCuándo
400TENANT_INVALIDOsolicitud-invalidaEl nombre de institución no tiene un formato válido
400TENANT_AMBIGUOsolicitud-invalidaEl subdominio y X-Finora-Tenant nombran instituciones distintas
400ENTORNO_AMBIGUOsolicitud-invalidaEl subdominio y X-Finora-Environment se contradicen
400ENTORNO_INVALIDOsolicitud-invalidaX-Finora-Environment no es production ni sandbox
403GW_ALCANCE_INSUFICIENTEalcance-insuficienteTu credencial no tiene el alcance de ese dominio y método
403TENANT_CRUZADOtenant-cruzadoPediste una institución distinta de la de tu credencial
403ENTORNO_CRUZADOentorno-cruzadoToken de producción contra el sandbox, o al revés
403TENANT_DESCONOCIDOtenant-desconocidoLa institución no está en el registro del gateway
403SANDBOX_NO_DISPONIBLEsandbox-no-disponibleLa institución no tiene sandbox declarado
403MODULO_NO_HABILITADOmodulo-no-habilitadoEl dominio no está en el plan de la institución
423TENANT_SUSPENDIDOtenant-suspendidoLa institución está suspendida
EstadocodigoCuándo
400PAGINACION_INVALIDAoffset negativo o limit fuera de rango (1–1000; 1–100 en movimientos de cuenta)
400PAGINATION_DETAILS_INVALIDOpaginationDetails no es ON ni OFF
400PAGINACION_POR_CURSORPediste movimientos de cuenta con offset: se paginan con cursor
400DETAILS_LEVEL_INVALIDOdetailsLevel no es BASIC ni FULL
400ID_INVALIDOUn identificador de la ruta con formato inválido (también un GET sobre una acción :verbo)
400FECHA_INVALIDAUna fecha que no es yyyy-MM-dd
400MONEDA_INVALIDAMoneda que no es un código ISO 4217 de tres letras
400TIPO_INVALIDOtype de cuenta contable fuera de la lista
400ESTADO_INVALIDOaccountState de crédito fuera de la lista
400RANGO_DE_FECHAS_REQUERIDOBúsqueda de asientos sin bookingDate BETWEEN con value y secondValue
400CUERPO_INVALIDO, GW_CUERPO_INVALIDOEl cuerpo no es un objeto JSON legible
400CUENTA_INCONSISTENTELa cuenta del cuerpo no coincide con la de la ruta (depósitos, retiros, transferencias)
400GW_SOLICITUD_INVALIDAFalta un parámetro o tiene un tipo inválido
400IDEMPOTENCY_KEY_REQUERIDAEscritura sin Idempotency-Key
400IDEMPOTENCY_KEY_INVALIDAIdempotency-Key no es un UUID
400CURSOR_INVALIDOEl cursor de eventos no tiene el formato que entregó el core
400CURSOR_NO_ADMITIDOMandaste cursor al leer una suscripción: esa lee desde su cursor confirmado
400TIPOS_DE_EVENTO_INVALIDOSeventTypes con un tipo inválido o más de 50
400YAML_REQUERIDOPUT de configuración con el cuerpo vacío
404GW_RUTA_INEXISTENTELa ruta no existe en /v1
404PRODUCTO_NO_ENCONTRADOEl producto de captación o de crédito no existe en el core de la institución
405GW_METODO_NO_PERMITIDOEl método no aplica a esa ruta
406VERSION_NO_SOPORTADAAccept pide una versión distinta de application/vnd.finora.v1+json
406GW_NO_ACEPTABLEAccept pide un formato que la ruta no produce
413YAML_DEMASIADO_GRANDEEl documento de configuración supera 2 MiB
415GW_TIPO_NO_SOPORTADOContent-Type no admitido (JSON en general; YAML en la configuración)
EstadocodigoCuándoQué hacer
409IDEMPOTENCIA_EN_CURSOOtra petición con la misma clave aún no terminaEspera y reintenta con la misma clave
422IDEMPOTENCIA_CUERPO_DISTINTOReusaste la clave con otro cuerpoUna operación nueva lleva una clave nueva
429LIMITE_EXCEDIDOAgotaste el límite; alcanceLimite dice si fue el tuyo (CLIENTE) o el de la institución (TENANT)Espera lo que dice Retry-After
EstadocodigoCuándo
501CORE_NO_SOPORTALa ruta es parte de la superficie /v1 pero el core no la ofrece por API. El error trae operacion y alternativa (por ejemplo, reversar en lugar de borrar un asiento)

El gateway no inventa rechazos de negocio: los toma del core y los reexpone.

EstadocodigoCuándo
4xx del coreCORE_<TIPO>El core rechazó la operación con un tipo propio: unbalanced-entry llega como CORE_UNBALANCED_ENTRY, con su mismo estado y sus datos de negocio (blockingRuleCodes, existingCustomerId, operationalDate…) y estadoCore
400 / 404 / 409 / 422CORE_SOLICITUD_INVALIDA, CORE_NO_ENCONTRADO, CORE_CONFLICTO, CORE_REGLA_DE_NEGOCIO, CORE_RECHAZOEl core rechazó sin un tipo propio
403CORE_ACCESO_DENEGADOLa credencial del gateway ante el core no tiene el permiso de esa operación
403CORE_MODULE_DISABLEDEl módulo no está licenciado en el core de la institución (propiedad modulo)
404CORE_RUTA_NO_DISPONIBLEEl core de esa institución todavía no tiene esa ruta (una versión anterior)
422CORE_FOUR_EYES_VIOLATIONQuien aprueba es la misma identidad que quien solicitó (cuatro ojos)
502CORE_ERROR_INTERNOError interno del core, sin detalle publicable
502CORE_RESPUESTA_NO_JSONEl core respondió algo que no es JSON
502CORE_CREDENCIAL_RECHAZADAEl core no aceptó la credencial del gateway: lo corrige el operador, no tú
503CORE_NO_DISPONIBLEEl core no responde (red o tiempo agotado)
503CORE_CIRCUITO_ABIERTOEl circuit breaker de esa institución está abierto tras varios fallos del core
503CORE_SIN_CREDENCIALEl gateway no tiene configurada la credencial de esa institución
500GW_ERROR_INTERNOError inesperado del gateway; nunca trae trazas

Los tipos de la API contable están en la referencia de la API contable.

Situación¿Reintentas?
5xx, CORE_NO_DISPONIBLE, CORE_CIRCUITO_ABIERTOSí, con espera creciente y la misma Idempotency-Key
409 IDEMPOTENCIA_EN_CURSOSí, con la misma clave, después de unos segundos
429Sí, después de Retry-After
Cualquier otro 4xxNo: corrige la petición primero