
# ユーザーのセッションを取り消す

`POST /v1/users/{user_id}/sessions:revoke` · 権限 `sessions:write`

ユーザーのセッションと、それに紐づくリフレッシュトークンファミリーを取り消します。それらのセッションによって発行されたアクセストークンは、イントロスペクションと失効チェックで受け付けられなくなります。ボディがない場合（または `{}` の場合）、ユーザーのすべてのセッションが取り消されます。フィルターは最大 1 つまで指定できます。

- `session_id`：そのセッションのみ（ユーザーのセッションである必要があります。そうでない場合は `404`）。
- `org_id`：その組織のコンテキストで開始されたセッションと、その組織向けの、そのユーザーのリフレッシュトークンファミリー。
- `client_id`：そのユーザーに対する、そのアプリケーションのリフレッシュトークンファミリーのみ。セッションは開いたままです。アプリケーション ID（`app_…`）を使用してください。Client ID Metadata Document のアプリケーションの URL 形式の `client_id` は受け付けられません。

すでに取り消されているか期限切れのセッションはカウントされないため、繰り返し呼び出しても、件数ゼロで成功します。すべての取り消しは管理監査ログに記録されます。再試行を安全にするには、`Idempotency-Key` ヘッダーを送信してください。

## リクエスト

| パラメータ | 入力 | 必須 | 説明 |
|---|---|---|---|
| `user_id` | path | はい | ユーザー ID。`usr_` で始まります。 |

任意のボディ（フィールドは最大 1 つ）:

| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
| `session_id` | string | いいえ | セッション ID。`ses_` で始まります。 |
| `org_id` | string | いいえ | 組織 ID。`org_` で始まります。 |
| `client_id` | string | いいえ | アプリケーション ID。`app_` で始まります。 |

## レスポンス

`200 OK`。

```json
{
  "revoked_sessions": 2,
  "revoked_token_families": 3
}
```

`client_id` を指定した場合、`revoked_sessions` は `0` です（セッションは開いたままです）。

## エラー

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

| HTTP | `code` | 発生条件 |
|---|---|---|
| 400 | `malformed_request`、`unknown_field` | ボディが有効な JSON ではないか、未知のフィールドがあります。 |
| 415 | `unsupported_media_type` | ボディが `Content-Type: application/json` なしで送信されました。 |
| 422 | `validation_failed` | フィルターが複数指定されています（`mutually_exclusive`）、ID の形式が不正です（`invalid_value`）、または組織かアプリケーションがこの環境に存在しません（`/org_id` または `/client_id` の `not_found`）。 |
| 404 | `not_found` | ユーザーがこの環境に存在しないか、`session_id` がそのユーザーのセッションではありません。 |
| 401 | `unauthenticated` | API キーがない、無効、または失効しています。 |
| 403 | `insufficient_permissions` | キーに `sessions:write` 権限がありません。 |
| 429 | `rate_limited` | レート制限を超えました。`Retry-After` に従ってください。 |
| 503 | `service_unavailable` | 依存先が一時的に利用できません。後で再試行してください。 |

## 例

```bash
curl -X POST https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/sessions:revoke \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"org_id": "org_0a1b2c3d4e5f6g7h8j9k0m1n2p"}'
```

CLI: `keenauth users sessions revoke usr_0a1b2c3d4e5f6g7h8j9k0m1n2p --org-id org_0a1b2c3d4e5f6g7h8j9k0m1n2p --yes`
