
# Diagnose eines Mitglieds abrufen

`GET /v1/organizations/{org_id}/memberships/{membership_id}/diagnostics` · Berechtigungen `organizations:read` und `users:read`

Beantwortet für einen Organisationsadministrator in einer einzigen Antwort die Frage "Warum kann sich dieses Mitglied nicht anmelden?": die Mitgliedschaft, eine Zusammenfassung der Richtlinien der Organisation, eine ausstehende Einladung, eine Zusammenfassung der Authentifikatoren des Mitglieds, den Anmeldestatus im Kontext der Organisation, die Verzeichnisgruppen des Mitglieds und den Zugriff des Mitglieds auf Anwendungen. Die Antwort ist rein lesend: Es wird nichts verändert, Schreibaktionen erfolgen über eigene Endpunkte. Anmeldeaktivität wird mit [Logs eines Benutzers auflisten](/docs/api/management/users/list-logs) und `org_id` gelesen.

Es werden nur Daten zurückgegeben, die zur Organisation gehören. Bezeichnungen, AAGUIDs, IP-Adressen, User-Agents, E-Mail-Adressen, CIDR-Bereiche und Datensätze aus dem Kontext einer anderen Organisation sind niemals Teil der Antwort.

## Anfrage

| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| `org_id` | Pfad | ja | Organisations-ID (`org_…`). |
| `membership_id` | Pfad | ja | Mitgliedschafts-ID (`mem_…`). |

Kein Request-Body.

## Antwort

`200 OK` mit diesen Feldern:

| Feld | Beschreibung |
|---|---|
| `membership` | Die Mitgliedschaft, wie [Eine Mitgliedschaft abrufen](get.md) sie zurückgibt: Status, Quelle, Rollen und Grund der Sperrung. |
| `policy` | Die für die Organisation festgelegten Richtlinien: `authentication_methods` (Passkey und Passwort erlaubt, Anzahl erlaubter Verbindungen), `mfa` (wer MFA verwenden muss und die erlaubten Faktoren), `phishing_resistant`, `sso_enforcement` (Modus und `bypass`, wenn das Mitglied auf der Notfallzugang-Liste steht) und `ip_allowlist` (vorhanden und für wen es gilt). `null` bedeutet, dass die Organisation den Umgebungswert für diese Richtlinie übernimmt. |
| `invitation` | Nur bei einer `invited`-Mitgliedschaft: die ausstehende Einladung an die primäre E-Mail-Adresse des Benutzers mit Zustellung und Zustellstatus. Andernfalls `null`. Die E-Mail-Adresse wird nicht zurückgegeben. |
| `authenticators` | `classes`: die Typen der aktiven Authentifikatoren des Mitglieds. `mfa_enrolled`: `true`, wenn ein aktiver Authentifikator die Rolle `second_factor` oder `both` hat. |
| `sign_in` | `locked` und `locked_until` (eine Sperre stoppt die Anmeldung des Kontos in jedem Kontext), sowie die letzte Anmeldung im Kontext dieser Organisation (`last_sign_in_at`, `last_sign_in_amr`). Fehlerzähler werden nicht angezeigt, da sie zu keiner Organisation gehören. |
| `groups` | Die Gruppen des Mitglieds in den Verzeichnissen der Organisation (`data`: `id` `dsg_…` und `directory_id` `dir_…`; höchstens 100, `truncated`, wenn es mehr gibt). Nur Mitgliedschaften eines Verzeichnisbenutzers, der mit diesem Benutzer verknüpft und aktiv ist, zählen. Gruppennamen werden nicht zurückgegeben; sie können mit `GET /v1/directories/{directory_id}/groups/{directory_group_id}` gelesen werden. |
| `applications` | Zugriff auf Anwendungen in dieser Organisation. Anwendungen, deren `org_access_mode` `all_organizations` ist, stehen jedem Mitglied offen und werden nur gezählt (`open_count`). Für die übrigen Anwendungen (`data`, nach Name, höchstens 100, `truncated`, wenn es mehr gibt): `application_id`, `name`, `access_mode`, `allowed` und `reason`, wenn der Zugriff verweigert wird (`application_not_enabled`: die Anwendung ist für die Organisation nicht aktiviert; `application_not_assigned`: weder die Mitgliedschaft noch eine ihrer Verzeichnisgruppen ist zugewiesen). Die Entscheidung folgt derselben Regel wie die Prüfung bei der Anmeldung. |

