
# Hareketsiz üyeler raporu

`GET /v1/reports/inactive-members` · İzin `reports:read`

Bir kuruluşun, son `days` gündür o kuruluşta başarılı bir giriş yapmamış etkin üyelerini listeler. Bir bağlantıda SCIM sağlaması yoksa hesapları kaldırmak için bu raporu kullanın: listeyi inceleyin, ardından seçilen üyelikleri `POST /v1/organizations/{org_id}/memberships/{membership_id}:suspend` ile askıya alın.

Ortam her zaman API anahtarından gelir; bir ortam parametresi yoktur. Satırlar yalnızca tanımlayıcıları ve zaman damgalarını içerir; ad, e-posta adresi, IP adresi veya `User-Agent` içermez. Kullanıcı tanımlayıcıları kişisel veri olduğundan rapor yalnızca `reports:read` bulunan anahtarlarla sınırlıdır.

## Bir oturum açma nasıl sayılır

Bu kuruluşun bağlamında tamamlanan başarılı bir kimlik doğrulama, oturum açma olarak sayılır. Hiçbir kuruluş seçilmeden yapılan oturum açma sayılmaz. Etkinleştirilme zamanı (`activated_at`, ya da hiç etkinleştirilmemişse oluşturulma zamanı) eşik değerinden daha yeni olan bir üyelik listelenmez; bu yüzden dün katılan bir üye 30 günlük bir raporda hiç görünmez.

## İstek

| Parametre | Konum | Zorunlu | Açıklama |
|---|---|---|---|
| `organization_id` | query | evet | Kuruluş (`org_…`). |
| `days` | query | hayır | Gün cinsinden hareketsizlik eşiği, 7 ila 365. Varsayılan 30. |
| `limit` | query | hayır | Sayfa boyutu, 1 ila 100. Varsayılan 50. |
| `cursor` | query | hayır | Önceki sayfanın `next_cursor`. Yalnızca düzenlendiği ortam, `organization_id` ve `days` için geçerlidir. |

Satırlar üyeliklerin en son güncellenme sırasını izler. Eşik (`inactive_since`) ilk sayfada bir kez hesaplanır ve imleçte taşınır; böylece bir raporun her sayfası aynı anı kullanır.

Bir sayfa en fazla 500 üyelik tarar ve `limit` değerinden daha az satır, hatta hiç satır döndürebilir. `null` olana kadar `next_cursor` değerini izlemeye devam edin.

## Yanıt

`200 OK`.

| Alan | Açıklama |
|---|---|
| `organization_id` | Raporun kuruluşu. |
| `days` | Kullanılan eşik. |
| `inactive_since` | Eşik anı (istek zamanı eksi `days`, RFC 3339, UTC). Bu andan beri oturum açmamış üyeler listelenir. |
| `data_since` | Ortam için kaydedilen ilk başarılı kimlik doğrulamanın zamanı; bundan önceki oturum açmalar bilinmez. Ortamın henüz kaydı yoksa `null`. |
| `complete` | `data_since`, `inactive_since` değerinden sonra değilse `true`; böylece liste tüm eşik penceresini kapsar. |
| `data` | Bu sayfadaki satırlar (aşağıya bakın). |
| `next_cursor` | Sonraki sayfanın imleci; son sayfada `null`. |

`data` içindeki her satır:

| Alan | Açıklama |
|---|---|
| `membership_id` | `mem_…`. |
| `user_id` | `usr_…`. |
| `activated_at` | Üyeliğin etkinleştirildiği zaman (hiç etkinleştirilmemişse oluşturulma zamanı). |
| `last_authenticated_at` | Bu kuruluştaki en son başarılı kimlik doğrulama; `data_since` bu yana kayıtlı bir kimlik doğrulama yoksa `null`. |

`complete` `false` ise listelenen bir üye `data_since` öncesinde oturum açmış olabilir; bu yüzden listeyi kesin kabul etmeyin. `data_since` `null` ise ortam için henüz hiçbir oturum açma kaydedilmemiştir ve yeterince eski olan her üye listelenir.

```json
{
  "organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4d",
  "days": 30,
  "inactive_since": "2027-02-03T09:30:00Z",
  "data_since": "2026-12-01T08:00:00Z",
  "complete": true,
  "data": [
    {
      "membership_id": "mem_01j9xk3m7q8r2s4t6v8w0y2z4e",
      "user_id": "usr_01j9xk3m7q8r2s4t6v8w0y2z4f",
      "activated_at": "2026-12-10T10:00:00Z",
      "last_authenticated_at": "2027-01-05T17:45:00Z"
    }
  ],
  "next_cursor": null
}
```

## Hatalar

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

| HTTP | `code` | Ne zaman |
|---|---|---|
| 400 | `invalid_cursor` | İmleç bozuk ya da başka bir ortam, kuruluş veya `days` için düzenlenmişse. |
| 404 | `not_found` | Kuruluş yoksa ya da başka bir ortama aitse. |
| 422 | `validation_failed` | `organization_id` eksik ya da hatalıysa, `days` veya `limit` aralık dışındaysa ya da bir parametre tekrarlanmışsa. |
| 401 | `unauthenticated` | API anahtarı eksik, geçersiz veya iptal edilmişse. |
| 403 | `insufficient_permissions` | Anahtarda `reports:read` yoksa. |
| 429 | `rate_limited` | Hız sınırı aşıldı; `Retry-After` değerine uyun. |
| 503 | `service_unavailable` | Raporlama hizmeti geçici olarak kullanılamıyor; daha sonra yeniden deneyin. |

## Örnek

```bash
curl "https://api.eu.keenauth.com/v1/reports/inactive-members?organization_id=org_01j9xk3m7q8r2s4t6v8w0y2z4d&days=60" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

```bash
keenauth reports inactive-members org_01j9xk3m7q8r2s4t6v8w0y2z4d --days 60
```

## Kişisel veriler

Bu uç nokta kişisel veri içerir: kuruluş üyelikleri ve davetler (kullanıcı ve üyelik tanımlayıcıları ile oturum açma zamanları). [KeenAuth API'lerinde kişisel veriler](/docs/policies/personal-data) saklanan verileri, ne kadar süre tutulduklarını ve nasıl silindiklerini 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.
