
# Denetim olaylarını listele

`GET /v1/audit-events` · izin `audit-events:read`

Ortamın denetim kayıtlarını imleç tabanlı sayfalama ile en yeniden en eskiye doğru listeler. `admin` akışı, yönetim API'si, kontrol paneli ve platform üzerinden yapılan değişiklikleri içerir; `application` akışı ise uygulamanızın yazdığı olayları içerir. Her kayıt, ortam ve akış bazında bir karma zincirinin parçasıdır; bu nedenle geçmiş, bir dışa aktarma (`POST /v1/audit-exports`) ile bağımsız olarak doğrulanabilir.

Ortam her zaman API anahtarından alınır; bir ortam parametresi yoktur.

## İstek

| Parametre | Konum | Zorunlu | Açıklama |
|---|---|---|---|
| `limit` | sorgu | hayır | Sayfa boyutu, 1 ile 100 arası. Varsayılan 20. |
| `after` | sorgu | hayır | `list_metadata.after` değerinden gelen, şeffaf olmayan imleç (daha eski kayıtlar). `before` ile birlikte kullanılamaz. |
| `before` | sorgu | hayır | `list_metadata.before` değerinden gelen, şeffaf olmayan imleç (daha yeni kayıtlar). `after` ile birlikte kullanılamaz. |
| `stream` | sorgu | hayır | `admin` (varsayılan) veya `application`. |
| `from` | sorgu | hayır | RFC 3339 zamanı; bu zamanda veya sonrasındaki kayıtlar. Varsayılan, saklama penceresinin başlangıcı ile `to` eksi 92 gün değerlerinin daha geç olanıdır. |
| `to` | sorgu | hayır | RFC 3339 zamanı; bu zamandan önceki kayıtlar. Varsayılan şimdidir. `from` ile `to` arasındaki aralık en fazla 92 gündür. |
| `action` | sorgu | hayır | `user.` veya `connection.updated` gibi bir işlem öneki. |
| `category` | sorgu | hayır | `authentication`, `session`, `token`, `administration`, `provisioning`, `federation`, `authorization`, `data_access`, `security`, `key_management`, `configuration` veya `application`. |
| `actor_type` | sorgu | hayır | `api_key`, `dashboard_user`, `m2m_client`, `agent` veya `system` gibi bir işlem yapan türü. |
| `actor_id` | sorgu | hayır | Kaydedildiği biçimiyle tam işlem yapan kimliği (`key_…`, `usr_…`, `system:<service>`). |
| `target_type` | sorgu | hayır | `user`, `organization` veya `audit_export` gibi bir hedef türü. |
| `target_id` | sorgu | hayır | Tam hedef kimliği. `target_type` ile birlikte kullanıldığında ikisi de aynı hedefle eşleşmelidir. |
| `org_id` | sorgu | hayır | Bir kuruluşla ilgili kayıtlar (`org_…`). |
| `outcome` | sorgu | hayır | `success`, `failure`, `denied` veya `error`. |
| `request_id` | sorgu | hayır | Bir isteğin `Idp-Request-Id` değeri (UUID). |
| `correlation_id` | sorgu | hayır | Bir iş akışının `Idp-Correlation-Id` değeri (UUID). |
| `agent_only` | sorgu | hayır | `true` değeri yalnızca temsilci işlemlerini döndürür: `actor_type` değeri `agent` olan veya boş olmayan bir `act_chain` içeren kayıtlar. |
| `client` | sorgu | hayır | Çağrıyı yapan istemci türü: `mcp` (yönetim MCP sunucusu, `metadata.client` = `mcp/<version>`) veya `cli` (KeenAuth CLI, `cli/<version>`). Bu değeri istemci kendisi bildirir; kimin işlem yaptığının kanıtı değildir, kanıt kaydın işlem yapanıdır. Yalnızca listeleme için geçerlidir; bir dışa aktarmada `client` filtresi yoktur. |

Kayıtlar her zaman `occurred_at` (sonra `id`) alanına göre en yeniden en eskiye sıralanır; bir `order` parametresi yoktur (`order=desc` kabul edilir, başka bir değer `validation_failed` hatasıyla sonuçlanır). Bir imleç yalnızca üretildiği filtreler ve ortam ile geçerlidir. Toplam kayıt sayısı döndürülmez.

10 saniyeden uzun süren bir arama `422 search_too_broad` hatasıyla durur: filtreleri ya da zaman aralığını daraltın, büyük aralıklar için bir dışa aktarma kullanın.

