> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Lista de errores de Tracer

> Las API de Tracer devuelven un objeto de error estructurado con un código estable, un estado HTTP y un mensaje para que puedas diagnosticar problemas y dirigirlos al equipo correcto.

La API de Tracer devuelve los errores como un objeto de detalles de problema [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457), servido con el tipo de contenido `application/problem+json`:

```json theme={null}
{
   "type": "https://errors.lerian.studio/v1/<error_code>",
   "title": "<error_title>",
   "status": <http_status>,
   "detail": "<error_message>",
   "code": "<error_code>"
}
```

**Definiciones de campos**

* `type`: un URI que identifica el tipo de error, formado por `https://errors.lerian.studio/v1/` seguido del código de error.
* `title`: un resumen breve del problema.
* `status`: el código de estado HTTP de la respuesta.
* `detail`: orientación detallada para resolver el error. Las tablas siguientes muestran este contenido en la columna `message`.
* `code`: un identificador único y estable para el error. Suele ser una cadena numérica de cuatro dígitos tomada del registro de errores compartido de la plataforma (por ejemplo, `0347`). Los fallos de autenticación son la excepción y usan la cadena literal `Unauthenticated` (consulta la nota siguiente).
* `entityType`: la entidad con la que se relaciona el error (por ejemplo, `Rule`). Solo está presente cuando corresponde.
* `message`: el motivo en lenguaje natural, expuesto tal cual como campo de primer nivel. Solo está presente en las respuestas `413 Payload Too Large` y `504 Gateway Timeout`. El resto de los errores lo omiten.

<Note>
  En los errores del lado del servidor (HTTP 5xx), `title` y `detail` llevan valores genéricos para que las causas internas nunca se filtren. Usa `code` y `type` para identificar el error. En los `504` por timeout, el campo `message` de primer nivel sigue llevando el motivo específico.
</Note>

**Validación en el nivel de campo**

Los fallos de validación de campo en el nivel de estructura devuelven el código `0009` con el título `Validation Error` y un `detail` que nombra el campo y la restricción específicos, por ejemplo `transactionType must be one of [CARD WIRE PIX CRYPTO]`.

Ejemplos:

<CodeGroup>
  ```json Missing required field theme={null}
  {
     "type": "https://errors.lerian.studio/v1/0009",
     "title": "Validation Error",
     "status": 400,
     "detail": "name is a required field",
     "code": "0009"
  }
  ```

  ```json Invalid expression type theme={null}
  {
     "type": "https://errors.lerian.studio/v1/0341",
     "title": "Expression Type",
     "status": 400,
     "detail": "Expression must return boolean.",
     "code": "0341",
     "entityType": "Rule"
  }
  ```
</CodeGroup>

<Note>
  Dos familias de respuestas conservan una forma plana heredada `{"code", "title", "message"}` en lugar del objeto de detalles de problema. Las emite un middleware que se ejecuta antes de la capa de API. Fallos de autenticación: una clave de API ausente o inválida devuelve HTTP 401 con `"code": "Unauthenticated"`, `"title": "Unauthorized"`, y `"message": "API Key missing or invalid"`. Haz coincidir la cadena literal `Unauthenticated`. Un token Bearer que se analiza correctamente pero carece del claim `sub` requerido devuelve HTTP 401 con `"code": "0474"`. Capacidad de tenant: el código `0466` devuelve HTTP 503 en la misma forma plana.
</Note>

## Errores generales

***

Cualquier endpoint de la API de Tracer puede devolver estos errores.

