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) :

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 :

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