
# Envoyer un code de vérification

`POST /fapi/v1/verifications` · appelé depuis l'hôte de connexion de l'environnement

Envoie un message contenant un code à 6 chiffres et un lien de vérification à l'une des adresses e-mail non vérifiées de l'utilisateur authentifié, et renvoie l'identifiant de la tentative de code. L'utilisateur saisit le code avec [Saisissez un code de vérification](/docs/api/fapi/verifications/attempt), ou ouvre le lien. Les deux sont valables pendant 10 minutes. Un nouveau message remplace la vérification en cours de l'adresse : le code et le lien d'un message précédent cessent de fonctionner. Aucune réauthentification n'est nécessaire, car seule la boîte de messagerie de l'adresse reçoit le code. Nécessite le cookie `__Host-idp_session` de l'utilisateur authentifié ; si le cookie est absent, expiré ou révoqué, renvoie `401 unauthenticated`. Une application de première partie sur une autre origine peut à la place envoyer son jeton d'accès à l'API front (`Authorization: DPoP <token>` avec une preuve DPoP ; voir [Jeton d'accès à l'API front](/docs/api/fapi/front-api-token)).

## Requête

En-têtes :

| En-tête | Obligatoire | Description |
| --- | --- | --- |
| `Idp-Client` | oui | Identifiant du SDK. |
| `Origin` | oui | Doit être exactement `https://<hôte de connexion>`. |
| `Content-Type` | oui | `application/json`. |

Corps :

| Champ | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `email_id` | string (UUID) | oui | L'`id` de l'adresse, issu de [Lister les adresses e-mail](/docs/api/fapi/me/emails/list). |

## Réponse

`202 Accepted` :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | string (UUID) | L'identifiant de la tentative de code, utilisé dans le chemin `:attempt`. Ce n'est pas un secret. |
| `expires_at` | string (RFC 3339) | Moment où le code et le lien cessent de fonctionner. |

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

## Erreurs

| Statut | Code | Quand |
| --- | --- | --- |
| 400 | `malformed_request` | Le corps n'est pas un JSON valide. |
| 400 | `unknown_field` | Le corps contient un champ autre que `email_id`. |
| 401 | `unauthenticated` | Aucun cookie de session valide. |
| 403 | `origin_not_allowed` | `Origin` est absent ou incorrect. |
| 404 | `not_found` | `email_id` ne correspond à aucune des adresses de l'utilisateur. |
| 409 | `conflict` | L'adresse est déjà vérifiée. |
| 413 | `payload_too_large` | Le corps est trop volumineux. |
| 415 | `unsupported_media_type` | `Content-Type` n'est pas `application/json`. |
| 422 | `validation_failed` | `email_id` est absent. |
| 429 | `verification_rate_limited` | 5 messages de vérification ont été envoyés à cette adresse au cours de la dernière heure, y compris celui envoyé lors de son ajout ; réessayez plus tard. |

## Exemple

```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"}'
```

## Données personnelles

Cet endpoint traite des données personnelles : profil de l'utilisateur final. [Données personnelles dans les API KeenAuth](/docs/policies/personal-data) décrit les données stockées, leur durée de conservation et leur mode de suppression. Ne transmettez aucune catégorie particulière de données personnelles (santé, données biométriques, religion, opinions politiques, orientation sexuelle) dans aucun champ.