| `code` | `title` | `message` |
| :- | :- | :- |
| 0009 | Faltan campos en la solicitud | A tu solicitud le faltan uno o más campos obligatorios: %v. Consulta la documentación para confirmar que se incluyan todos los campos necesarios en tu solicitud. |
| 0046 | Error interno del servidor | El servidor encontró un error inesperado. Vuelve a intentarlo más tarde o comunícate con soporte. |
| 0065 | Parámetro de ruta no válido | Uno o más parámetros de ruta tienen un formato incorrecto. Verifica los siguientes parámetros %v y confirma que cumplan con el formato requerido antes de volver a intentarlo. |
| 0082 | Parámetro de consulta no válido | Uno o más parámetros de consulta tienen un formato incorrecto. Verifica los siguientes parámetros '%v' y confirma que cumplan con el formato requerido antes de volver a intentarlo. |
| 0094 | Solicitud incorrecta | El cuerpo de la solicitud está mal formado o contiene JSON no válido. Verifica la sintaxis e inténtalo de nuevo. |
| 0143 | Payload demasiado grande | payload demasiado grande: supera el límite de 100KB |
| 0183 | Nada que actualizar | No se proporcionó ningún campo actualizable. Incluye al menos un campo para actualizar. |
| 0330 | Contexto cancelado | Contexto cancelado o servicio no disponible. |
| 0484 | Ruta no encontrada | La ruta solicitada no existe. Verifica el método HTTP y la ruta e inténtalo de nuevo. |
| 0485 | Método no permitido | El método HTTP no está permitido para la ruta solicitada. Verifica el método e inténtalo de nuevo. |
| 0497 | Campos header de la solicitud demasiado grandes | Los campos header de la solicitud son demasiado grandes. Reduce el tamaño de los headers de la solicitud e inténtalo de nuevo. |

El código `0009` también aparece con el título `Validation Error` cuando la validación en el nivel de campo rechaza una solicitud. Consulta la nota anterior.

Los endpoints de validación y de reserva devuelven el código `0143` con HTTP `413` cuando el cuerpo de la solicitud supera el límite de 100KB. El motivo también aparece en el campo `message` de primer nivel. La API de Tracer devuelve el código `0497` con HTTP `431` cuando los headers de la solicitud son demasiado grandes. Devuelve el código `0484` con HTTP `404` para una ruta que el servicio no atiende. Devuelve el código `0485` con HTTP `405` para un método que la ruta no acepta.

## Errores de fecha y hora

***

| `code` | `title` | `message` |
| :- | :- | :- |
| 0077 | Error de formato de fecha no válido | 'initialDate', 'finalDate', o ambos, tienen un formato incorrecto. Usa el formato 'yyyy-mm-dd' e inténtalo de nuevo. |
| 0083 | Error de rango de fechas no válido | Los campos 'initialDate' y 'finalDate' son obligatorios y deben tener el formato 'yyyy-mm-dd'. Proporciona fechas válidas e inténtalo de nuevo. |

## Errores de paginación

***

| `code` | `title` | `message` |
| :- | :- | :- |
| 0080 | Límite de paginación superado | El límite de paginación supera el máximo permitido de %v elementos por página. Verifica el límite e inténtalo de nuevo. |
| 0081 | Orden de clasificación no válido | El campo 'sort\_order' debe ser 'asc' o 'desc'. Proporciona un orden de clasificación válido e inténtalo de nuevo. |
| 0331 | Límite de paginación no válido | El límite de paginación debe ser positivo. |
| 0332 | Columna de clasificación no válida | La columna de clasificación no está en la lista permitida. |
| 0333 | Cursor no válido | Cursor de paginación no válido o corrupto. |
| 0334 | Cursor con parámetros de clasificación | El cursor y los parámetros de clasificación son mutuamente excluyentes. |

## Errores de metadatos

***

Estos errores provienen del mapa `metadata` de una solicitud de validación (`POST /v1/validations`) y de una solicitud de reserva (`POST /v1/reservations`).

| `code` | `title` | `message` |
| :- | :- | :- |
| 0050 | Longitud de clave de metadatos superada | Una clave de metadatos supera la longitud máxima permitida de 64 caracteres. Usa una clave más corta. |
| 0335 | Entradas de metadatos superadas | Las entradas de metadatos superan el máximo de 50. |
| 0336 | Caracteres no válidos en la clave de metadatos | La clave de metadatos contiene caracteres no válidos. |

La API devuelve HTTP `400` cuando una clave de metadatos supera los 64 caracteres, o cuando una solicitud tiene más de 50 entradas de metadatos.

## Errores de expresión CEL

***

Escribes las reglas como expresiones CEL (Common Expression Language). Estos errores aparecen al crear, actualizar o evaluar la expresión de una regla.

