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

# Códigos de Error y Reintentos

> Formato de las respuestas de error de Unit API, significado de cada código y cómo actuar, encabezados de respuesta, reglas de reintento y política de versiones.

Cuando una llamada no puede producir un resultado, Unit API devuelve un estado HTTP distinto de `200` y un cuerpo de error. **Las respuestas de error no se facturan.** La llamada se registra igualmente y, en los proyectos Trial, cuenta para el límite mensual.

## Formato de la respuesta de error

```json theme={null}
{
  "code": "MISSING_PARAMETER",
  "message": "idImage: Invalid input: expected string, received undefined"
}
```

| Campo | Descripción |
| - | - |
| `code` | Código en inglés que identifica el tipo de error. **Bifurque su lógica con este valor.** |
| `message` | Descripción legible. A menudo indica el campo con el problema, pero puede cambiar sin aviso, así que no lo use para bifurcar. |

***

## Encabezados de respuesta

| Encabezado | Cuándo se envía | Descripción |
| - | - | - |
| `X-Request-Id` | Todas las respuestas | ID de una única solicitud HTTP |
| `X-Trace-Id` | Todas las respuestas | ID de todo el flujo de procesamiento interno que generó la solicitud |
| `X-Tx-Id` | Llamadas cuyo cuerpo se leyó y entraron en procesamiento | Mismo valor que `txId` en una respuesta correcta. También se envía con las respuestas de error, así que puede registrar el TX ID aunque no pueda leer el cuerpo |
| `Retry-After` | `429`, algunos `503` | Segundos que debe esperar antes de volver a llamar (entero) |

`X-Tx-Id` no se envía en las solicitudes rechazadas antes de leer el cuerpo: JSON mal formado (`400 REQUEST_INVALID`) y cuerpo demasiado grande (`413 REQUEST_TOO_LARGE`). Al contactar con soporte, incluya `X-Request-Id` y `X-Trace-Id` junto con `X-Tx-Id`.

***

## Códigos de error

### Problemas de la solicitud (4xx)

La misma solicitud devuelve el mismo resultado hasta que la corrija. **No la reintente tal cual.**

| HTTP | code | Significado | Qué hacer |
| :-: | - | - | - |
| 400 | `MISSING_PARAMETER` | No se envió un campo obligatorio | Añada el campo que falta y vuelva a llamar |
| 400 | `INVALID_PARAMETER_FORMAT` | Un campo tiene un tipo o formato incorrecto. Las cadenas vacías y `null` también entran aquí | Corrija el valor y vuelva a llamar |
| 400 | `UNKNOWN_PARAMETER` | Se envió un campo o parámetro de consulta que no está en el contrato | Revise los nombres de los campos por si hay errores tipográficos |
| 400 | `PARAMETER_OUT_OF_RANGE` | Un valor está fuera del rango permitido. Las imágenes demasiado grandes entran aquí | Ajuste el valor al rango permitido |
| 400 | `REQUEST_INVALID` | No se puede interpretar la solicitud. Entran aquí el JSON mal formado y el Base64 que no se decodifica como imagen | Revise el cuerpo de la solicitud y la codificación de la imagen |
| 401 | `AUTHENTICATION_FAILED` | Falta el encabezado `x-api-key` o no se puede interpretar | Revise el nombre y el valor del encabezado |
| 401 | `INVALID_API_KEY` | La clave no existe o fue revocada por una reemisión. Llamar al host de otra región también devuelve este error | Revise en el panel la clave actual y la región del proyecto |
| 403 | `ACCESS_FORBIDDEN` | La clave es válida, pero el estado del proyecto no permite la llamada (proyecto cerrado) | Revise el estado del proyecto |
| 409 | `STATE_CONFLICT` | La fuente todavía está procesando la misma solicitud. Solo ocurre en las verificaciones de autenticidad de documentos y en la consulta de estancia | Vuelva a llamar tras una breve espera |
| 413 | `REQUEST_TOO_LARGE` | El cuerpo de la solicitud supera el límite | Reduzca el tamaño de la imagen |
| 415 | `UNSUPPORTED_MEDIA_TYPE` | `Content-Type` no es `application/json` | Corrija el encabezado |
| 422 | `ADDITIONAL_AUTH_UNSUPPORTED` | La fuente solicitó una autenticación adicional de identidad, que Unit API no admite | Reintentar devuelve el mismo resultado. Verifique por otros medios |
| 429 | `TRIAL_LIMIT_EXCEEDED` | El proyecto Trial agotó su límite mensual | Llame después de `Retry-After` (00:00 UTC del día 1 del mes siguiente) o cambie el proyecto |
| 429 | `RATE_LIMIT_EXCEEDED` | Se superó el límite de frecuencia de llamadas | Llame después de `Retry-After` |

### Problemas de la imagen de entrada (502)

