
# Kullanıcının günlüklerini listele

`GET /v1/users/{user_id}/logs` · izin `logs:read`

Bir kullanıcının günlük kayıtlarını imleç sayfalamasıyla, en yeniden en eskiye doğru listeler. Bu, panodaki kullanıcı etkinlik görünümünün arkasındaki verilerdir. [Günlükleri listele](/docs/api/management/logs/list) ile aynı kuralları izler, ancak yalnızca `from`, `to`, `type` ve `org_id` filtrelerini kabul eder; diğer filtreler yok sayılır.

## Kuruluş kapsamı

Bir kuruluş yöneticisi için üye tanılama görünümü oluşturmak üzere `org_id` geçirin. Bu durumda anahtarın ayrıca `organizations:read` iznine ihtiyacı vardır. 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 verilen yanıtın aynısıdır. Kullanıcı üyeyse, yalnızca bu kuruluş bağlamında gerçekleşen kayıtlar döndürülür: `org_id` değeri o kuruluş olan kayıtlar. Kullanıcının kuruluş dışındaki veya başka bir kuruluş bağlamındaki oturum açmaları hiçbir zaman döndürülmez. `org_id` olmadan görünüm, ortamdaki kullanıcının tüm kayıtlarını kapsar.

## İstek

| Parametre | Konum | Zorunlu | Açıklama |
|---|---|---|---|
| `user_id` | path | evet | Kullanıcı kimliği, `usr_` öneki ile. |
| `limit` | query | hayır | Sayfa boyutu, 1 ile 100 arası. Varsayılan 20. |
| `after` | query | hayır | `list_metadata.after` değerinden alınan şeffaf olmayan imleç (daha eski kayıtlar). `before` ile birlikte kullanılamaz. |
| `before` | query | hayır | `list_metadata.before` değerinden alınan şeffaf olmayan imleç (daha yeni kayıtlar). `after` ile birlikte kullanılamaz. |
| `from` | query | hayır | RFC 3339 zamanı; bu zamanda veya sonrasındaki kayıtlar. Saklama süresi içinde olmalıdır. |
| `to` | query | hayır | RFC 3339 zamanı; bu zamandan önceki kayıtlar. `from` değerinden sonra olmalıdır. |
| `type` | query | hayır | `authentication.` veya `session.created` gibi günlük türü öneki. Parametreyi en fazla 20 değer için tekrarlayın; bunlardan herhangi biriyle eşleşen kayıt döndürülür. |
| `org_id` | query | hayır | Kuruluş kimliği, `org_` öneki ile. Görünümü o kuruluşun kayıtlarıyla sınırlar; bkz. [Kuruluş kapsamı](#kuruluş-kapsamı). `organizations:read` gerektirir. |

Kayıtlar her zaman `occurred_at` alanına göre, en yeniden en eskiye sıralanır; `order` parametresi yoktur (`order=desc` kabul edilir, başka herhangi bir değer `validation_failed` ile başarısız olur). İmleç yalnızca üretildiği filtrelerle geçerlidir.

## Yanıt

`200 OK`. `data` sayfadaki kayıtları içerir; `list_metadata.after` daha eski kayıtlara, `list_metadata.before` daha yeni kayıtlara işaret eder (yoksa `null`). Toplam sayı döndürülmez. Boş alanlar `null` olur.

`ip`, `ip_asn`, `user_agent` ve `user_agent_family` yalnızca anahtarda `audit-events:read_ip` izni varsa bulunur; `identifier_hint` yalnızca `users:read_pii` izni varsa. İzin yoksa alan tamamen atlanır (maskelenmiş bir değer de yoktur). `ip_country` her zaman döndürülür.

```json
{
  "data": [
    {
      "id": "evt_01j9xk3m7q8r2s4t6v8w0y2z4a",
      "occurred_at": "2026-10-01T08:15:42.120Z",
      "type": "authentication.password.failed",
      "outcome": "failure",
      "reason_code": "invalid_credentials",
      "user_id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "org_id": null,
      "application_id": "app_01j9xk3m7q8r2s4t6v8w0y2z4b",
      "connection_id": "conn_01j9xk3m7q8r2s4t6v8w0y2z4c",
      "directory_id": null,
      "session_id": null,
      "identifier_hint": "a***@e***.com",
      "ip": "203.0.113.7",
      "ip_country": "DE",
      "ip_asn": 64500,
      "user_agent": "Mozilla/5.0 (X11; Linux x86_64)",
      "user_agent_family": "Firefox",
      "risk": null,
      "auth_context": null,
      "act_chain": null,
      "details": {"attempt": 3},
      "request_id": "0192a6c1-7d3e-7a10-9b2c-3d4e5f607182",
      "correlation_id": null,
      "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736"
    }
  ],
  "list_metadata": {
    "before": null,
    "after": "<opaque cursor>"
  }
}
```

## Hatalar

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

| HTTP | `code` | Ne zaman |
|---|---|---|
| 400 | `invalid_cursor` | İmleç hatalı biçimli ya da bu istek için üretilmemiş. |
| 400 | `invalid_filter` | Günlük hizmeti bir filtreyi ya da imleci reddetti. |
| 400 | `range_outside_retention` | `from`, planınızın saklama süresinden daha eski. |
| 422 | `validation_failed` | Bir sorgu parametresi geçersiz (`limit` aralık dışında, hatalı zaman damgası, `to` değeri `from` değerinden sonra değil, 20'den fazla `type` değeri, hatalı biçimli `org_id`, tekrarlanan parametre). |
| 401 | `unauthenticated` | API anahtarı eksik, geçersiz veya iptal edilmiş. |
| 403 | `insufficient_permissions` | Anahtarda `logs:read` izni yok ya da `org_id` ayarlıysa anahtarda `organizations:read` izni yok. `required_permissions` isteğin gerektirdiklerini listeler. |
| 404 | `not_found` | Kullanıcı kimliği hatalı biçimli ya da `org_id` ayarlı ve kullanıcı o kuruluşun üyesi değil. |
| 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 yeniden deneyin. |

## Örnek

```bash
curl "https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/logs?limit=50" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

Yalnızca bir kuruluşun kayıtları:

```bash
keenauth users logs list usr_0a1b2c3d4e5f6g7h8j9k0m1n2p --org-id org_01j9xk3m7q8r2s4t6v8w0y2z4d --type authentication.
```

## Kişisel veriler

Bu uç nokta kişisel veri içerir: ortam günlükleri. [KeenAuth API'lerinde kişisel veriler](/docs/policies/personal-data) sayfası neyin saklandığını, ne kadar süre tutulduğunu ve nasıl silindiğini açıklar. Hiçbir alanda özel nitelikli kişisel verileri (sağlık, biyometrik veriler, din, siyasi görüşler, cinsel yönelim) göndermeyin.