| `code` | `title` | `message` |
| :- | :- | :- |
| 0340 | Sintaxis de expresión | Sintaxis CEL no válida. |
| 0341 | Tipo de expresión | La expresión debe devolver un valor booleano. |
| 0342 | Costo de expresión superado | Se superó el límite de costo (el costo calculado está por encima del umbral). |
| 0343 | Evaluación de expresión | Error de evaluación en tiempo de ejecución. |
| 0344 | Programa de expresión | Error al crear el programa (fase de compilación). |
| 0345 | Estimación de costo de expresión | No se pudo estimar el costo de la expresión. |
| 0346 | El monto supera la precisión | El monto supera la precisión segura para la evaluación float64 de CEL (máximo: ±2^53). |
| 0351 | Expresión no modificable | La expresión no se puede modificar en reglas que no están en estado DRAFT. |

## Errores de regla

***

| `code` | `title` | `message` |
| :- | :- | :- |
| 0347 | Regla no encontrada | No se encontró la regla por ID. |
| 0348 | El nombre de la regla ya existe | El nombre de la regla debe ser único. |
| 0349 | Estado de regla no válido | Transición de estado de regla no válida. |
| 0350 | Error de evaluación de regla | Falló la evaluación de la regla. |
| 0352 | Entrada de regla nula | La entrada de la regla no puede ser nula. |
| 0353 | Nombre de regla obligatorio | El nombre de la regla es obligatorio. |
| 0354 | Nombre de regla demasiado largo | El nombre de la regla supera la longitud máxima (255). |
| 0355 | Expresión de regla obligatoria | La expresión de la regla es obligatoria. |
| 0356 | Expresión de regla demasiado larga | La expresión de la regla supera la longitud máxima (5000). |
| 0357 | Acción de regla no válida | La acción debe ser una de \[ALLOW, DENY, REVIEW]. |
| 0358 | Scope de regla no válido | El scope debe tener al menos un campo definido. |
| 0359 | Descripción de regla demasiado larga | La descripción de la regla supera la longitud máxima (1000). |
| 0360 | Demasiados scopes de regla | Los scopes de la regla superan el máximo (100). |
| 0437 | Caché de reglas no lista | La caché de reglas no está lista. |
| 0441 | El nombre de la regla ya existe en este contexto | El nombre de la regla ya existe en este contexto. |

## Errores de límite

***

| `code` | `title` | `message` |
| :- | :- | :- |
| 0362 | Límite no encontrado | No se encontró el límite por ID. |
| 0363 | Cambio de estado de límite no válido | Transición de estado de límite no válida. |
| 0364 | Tipo de límite no válido | Tipo de límite no válido. |
| 0365 | Monto máximo de límite no válido | MaxAmount debe ser positivo. |
| 0366 | Activo de límite no válido | El activo debe ser un código ISO 4217 válido. |
| 0367 | Scope de límite no válido | Falló la validación del scope. |
| 0368 | Nombre de límite obligatorio | El nombre del límite es obligatorio. |
| 0369 | Nombre de límite demasiado largo | El nombre del límite supera la longitud máxima. |

\| 0371 | Caracteres no válidos en el nombre del límite | El nombre del límite contiene caracteres no válidos. |
\| 0372 | Caracteres no válidos en la descripción del límite | La descripción del límite contiene caracteres no válidos. |
\| 0373 | ID de límite no válido | El ID del límite no es válido o es nulo. |
\| 0378 | Falló la verificación del límite | Falló la verificación del límite. |
\| 0379 | Entrada de límite nula | La entrada del límite no puede ser nula. |
\| 0380 | Campo inmutable de límite | No se puede modificar un campo inmutable (limitType, asset). |
\| 0438 | Discrepancia en la ventana de tiempo del límite | ActiveTimeStart y activeTimeEnd deben estar ambos definidos o ambos ser nulos. |
\| 0442 | El nombre del límite ya existe | El nombre del límite ya existe. |
\| 0447 | Formato de inicio personalizado no válido | Formato de customStartDate no válido, se esperaba RFC3339. |
\| 0448 | Formato de fin personalizado no válido | Formato de customEndDate no válido, se esperaba RFC3339. |
\| 0449 | Fechas personalizadas obligatorias | CustomStartDate y customEndDate son obligatorios para el limitType CUSTOM. |