El motor respondió con normalidad, pero no encontró lo que necesitaba en la imagen enviada. Enviar la misma imagen devuelve el mismo resultado, así que **vuelva a llamar con una imagen capturada de nuevo.**

| HTTP | code | Significado | Qué hacer |
| :-: | - | - | - |
| 502 | `ID_NOT_RECOGNIZED` | ID-OCR no encontró texto en el anverso del documento | Vuelva a capturar con menos recorte, desenfoque y reflejos. Compruebe también que el país emisor y el tipo de documento son correctos |
| 502 | `FACE_NOT_DETECTED` | FACE-COM o FACE-LIVE-PSV no encontró un rostro en una imagen | `message` indica la imagen (`originFace`, `targetFace` o `faceImage`). Vuelva a capturar esa imagen |

### Problemas del servidor y de la fuente (5xx)

No los causa su solicitud. Reintente según las reglas siguientes.

| HTTP | code | Significado | Qué hacer |
| :-: | - | - | - |
| 500 | `INTERNAL_SERVER_ERROR` | Error interno del servidor | Reintente unas pocas veces con espera. Si persiste, contacte con soporte |
| 502 | `UPSTREAM_ERROR` | El motor de verificación o la fuente no pudo procesar la solicitud | Reintente con espera. Si se repite con la misma entrada, contacte con soporte |
| 502 | `AGENCY_REQUEST_REJECTED` | La fuente rechazó la solicitud que envió ARGOS. No necesita cambiar su solicitud | No reintente. Contacte con soporte indicando el TX ID |
| 503 | `UPSTREAM_UNAVAILABLE` | La fuente o el motor no está disponible temporalmente. Es habitual durante el mantenimiento de la fuente | Reintente después de `Retry-After` si existe; si no, reintente con esperas crecientes |
| 504 | `UPSTREAM_TIMEOUT` | El motor o la fuente no respondió a tiempo. **No se sabe si se procesó** | No reintente de inmediato. Siga [Llamadas duplicadas y reintentos](#llamadas-duplicadas-y-reintentos) |

> [!NOTE]
>
> Dentro de `v1` se pueden añadir nuevos códigos de error. Si recibe un `code` desconocido, trátelo según su estado HTTP (4xx o 5xx).

***

## Llamadas duplicadas y reintentos

Unit API no acepta claves de idempotencia. **Enviar la misma solicitud dos veces se procesa y se factura como dos llamadas.**

* Una llamada de la que no recibió respuesta, o que devolvió `504 UPSTREAM_TIMEOUT`, puede haberse procesado. Antes de reintentar, compruebe si la llamada aparece en el historial de llamadas del panel.
  * Si recibió el encabezado `X-Tx-Id`, busque por TX ID.
  * Si no, búsquela en la columna `referenceId` del CSV del historial de llamadas. Para ello, **envíe un `referenceId` distinto en cada llamada.**
* Limite los reintentos de 5xx a unos tres, con esperas crecientes. Ejemplo: tras 1, 2 y 4 segundos
* Los proyectos Trial cuentan las llamadas con error para el límite mensual, así que limite los reintentos todavía más.

### Tiempo de respuesta

Las consultas a registros esperan la respuesta de la fuente y pueden tardar varios segundos. Por ejemplo, la verificación de la licencia de conducir puede tardar de 5 a 12 segundos. Configure un tiempo de espera del cliente amplio (60 segundos o más). Un tiempo de espera corto puede hacer que considere fallida una llamada ya procesada y la reintente, lo que la factura dos veces.

***

## Política de versiones

El `v1` de la ruta es la versión del contrato.

**Cambios que se aplican en la misma versión**: asegúrese de que los valores desconocidos no rompan su código.

* Nuevas API, nuevos campos de solicitud opcionales, nuevos campos de respuesta
* Un campo de solicitud obligatorio que pasa a ser opcional
* Nuevos valores de enum, nuevos `code` de error, mejoras en la redacción de `message`

**Cambios que se publican como una nueva versión**: `v1` no se sobrescribe.

* Eliminar una API o cambiar una ruta o un método
* Añadir un campo de solicitud obligatorio o hacer obligatorio un campo opcional
* Eliminar o renombrar campos de respuesta; eliminar, renombrar o cambiar el significado de valores de enum o de `code` de error
* Cambiar tipos de campo, reglas de `null`, condiciones de éxito o estados HTTP

Los campos marcados como "no cubiertos por el contrato", como `agency` y `data.raw`, quedan fuera de esta política. Pueden cambiar sin aviso cuando cambia la fuente o el motor.

***

## Al contactar con soporte

Incluya los siguientes valores.

* TX ID (`txId` o `X-Tx-Id`)
* `X-Request-Id` y `X-Trace-Id`
* Hora de la llamada (UTC) y la API llamada
* El estado HTTP y el `code` recibidos


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.