一括ユーザー削除ジョブを作成

POST /v1/jobs/user-deletions · 権限 users:delete および jobs:write

最大 10,000 人のユーザーを 1 つの非同期ジョブで削除します。各ユーザーには DELETE /v1/users/{user_id} と同じ削除処理が適用されます。ユーザーは pending_deletion になり、その後で完全な削除が実行されます。削除記録には、一括ジョブから作成されたことが記載されます。削除は取り消せないため、このエンドポイントは次の 2 つの手順で操作します。

  1. "dry_run": true を指定してリクエストを送信します。何も書き込まれず、レスポンスには matched_count(このリクエストで削除されるユーザー数)が含まれます。
  2. 同じ選択条件で、"confirm_count" にその数を指定してリクエストを送信します。その間に一致するユーザー数が変わっていた場合、リクエストは 409 confirmation_mismatch で失敗し、ジョブは作成されません。その場合はドライランを再実行してください。

ユーザーの選択方法は 2 通りです。user_ids(同じ ID が重複している場合は 1 回として数え、結果は最初に出現した順序を保持します)、または organization_id(ジョブ作成時点の組織の有効メンバーおよび停止中のメンバー)。ユーザーに一致しない ID はジョブに保持され、not_found として報告されます。

1 つの環境では一括ユーザー削除ジョブを同時に 1 つだけ実行できます。実行中に新しいジョブを作成すると、429 rate_limited と Retry-After で拒否されます。ジョブは作成時と完了時に管理監査ログへ記録されます。削除された各ユーザーには、個別の削除監査エントリもあります。ジョブの状況は 一括ユーザー削除ジョブを取得 で確認し、ユーザーごとの結果は 一括ユーザー削除の結果を一覧表示 で読み取ってください。

リクエスト

ヘッダー: Idempotency-Key(必須、16〜64 文字、A-Z a-z 0-9 _ -)。同じキーと同じ本文でリクエストを繰り返すと、最初のジョブが返されます。同じキーで本文が異なる場合は 422 idempotency_key_reuse で失敗します。本文は最大 512 KiB です。

項目 型 必須 説明
user_ids 文字列の配列 2 つのうちいずれか usr_ で始まるユーザー ID、1〜10,000 件。
organization_id 文字列 2 つのうちいずれか org_ で始まる組織 ID。メンバーは最大 10,000 人。
dry_run 真偽値 いいえ true: ユーザー数を数えるだけで、何も書き込みません。既定値は false。
confirm_count 整数 dry_run でない場合は必須 ドライランの matched_count(0〜10,000)。

レスポンス

ドライラン: 200 OK と {"dry_run": true, "matched_count": n}。

ジョブ作成: 202 Accepted と件数およびジョブ。

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

エラー

すべてのエラーは、安定した code を含む application/problem+json 本文として返されます。

HTTP code 発生条件
400 malformed_request, unknown_field Idempotency-Key ヘッダーが欠落しているか無効である、または本文が有効な JSON でないか、未知の項目を含んでいます。
401 unauthenticated API キーが欠落しているか、無効または取り消し済みです。
403 insufficient_permissions キーに users:delete または jobs:write がありません。
409 confirmation_mismatch confirm_count が、現在の一致ユーザー数と異なります。
409 idempotency_in_progress 同じ Idempotency-Key のリクエストがまだ処理中です。
413 payload_too_large 本文が 512 KiB を超えています。
422 validation_failed user_ids と organization_id の両方を指定している、またはどちらも指定していない、ID の形式が不正、ユーザーが 10,000 人を超えている(too_many, too_many_users)、組織にメンバーがいない(no_users)、または confirm_count が欠落している(required)。
422 idempotency_key_reuse Idempotency-Key が、異なる本文で使用されています。
429 rate_limited 別の一括ユーザー削除ジョブが実行中である、またはレート制限を超えました。Retry-After に従ってください。
503 service_unavailable 依存先が一時的に利用できません。後で再試行してください。

例

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 を実行し、続けて keenauth jobs user-deletions create --organization-id org_01h455vb4pex5vsknk084sn02q --confirm-count 42 --yes を実行します。ID の一覧が長い場合は、ファイルに保存して --data @users.json を指定します。