## Yanıt

`200 OK`. `data` alanı sayfadaki kayıtları içerir; `list_metadata.after` daha eski kayıtlara, `list_metadata.before` ise daha yeni kayıtlara işaret eder (kayıt yoksa `null`). Boş alanlar `null` olarak döner.

`ip` ve `user_agent` alanları yalnızca anahtarda `audit-events:read_ip` izni varsa bulunur ve yalnızca 13 aydan yeni kayıtlarda doldurulur. İzin yoksa alanlar tamamen çıkarılır (maskelenmiş bir değer döndürülmez). `ip_prefix`, `ip_country`, `ip_asn` ve `user_agent_family` her zaman döndürülür. `prev_hash`, `org_prev_hash` ve `record_hash` dolgusuz base64url SHA-256 değerleridir.

```json
{
  "data": [
    {
      "id": "evt_01j9xk3m7q8r2s4t6v8w0y2z4a",
      "stream": "admin",
      "seq": 4182,
      "schema_version": 1,
      "action": "user.blocked",
      "category": "administration",
      "outcome": "success",
      "reason_code": null,
      "occurred_at": "2026-10-01T08:15:42.120Z",
      "received_at": "2026-10-01T08:15:42.131Z",
      "recorded_at": "2026-10-01T08:15:42.140Z",
      "clock_anomaly": false,
      "actor_type": "api_key",
      "actor_id": "key_01j9xk3m7q8r2s4t6v8w0y2z4d",
      "act_chain": null,
      "session_id": null,
      "auth_context": null,
      "elevation_ref": null,
      "org_id": null,
      "targets": [
        {"type": "user", "id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p", "org_id": null, "name": null}
      ],
      "application_id": null,
      "ip_prefix": "203.0.113.0/24",
      "ip_country": "DE",
      "ip_asn": 64500,
      "user_agent_family": "keenauth-go",
      "request_id": "0192a6c1-7d3e-7a10-9b2c-3d4e5f607182",
      "correlation_id": null,
      "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
      "producer_service": "directory",
      "policy_ref": "perm:users:write",
      "changes": {"status": {"old": "active", "new": "blocked"}},
      "metadata": null,
      "prev_hash": "n4bQgYhMfWWaL-qgxVrQFaO_TxsrC4Is0V1sFbDwCgg",
      "org_prev_hash": null,
      "record_hash": "LCa0a2j_xo_5m0U8HTBBNBNCLXBkg7-g-YpeiGJm564"
    }
  ],
  "list_metadata": {
    "before": null,
    "after": "<opaque cursor>"
  }
}
```

## Hatalar

Her hata, kararlı bir `code` değerine sahip bir `application/problem+json` gövdesidir.

| HTTP | `code` | Ne zaman |
|---|---|---|
| 400 | `invalid_cursor` | İmleç hatalıysa veya bu istek için üretilmediyse. |
| 400 | `invalid_filter` | Denetim servisi bir filtreyi reddettiyse, örneğin aralık 92 günden uzunsa. |
| 400 | `range_outside_retention` | `from` veya `to`, planınızın denetim saklama penceresinin dışındaysa. |
| 422 | `validation_failed` | Bir sorgu parametresi geçersizse (`limit` aralık dışındaysa, zaman damgası hatalıysa, `to` `from` değerinden sonra değilse, `stream`, `category` veya `outcome` bilinmiyorsa, kimlik biçimi hatalıysa, parametre tekrarlanmışsa, `order` değeri `desc` dışındaysa). |
| 422 | `search_too_broad` | Arama 10 saniyeden uzun sürdüyse; aramayı daraltın. |
| 401 | `unauthenticated` | API anahtarı eksikse, geçersizse veya iptal edilmişse. |
| 403 | `insufficient_permissions` | Anahtarda `audit-events:read` izni yoksa. |
| 429 | `rate_limited` | Hız sınırı aşıldıysa; `Retry-After` değerine uyun. |
| 503 | `service_unavailable` | Bir bağımlılık geçici olarak kullanılamıyorsa; daha sonra yeniden deneyin. |

## Örnek

```bash
curl "https://api.eu.keenauth.com/v1/audit-events?action=user.&from=2026-10-01T00:00:00Z" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

```bash
keenauth audit-events list --action user. --from 2026-10-01T00:00:00Z
```

## Kişisel veriler

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