Saltar al contenido principal
Al integrar con las APIs de Lerian, un manejo robusto de errores es esencial para una experiencia de usuario fluida y un rendimiento de aplicación resiliente. Esta guía explica cómo están estructurados los errores, cómo clasificarlos y cómo responder a diferentes categorías de error.

Modelo de respuesta de error


Todas las APIs de Lerian devuelven un objeto de error estructurado para cada error. El formato es consistente en todos los servicios:
{
   "code": "<error_code>",
   "title": "<error_title>",
   "message": "<error_message>"
}
Definiciones de campos:
  • code: Un identificador único y estable para el error. Usa este campo para el manejo programático de errores.
  • title: Un resumen breve del problema.
  • message: Orientación detallada y legible para resolver el error.
Siempre usa el campo code para identificar errores programáticamente. Los títulos y mensajes pueden evolucionar para mejorar la claridad, pero los códigos de error permanecen estables.

Detalles de error a nivel de campo

Cuando un error se relaciona con campos específicos en el payload de la solicitud, la respuesta incluye un objeto fields con detalles granulares:
{
   "code": "CRM-0003",
   "title": "Missing Fields in Request",
   "message": "Your request is missing one or more required fields. Please refer to the documentation to ensure all necessary fields are included in your request.",
   "fields": {
      "document": "document is a required field"
   }
}

Estructura de códigos de error


Cada código de error sigue un formato estandarizado que identifica tanto el servicio como el error específico:
<PREFIX>-<NNNN>
  • PREFIX (3 letras): Identifica el servicio o plugin que produjo el error.
  • NNNN (4 dígitos): Un número único dentro de ese servicio.

Prefijos de servicio

PrefijoServicio
AUTAccess Manager (autenticación)
IDEAccess Manager (identidad)
CRMCRM
FEEFees Engine
PIXPIX
BTFBank Transfer (TED)
TPLReporter
TRCTracer
Midaz core usa códigos solo numéricos (ej., 0002, 0009) sin prefijo. Todos los demás servicios incluyen su prefijo de 3 letras.

Rangos de números

Los códigos de error están organizados en rangos que indican el origen del error:
RangoCategoríaDescripción
00010099Sistema y middlewareAutenticación, autorización, encabezados, rate limiting
01000999Específico del servicioValidación, lógica de negocio y errores de dominio dentro del plugin
10001999Integración externaErrores originados en proveedores externos o servicios upstream
Esta estructura te permite identificar rápidamente si un error proviene de tu solicitud (números bajos), de la lógica de negocio del servicio (rango medio) o de una dependencia externa (1000+).

Clasificación de errores


Comprender el tipo de error te ayuda a decidir cómo responder. Los errores de Lerian se clasifican en tres categorías:

Errores de validación

Errores causados por datos incorrectos o faltantes en la solicitud. Características:
  • Estado HTTP 400 (Bad Request)
  • Incluyen un objeto fields cuando campos específicos son los causantes
  • Siempre prevenibles validando los datos antes de enviar
Ejemplos: Campos requeridos faltantes, UUIDs inválidos, valores de enumeración no soportados, campos que exceden la longitud máxima. Qué hacer: Revisa el objeto fields para detalles específicos. Corrige los datos y reintenta.

Errores de lógica de negocio

Errores causados por operaciones que violan reglas de dominio o restricciones de estado de recursos. Características:
  • Estado HTTP 404 (Not Found), 409 (Conflict) o 422 (Unprocessable Entity)
  • Indican que la solicitud es sintácticamente válida pero no puede procesarse
Ejemplos: Recurso no encontrado, conflictos de nombre duplicado, transiciones de estado inválidas (ej., activar una regla ya activa), saldo insuficiente. Qué hacer: Verifica que el recurso existe y está en el estado esperado. Revisa el mensaje de error para la restricción específica que fue violada.

Errores de sistema

Errores causados por problemas de infraestructura, timeouts o fallas inesperadas. Características:
  • Estado HTTP 500 (Internal Server Error), 502 (Bad Gateway), 503 (Service Unavailable) o 504 (Gateway Timeout)
  • No son causados por tus datos — la misma solicitud puede tener éxito más tarde
Ejemplos: Error interno del servidor, servicio temporalmente no disponible, gateway timeout. Qué hacer: Reintenta con backoff exponencial (consulta la guía abajo). Si el error persiste, contacta a soporte.

Códigos de estado HTTP


Las APIs de Lerian usan un conjunto enfocado de códigos de estado HTTP:
CódigoSignificadoCategoría
400Bad RequestError de validación — corrige la solicitud
401UnauthorizedCredenciales de autenticación faltantes o inválidas
403ForbiddenCredenciales válidas pero permisos insuficientes
404Not FoundEl recurso solicitado no existe
409ConflictLa operación entra en conflicto con el estado actual del recurso
422Unprocessable EntitySintaxis válida pero viola reglas de negocio
429Too Many RequestsLímite de tasa excedido — espera y reintenta
500Internal Server ErrorFalla inesperada del servidor — reintenta más tarde
502Bad GatewayEl servicio upstream devolvió una respuesta inválida
503Service UnavailableServicio temporalmente no disponible — reintenta más tarde
504Gateway TimeoutLa solicitud expiró — reintenta más tarde

Guía de reintentos


