Logs eines Benutzers auflisten
GET /v1/users/{user_id}/logs · Berechtigung logs:read
Listet die Log-Einträge eines Benutzers mit Cursor-Paginierung auf, neueste zuerst. Dies sind die Daten hinter der Aktivitätsansicht des Benutzers im Dashboard. Es gelten dieselben Regeln wie bei Logs auflisten, allerdings werden nur die Filter from, to, type und org_id akzeptiert; andere Filter werden ignoriert.
Organisationsumfang
Übergeben Sie org_id, um eine Diagnoseansicht der Mitglieder für einen Organisationsadministrator zu erstellen. Der Schlüssel benötigt dann zusätzlich die Berechtigung organizations:read. 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 bei einem unbekannten Benutzer. Ist der Benutzer Mitglied, werden nur Einträge zurückgegeben, die im Kontext dieser Organisation entstanden sind, also Einträge, deren org_id diese Organisation ist. Anmeldungen des Benutzers außerhalb der Organisation oder im Kontext einer anderen Organisation werden nie zurückgegeben. Ohne org_id umfasst die Ansicht alle Einträge des Benutzers in der Umgebung.
Anfrage
| Parameter | In | Pflicht | Beschreibung |
|---|---|---|---|
user_id |
Pfad | ja | Benutzer-ID mit dem Präfix usr_. |
limit |
Query | nein | Seitengröße, 1 bis 100. Standardwert 20. |
after |
Query | nein | Undurchsichtiger Cursor aus list_metadata.after (ältere Einträge). Schließt before aus. |
before |
Query | nein | Undurchsichtiger Cursor aus list_metadata.before (neuere Einträge). Schließt after aus. |
from |
Query | nein | RFC-3339-Zeitpunkt; Einträge ab diesem Zeitpunkt. Muss innerhalb des Aufbewahrungszeitraums liegen. |
to |
Query | nein | RFC-3339-Zeitpunkt; Einträge vor diesem Zeitpunkt. Muss später als from sein. |
type |
Query | nein | Präfix des Log-Typs, etwa authentication. oder session.created. Wiederholen Sie den Parameter für bis zu 20 Werte; ein Eintrag, der einem davon entspricht, wird zurückgegeben. |
org_id |
Query | nein | Organisations-ID mit dem Präfix org_. Beschränkt die Ansicht auf Einträge dieser Organisation; siehe Organisationsumfang. Benötigt organizations:read. |
Einträge werden immer nach occurred_at sortiert, neueste zuerst; es gibt keinen Parameter order (order=desc wird akzeptiert, jeder andere Wert schlägt mit validation_failed fehl). Ein Cursor ist nur mit den Filtern gültig, für die er ausgestellt wurde.
Antwort
200 OK. data enthält die Einträge der Seite; list_metadata.after verweist auf ältere und list_metadata.before auf neuere Einträge (null, wenn es keine gibt). Eine Gesamtanzahl wird nicht zurückgegeben. Leere Felder sind null.
ip, ip_asn, user_agent und user_agent_family sind nur vorhanden, wenn der Schlüssel die Berechtigung audit-events:read_ip besitzt, und identifier_hint nur, wenn er users:read_pii besitzt. Ohne die Berechtigung wird das Feld vollständig weggelassen (kein maskierter Wert). ip_country wird immer zurückgegeben.
{
"data": [
{
"id": "evt_01j9xk3m7q8r2s4t6v8w0y2z4a",
"occurred_at": "2026-10-01T08:15:42.120Z",
"type": "authentication.password.failed",
"outcome": "failure",
"reason_code": "invalid_credentials",
"user_id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
"org_id": null,
"application_id": "app_01j9xk3m7q8r2s4t6v8w0y2z4b",
"connection_id": "conn_01j9xk3m7q8r2s4t6v8w0y2z4c",
"directory_id": null,
"session_id": null,
"identifier_hint": "a***@e***.com",
"ip": "203.0.113.7",
"ip_country": "DE",
"ip_asn": 64500,
"user_agent": "Mozilla/5.0 (X11; Linux x86_64)",
"user_agent_family": "Firefox",
"risk": null,
"auth_context": null,
"act_chain": null,
"details": {"attempt": 3},
"request_id": "0192a6c1-7d3e-7a10-9b2c-3d4e5f607182",
"correlation_id": null,
"trace_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
],
"list_metadata": {
"before": null,
"after": "<opaque cursor>"
}
}
Fehler
Jeder Fehler ist ein application/problem+json-Body mit einem stabilen code.
| HTTP | code |
Wann |
|---|---|---|
| 400 | invalid_cursor |
Der Cursor ist fehlerhaft oder wurde nicht für diese Anfrage ausgestellt. |
| 400 | invalid_filter |
Der Log-Dienst hat einen Filter oder den Cursor abgelehnt. |
| 400 | range_outside_retention |
from liegt vor dem Aufbewahrungszeitraum Ihres Tarifs. |
| 422 | validation_failed |
Ein Query-Parameter ist ungültig (limit außerhalb des Bereichs, fehlerhafter Zeitstempel, to nicht nach from, mehr als 20 Werte für type, fehlerhafte org_id, wiederholter Parameter). |
| 401 | unauthenticated |
Der API-Schlüssel fehlt, ist ungültig oder wurde widerrufen. |
| 403 | insufficient_permissions |
Dem Schlüssel fehlt die Berechtigung logs:read, oder org_id ist gesetzt und dem Schlüssel fehlt organizations:read. required_permissions listet auf, was die Anfrage benötigt. |
| 404 | not_found |
Die Benutzer-ID ist fehlerhaft, oder org_id ist gesetzt und der Benutzer ist kein Mitglied dieser Organisation. |
| 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
curl "https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/logs?limit=50" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
Nur die Einträge einer Organisation:
keenauth users logs list usr_0a1b2c3d4e5f6g7h8j9k0m1n2p --org-id org_01j9xk3m7q8r2s4t6v8w0y2z4d --type authentication.
Personenbezogene Daten
Dieser Endpunkt enthält personenbezogene Daten: Umgebungslogs. Personenbezogene Daten in den KeenAuth-APIs beschreibt, was gespeichert wird, wie lange es aufbewahrt wird und wie es gelöscht wird. Senden Sie in keinem Feld besondere Kategorien personenbezogener Daten (Gesundheitsdaten, biometrische Daten, Religion, politische Meinungen, sexuelle Orientierung).