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).