```json
{
  "membership": {
    "id": "mem_01j9xn5p9s0t4v6w8x0y2z4a6c",
    "organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
    "user_id": "usr_01j9xh2k6p7q1r3s5t7v9w1x3y",
    "status": "suspended",
    "source": "scim",
    "reason": "scim_deprovisioned",
    "roles": [],
    "expires_at": null,
    "created_at": "2026-10-12T09:31:00.123456Z",
    "activated_at": "2026-10-12T09:31:00.123456Z",
    "suspended_at": "2026-10-20T07:00:00Z",
    "removed_at": null,
    "updated_at": "2026-10-20T07:00:00Z",
    "version": 3
  },
  "policy": {
    "authentication_methods": null,
    "mfa": { "required_for": "all", "allowed_factors": ["totp", "webauthn"] },
    "phishing_resistant": null,
    "sso_enforcement": { "mode": "org_context", "bypass": false },
    "ip_allowlist": null
  },
  "invitation": null,
  "authenticators": { "mfa_enrolled": false, "classes": ["webauthn"] },
  "sign_in": {
    "locked": false,
    "locked_until": null,
    "last_sign_in_at": "2026-10-19T08:15:42Z",
    "last_sign_in_amr": ["fed"]
  },
  "groups": {
    "data": [{ "id": "dsg_01j9xp4r8s2t4v6w8x0y2z4a6b", "directory_id": "dir_01j9xm1n5p7q9r1s3t5v7w9x1y" }],
    "truncated": false
  },
  "applications": {
    "open_count": 2,
    "data": [
      {
        "application_id": "app_01j9xq6s0t2v4w6x8y0z2a4b6c",
        "name": "Finance portal",
        "access_mode": "assigned_only",
        "allowed": false,
        "reason": "application_not_assigned"
      }
    ],
    "truncated": false
  }
}
```

## Fehler

| HTTP | Code | Wann |
|---|---|---|
| 404 | `not_found` | Die Mitgliedschaft existiert in dieser Organisation nicht oder ist `removed`. |
| 401 | `unauthenticated` | Die Anmeldedaten fehlen, sind ungültig oder widerrufen. |
| 403 | `insufficient_permissions` | Den Anmeldedaten fehlt `organizations:read` oder `users:read`. |
| 429 | `rate_limited` | Das Ratenlimit wurde überschritten; nach Ablauf des Zeitraums `Retry-After` erneut versuchen. |
| 503 | `service_unavailable` | Ein Dienst ist vorübergehend nicht verfügbar; nach Ablauf des Zeitraums `Retry-After` erneut versuchen. |

## Beispiel

```bash
curl -i "https://api.eu.keenauth.com/v1/organizations/org_01j9xk3m7q8r2s4t6v8w0y2z4a/memberships/mem_01j9xn5p9s0t4v6w8x0y2z4a6c/diagnostics" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

## Personenbezogene Daten

Dieser Endpunkt verarbeitet personenbezogene Daten: Organisationsmitgliedschaften und Einladungen sowie Anmeldedaten. [Personenbezogene Daten in den KeenAuth-APIs](/docs/policies/personal-data) beschreibt, was gespeichert wird, wie lange es aufbewahrt wird und wie es gelöscht wird. Geben Sie in keinem Feld besondere Kategorien personenbezogener Daten (Gesundheit, biometrische Daten, Religion, politische Meinungen, sexuelle Orientierung) an.
