
# Kullanıcının oturumlarını iptal et

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

Kullanıcının oturumlarını ve onlara bağlı refresh token ailelerini iptal eder; bu oturumlarla verilmiş access token'lar introspection ve iptal denetiminde artık kabul edilmez. Gövdesiz (ya da `{}` ile) çağrı kullanıcının bütün oturumlarını iptal eder. En çok bir süzgeç verilebilir:

- `session_id`: yalnız o oturum (kullanıcıya ait olmalıdır, değilse `404`).
- `org_id`: o org bağlamında açılmış oturumlar ve kullanıcının o org'a ait refresh token aileleri.
- `client_id`: yalnız o uygulamanın bu kullanıcıdaki refresh token aileleri; oturumlar açık kalır. Uygulama kimliği (`app_…`) verilir; Client ID Metadata Document uygulamasının URL biçimli `client_id`'si kabul edilmez.

Zaten iptal edilmiş ya da süresi dolmuş oturumlar sayılmaz; tekrar çağrı sıfır sayılarla başarılı olur. Her iptal yönetim audit'ine yazılır. Yeniden denemeleri güvenli kılmak için `Idempotency-Key` başlığı gönderin.

## İstek

| Parametre | Yer | Zorunlu | Açıklama |
|---|---|---|---|
| `user_id` | path | evet | `usr_` önekli kullanıcı kimliği. |

İsteğe bağlı gövde (en çok bir alan):

| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| `session_id` | string | hayır | `ses_` önekli oturum kimliği. |
| `org_id` | string | hayır | `org_` önekli org kimliği. |
| `client_id` | string | hayır | `app_` önekli uygulama kimliği. |

## Yanıt

`200 OK`.

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

`client_id` süzgecinde `revoked_sessions` `0`'dır (oturumlar açık kalır).

## Hatalar

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

| HTTP | `code` | Ne zaman |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | Gövde geçerli JSON değil ya da bilinmeyen alan taşıyor. |
| 415 | `unsupported_media_type` | Gövde `Content-Type: application/json` olmadan gönderildi. |
| 422 | `validation_failed` | Birden çok süzgeç (`mutually_exclusive`), biçimsiz kimlik (`invalid_value`) ya da org veya uygulama bu ortamda yok (`/org_id` ya da `/client_id` işaretçisinde `not_found`). |
| 404 | `not_found` | Kullanıcı bu ortamda yok ya da `session_id` kullanıcının oturumu değil. |
| 401 | `unauthenticated` | API anahtarı yok, geçersiz ya da iptal edilmiş. |
| 403 | `insufficient_permissions` | Anahtarda `sessions:write` izni yok. |
| 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; sonra yeniden deneyin. |

## Örnek

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