> 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/storage.md).

# Storage

El almacenamiento guarda las capturas de una [operación](/api-rest/midapi-v2/operations.md) antes de validarlas. Cada asset se almacena una vez, queda asociado a un **contexto** dentro de la operación, y a partir de ese momento se referencia por su clave en los servicios de validación sin volver a transportar el binario. El recorrido completo, desde el token hasta la llamada de validación, está en [Flujo común](/api-rest/midapi-v2/flujo-comun.md).

#### Modos de asset

Los servicios de validación reciben los assets de dos formas, con la misma estructura de petición. El modo lo declara el campo `source`:

| Valor de `source` | Contenido de los huecos de asset               |
| ----------------- | ---------------------------------------------- |
| `FILE`            | Contenido de la captura, codificado en Base64. |
| `FILE_KEY`        | Clave de un asset ya almacenado.               |

`source` es único por petición, no por asset: una petición no puede combinar contenido en línea y referencias. Cuando la petición referencia algún asset por clave, la cabecera `operation-id` es obligatoria y declara la operación a la que pertenecen todas las claves.

{% hint style="info" %}
**La vía recomendada es la referencia por clave.** Los servicios de validación de identidad admiten también recibir el asset tokenizado en Base64 en la propia llamada (`source: FILE`), pero no es la forma recomendada de integrarlos: el contenido viaja completo en cada validación, no se reutiliza entre llamadas ni entre servicios, engorda la petición y la acerca al límite de tamaño admitido, y la captura queda sin la operación que le da rastro. Almacena cada asset una vez y refiérelo después por su clave (`source: FILE_KEY`).

Los servicios que solo admiten contenido en línea, recogidos más abajo en [Excepciones](#excepciones), quedan fuera de esta recomendación: en ellos no hay otra forma de enviar el asset.
{% endhint %}

#### Contextos de asset

El **contexto** identifica qué captura es el asset y determina en qué huecos de qué servicios puede usarse. Cada servicio declara, en la descripción de sus parámetros, el contexto que admite en cada hueco.

| Contexto               | Contenido                                                   | Formato de `asset.file`                                     |
| ---------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- |
| `TOKEN_FRONT_DOCUMENT` | Anverso del documento de identidad, recortado.              | Token del buffer generado por el SDK de captura, en Base64. |
| `TOKEN_BACK_DOCUMENT`  | Reverso del documento de identidad, recortado.              | Token del buffer generado por el SDK de captura, en Base64. |
| `TOKEN_FACE_IMAGE`     | Rostro recortado del documento de identidad.                | Token del buffer generado por el SDK de captura, en Base64. |
| `TOKEN_BEST_IMAGE`     | Mejor imagen de la captura de selfie.                       | Token del buffer generado por el SDK de captura, en Base64. |
| `TOKEN_BIN_IAD`        | Binario de la captura de detección de ataques de inyección. | Binario en Base64.                                          |

El par (operación, contexto) identifica exactamente un asset: una segunda subida del mismo contexto en la misma operación se responde `409`. Si hay que repetir una captura ya almacenada, se crea una operación nueva.

#### Formato de la clave

```
{operationId}/{CONTEXTO}

0192a3f4-7b21-7c44-9e1a-3f5b8c2d1e04/TOKEN_FRONT_DOCUMENT
```

Es el valor que devuelve [Save Asset](/api-rest/midapi-v2/storage/save-asset.md) en `fileKey` y el que devuelve [Get File Keys](/api-rest/midapi-v2/operations/get-file-keys.md) en cada entrada de `fileKeys`.

{% hint style="warning" %}
La clave se reenvía tal como se recibió. No debe componerse ni interpretarse: añadirle el contexto lo deja duplicado y el asset no resuelve.
{% endhint %}

#### Límites de uso de un asset

Un asset almacenado tiene dos límites de uso:

| Situación                                                                  | Respuesta |
| -------------------------------------------------------------------------- | --------- |
| Un asset referenciado contiene un contenido ya procesado en otra operación | `409`     |
| Un asset ha agotado el número máximo de invocaciones en ese endpoint       | `429`     |

Volver a almacenar la misma captura bajo otra operación no permite validarla de nuevo. El presupuesto de invocaciones es independiente por operación, asset y endpoint; su valor se acuerda en el alta del servicio.

#### Excepciones

Los servicios de validación de identidad admiten por defecto los dos modos de asset, contenido en línea y referencia por clave. Estas son las excepciones:

| Servicio                                                                                                                                                        | Modos admitidos                             |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
| [Form OCR](/api-rest/midapi-v2/document-services/form-ocr.md)                                                                                                   | Solo `FILE`                                 |
| [Voice Enrollment](/api-rest/midapi-v2/voice-services/voice-enrollment.md) y [Voice Authentication](/api-rest/midapi-v2/voice-services/voice-authentication.md) | Solo contenido en línea, sin campo `source` |
| [Document Validation](/api-rest/midapi-v2/document-services/document-validation/iniciar-validacion.md)                                                          | Solo referencia, sin campo `source`         |

En los servicios exclusivamente en línea el contenido se envía en la propia llamada y no llevan cabecera `operation-id`.

#### Servicios disponibles

* [**Save Asset**](/api-rest/midapi-v2/storage/save-asset.md): Almacena un asset en un contexto de una operación y devuelve su clave.
