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

# Autenticación

Los endpoints de MIDAPI v2 se autentican con un **token JWT de consumer** enviado en la cabecera `Authorization: Bearer <token>`. El token se emite a partir de los dos conceptos presentados en [MIDAPI v2](/api-rest/midapi-v2.md): la **plataforma del cliente** emite tokens para sus **consumers**, y cada llamada operativa se realiza en nombre de un consumer.

### Cabeceras de identificación

| Cabecera           | Descripción                                                                                                                |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------- |
| `platform-id`      | Identifica la plataforma del cliente. Obligatoria únicamente en la emisión del token de consumer (`POST /consumer/token`). |
| `platform-api-key` | API key de la plataforma del cliente. Obligatoria únicamente en la emisión del token de consumer (`POST /consumer/token`). |
| `consumer-id`      | Identifica el canal/consumer. Obligatoria en los endpoints operativos (`/storage` y `/v2/daf/*`).                          |

### Requisitos de los endpoints operativos

Todos los endpoints de DAF requieren:

* **Autenticación OAuth2**: cabecera `Authorization: Bearer <token>`, obtenido mediante `POST /consumer/token` (JWT firmado con RS256, ver más abajo).
* Cabecera **`consumer-id`**: identificador del consumer. Obligatoria y no vacía.
* Cabecera **`operation-id`**: identificador de la operación/sesión de negocio. Obligatoria en `POST /v2/daf/validate` y en la consulta de estado `GET /v2/daf/{transactionId}`.

{% hint style="info" %}
MIDAPI v2 no utiliza autenticación por `x-api-key`. El esquema es OAuth2 Bearer + `consumer-id` (y `operation-id` al iniciar la validación y al consultar el estado).
{% endhint %}

## Obtener el token de consumer

Antes de invocar cualquier endpoint operativo, el consumer debe obtener un token JWT y enviarlo en la cabecera `Authorization: Bearer <token>`. El token lo emite Facephi e incluye el `consumer-id` y los scopes correspondientes a los servicios habilitados para ese consumer.

### Endpoint

```
POST /consumer/token
```

### Headers

| Nombre               | Tipo   | Requerido | Descripción                                 |
| -------------------- | ------ | --------- | ------------------------------------------- |
| **platform-id**      | string | **Sí**    | Identificador de la plataforma del cliente. |
| **platform-api-key** | string | **Sí**    | API key de la plataforma del cliente.       |

### Cuerpo de la solicitud

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

#### Parámetros

| Parámetro    | Tipo   | Requerido | Descripción                                                                     |
| ------------ | ------ | --------- | ------------------------------------------------------------------------------- |
| `consumerId` | string | **Sí**    | Identificador del consumer (canal o vertical) para el que se solicita el token. |

#### Ejemplo de solicitud

```json
{
  "consumerId": "<consumerId>"
}
```

### Respuestas

#### `200` Éxito

#### Parámetros de respuesta

| Parámetro    | Tipo   | Descripción                                                        |
| ------------ | ------ | ------------------------------------------------------------------ |
| `consumerId` | string | Consumer para el que se emitió el token.                           |
| `token`      | string | Token JWT a enviar en la cabecera `Authorization: Bearer <token>`. |
| `expiresAt`  | string | Fecha y hora de expiración del token en formato **ISO 8601**.      |

#### Ejemplo de respuesta

```json
{
  "consumerId": "<consumerId>",
  "token": "<jwt>",
  "expiresAt": "2026-06-26T13:00:00.000Z"
}
```

{% hint style="info" %}
El token tiene una **validez de 1 hora** desde su emisión (el instante exacto de expiración se devuelve en el campo `expiresAt`). Una vez expirado, basta con solicitar uno nuevo mediante el mismo endpoint. En cada petición se validan la firma, el emisor, el `consumer-id`, la expiración y los scopes del token.
{% endhint %}
