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

# Save Asset

Servicio que almacena un asset en un contexto de una operación y devuelve la clave con la que se referencia después.

### 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, tal como lo devolvió [Create Operation](/api-rest/midapi-v2/operations/create-operation.md). |
| `asset`         | object | **Sí**    | Asset a almacenar.                                                                                                                                      |
| `asset.context` | string | **Sí**    | Contexto del asset. Ver [Contextos de asset](/api-rest/midapi-v2/storage.md#contextos-de-asset).                                                        |
| `asset.file`    | string | **Sí**    | Contenido del asset codificado en **Base64**, con el formato que exige su contexto.                                                                     |

{% hint style="warning" %}
Los cuatro contextos de imagen exigen el buffer tokenizado generado por el SDK de captura. Una imagen JPEG o PNG en Base64 se rechaza con `400`. El único contexto que acepta un binario libre es `TOKEN_BIN_IAD`.
{% endhint %}

El tamaño máximo por asset es de **10 MiB**, aplicado al contenido codificado.

#### Ejemplo de solicitud

```json
{
  "operationId": "0192a3f4-7b21-7c44-9e1a-3f5b8c2d1e04",
  "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 la forma `{operationId}/{CONTEXTO}`. Se reenvía sin modificar al referenciar el asset. |
| `timestamp` | string | Marca de tiempo de la respuesta en formato **ISO 8601**.                                                    |

#### Ejemplo de respuesta

```json
{
  "fileKey": "0192a3f4-7b21-7c44-9e1a-3f5b8c2d1e04/TOKEN_FRONT_DOCUMENT",
  "timestamp": "2026-06-26T12:00:03.000Z"
}
```

#### Contextos derivados

Al almacenar un asset `TOKEN_BIN_IAD` queda disponible además el contexto `TOKEN_BEST_IMAGE` de la misma operación, con la mejor imagen de esa captura. Puede almacenarse un `TOKEN_BEST_IMAGE` propio después; si ya hay uno almacenado, se conserva ese.

Consulta [Get File Keys](/api-rest/midapi-v2/operations/get-file-keys.md) para confirmar qué contextos hay disponibles en la operación.

#### Otras respuestas

| Código | Descripción                                                                                                                                                                                    |
| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | El `operationId` no tiene el formato esperado, el contenido no corresponde al contexto declarado, o el asset está vacío o excede el tamaño máximo.                                             |
| `403`  | El consumer no está aprovisionado con el servicio `STORAGE`.                                                                                                                                   |
| `404`  | La operación no existe o pertenece a otro consumer.                                                                                                                                            |
| `409`  | Ya existe un asset de ese contexto en la operación.                                                                                                                                            |
| `410`  | La operación ha caducado.                                                                                                                                                                      |
| `429`  | El consumer ha superado su límite de tasa de peticiones. La respuesta incluye `Retry-After` con los segundos de espera, y `X-RateLimit-Limit` y `X-RateLimit-Burst` con los umbrales vigentes. |

El cuerpo de una respuesta de error tiene la forma descrita en [Middleware API v2](/api-rest/midapi-v2.md#respuestas-de-error).
