
# Authentifikatoren eines Benutzers auflisten

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

Listet die Authentifikatoren (Passkeys, TOTP, SMS, E-Mail- und Push-Faktoren) eines Benutzers auf einer Seite auf, einschließlich der in den letzten 90 Tagen widerrufenen, sortiert nach Erstellungszeitpunkt. Die Anzahl der Authentifikatoren pro Benutzer ist begrenzt, daher gibt es keine Parameter `limit`, `after`, `before` oder `order`, und `list_metadata` hat immer den Wert `null`. Es werden nur Metadaten zurückgegeben: niemals öffentliche Schlüssel, Credential-IDs, TOTP-Geheimnisse oder Wiederherstellungscodes.

## Organisationsbereich

Übergeben Sie `org_id`, um für einen Organisationsadministrator eine Diagnoseansicht des Mitglieds zu erstellen. Der Schlüssel benötigt dann zusätzlich die Berechtigung `organizations:read`; ohne sie schlägt die Anfrage mit `403 insufficient_permissions` fehl, bevor etwas gelesen wird. Ist der Benutzer kein Mitglied dieser Organisation (keine Mitgliedschaft mit Status `invited`, `active` oder `suspended`), schlägt die Anfrage mit `404 not_found` fehl, derselben Antwort wie für einen unbekannten Benutzer. Ist der Benutzer Mitglied, werden nur die Klasse jedes Authentifikators und die Information angezeigt, ob eine MFA eingerichtet ist: Es werden nur aktive Authentifikatoren aufgelistet, `label`, `last_used_at`, `revoked_at`, `revoked_by` und `revoke_reason` sind `null` und `synced` ist `false`, da die Gerätedetails der Person außerhalb der Organisation nicht zu ihr gehören. Eine MFA gilt als eingerichtet, wenn ein aktiver Authentifikator die `role` `second_factor` oder `both` hat. Ohne `org_id` bleibt die Antwort unverändert.

## Anfrage

| Parameter | In | Pflicht | Beschreibung |
|---|---|---|---|
| `user_id` | Pfad | ja | Benutzer-ID, mit `usr_` beginnend. |
| `org_id` | Query | nein | Organisations-ID, mit `org_` beginnend. Beschränkt die Ansicht auf diese Organisation; siehe [Organisationsbereich](#organisationsbereich). Benötigt `organizations:read`. |

## Antwort

`200 OK`. `data` enthält die Authentifikatoren, sortiert nach Erstellungszeitpunkt; `list_metadata` hat immer den Wert `null`, da die Liste nicht paginiert ist. Leere Felder sind `null`.

Wenn dem Schlüssel die Berechtigung `users:read_pii` fehlt, wird `label` auf Initialen reduziert (`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`

## Fehler

Jeder Fehler ist ein Body vom Typ `application/problem+json` mit einem stabilen `code`.

| HTTP | `code` | Wann |
|---|---|---|
| 404 | `not_found` | Der Benutzer existiert in dieser Umgebung nicht (oder die ID ist fehlerhaft), oder `org_id` ist angegeben und der Benutzer ist kein Mitglied dieser Organisation. |
| 401 | `unauthenticated` | Der API-Schlüssel fehlt, ist ungültig oder wurde widerrufen. |
| 403 | `insufficient_permissions` | Dem Schlüssel fehlt die Berechtigung `users:read`, oder `org_id` ist angegeben und dem Schlüssel fehlt `organizations:read`. |
| 429 | `rate_limited` | Das Ratenlimit wurde überschritten; beachten Sie `Retry-After`. |
| 503 | `service_unavailable` | Ein Dienst ist vorübergehend nicht verfügbar; wiederholen Sie die Anfrage später. |

## Beispiel

```bash
curl https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/authenticators \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

## Personenbezogene Daten

Dieser Endpunkt verarbeitet personenbezogene Daten: Anmeldedaten. [Personenbezogene Daten in den KeenAuth-APIs](/docs/policies/personal-data) beschreibt, welche Daten gespeichert werden, wie lange sie aufbewahrt und wie sie gelöscht werden. Senden Sie in keinem Feld besondere Kategorien personenbezogener Daten (Gesundheit, biometrische Daten, Religion, politische Meinungen, sexuelle Orientierung).
