> For the complete documentation index, see [llms.txt](https://docs.facephi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.facephi.com/api-rest/midapi-v2/daf/subida-de-assets.md).

# Subida de assets

DAF no recibe archivos directamente: consume los assets ya cargados en el servicio de almacenamiento de Facephi, referenciados por su `fileKey`. Antes de iniciar una validación, sube cada asset (documento y, opcionalmente, selfie) con el endpoint de almacenamiento.

### Endpoint

```
POST /storage
```

### Headers

| Nombre            | Tipo   | Requerido | Descripción                                                                                                |
| ----------------- | ------ | --------- | ---------------------------------------------------------------------------------------------------------- |
| **Authorization** | string | **Sí**    | Token de consumer en formato `Bearer <token>` (ver [Autenticación](/api-rest/midapi-v2/autenticacion.md)). |
| **consumer-id**   | string | **Sí**    | Identificador del consumer.                                                                                |

### Cuerpo de la solicitud

**Content-Type:** `application/json`

#### Parámetros

| Parámetro       | Tipo   | Requerido | Descripción                                                                                                                                                                                               |
| --------------- | ------ | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `operationId`   | string | **Sí**    | Identificador de la operación a la que pertenece el asset.                                                                                                                                                |
| `asset`         | object | **Sí**    | Asset a guardar.                                                                                                                                                                                          |
| `asset.context` | string | **Sí**    | Tipo de asset (ver tabla de tipos más abajo).                                                                                                                                                             |
| `asset.file`    | string | **Sí**    | Contenido del asset (token del documento o selfie), codificado en **Base64**. Para `TOKEN_FRONT_DOCUMENT` y `TOKEN_BACK_DOCUMENT` debe ser el **token RAW** del documento generado por el SDK de captura. |

#### Ejemplo de solicitud

```json
{
  "operationId": "<operationId>",
  "asset": {
    "context": "TOKEN_FRONT_DOCUMENT",
    "file": "<base64>"
  }
}
```

### Respuestas

#### `200` Éxito

#### Parámetros de respuesta

| Parámetro   | Tipo   | Descripción                                              |
| ----------- | ------ | -------------------------------------------------------- |
| `fileKey`   | string | Clave del asset con forma `<consumerId>/<operationId>`.  |
| `timestamp` | string | Marca de tiempo de la respuesta en formato **ISO 8601**. |

#### Ejemplo de respuesta

```json
{
  "fileKey": "<consumerId>/<operationId>",
  "timestamp": "2026-06-26T12:00:00.000Z"
}
```

#### `409` Conflict

Ya existe un asset del mismo tipo para ese `operationId`. No puede existir más de un asset del mismo `type` para el mismo `operationId`.

### Tipos de asset relevantes para DAF

| type                   | Contenido                                                                                                             | Obligatoriedad |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------- | -------------- |
| `TOKEN_FRONT_DOCUMENT` | **Token RAW** del anverso del documento de identidad (p. ej. `tokenRawFrontDocument` generado por el SDK de captura). | **Requerido**  |
| `TOKEN_BACK_DOCUMENT`  | **Token RAW** del reverso del documento de identidad (p. ej. `tokenRawBackDocument` generado por el SDK de captura).  | Opcional       |
| `TOKEN_FACE_IMAGE`     | Selfie del titular.                                                                                                   | Opcional       |

{% hint style="warning" %}
**Importante:** los assets del documento deben ser los tokens **RAW** del anverso/reverso, no los tokens procesados. Si se sube un token no RAW, la validación no puede ejecutarse y la transacción finaliza en `FAILED`.
{% endhint %}

{% hint style="info" %}
Si no se aporta `TOKEN_FACE_IMAGE`, DAF valida únicamente el documento: se pierden las señales derivadas de la selfie (comparación facial) y el diagnóstico se basa solo en las validaciones documentales.
{% endhint %}

### Documentos soportados

* DAF valida **documentos de identidad (ID)** y **pasaportes**.
* En pasaportes no se requiere el reverso: basta con el anverso (`TOKEN_FRONT_DOCUMENT`).
* El conjunto concreto de **tipos de documento y países/emisores soportados** se define en el **alta del servicio**; consúltalo con Facephi para tu integración.
* Si el documento no está soportado o su versión no puede validarse, la transacción se resuelve como `DECLINED` con el código de razón correspondiente (ver [Respuesta de resultado](/api-rest/midapi-v2/daf/respuesta-de-resultado.md)).

### Requisitos y calidad de imagen

La calidad de la captura determina si el documento puede validarse. Para maximizar la tasa de aprobación:

* **Resolución** mínima recomendada: HD (≥ 720×1080 px).
* **Tamaño** máximo por archivo: 10 MB. Evitar compresión agresiva; usar los valores por defecto de un flujo de captura guiada.
* **Encuadre**: el documento debe aparecer **completo y sin recortes**, ocupando la mayor parte del encuadre y con una relación de aspecto de tarjeta estándar.
* **Nitidez e iluminación**: sin desenfoque, sin reflejos ni brillos que oculten datos, y sin rotación excesiva.
* No puede existir más de un asset del mismo `type` para el mismo `operationId` (una segunda subida del mismo tipo devuelve `409 Conflict`).

{% hint style="info" %}
Si una captura no cumple estos requisitos, la validación la señala como un **problema de calidad/captura** (no como fraude): son los códigos de las categorías `input` e `integrity` (p. ej. 100/101/104/105 y 102/103/106-111/500/501, ver [Respuesta de resultado](/api-rest/midapi-v2/daf/respuesta-de-resultado.md#rechazo-por-calidad-vs-deteccion-de-fraude)). En estos casos, repetir la captura con mejor calidad suele resolver la incidencia.
{% endhint %}
