Creare un job di reimpostazione della password in blocco

POST /v1/jobs/password-resets · permesso user-credentials:write

Obbliga molti utenti a scegliere una nuova password in un unico job asincrono, per esempio dopo una sospetta fuga di dati o per spostare gli utenti da formati di hash importati e deboli. La risposta restituisce subito il job; gli utenti vengono contrassegnati in background. Seguire il job con Ottenere un job di reimpostazione della password in blocco. Per un singolo utente usare Forzare una reimpostazione della password.

Selezionare gli utenti in uno dei due modi (non entrambi):

Il filtro connection_id non è ancora disponibile; una richiesta che lo invia viene rifiutata con 422 validation_failed (not_supported su /connection_id).

Scegliere il mode:

Idempotency-Key è obbligatoria. Stessa credenziale, stessa chiave e stessa richiesta restituiscono lo stesso job (con Idempotent-Replayed: true); la stessa chiave con una richiesta diversa viene rifiutata con 422 idempotency_key_reuse. Un ambiente può avere al massimo 20 job non completati; un job lazy resta aperto fino alla sua scadenza. La creazione del job viene scritta nel log di audit di gestione (password_reset_job.created) e genera l'evento password_reset.scheduled.

Richiesta

Campo Tipo Obbligatorio Descrizione
mode string sì on_login oppure lazy_then_bulk_reset.
user_ids string[] uno dei due Da 1 a 100.000 ID utente (usr_…).
hash_algos string[] uno dei due Algoritmi di hash memorizzati: 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 no Solo lazy_then_bulk_reset: da 1 a 365, predefinito 30.

Risposta

202 Accepted con il job.

{
  "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"
}

Errori

Ogni errore è un corpo application/problem+json con un code stabile.

HTTP code Quando
400 malformed_request, unknown_field L'intestazione Idempotency-Key è mancante o non valida, il corpo non è JSON valido oppure ha un campo sconosciuto.
401 unauthenticated La chiave API è mancante, non valida o revocata.
403 insufficient_permissions La chiave non ha il permesso user-credentials:write.
409 conflict L'ambiente ha già 20 job non completati.
413 payload_too_large Il corpo supera 4 MiB.
422 validation_failed Un campo manca o non è valido; errors[].pointer lo indica.
422 idempotency_key_reuse La Idempotency-Key è stata usata con una richiesta diversa.
429 rate_limited È stato superato il limite di frequenza; rispettare Retry-After.
503 service_unavailable Una dipendenza non è temporaneamente disponibile; riprovare più tardi.

Esempio

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