
# Toplu parola sıfırlama işi oluşturun

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

Tek bir eşzamansız işle birçok kullanıcının yeni bir parola seçmesini zorunlu kılar; örneğin olası bir sızıntıdan sonra veya kullanıcıları zayıf içe aktarılmış karma biçimlerinden uzaklaştırmak için. Yanıt işi hemen döndürür; kullanıcılar arka planda işaretlenir. İşi [Toplu parola sıfırlama işini alın](/docs/api/management/jobs/get-password-reset) ile takip edin. Tek bir kullanıcı için [Parola sıfırlamaya zorlayın](/docs/api/management/users/force-password-reset) bölümünü kullanın.

Kullanıcıları iki yoldan biriyle seçin (ikisi birden değil):

- `user_ids`: en fazla 100.000 kullanıcı kimliği; tekrarlanan kimlikler bir kez sayılır. Bu ortamın kullanıcısı olmayan kimlikler ve parolası olmayan kullanıcılar `not_found` olarak sayılır.
- `hash_algos`: parolası bu algoritmalardan biriyle saklanan ve işin oluşturulmasından önce son kez değiştirilmiş her kullanıcı (örneğin `["md5", "phpass"]`). İş oluşturulduktan sonra belirlenen bir parola seçilmez.

`connection_id` filtresi henüz kullanılamıyor; bunu gönderen istek `422 validation_failed` (`/connection_id` konumunda `not_supported`) ile reddedilir.

`mode` değerini seçin:

- `on_login`: seçilen her kullanıcı, bir sonraki başarılı parola girişinden sonra yeni bir parola belirlemelidir.
- `lazy_then_bulk_reset`: aynısı, son tarihe kadar geçerlidir; son tarih `deadline_days` ile belirlenir (1–365, varsayılan 30). Son tarihte, parolasını henüz değiştirmemiş seçili her kullanıcının parola karması silinir ve doğrulanmış birincil e-posta adresine parola sıfırlama e-postası gönderilir (doğrulanmış e-posta adresi olmayan kullanıcılar yine de kendileri sıfırlama isteyebilir). `deadline_days` yalnızca bu modda kabul edilir.

`Idempotency-Key` zorunludur. Aynı kimlik bilgisi, anahtar ve istek aynı işi döndürür (`Idempotent-Replayed: true` ile); aynı anahtarın farklı bir isteğle kullanılması `422 idempotency_key_reuse` ile reddedilir. Bir ortamda tamamlanmamış en fazla 20 iş bulunabilir; tembel bir iş son tarihine kadar açık kalır. İş oluşturma, yönetim denetim günlüğüne (`password_reset_job.created`) yazılır ve `password_reset.scheduled` olayını yayınlar.

## İstek

| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| `mode` | dize | evet | `on_login` veya `lazy_then_bulk_reset`. |
| `user_ids` | dize[] | birinden | 1–100.000 kullanıcı kimliği (`usr_…`). |
| `hash_algos` | dize[] | birinden | Saklanan karma algoritmaları: `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` | tam sayı | hayır | Yalnızca `lazy_then_bulk_reset`: 1–365, varsayılan 30. |

## Yanıt

İşle birlikte `202 Accepted`.

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

## Hatalar

Her hata, kararlı bir `code` içeren bir `application/problem+json` gövdesidir.

| HTTP | `code` | Ne zaman |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | `Idempotency-Key` başlığı eksik veya hatalıysa, gövde geçerli JSON değilse ya da bilinmeyen bir alan içeriyorsa. |
| 401 | `unauthenticated` | API anahtarı eksik, geçersiz veya iptal edilmiş. |
| 403 | `insufficient_permissions` | Anahtarın `user-credentials:write` izni yok. |
| 409 | `conflict` | Ortamda zaten tamamlanmamış 20 iş var. |
| 413 | `payload_too_large` | Gövde 4 MiB'tan büyük. |
| 422 | `validation_failed` | Bir alan eksik veya geçersiz; `errors[].pointer` bunu belirtir. |
| 422 | `idempotency_key_reuse` | `Idempotency-Key` farklı bir istekle kullanılmış. |
| 429 | `rate_limited` | Hız sınırı aşıldı; `Retry-After` değerine uyun. |
| 503 | `service_unavailable` | Bir bağımlılık geçici olarak kullanılamıyor; daha sonra yeniden deneyin. |

## Örnek

```bash
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`
