Audit-Ereignisse auflisten
GET /v1/audit-events · Berechtigung audit-events:read
Listet die Audit-Datensätze der Umgebung mit Cursor-Paginierung auf, neueste zuerst. Der Stream admin enthält Änderungen, die über die Management-API, das Dashboard und die Plattform vorgenommen wurden; der Stream application enthält Ereignisse, die Ihre Anwendung geschrieben hat. Jeder Datensatz ist Teil einer Hash-Kette pro Umgebung und Stream, sodass sich die Historie mit einem Export (POST /v1/audit-exports) unabhängig überprüfen lässt.
Die Umgebung ergibt sich immer aus dem API-Schlüssel; es gibt keinen Umgebungsparameter.
Anfrage
| Parameter | In | Erforderlich | Beschreibung |
|---|---|---|---|
limit |
query | nein | Seitengröße, 1 bis 100. Standardwert 20. |
after |
query | nein | Undurchsichtiger Cursor aus list_metadata.after (ältere Datensätze). Schließt before aus. |
before |
query | nein | Undurchsichtiger Cursor aus list_metadata.before (neuere Datensätze). Schließt after aus. |
stream |
query | nein | admin (Standard) oder application. |
from |
query | nein | RFC-3339-Zeitpunkt; Datensätze ab diesem Zeitpunkt. Standardwert ist der spätere der beiden Werte: Beginn des Aufbewahrungszeitraums oder to minus 92 Tage. |
to |
query | nein | RFC-3339-Zeitpunkt; Datensätze vor diesem Zeitpunkt. Standardwert ist jetzt. Der Bereich von from bis to beträgt höchstens 92 Tage. |
action |
query | nein | Aktionspräfix, z. B. user. oder connection.updated. |
category |
query | nein | authentication, session, token, administration, provisioning, federation, authorization, data_access, security, key_management, configuration oder application. |
actor_type |
query | nein | Akteurtyp, z. B. api_key, dashboard_user, m2m_client, agent oder system. |
actor_id |
query | nein | Exakte Akteur-ID, wie erfasst (key_…, usr_…, system:<service>). |
target_type |
query | nein | Zieltyp, z. B. user, organization oder audit_export. |
target_id |
query | nein | Exakte Ziel-ID. Zusammen mit target_type müssen beide zum selben Ziel passen. |
org_id |
query | nein | Datensätze zu einer Organisation (org_…). |
outcome |
query | nein | success, failure, denied oder error. |
request_id |
query | nein | Idp-Request-Id einer Anfrage (UUID). |
correlation_id |
query | nein | Idp-Correlation-Id eines Workflows (UUID). |
agent_only |
query | nein | true gibt nur Agent-Aktionen zurück: actor_type agent oder ein nicht leeres act_chain. |
client |
query | nein | Art des Clients, der den Aufruf ausgeführt hat: mcp (der MCP-Server der Verwaltung, metadata.client = mcp/<version>) oder cli (die KeenAuth-CLI, cli/<version>). Der Client gibt diesen Wert selbst an; er ist kein Nachweis dafür, wer gehandelt hat – das ist der Akteur des Datensatzes. Nur für Listen: ein Export hat keinen client-Filter. |
Datensätze werden immer nach occurred_at (dann id) 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 und der Umgebung gültig, für die er ausgestellt wurde. Es wird keine Gesamtanzahl zurückgegeben.
Dauert eine Suche länger als 10 Sekunden, wird sie mit 422 search_too_broad abgebrochen: Grenzen Sie die Filter oder den Zeitraum ein oder verwenden Sie für große Zeiträume einen Export.
Antwort
200 OK. data enthält die Datensätze der Seite; list_metadata.after verweist auf ältere Datensätze und list_metadata.before auf neuere (null, wenn keine vorhanden sind). Leere Felder sind null.
ip und user_agent sind nur enthalten, wenn der Schlüssel die Berechtigung audit-events:read_ip besitzt, und werden nur für Datensätze ausgefüllt, die jünger als 13 Monate sind. Ohne diese Berechtigung werden die Felder vollständig weggelassen (kein maskierter Wert). ip_prefix, ip_country, ip_asn und user_agent_family werden immer zurückgegeben. prev_hash, org_prev_hash und record_hash sind SHA-256-Werte in base64url ohne Padding.
{
"data": [
{
"id": "evt_01j9xk3m7q8r2s4t6v8w0y2z4a",
"stream": "admin",
"seq": 4182,
"schema_version": 1,
"action": "user.blocked",
"category": "administration",
"outcome": "success",
"reason_code": null,
"occurred_at": "2026-10-01T08:15:42.120Z",
"received_at": "2026-10-01T08:15:42.131Z",
"recorded_at": "2026-10-01T08:15:42.140Z",
"clock_anomaly": false,
"actor_type": "api_key",
"actor_id": "key_01j9xk3m7q8r2s4t6v8w0y2z4d",
"act_chain": null,
"session_id": null,
"auth_context": null,
"elevation_ref": null,
"org_id": null,
"targets": [
{"type": "user", "id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p", "org_id": null, "name": null}
],
"application_id": null,
"ip_prefix": "203.0.113.0/24",
"ip_country": "DE",
"ip_asn": 64500,
"user_agent_family": "keenauth-go",
"request_id": "0192a6c1-7d3e-7a10-9b2c-3d4e5f607182",
"correlation_id": null,
"trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"producer_service": "directory",
"policy_ref": "perm:users:write",
"changes": {"status": {"old": "active", "new": "blocked"}},
"metadata": null,
"prev_hash": "n4bQgYhMfWWaL-qgxVrQFaO_TxsrC4Is0V1sFbDwCgg",
"org_prev_hash": null,
"record_hash": "LCa0a2j_xo_5m0U8HTBBNBNCLXBkg7-g-YpeiGJm564"
}
],
"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 Audit-Dienst hat einen Filter abgelehnt, z. B. einen Bereich von mehr als 92 Tagen. |
| 400 | range_outside_retention |
from oder to liegt außerhalb des Audit-Aufbewahrungszeitraums Ihres Tarifs. |
| 422 | validation_failed |
Ein Abfrageparameter ist ungültig (limit außerhalb des Bereichs, fehlerhafter Zeitstempel, to nicht nach from, unbekannter stream, category oder outcome, fehlerhafte ID, wiederholter Parameter, order ungleich desc). |
| 422 | search_too_broad |
Die Suche hat länger als 10 Sekunden gedauert; grenzen Sie sie ein. |
| 401 | unauthenticated |
Der API-Schlüssel fehlt, ist ungültig oder wurde widerrufen. |
| 403 | insufficient_permissions |
Dem Schlüssel fehlt audit-events:read. |
| 429 | rate_limited |
Das Rate-Limit 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/audit-events?action=user.&from=2026-10-01T00:00:00Z" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
keenauth audit-events list --action user. --from 2026-10-01T00:00:00Z
Personenbezogene Daten
Dieser Endpunkt verarbeitet personenbezogene Daten: Audit-Ereignisse. Personenbezogene Daten in den KeenAuth-APIs beschreibt, welche Daten gespeichert werden, wie lange sie aufbewahrt werden und wie sie gelöscht werden. Übermitteln Sie in keinem Feld besondere Kategorien personenbezogener Daten (Gesundheit, biometrische Daten, Religion, politische Meinungen, sexuelle Orientierung).