
# Kullanıcının kimlik doğrulayıcılarını listeleme

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

Bir kullanıcının kimlik doğrulayıcılarını (passkey, TOTP, SMS, e-posta ve push faktörleri) tek sayfada, oluşturulma zamanına göre sıralı olarak listeler. Son 90 gün içinde iptal edilenler de dahildir. Kullanıcı başına kimlik doğrulayıcı sayısı sınırlıdır; bu nedenle listede `limit`, `after`, `before` veya `order` yoktur ve `list_metadata` her zaman `null` değerlidir. Yalnızca meta veriler döndürülür: genel anahtarlar, kimlik bilgisi kimlikleri, TOTP gizli anahtarları veya kurtarma kodları hiçbir zaman döndürülmez.

## 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 sahip olması gerekir; aksi halde istek hiçbir veri okunmadan `403 insufficient_permissions` hatasıyla başarısız olur. Kullanıcı bu kuruluşun üyesi değilse (`invited`, `active` veya `suspended` üyelik yoksa), istek bilinmeyen bir kullanıcıyla aynı yanıt olan `404 not_found` hatasıyla başarısız olur. Kullanıcı üyeyse yalnızca her kimlik doğrulayıcının türü ve MFA'nın etkin olup olmadığı gösterilir: yalnızca etkin kimlik doğrulayıcılar listelenir; `label`, `last_used_at`, `revoked_at`, `revoked_by` ve `revoke_reason` alanları `null` olur ve `synced` alanı `false` olur, çünkü kişinin kuruluş dışındaki cihaz ayrıntıları bu görünüme ait değildir. Etkin bir kimlik doğrulayıcının `role` değeri `second_factor` veya `both` ise MFA etkin sayılır. `org_id` olmadan yanıt değişmez.

## İstek

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

## Yanıt

`200 OK`. `data`, kimlik doğrulayıcıları oluşturulma zamanına göre sıralı olarak içerir; liste sayfalandırılmadığı için `list_metadata` her zaman `null` değerlidir. Boş alanlar `null` olur.

Anahtarda `users:read_pii` izni yoksa `label` alanı baş harflerine indirgenir (`A. L.`).

```json
{
  "data": [
    {
      "id": "cred_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "type": "webauthn",
      "role": "both",
      "label": "Laptop",
      "status": "active",
      "synced": true,
      "created_at": "2026-01-15T09:30:00Z",
      "last_used_at": "2026-02-01T08:00:00Z",
      "revoked_at": null,
      "revoked_by": null,
      "revoke_reason": null
    }
  ],
  "list_metadata": {
    "before": null,
    "after": null
  }
}
```

`type`: `webauthn`, `totp`, `sms`, `email`, `push` · `role`: `first_factor`, `second_factor`, `both` · `status`: `pending`, `active`, `revoked`, `clone_suspected`

## 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 yoksa (ya da kimlik biçimi hatalıysa) veya `org_id` verilmiş ve kullanıcı o kuruluşun üyesi değilse. |
| 401 | `unauthenticated` | API anahtarı eksik, geçersiz veya iptal edilmişse. |
| 403 | `insufficient_permissions` | Anahtarda `users:read` izni yoksa veya `org_id` verilmiş ve anahtarda `organizations:read` yoksa. |
| 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/authenticators \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

## Kişisel veriler

Bu uç nokta kişisel veri içerir: kimlik bilgileri. [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çıklanmaktadır. Hiçbir alanda özel nitelikli kişisel verileri (sağlık, biyometrik veriler, din, siyasi görüşler, cinsel yönelim) göndermeyin.
