---
title: Obtener documentos reutilizables
description: Verifique si un usuario ya tiene un documento reutilizable en archivo antes de iniciar un nuevo flujo de captura.
canonical: https://developer.unico.io/es/dual-api/developers/api-reference/api/get-document
locale: es
generated_by: markdown-export
---

Utilice este endpoint para verificar si un usuario ya tiene un documento disponible para reutilización antes de iniciar un nuevo flujo de captura de documentos. Si se encuentra un documento, su `documentId` se puede pasar directamente a `POST /processes/v1` (tipo Documento) para omitir el paso de captura.

### Endpoint

| Entorno | URL |
|---|---|
| **Producción** | `GET https://api.id.unico.app/documents/v1` |
| **Sandbox** | `GET https://api.id.uat.unico.app/documents/v1` |

### Solicitud

## Encabezados

| Encabezado | Valor |
|---|---|
| `Authorization` | `Bearer <access_token>` (consulte [Autenticación](../authentication))|
| `APIKEY` | Clave API provisionada con Captura de Documentos y Reutilización habilitada. |

## Parámetros de consulta

| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| `code` | string | sí | Identificador del usuario (CPF o CURP, sin formato). |
| `type` | string | sí | Tipo de documento a consultar. Valores aceptados: `BR_RG`, `BR_CNH`, `BR_CIN`, `BR_PASSPORT`. |

:::note
Los valores de `type` anteriores son específicos de este endpoint. No los confunda con:
- `subject.duiType` en las solicitudes POST: usa el prefijo `DUI_TYPE_*` e identifica a la *persona*, no el tipo de documento (por ejemplo, `DUI_TYPE_BR_CPF`).
- `documentType` en la respuesta: usa la ruta completa del registro (por ejemplo, `unico.moja.dictionary.br.cnh.v2.Cnh`).
:::

### Ejemplo

### cURL

```bash
curl -X GET "https://api.id.unico.app/documents/v1?code=12345678909&type=BR_CNH" \
  -H "Authorization: Bearer $TOKEN" \
  -H "APIKEY: $API_KEY"
```

### Node.js

```javascript
import fetch from 'node-fetch';

const params = new URLSearchParams({ code: '12345678909', type: 'BR_CNH' });
const res = await fetch(
  `https://api.id.unico.app/documents/v1?${params}`,
  {
    headers: {
      Authorization: `Bearer ${accessToken}`,
      APIKEY: apiKey
    }
  }
);
const data = await res.json();
// data.items[0].documentId → pass to POST /processes/v1 for reuse
```

### Respuestas

## 200 OK

```json
{
  "items": [
    {
      "documentType": "unico.moja.dictionary.br.cnh.v2.Cnh",
      "documentId": "doc-abc-123"
    }
  ]
}
```

| Campo | Tipo | Descripción |
|---|---|---|
| `items` | array | Lista de documentos reutilizables encontrados para el usuario. Array vacío si no se encontró ningún documento reutilizable para el `code` y `type` proporcionados. |
| `items[].documentType` | string | Identificador del tipo de documento. Valores posibles: `unico.moja.dictionary.br.rg.v2.Rg`, `unico.moja.dictionary.br.cnh.v2.Cnh`, `unico.moja.dictionary.br.cin.v1.Cin`, `unico.moja.dictionary.br.passaporte.v1.Passaporte`. |
| `items[].documentId` | string | Identificador del documento. Pase este valor en `document.documentId` en `POST /processes/v1` para reutilizar el documento. |

### Uso del documentId para reutilización

Una vez que tenga un `documentId`, páselo en la solicitud de proceso de Documento para omitir la captura:

```json
{
  "subject": {
    "code": "12345678909",
    "name": "Luke Skywalker"
  },
  "document": {
    "purpose": "onboarding",
    "authProcessId": "<biometric-process-id>",
    "documentId": "doc-abc-123"
  }
}
```

| Campo | Descripción |
|---|---|
| `document.purpose` | Propósito de negocio para este proceso de documento. Valores aceptados: `creditprocess`, `carpurchase`, `paybypaycheck`, `onboarding`, `fgts`. Estos valores son específicos de la API de Documentos y difieren del enum `purpose` del SDK biométrico. |
| `document.authProcessId` | ID del proceso biométrico creado previamente para este usuario (de `POST /processes/v1`). |
| `document.documentId` | ID del documento obtenido de la respuesta de este endpoint. Cuando se proporciona, `document.files` puede omitirse: la plataforma recupera automáticamente el documento capturado previamente. |

Para el esquema completo de solicitud de proceso de Documento, consulte [Crear proceso de documento](./post-processes-document).

### Códigos de error

### 400 Bad Request

| Código | Mensaje | Descripción |
|---|---|---|
| `20507` | O parâmetro subject.code é inválido. | Valor de identificador malformado o inexistente (CPF o CURP). |
| `20002` | O parâmetro APIKey não foi informado. | Falta el encabezado APIKEY. |
| `20001` | O parâmetro authtoken não foi informado. | Falta el encabezado del token de autenticación. |

### 403 Forbidden

Token Bearer o `APIKEY` ausente, expirado o inválido.

| Código | Mensaje | Descripción |
|---|---|---|
| `30020` | The provided authorization token does not have permission to perform this action. | El token no tiene permiso para acceder al selfie del documento. |
| `30017` | User does not have permission to perform this action. | JWT malformado o usuario sin permiso para realizar esta operación. |
| `10502` | O token informado está expirado. | Token de acceso expirado. |
| `10501` | O token informado é inválido. | Token de autenticación inválido. |
| `10201` | O AppKey informado é inválido. | APIKEY ausente o inexistente. |

### 404 Not Found

| Código | Mensaje | Descripción |
|---|---|---|
| `99987` | Attachment not found. | No se encontró el adjunto asociado al documento. |
| `50001` | The process is not found. | No se encontró ningún documento para los parámetros proporcionados. |

### 429 Too Many Requests

Límite de tasa alcanzado. Cuando su sistema recibe un error HTTP 429, debe implementar mecanismos para prevenir fallos en cascada y evitar empeorar la restricción.

**Mejores prácticas:**

- **Período de espera (backoff):** Detenga o limite inmediatamente las solicitudes subsecuentes de su sistema. No reintente continuamente solicitudes fallidas en un bucle cerrado.
- **Cola y limitación:** Almacene en buffer o encole las solicitudes salientes de su lado para controlar el flujo de tráfico antes de reenviarlas.
- **Backoff exponencial con jitter:** Al reintentar, aumente el tiempo de espera exponencialmente entre intentos (por ejemplo, 1 s, 2 s, 4 s, 8 s) y agregue un pequeño retraso aleatorio ("jitter") para prevenir un efecto manada donde todas las solicitudes en cola reintentan en el mismo milisegundo.

:::warning
Golpear continuamente un endpoint con límite de tasa sin aplicar backoff puede **prolongar el período de restricción** e impactar severamente el rendimiento operativo de su sistema. Limitar adecuadamente las solicitudes de su lado asegura una integración más fluida y resiliente.
:::

Para límites predeterminados, solicitudes de aumento y detalles adicionales, consulte [Límites de tasa](../rate-limits).

### 500 Internal Server Error

| Código | Mensaje | Descripción |
|---|---|---|
| `99999` | Internal failure! Try again later. | Error de procesamiento del lado del servidor. |