
# Olayları listele

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

Ortamın olaylarını sıralı olarak, en eskiden en yeniye doğru döndürür. Her olay, webhook'ların ilettiği belgenin aynısıdır ve aynı `id`'yi taşır. Olaylar her pakette 30 gün boyunca saklanır.

Sisteminiz webhook alamadığında veya bir kesintiden sonra boşluğu doldurmak için bu uç noktayı kullanın: işlediğiniz son `next_cursor` değerini saklayın ve oradan devam edin.

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

## İstek

| Parametre | Konum | Zorunlu | Açıklama |
|---|---|---|---|
| `after` | query | hayır | Önceki yanıttaki `next_cursor` değeri veya yalnızca şu andan itibaren kaydedilen olayları almak için `latest`. Bu parametre yoksa liste, saklanan en eski olaydan başlar. |
| `types` | query | hayır | Virgülle ayrılmış olay türleri, en fazla 20 tane; örneğin `user.created,user.deleted`. Bu parametre yoksa tüm türler döndürülür. |
| `org_id` | query | hayır | Yalnızca bu kuruluşa ait olaylar (`org_…`). |
| `limit` | query | hayır | Sayfa boyutu, 1 ile 100 arasında. Varsayılan 20. |
| `payload` | query | hayır | `thin` (varsayılan) veya `full`. `full` için ayrıca `users:read` izni gerekir. Tam yük kullanılabilir hale gelene kadar `full` değeri hafif yükü döndürür. |
| `purpose` | query | hayır | `tail` (varsayılan) veya `webhooks_listen`. `webhooks_listen` yalnızca `development` ve `staging` ortamlarında kabul edilir. |

## Yanıt

`200 OK`:

| Alan | Açıklama |
|---|---|
| `data` | Sıralı olaylar. Her olayın, ortam içinde artan bir `seq` değeri vardır. |
| `next_cursor` | Her zaman bulunur. `data` boş olsa bile bir sonraki istekte `after` olarak gönderin. |
| `has_more` | Devam eden olaylar varsa `true` olur; hemen yeniden istek gönderin. `false` ise yeniden sorgulamadan önce bekleyin (5 ile 60 saniye). |

Cursor, `types` veya `org_id` değerlerine bağlı değildir: filtreyi değiştirip aynı konumdan devam edebilirsiniz. Cursor yalnızca onu üreten ortamda çalışır.

```json
{
  "data": [
    {
      "id": "evt_01j9xk3m7q8r2s4t6v8w0y2z4a",
      "type": "connection.deleted",
      "schema_version": 1,
      "environment_id": "env_01j9xk3m7q8r2s4t6v8w0y2z4e",
      "occurred_at": "2026-11-03T08:15:42.120Z",
      "recorded_at": "2026-11-03T08:15:42.140Z",
      "seq": 4182,
      "data": {
        "object": {"id": "conn_01j9xk3m7q8r2s4t6v8w0y2z4f", "status": "deleted"},
        "object_version": 2
      },
      "context": {"actor": {"type": "system"}, "request_id": "0192a6c1-7d3e-7a10-9b2c-3d4e5f607182"}
    }
  ],
  "next_cursor": "eyJ2IjoxfQ.c2lnbmF0dXJl",
  "has_more": false
}
```

## Örnek: yeni olayları sorgulama

```bash
cursor=latest
while true; do
  page=$(curl -sS -G https://api.keenauth.com/v1/events \
    -H "Authorization: Bearer $KEENAUTH_API_KEY" \
    --data-urlencode "after=$cursor" --data-urlencode "limit=100")
  echo "$page" | jq -c '.data[]'
  cursor=$(echo "$page" | jq -r '.next_cursor')
  [ "$(echo "$page" | jq -r '.has_more')" = "true" ] || sleep 10
done
```

CLI aynı işlemi `keenauth events tail` komutuyla yapar.

## Hatalar

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

| HTTP | `code` | Ne zaman |
|---|---|---|
| 400 | `invalid_cursor` | Cursor hatalı biçimlendirilmiş veya başka bir ortamda üretilmiş. |
| 401 | `unauthenticated` | API anahtarı eksik, geçersiz veya iptal edilmiş. |
| 403 | `insufficient_permissions` | Anahtarda `events:read` izni yok veya `users:read` olmadan `payload=full` kullanılmış. |
| 403 | `test_feature_not_in_production` | Üretim ortamında `purpose=webhooks_listen` kullanılmış. |
| 422 | `validation_failed` | Bir parametre geçersiz veya tekrarlanmış; `errors[].pointer` bunu belirtir. |
| 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. |

## Kişisel veriler

Bu uç noktada kişisel veriler bulunur: olaylar. [KeenAuth API'lerindeki kişisel veriler](/docs/policies/personal-data) hangi verilerin 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.