## Errores de evento de auditoría

***

| `code` | `title` | `message` |
| :- | :- | :- |
| 0381 | Evento de auditoría no encontrado | No se encontró el evento de auditoría. |
| 0382 | Filtros de evento de auditoría no válidos | Parámetros de filtro de evento de auditoría no válidos. |

## Errores de solicitud de validación

***

Los endpoints de validación de transacciones (`POST /v1/validations` y las consultas de validación) devuelven estos errores.

| `code` | `title` | `message` |
| :- | :- | :- |
| 0413 | ID de solicitud obligatorio | RequestId es obligatorio. |
| 0414 | Tipo de transacción no válido | transactionType no válido. |
| 0415 | Monto no positivo | El monto debe ser positivo. |
| 0416 | Activo obligatorio | El activo es obligatorio. |
| 0417 | Activo no válido | El activo debe ser un código ISO 4217 válido. |
| 0418 | Marca de tiempo obligatoria | La marca de tiempo es obligatoria. |
| 0419 | Marca de tiempo futura | La marca de tiempo no puede estar en el futuro. |
| 0420 | Cuenta obligatoria | La cuenta es obligatoria. |
| 0421 | Marca de tiempo demasiado antigua | La marca de tiempo está demasiado en el pasado. |
| 0422 | Gateway Timeout | timeout de validación |
| 0423 | ID de segmento obligatorio | SegmentId es obligatorio cuando se proporciona segment. |
| 0424 | ID de portafolio obligatorio | PortfolioId es obligatorio cuando se proporciona portfolio. |
| 0425 | Subtipo demasiado largo | SubType supera la longitud máxima de 50 caracteres. |
| 0426 | Tipo de cuenta no válido | Account.type debe ser checking, savings o credit. |
| 0427 | Estado de cuenta no válido | Account.status debe ser active, suspended o closed. |
| 0428 | Categoría de comercio no válida | Merchant.category debe ser un código MCC de 4 dígitos. |
| 0429 | País de comercio no válido | Merchant.country debe ser ISO 3166-1 alpha-2. |
| 0430 | ID de comercio obligatorio | Merchant.id es obligatorio cuando se proporciona merchant. |
| 0431 | Filtros de validación de transacción no válidos | Parámetros de filtro de validación de transacción no válidos. |
| 0432 | Validación de transacción no encontrada | No se encontró el registro de validación de transacción. |
| 0433 | Gateway Timeout | se superó el timeout de la consulta |

La API devuelve los códigos `0422` y `0433` con HTTP `504 Gateway Timeout`: `0422` cuando la evaluación de una validación supera su plazo, `0433` cuando lo supera una consulta de lista de validaciones. Como en todas las respuestas 5xx, `detail` lleva un valor genérico. El campo `message` de primer nivel lleva el motivo específico.

## Errores de reserva

***

Los endpoints de reserva de uso (`/reservations`) devuelven estos errores. Forman la superficie de dos fases de reservar, confirmar y liberar. Las solicitudes de reserva también pueden devolver los errores generales y de solicitud de validación indicados antes.

| `code` | `title` | `message` |
| :- | :- | :- |
| 0476 | ID de transacción de reserva obligatorio | Reserva: transactionId es obligatorio. |
| 0480 | Estado de reserva no válido | Reserva: status debe ser uno de RESERVED, CONFIRMED, RELEASED, EXPIRED. |
| 0482 | Reserva no encontrada | Reserva: no se encontró la reserva. |

\| 0487 | Tenant obligatorio en la reserva | Reserva: el id del tenant es obligatorio en la superficie de reserva multi-tenant. |

## Errores de multi-tenant y autenticación

***

La instancia devuelve HTTP 503 con un header `Retry-After` cuando alcanza su tope de workers de tenant por pod. Los clientes deben aplicar backoff y reintentar. Un token Bearer que se analiza correctamente pero carece del claim `sub` requerido devuelve HTTP 401.

