Créer un utilisateur
POST /v1/users · autorisation users:write
Crée un utilisateur dans l'environnement de la clé API. L'utilisateur n'appartient qu'à cet environnement ; la même adresse e-mail dans deux environnements correspond à deux utilisateurs distincts. Les valeurs uniques (email, phone_number, username, external_id) sont vérifiées par environnement. Envoyez un en-tête Idempotency-Key pour rendre les nouvelles tentatives sans risque.
Requête
Le corps est un objet JSON. Les champs inconnus sont rejetés avec unknown_field.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
email |
string | non* | Adresse e-mail principale. |
email_verified |
boolean | non | Marque l'adresse e-mail comme vérifiée. Par défaut false. |
phone_number |
string | non* | Numéro de téléphone principal au format E.164. |
phone_verified |
boolean | non | Marque le numéro de téléphone comme vérifié. Par défaut false. |
phone_country_code |
string | non | Code ISO 3166-1 alpha-2. Déduit de l'indicatif du téléphone lorsqu'il est vide. |
username |
string | non* | De 3 à 64 caractères. Unique dans l'environnement. |
external_id |
string | non | Votre propre identifiant, de 1 à 255 caractères. Unique dans l'environnement. |
name, given_name, family_name, middle_name, nickname |
string | non | Noms du profil. |
picture, website, profile_url |
string | non | URL https://, jusqu'à 2048 caractères. |
locale, zoneinfo, gender, birthdate |
string | non | Attributs du profil. birthdate est au format YYYY-MM-DD. |
address |
object | non | Objet address OIDC, jusqu'à 2048 octets. |
user_metadata, app_metadata |
object | non | Objets JSON libres, jusqu'à 16 KiB, profondeur 5, 100 clés de premier niveau. |
* Au moins l'un des champs email, phone_number ou username est requis.
Réponse
201 Created. Le corps est l'objet utilisateur. L'en-tête ETag contient la version de l'utilisateur.
Les données personnelles sont masquées lorsque la clé ne dispose pas de l'autorisation users:read_pii : email devient a***@e***.com, phone_number ne conserve que ses 2 derniers chiffres (+**********67), name, given_name, family_name, middle_name et nickname deviennent des initiales (A. L.), username ne conserve que son premier caractère (a***), birthdate devient ****-**-** et address devient {"redacted": true}. user_metadata et app_metadata ne sont pas masqués.
{
"id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
"kind": "regular",
"status": "active",
"external_id": null,
"username": null,
"name": "Ada Lovelace",
"email": "ada@example.com",
"email_verified": true,
"phone_number": null,
"phone_verified": false,
"user_metadata": {},
"app_metadata": {},
"created_via": "admin_api",
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-15T09:30:00Z",
"last_sign_in_at": null,
"deletion_requested_at": null,
"deletion_due_at": null
}
Erreurs
Chaque erreur est un corps application/problem+json avec un code stable.
| HTTP | code |
Quand |
|---|---|---|
| 400 | malformed_request, unknown_field |
Le corps n'est pas un JSON valide ou contient un champ absent du schéma. |
| 409 | conflict |
La valeur est déjà utilisée. errors[] indique le champ et la raison (email_taken, phone_taken, username_taken, external_id_taken). |
| 415 | unsupported_media_type |
Content-Type n'est pas application/json. |
| 422 | validation_failed |
Une valeur est invalide ; errors[].pointer indique le champ. |
| 401 | unauthenticated |
La clé API est absente, invalide ou révoquée. |
| 403 | insufficient_permissions |
La clé ne dispose pas de l'autorisation users:write. |
| 429 | rate_limited |
La limite de débit a été dépassée ; respectez Retry-After. |
| 503 | service_unavailable |
Une dépendance est temporairement indisponible ; réessayez plus tard. |
Exemple
curl -X POST https://api.eu.keenauth.com/v1/users \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"email": "ada@example.com", "email_verified": true, "name": "Ada Lovelace"}'
Données personnelles
Cet point de terminaison traite des données personnelles : profil de l'utilisateur final. Données personnelles dans les API KeenAuth décrit ce qui est stocké, pendant combien de temps et comment elles sont supprimées. N'envoyez de catégories particulières de données personnelles (santé, données biométriques, religion, opinions politiques, orientation sexuelle) dans aucun champ.