
# Zustimmungen eines Benutzers auflisten

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

Listet die OAuth-Zustimmungen auf, die der Benutzer Anwendungen erteilt hat, neueste zuerst. Es werden nur aktive Zustimmungen zurückgegeben: Eine Zustimmung, die widerrufen wurde oder durch eine neuere Zustimmung derselben Anwendung ersetzt wurde, wird nicht aufgelistet. Die Liste wird nur vorwärts paginiert und liefert keine Gesamtanzahl. Die Antwort enthält nicht den Text des Zustimmungsdialogs, den der Benutzer gesehen hat.

## Anfrage

| Parameter | In | Erforderlich | Beschreibung |
|---|---|---|---|
| `user_id` | path | ja | Benutzer-ID mit Präfix `usr_`. |
| `limit` | query | nein | Einträge pro Seite, 1–100 (Standard 20). |
| `after` | query | nein | Cursor aus `list_metadata.after` der vorherigen Seite desselben Benutzers. |

`before` und `order=asc` werden nicht unterstützt und liefern `422`.

## Antwort

`200 OK`. Leere Felder sind `null`.

```json
{
  "data": [
    {
      "id": "cns_01jb2k8m5c3f6t9w2y4b7d0g3k",
      "user_id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "application_id": "app_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "api_id": "api_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "org_id": null,
      "scopes": ["openid", "profile", "orders:read"],
      "authorization_details_types": [],
      "granted_at": "2026-10-20T09:00:00Z",
      "consent_screen_version": "3",
      "locale": "en",
      "prompt_reason": "scope_expansion"
    }
  ],
  "list_metadata": {"before": null, "after": null}
}
```

| Feld | Beschreibung |
|---|---|
| `id` | Zustimmungs-ID mit Präfix `cns_`. |
| `application_id` | Die Anwendung, der die Zustimmung erteilt wurde. |
| `api_id` | Die API, an die die Zustimmung gebunden ist, falls vorhanden. |
| `org_id` | Der Organisationskontext, in dem die Zustimmung erteilt wurde, falls vorhanden. |
| `scopes` | Die erteilten Scopes, sortiert und eindeutig. |
| `authorization_details_types` | Erteilte Typen für Rich Authorization Requests; leer, wenn keine vorhanden sind. |
| `consent_screen_version`, `locale` | Version und Sprache des Zustimmungsdialogs, den der Benutzer akzeptiert hat. |
| `prompt_reason` | Grund, warum eine Zustimmung angefragt wurde: `first`, `scope_expansion`, `prompt_consent` oder `skip_consent` (Erstanbieter-Anwendung ohne Zustimmungsdialog). |

## Fehler

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

| HTTP | `code` | Wann |
|---|---|---|
| 400 | `invalid_cursor` | Der Cursor ist fehlerhaft oder gehört zu einer anderen Liste. |
| 422 | `validation_failed` | `limit` liegt außerhalb des gültigen Bereichs, oder `before` bzw. eine aufsteigende `order` wurde gesendet. |
| 404 | `not_found` | Der Benutzer existiert in dieser Umgebung nicht (oder die ID ist fehlerhaft). |
| 401 | `unauthenticated` | Der API-Schlüssel fehlt, ist ungültig oder wurde widerrufen. |
| 403 | `insufficient_permissions` | Der Schlüssel hat nicht die Berechtigung `users:read`. |
| 429 | `rate_limited` | Das Ratenlimit wurde überschritten; beachten Sie `Retry-After`. |
| 503 | `service_unavailable` | Eine Abhängigkeit ist vorübergehend nicht verfügbar; versuchen Sie es später erneut. |

## Beispiel

```bash
curl "https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/consents?limit=50" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

CLI: `keenauth users consents list usr_0a1b2c3d4e5f6g7h8j9k0m1n2p --limit 50`

## Personenbezogene Daten

Dieser Endpunkt verarbeitet personenbezogene Daten: Zustimmungsdatensätze. [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. Übermitteln Sie keine besonderen Kategorien personenbezogener Daten (Gesundheit, biometrische Daten, Religion, politische Meinungen, sexuelle Orientierung) in irgendeinem Feld.