| `code` | `title` | `message` |
| :- | :- | :- |
| 0466 | Capacidad de tenant alcanzada | Se alcanzó la capacidad del tenant; vuelve a intentarlo en breve |
| 0474 | No autorizado | Al token Bearer le falta el claim 'sub' requerido; no se puede atribuir la identidad. |

## Errores de arranque de multi-tenant

***

Estos códigos aparecen solo al iniciar el servicio, cuando `MULTI_TENANT_ENABLED=true` y falta una configuración obligatoria o es incompatible. Aparecen en los logs de inicio e impiden que el servicio arranque. Nunca llegan a los consumidores de la API `/v1/*`.

| `code` | `title` | `message` |
| :- | :- | :- |
| 0451 | Config multi-tenant obligatoria | Configuración multi-tenant: cfg es obligatorio. |
| 0452 | Logger multi-tenant obligatorio | Configuración multi-tenant: logger es obligatorio. |
| 0453 | URL multi-tenant obligatoria | MULTI\_TENANT\_URL debe estar definida cuando MULTI\_TENANT\_ENABLED=true. |
| 0454 | URL multi-tenant no válida | MULTI\_TENANT\_URL debe ser una URL absoluta válida con esquema y host. |
| 0455 | API key de servicio multi-tenant obligatoria | MULTI\_TENANT\_SERVICE\_API\_KEY debe estar definida cuando MULTI\_TENANT\_ENABLED=true. |
| 0456 | Host de Redis multi-tenant obligatorio | MULTI\_TENANT\_REDIS\_HOST debe estar definida cuando MULTI\_TENANT\_ENABLED=true. |
| 0457 | Autenticación de plugin multi-tenant obligatoria | MULTI\_TENANT\_ENABLED=true requiere PLUGIN\_AUTH\_ENABLED=true. |
| 0458 | Conflicto de validación exclusiva por API key multi-tenant | MULTI\_TENANT\_ENABLED=true es incompatible con API\_KEY\_ENABLED\_ONLY\_VALIDATION=true. |

## Errores del readiness probe

***

El endpoint operativo `/readyz` y el ciclo de vida del worker-supervisor exponen estos códigos. Aparecen en el campo `error` de la respuesta JSON de `/readyz` (que lleva solo el código), no en las respuestas de la API `/v1/*`. El `title` y el `message` siguientes describen cada código como referencia para el operador.

El ciclo de `/readyz` verifica cinco dependencias. Siempre verifica `postgres` y `rule_cache`. Verifica `redis` y `tenant_manager` solo en modo multi-tenant, y las omite en caso contrario. `streaming` es informativo. Aparece en las verificaciones y en las métricas, pero nunca fuerza un 503.

| `code` | `title` | `message` |
| :- | :- | :- |
| 0436 | Falló el calentamiento de la caché de reglas | Falló el calentamiento de la caché de reglas. |
| 0459 | Conexión de Postgres no establecida en readyz | Postgres readyz: conexión no establecida. |
| 0460 | Falló la conexión de Postgres en readyz | Postgres readyz: falló la conexión. |
| 0461 | Falló el ping de Postgres en readyz | Postgres readyz: falló el ping. |
| 0462 | Dependencias no saludables en readyz | Agregado de /readyz: una o más dependencias no están saludables. |
| 0463 | Caché no lista en readyz | Rule\_cache readyz: la caché no está lista. |
| 0464 | Caché desactualizada en readyz | Rule\_cache readyz: datos de la caché desactualizados. |
| 0465 | El supervisor se está cerrando | Worker supervisor: cerrándose, rechaza crear nuevos workers de tenant. |
| 0493 | Conexión de Redis no establecida en readyz | Redis readyz: conexión no establecida. |
| 0494 | Falló el ping de Redis en readyz | Redis readyz: falló el ping. |
| 0495 | Tenant manager no disponible en readyz | Tenant\_manager readyz: servicio no disponible. |
| 0496 | Streaming no saludable en readyz | Streaming readyz: productor no saludable. |