No todos los errores deben reintentarse. La siguiente tabla te ayuda a decidir:
Tipo de errorReintentableAcción recomendada
400 errores de validaciónNoCorrige el payload de la solicitud
401 / 403 errores de authNoVerifica credenciales y permisos
404 no encontradoNoVerifica el ID del recurso
409 conflictosA vecesVerifica el estado actual, luego reintenta si el conflicto se resolvió
422 lógica de negocioNoAjusta la operación para cumplir con las reglas de negocio
429 límite de tasaEspera la ventana de reintento, luego reintenta
500 errores internosReintenta con backoff exponencial
502 / 503 / 504Reintenta con backoff exponencial

Estrategia de backoff exponencial

Para errores reintentables, usa backoff exponencial para evitar sobrecargar el servicio:
  1. Primer reintento: Espera 1 segundo
  2. Segundo reintento: Espera 2 segundos
  3. Tercer reintento: Espera 4 segundos
  4. Máximo de reintentos: Detente después de 3–5 intentos
  5. Jitter: Agrega un pequeño retraso aleatorio (0–500ms) a cada espera para prevenir avalanchas
Nunca reintentes automáticamente errores 400, 401, 403 o 422. Estos indican problemas con tu solicitud que deben corregirse antes de reintentar.

Resolución de problemas por categoría


Campos faltantes o inválidos (400)

La mayoría de errores 400 incluyen un objeto fields que te indica exactamente qué campos necesitan atención. Causas comunes:
  • Campo requerido omitido del cuerpo de la solicitud
  • Valor del campo no coincide con el tipo esperado (ej., string en lugar de UUID)
  • Valor del campo excede la longitud máxima
  • Campos extra inesperados en el cuerpo de la solicitud
Pasos de resolución:
  1. Lee el objeto fields en la respuesta de error
  2. Compara tu solicitud con la referencia de API para ese endpoint
  3. Verifica que los nombres de campo usen lowerCamelCase (no snake_case)
  4. Verifica que las fechas usen formato ISO 8601 con sufijo Z
  5. Verifica que los UUIDs sean formato v4 válido

Autenticación y autorización (401/403)

Causas comunes:
  • Encabezado Authorization faltante
  • Token expirado o revocado
  • El token no otorga acceso al endpoint solicitado
Pasos de resolución:
  1. Confirma que Access Manager está habilitado en tu entorno
  2. Verifica que el token está presente en el encabezado Authorization
  3. Solicita un nuevo token si el actual ha expirado
  4. Verifica que el alcance del token incluya los permisos requeridos

Recurso no encontrado (404)

Causas comunes:
  • ID de recurso incorrecto en la ruta URL
  • Recurso fue eliminado (soft-delete)
  • Recurso pertenece a una organización o ledger diferente
Pasos de resolución:
  1. Verifica el formato del ID (debe ser un UUID válido)
  2. Lista los recursos para confirmar que el ID existe
  3. Verifica que estás usando los parámetros de ruta organizationId y ledgerId correctos

Errores de conflicto (409)

Causas comunes:
  • Crear un recurso con un nombre que ya existe (ej., nombre de ledger duplicado, nombre de regla duplicado)
  • Intentar una operación que ya se completó (ej., transacción duplicada)
Pasos de resolución:
  1. Lee el mensaje de error para identificar qué campo causó el conflicto
  2. Usa un valor diferente (ej., renombra) u obtén el recurso existente en su lugar
  3. Para operaciones idempotentes, verifica que el recurso existente coincida con tu intención

Límite de tasa (429)

Causas comunes:
  • Demasiadas solicitudes en un período corto
Pasos de resolución:
  1. Implementa backoff exponencial con jitter
  2. Reduce la frecuencia de llamadas a la API
  3. Agrupa operaciones donde sea posible

Errores de servidor y timeout (500/502/503/504)

Causas comunes:
  • Interrupción temporal del servicio
  • Alta carga en la plataforma
  • Dependencia upstream no disponible
Pasos de resolución:
  1. Reintenta con backoff exponencial (1s, 2s, 4s)
  2. Si el error persiste después de 3–5 reintentos, contacta a soporte
  3. Registra la respuesta de error completa (incluyendo code) para escalamiento a soporte

Listas de errores por servicio


Cada servicio de Lerian publica una lista completa de sus códigos de error. Usa estas referencias para buscar códigos de error específicos:

Mejores prácticas


1. Usa códigos de error para manejo programático

Los códigos de error son identificadores estables diseñados para automatización. Mapea códigos específicos a rutas de resolución en tu integración:
if error.code == "TRC-0100":
    # Rule not found — verify rule ID
elif error.code.startswith("TRC-01"):
    # Rule-related error — check rule configuration
elif error.code.startswith("TRC-0"):
    # Tracer validation error — check request format

2. Registra errores con contexto

Incluye la respuesta de error completa, la solicitud que la disparó y la marca de tiempo. Esto hace que la escalamiento a soporte sea más rápido y la depuración más efectiva.

3. Maneja errores a nivel de campo

Cuando la respuesta incluye un objeto fields, muestra esos mensajes específicos a tus usuarios en lugar de mostrar un error genérico.

4. Implementa circuit breakers para integraciones

Si recibes errores 500, 502 o 503 repetidos, usa un patrón de circuit breaker para detener temporalmente las llamadas al servicio fallando y prevenir fallas en cascada.

5. Mantente actualizado

Revisa las páginas de lista de errores periódicamente. Se pueden agregar nuevos códigos de error a medida que los servicios evolucionan.