
# Toplu kullanıcı silme işi oluştur

`POST /v1/jobs/user-deletions` · izinler `users:delete` ve `jobs:write`

Tek bir asenkron işte 10.000'e kadar kullanıcıyı siler. Her kullanıcı [`DELETE /v1/users/{user_id}`](/docs/api/management/users/delete) ile aynı silme yolundan geçer: kullanıcı `pending_deletion` olur ve kalıcı silme ardından yürür; silme kaydı isteğin toplu işten geldiğini not eder. Silme geri alınamaz; bu yüzden uç iki adımda çalışır:

1. İsteği `"dry_run": true` ile gönderin. Hiçbir şey yazılmaz; yanıttaki `matched_count`, isteğin sileceği kullanıcı sayısıdır.
2. Aynı seçimi `"confirm_count"` bu sayıya eşit olarak gönderin. Arada eşleşen kullanıcı sayısı değiştiyse istek `409 confirmation_mismatch` ile reddedilir ve iş oluşturulmaz; kuru çalıştırmayı yineleyin.

Kullanıcılar iki yoldan biriyle seçilir: `user_ids` (tekrarlanan kimlik bir kez sayılır; sonuçlar ilk görülme sırasını korur) ya da `organization_id` (iş oluşturulduğu andaki etkin ve askıdaki org üyeleri). Bir kullanıcıyla eşleşmeyen kimlikler işte kalır ve `not_found` olarak raporlanır.

Bir ortamda aynı anda tek bir toplu kullanıcı silme işi koşar; biri koşarken yeni iş `429 rate_limited` ve `Retry-After` ile reddedilir. İş oluşturulduğunda ve tamamlandığında yönetim audit'ine yazılır; silinen her kullanıcının da kendi silme audit kaydı vardır. İşi [Toplu kullanıcı silme işini getir](/docs/api/management/jobs/get-user-deletion) ile izleyin, kullanıcı başına sonuçları [Toplu kullanıcı silme sonuçlarını listele](/docs/api/management/jobs/list-user-deletion-results) ile okuyun.

## İstek

**Başlıklar**: `Idempotency-Key` (zorunlu, 16–64 karakter `A-Z a-z 0-9 _ -`). Aynı anahtar ve aynı gövdeyle yinelenen istek ilk işi döner; aynı anahtar başka gövdeyle `422 idempotency_key_reuse` döner. Gövde en çok 512 KiB olabilir.

| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| `user_ids` | dizi (string) | ikisinden biri | `usr_` önekli kullanıcı kimlikleri, 1–10.000. |
| `organization_id` | string | ikisinden biri | `org_` önekli org kimliği; en çok 10.000 üye. |
| `dry_run` | boolean | hayır | `true`: yalnız kullanıcılar sayılır, hiçbir şey yazılmaz. Varsayılan `false`. |
| `confirm_count` | integer | `dry_run` değilse evet | Kuru çalıştırmanın `matched_count` değeri (0–10.000). |

## Yanıt

Kuru çalıştırma: `200 OK`; `{"dry_run": true, "matched_count": n}`.

İş oluşturuldu: `202 Accepted`; sayı ve iş.

```json
{
  "dry_run": false,
  "matched_count": 2,
  "job": {
    "id": "job_01h455vb4pex5vsknk084sn02q",
    "status": "running",
    "filter": "user_ids",
    "total": 3,
    "succeeded": 0,
    "not_found": 0,
    "failed": 0,
    "pending": 3,
    "created_at": "2026-01-15T09:30:00Z"
  }
}
```

## Hatalar

Her hata kararlı bir `code` taşıyan `application/problem+json` gövdesidir.

| HTTP | `code` | Ne zaman |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | `Idempotency-Key` başlığı yok ya da geçersiz, veya gövde geçerli JSON değil ya da bilinmeyen alan taşıyor. |
| 401 | `unauthenticated` | API anahtarı yok, geçersiz ya da iptal edilmiş. |
| 403 | `insufficient_permissions` | Anahtarda `users:delete` ya da `jobs:write` yok. |
| 409 | `confirmation_mismatch` | `confirm_count` eşleşen kullanıcıların güncel sayısı değil. |
| 409 | `idempotency_in_progress` | Aynı `Idempotency-Key` ile gelen istek hâlâ işleniyor. |
| 413 | `payload_too_large` | Gövde 512 KiB'tan büyük. |
| 422 | `validation_failed` | `user_ids` ile `organization_id`'nin ikisi birden ya da hiçbiri, biçimsiz kimlik, 10.000'den fazla kullanıcı (`too_many`, `too_many_users`), üyesi olmayan org (`no_users`) ya da eksik `confirm_count` (`required`). |
| 422 | `idempotency_key_reuse` | `Idempotency-Key` başka bir gövdeyle kullanılmış. |
| 429 | `rate_limited` | Başka bir toplu kullanıcı silme işi koşuyor ya da hız sınırı aşıldı; `Retry-After`'a uyun. |
| 503 | `service_unavailable` | Bir bağımlılık geçici olarak kullanılamıyor; sonra yeniden deneyin. |

## Örnek

```bash
curl -X POST https://api.eu.keenauth.com/v1/jobs/user-deletions \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"organization_id": "org_01h455vb4pex5vsknk084sn02q", "dry_run": true}'
```

CLI: `keenauth jobs user-deletions create --organization-id org_01h455vb4pex5vsknk084sn02q --dry-run --yes`, ardından `keenauth jobs user-deletions create --organization-id org_01h455vb4pex5vsknk084sn02q --confirm-count 42 --yes`. Uzun kimlik listeleri dosyayla verilir: `--data @users.json`.
