
# Enviar un código de verificación

`POST /fapi/v1/verifications` · llamado desde el host de inicio de sesión del entorno

Envía un mensaje con un código de 6 dígitos y un enlace de verificación a una de las direcciones de correo electrónico no verificadas del usuario autenticado, y devuelve el identificador del intento de código. El usuario introduce el código con [Introducir un código de verificación](/docs/api/fapi/verifications/attempt), o abre el enlace. Ambos son válidos durante 10 minutos. Un nuevo mensaje reemplaza la verificación abierta de la dirección: el código y el enlace de un mensaje anterior dejan de funcionar. No es necesario volver a autenticarse, porque solo el buzón de la dirección recibe el código. Requiere la cookie `__Host-idp_session` del usuario autenticado; si la cookie falta, ha caducado o ha sido revocada, devuelve `401 unauthenticated`. Una aplicación de primera parte en otro origen puede enviar, en su lugar, su token de acceso a la API Front (`Authorization: DPoP <token>` con una prueba DPoP; consulte [Token de acceso a la API Front](/docs/api/fapi/front-api-token)).

## Solicitud

Encabezados:

| Encabezado | Obligatorio | Descripción |
| --- | --- | --- |
| `Idp-Client` | sí | Identificador del SDK. |
| `Origin` | sí | Debe ser exactamente `https://<sign-in host>`. |
| `Content-Type` | sí | `application/json`. |

Cuerpo:

| Campo | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `email_id` | string (UUID) | sí | El `id` de la dirección, de [Listar direcciones de correo electrónico](/docs/api/fapi/me/emails/list). |

## Respuesta

`202 Accepted`:

| Campo | Tipo | Descripción |
| --- | --- | --- |
| `id` | string (UUID) | El identificador del intento de código, que se usa en la ruta `:attempt`. No es un secreto. |
| `expires_at` | string (RFC 3339) | Momento en que el código y el enlace dejan de funcionar. |

```json
{"id": "0190a5c4-1b2c-7d3e-8f40-5162738400ff", "expires_at": "2026-10-12T10:10:00Z"}
```

## Errores

| Estado | Código | Cuándo |
| --- | --- | --- |
| 400 | `malformed_request` | El cuerpo no es JSON válido. |
| 400 | `unknown_field` | El cuerpo tiene un campo distinto de `email_id`. |
| 401 | `unauthenticated` | No hay una cookie de sesión válida. |
| 403 | `origin_not_allowed` | `Origin` falta o es incorrecto. |
| 404 | `not_found` | `email_id` no es una de las direcciones del usuario. |
| 409 | `conflict` | La dirección ya está verificada. |
| 413 | `payload_too_large` | El cuerpo es demasiado grande. |
| 415 | `unsupported_media_type` | `Content-Type` no es `application/json`. |
| 422 | `validation_failed` | Falta `email_id`. |
| 429 | `verification_rate_limited` | Se enviaron 5 mensajes de verificación a esta dirección en la última hora, incluido el enviado al añadirla; vuelva a intentarlo más tarde. |

## Ejemplo

```bash
curl -X POST https://example.keenauth.app/fapi/v1/verifications \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -H "Content-Type: application/json" \
  -b cookies.txt \
  -d '{"email_id": "0190a5c4-1b2c-7d3e-8f40-516273849abc"}'
```

## Datos personales

Este endpoint contiene datos personales: perfil del usuario final. [Datos personales en las API de KeenAuth](/docs/policies/personal-data) describe qué se almacena, cuánto tiempo se conserva y cómo se elimina. No envíe categorías especiales de datos personales (salud, datos biométricos, religión, opiniones políticas, orientación sexual) en ningún campo.
