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

# Códigos de error

> error_code de la API pública, agrupado por superficie

Cuando una request falla, el envelope no es el de éxito. Es:

```json theme={null}
{
  "error_code": "RESOURCE_NOT_FOUND",
  "message": "The requested resource was not found.",
  "details": "…",
  "timestamp": "2026-09-13T14:31:02"
}
```

Ramifica sobre `error_code` (y, en scoring, sobre `details` cuando hace falta distinguir
dos `409`). `message` es prosa en inglés para un log, no el contrato.

Estos códigos son de **toda la plataforma**. Muchos no aparecen nunca en analyze ni en
verificaciones: pertenecen a cuenta, dashboard o subidas. Abajo están etiquetados.

## Scoring (`POST /analyze` y `/analyze/sandbox`)

Los HTTP concretos de esa ruta —incluidos los dos `409`— están en
[POST /analyze](/referencia/analyze#errores). Códigos que puedes ver ahí:

| Código                     | HTTP      | Significado                                                                              |
| -------------------------- | --------- | ---------------------------------------------------------------------------------------- |
| `BAD_REQUEST`              | 400       | Input inválido o falta un dato requerido (p. ej. `X-Idempotency-Key`)                    |
| `VALIDATION_ERROR`         | 400 / 422 | Validación del payload, o conflicto de idempotencia por payload distinto                 |
| `INSUFFICIENT_PERMISSIONS` | 403       | La key no tiene `TRANSACTIONS_WRITE`, o no puede usar esa ruta                           |
| `DATA_CONFLICT`            | 409       | Conflicto: petición en curso **o** respuesta previa ilegible. Distínguelos por `details` |
| `TOO_MANY_REQUESTS`        | 429       | Límite de tasa                                                                           |
| `SERVICE_UNAVAILABLE`      | 503       | Scoring no disponible; reintenta                                                         |
| `EXTERNAL_SERVICE_ERROR`   | 500       | Fallo interno al scorear; no es un error de tu payload                                   |
| `INTERNAL_SERVER_ERROR`    | 500       | Error interno                                                                            |
| `UNKNOWN_ERROR`            | 500       | Error no clasificado                                                                     |
| `APPLICATION_ERROR`        | 500       | Error inesperado procesando la request                                                   |
| `OPERATION_FAILED`         | 500       | La operación no pudo completarse                                                         |
| `TIMEOUT_ERROR`            | 408       | La request expiró                                                                        |

## Identidad (`/v1/verifications`)

| Código                     | HTTP | Significado                                                                             |
| -------------------------- | ---- | --------------------------------------------------------------------------------------- |
| `BAD_REQUEST`              | 400  | Cuerpo mal formado                                                                      |
| `UNAUTHORIZED_ACCESS`      | 401  | Key ausente, malformada, desconocida o revocada                                         |
| `INSUFFICIENT_PERMISSIONS` | 403  | La key no puede usar esa ruta, o le falta `KYC_READ` / `KYC_WRITE`                      |
| `RESOURCE_NOT_FOUND`       | 404  | Esa verificación no existe en **tu** compañía (la de otra también es 404)               |
| `VALIDATION_ERROR`         | 422  | La petición se entendió y se rechazó                                                    |
| `TOO_MANY_REQUESTS`        | 429  | Límite de tasa                                                                          |
| `KYC_POLICY_BELOW_FLOOR`   | 422  | No aplica a create/get/list con API key. Aparece al configurar política en el dashboard |

## Cuenta y dashboard

No salen en la superficie de API key (analyze + verificaciones). Si los ves, estás en una
ruta de sesión de usuario, no en la integración.

| Código                    | HTTP | Significado                                                                                                                                         |
| ------------------------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `USER_NOT_INVITED`        | 403  | El usuario no está invitado a ninguna compañía y no es owner                                                                                        |
| `EMAIL_ALREADY_IN_USE`    | 409  | Ya existe una cuenta con ese email                                                                                                                  |
| `POLICY_VERSION_OUTDATED` | 422  | La versión de política aceptada ya no es la vigente                                                                                                 |
| `RELATION_CONFLICT`       | 409  | La relación entre recursos ya existe                                                                                                                |
| `UPLOAD_INCOMPLETE`       | 409  | La subida quedó incompleta: faltan partes                                                                                                           |
| `UPLOAD_SESSION_EXPIRED`  | 409  | La sesión de subida expiró                                                                                                                          |
| `UPLOAD_SLOTS_FULL`       | 429  | La compañía ya tiene el máximo de subidas en curso                                                                                                  |
| (identidad de cuentas)    | 500  | Error comunicándose con el servicio de identidad de **cuentas** del dashboard (login de usuarios). No es un error de verificación KYC ni de scoring |
| `HMAC_SIGNING_FAILED`     | 500  | Error interno al firmar una petición saliente                                                                                                       |
| `DATABASE_ERROR`          | 500  | Error de persistencia                                                                                                                               |
| `METHOD_NOT_ALLOWED`      | 405  | El método HTTP no está soportado para ese endpoint                                                                                                  |
| `INVALID_INPUT`           | 400  | Dato de entrada inválido                                                                                                                            |

`UNAUTHORIZED_ACCESS` (401) también puede aparecer en scoring si la key no autentica.
