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: 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.
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 objetofields con detalles granulares:
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 (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
| Prefijo | Servicio |
|---|---|
| AUT | Access Manager (autenticación) |
| IDE | Access Manager (identidad) |
| CRM | CRM |
| FEE | Fees Engine |
| PIX | PIX |
| BTF | Bank Transfer (TED) |
| TPL | Reporter |
| TRC | Tracer |
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:| Rango | Categoría | Descripción |
|---|---|---|
0001–0099 | Sistema y middleware | Autenticación, autorización, encabezados, rate limiting |
0100–0999 | Específico del servicio | Validación, lógica de negocio y errores de dominio dentro del plugin |
1000–1999 | Integración externa | Errores originados en proveedores externos o servicios upstream |
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
fieldscuando campos específicos son los causantes - Siempre prevenibles validando los datos antes de enviar
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) o422(Unprocessable Entity) - Indican que la solicitud es sintácticamente válida pero no puede procesarse
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) o504(Gateway Timeout) - No son causados por tus datos — la misma solicitud puede tener éxito más tarde
Códigos de estado HTTP
Las APIs de Lerian usan un conjunto enfocado de códigos de estado HTTP:
| Código | Significado | Categoría |
|---|---|---|
400 | Bad Request | Error de validación — corrige la solicitud |
401 | Unauthorized | Credenciales de autenticación faltantes o inválidas |
403 | Forbidden | Credenciales válidas pero permisos insuficientes |
404 | Not Found | El recurso solicitado no existe |
409 | Conflict | La operación entra en conflicto con el estado actual del recurso |
422 | Unprocessable Entity | Sintaxis válida pero viola reglas de negocio |
429 | Too Many Requests | Límite de tasa excedido — espera y reintenta |
500 | Internal Server Error | Falla inesperada del servidor — reintenta más tarde |
502 | Bad Gateway | El servicio upstream devolvió una respuesta inválida |
503 | Service Unavailable | Servicio temporalmente no disponible — reintenta más tarde |
504 | Gateway Timeout | La 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 error | Reintentable | Acción recomendada |
|---|---|---|
400 errores de validación | No | Corrige el payload de la solicitud |
401 / 403 errores de auth | No | Verifica credenciales y permisos |
404 no encontrado | No | Verifica el ID del recurso |
409 conflictos | A veces | Verifica el estado actual, luego reintenta si el conflicto se resolvió |
422 lógica de negocio | No | Ajusta la operación para cumplir con las reglas de negocio |
429 límite de tasa | Sí | Espera la ventana de reintento, luego reintenta |
500 errores internos | Sí | Reintenta con backoff exponencial |
502 / 503 / 504 | Sí | Reintenta con backoff exponencial |
Estrategia de backoff exponencial
Para errores reintentables, usa backoff exponencial para evitar sobrecargar el servicio:- Primer reintento: Espera 1 segundo
- Segundo reintento: Espera 2 segundos
- Tercer reintento: Espera 4 segundos
- Máximo de reintentos: Detente después de 3–5 intentos
- Jitter: Agrega un pequeño retraso aleatorio (0–500ms) a cada espera para prevenir avalanchas
Resolución de problemas por categoría
Campos faltantes o inválidos (400)
La mayoría de errores400 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
- Lee el objeto
fieldsen la respuesta de error - Compara tu solicitud con la referencia de API para ese endpoint
- Verifica que los nombres de campo usen
lowerCamelCase(nosnake_case) - Verifica que las fechas usen formato ISO 8601 con sufijo
Z - Verifica que los UUIDs sean formato v4 válido
Autenticación y autorización (401/403)
Causas comunes:- Encabezado
Authorizationfaltante - Token expirado o revocado
- El token no otorga acceso al endpoint solicitado
- Confirma que Access Manager está habilitado en tu entorno
- Verifica que el token está presente en el encabezado
Authorization - Solicita un nuevo token si el actual ha expirado
- 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
- Verifica el formato del ID (debe ser un UUID válido)
- Lista los recursos para confirmar que el ID existe
- Verifica que estás usando los parámetros de ruta
organizationIdyledgerIdcorrectos
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)
- Lee el mensaje de error para identificar qué campo causó el conflicto
- Usa un valor diferente (ej., renombra) u obtén el recurso existente en su lugar
- 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
- Implementa backoff exponencial con jitter
- Reduce la frecuencia de llamadas a la API
- 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
- Reintenta con backoff exponencial (1s, 2s, 4s)
- Si el error persiste después de 3–5 reintentos, contacta a soporte
- 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:
| Servicio | Lista de errores |
|---|---|
| Midaz | Lista de errores de Midaz |
| Access Manager | Lista de errores de Access Manager |
| CRM | Lista de errores de CRM |
| Fees Engine | Lista de errores de Fees Engine |
| PIX | Lista de errores de PIX |
| Bank Transfer (TED) | Lista de errores de TED |
| Reporter | Lista de errores de Reporter |
| Tracer | Lista de errores de Tracer |
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: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 objetofields, muestra esos mensajes específicos a tus usuarios en lugar de mostrar un error genérico.
4. Implementa circuit breakers para integraciones
Si recibes errores500, 502 o 503 repetidos, usa un patrón de circuit breaker para detener temporalmente las llamadas al servicio fallando y prevenir fallas en cascada.

