
# Kullanıcının giriş durumunu al

`GET /v1/users/{user_id}/sign-in-state` · izin `users:read`

Kullanıcı giriş yapamadığında destek ekibinizin ihtiyaç duyduğu bilgileri döndürür: kullanıcının açık hesap kilitlerini, her giriş yolunda hâlâ işleyen başarısız deneme sayılarını ve son başarılı kimlik doğrulamayı. Çağrı yalnızca okuma yapar; hiçbir şey değiştirilmez ve denetim kaydı yazılmaz. Kilitleri kaldırmak için [`POST /v1/users/{user_id}:unlock`](unlock.md) kullanın.

Yanıt, sayacın iç konu bilgisini, e-posta adresini, IP adresini, cihazı veya oturum kimliğini hiçbir zaman içermez. Kullanıcının oturumları için [`GET /v1/users/{user_id}/sessions`](list-sessions.md) kullanın.

## Kuruluş kapsamı

Bir kuruluş yöneticisi için üye tanılama görünümü oluşturmak üzere `org_id` gönderin. Bu durumda anahtarın ayrıca `organizations:read` iznine ihtiyacı vardır; bu izin yoksa istek hiçbir şey okunmadan `403 insufficient_permissions` ile başarısız olur. Kullanıcı o kuruluşun üyesi değilse (`invited`, `active` veya `suspended` üyeliği yoksa) istek `404 not_found` ile başarısız olur; bu, bilinmeyen bir kullanıcı için dönen yanıtla aynıdır. Kullanıcı üyeyse `last_sign_in` yalnızca o kuruluş bağlamındaki oturumlardan gelir ve `failures` her zaman boş bir dizidir, çünkü başarısızlık sayaçları hiçbir kuruluşa atfedilmez. Kilitler yine de döndürülür, çünkü bir kilit hesabın her bağlamda girişini durdurur. `org_id` gönderilmezse yanıt değişmez.

## İstek

| Parametre | Konum | Zorunlu | Açıklama |
|---|---|---|---|
| `user_id` | yol | evet | Kullanıcı kimliği, `usr_` öneki ile. |
| `org_id` | sorgu | hayır | Kuruluş kimliği, `org_` öneki ile. Görünümü o kuruluşla sınırlar; bkz. [Kuruluş kapsamı](#kuruluş-kapsamı). `organizations:read` gerektirir. |

## Yanıt

`200 OK`.

```json
{
  "locked": true,
  "locked_until": "2026-10-20T10:00:00Z",
  "locks": [
    {"id": "lck_0a1b2c3d4e5f6g7h8j9k0m1n2p", "path": "password",
     "locked_at": "2026-10-20T09:45:00Z", "expires_at": "2026-10-20T10:00:00Z"}
  ],
  "failures": [
    {"path": "totp", "count": 3, "window_ends_at": "2026-10-20T09:55:00Z"}
  ],
  "last_sign_in": {"authenticated_at": "2026-10-19T18:12:04Z", "amr": ["pwd", "otp"], "country": "DE"}
}
```

| Alan | Açıklama |
|---|---|
| `locked` | En az bir giriş yolu kilitli olduğunda `true`. |
| `locked_until` | Son açık kilidin biteceği zaman; kilit yoksa `null`. |
| `locks` | Açık kilitler, en eskiden en yeniye; yol başına en fazla bir tane (`password`, `totp`, `sms_2fa`, `email_2fa`, `otp`, `recovery_code`). |
| `failures` | Son başarılı girişten veya son kilitten bu yana, yol başına başarısız denemeler; sayım penceresi çalıştıkça. `window_ends_at` zamanından sonra sayım baştan başlar. Parola penceresi ortamın `brute_force.window_minutes` değeridir. |
| `last_sign_in` | Hâlâ tutulan oturumlar arasındaki en son başarılı kimlik doğrulama: `authenticated_at` (aynı oturumda yeniden kimlik doğrulama bu zamanı ileri taşır), kimlik doğrulama yöntemleri (`amr`, RFC 8176) ve oturumun son bilinen ülkesi (bilinmiyorsa `null`). Hiçbir oturum tutulmuyorsa `null`: kullanıcı hiç giriş yapmamıştır ya da son oturum 30 günden daha önce sona ermiştir. |

## Hatalar

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

| HTTP | `code` | Ne zaman |
|---|---|---|
| 404 | `not_found` | Kullanıcı bu ortamda yok (ya da kimlik biçimi hatalı) ya da `org_id` verilmiş ve kullanıcı o kuruluşun üyesi değil. |
| 401 | `unauthenticated` | API anahtarı eksik, geçersiz veya iptal edilmiş. |
| 403 | `insufficient_permissions` | Anahtarda `users:read` izni yok ya da `org_id` verilmiş ve anahtarda `organizations:read` 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; daha sonra tekrar deneyin. |

## Örnek

```bash
curl https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/sign-in-state \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

CLI: `keenauth users sign-in-state usr_0a1b2c3d4e5f6g7h8j9k0m1n2p`
