Créer une tâche de réinitialisation du mot de passe en masse
POST /v1/jobs/password-resets · autorisation user-credentials:write
Oblige plusieurs utilisateurs à choisir un nouveau mot de passe dans une seule tâche asynchrone, par exemple après une fuite suspectée ou pour faire migrer des utilisateurs hors de formats de hachage importés et faibles. La réponse renvoie la tâche immédiatement ; les utilisateurs sont signalés en arrière-plan. Suivez la tâche avec Obtenir une tâche de réinitialisation du mot de passe en masse. Pour un seul utilisateur, utilisez Forcer une réinitialisation du mot de passe.
Sélectionnez les utilisateurs de l'une des deux façons (pas les deux) :
user_ids: jusqu'à 100 000 identifiants d'utilisateurs ; les identifiants répétés ne comptent qu'une fois. Les identifiants qui ne sont pas des utilisateurs de cet environnement, et les utilisateurs sans mot de passe, sont comptés commenot_found.hash_algos: chaque utilisateur dont le mot de passe est stocké avec l'un de ces algorithmes et a été modifié pour la dernière fois avant la création de la tâche (par exemple["md5", "phpass"]). Un mot de passe défini après la création de la tâche n'est pas sélectionné.
Le filtre connection_id n'est pas encore disponible ; une requête qui l'envoie est refusée avec 422 validation_failed (not_supported à /connection_id).
Choisissez le mode :
on_login: chaque utilisateur sélectionné doit définir un nouveau mot de passe après sa prochaine connexion réussie par mot de passe.lazy_then_bulk_reset: identique jusqu'à l'échéance (deadline_days, 1–365, 30 par défaut). À l'échéance, le hachage de mot de passe de chaque utilisateur sélectionné qui n'a pas encore modifié son mot de passe est supprimé, et un e-mail de réinitialisation est envoyé à son adresse e-mail principale vérifiée (les utilisateurs qui n'en ont pas peuvent toujours demander une réinitialisation eux-mêmes).deadline_daysn'est accepté que dans ce mode.
Idempotency-Key est obligatoire. Les mêmes identifiants, la même clé et la même requête renvoient la même tâche (avec Idempotent-Replayed: true) ; la même clé avec une requête différente est refusée avec 422 idempotency_key_reuse. Un environnement peut avoir au plus 20 tâches non terminées ; une tâche différée reste ouverte jusqu'à son échéance. La création de la tâche est inscrite dans le journal d'audit de gestion (password_reset_job.created) et émet l'événement password_reset.scheduled.
Demande
| Champ | Type | Requis | Description |
|---|---|---|---|
mode |
string | oui | on_login ou lazy_then_bulk_reset. |
user_ids |
string[] | l'un des deux | 1–100 000 identifiants d'utilisateurs (usr_…). |
hash_algos |
string[] | l'un des deux | Algorithmes de hachage stockés : argon2id, argon2i, bcrypt, scrypt, firebase_scrypt, pbkdf2_sha1, pbkdf2_sha256, pbkdf2_sha512, django_pbkdf2_sha256, django_bcrypt_sha256, phpass, ldap_ssha, ldap_ssha256, sha512_crypt, hmac_sha256, salted_sha256, salted_sha512, md5. |
deadline_days |
integer | non | lazy_then_bulk_reset uniquement : 1–365, 30 par défaut. |
Réponse
202 Accepted avec la tâche.
{
"id": "job_01h455vb4pex5vsknk084sn02q",
"mode": "lazy_then_bulk_reset",
"filter": "hash_algo",
"hash_algos": ["md5", "phpass"],
"status": "marking",
"deadline_at": "2026-02-14T09:30:00Z",
"total": 0,
"marked": 0,
"not_found": 0,
"passwords_deleted": 0,
"emailed": 0,
"created_at": "2026-01-15T09:30:00Z"
}
Erreurs
Chaque erreur est un corps application/problem+json avec un code stable.
| HTTP | code |
Quand |
|---|---|---|
| 400 | malformed_request, unknown_field |
L'en-tête Idempotency-Key est absent ou mal formé, le corps n'est pas du JSON valide, ou il contient un champ inconnu. |
| 401 | unauthenticated |
La clé d'API est absente, invalide ou révoquée. |
| 403 | insufficient_permissions |
La clé ne possède pas l'autorisation user-credentials:write. |
| 409 | conflict |
L'environnement compte déjà 20 tâches non terminées. |
| 413 | payload_too_large |
Le corps dépasse 4 Mio. |
| 422 | validation_failed |
Un champ est absent ou invalide ; errors[].pointer le désigne. |
| 422 | idempotency_key_reuse |
La Idempotency-Key a été utilisée avec une requête différente. |
| 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/jobs/password-resets \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"mode": "lazy_then_bulk_reset", "hash_algos": ["md5", "phpass"], "deadline_days": 30}'
CLI : keenauth jobs password-resets create --mode lazy_then_bulk_reset --hash-algos md5,phpass --deadline-days 30 --yes