
# Audit-Export abrufen

`GET /v1/audit-exports/{export_id}` · Berechtigung `audit-exports:read`

Gibt einen Exportauftrag und seinen Status zurück: `queued`, `running`, `completed`, `failed` oder `expired`.

## Anfrage

| Parameter | In | Erforderlich | Beschreibung |
|---|---|---|---|
| `export_id` | path | ja | Export-Auftrags-ID, mit `aex_` beginnend. |

## Antwort

`200 OK` und der Auftrag. Leere Felder sind `null`.

- `record_count`, `file` und `manifest_sha256` werden nur für Aufträge mit Status `completed` und `expired` befüllt. `file` beschreibt `records.ndjson.gz` im Paket (`sha256` ist hexadezimal).
- `failure_reason` wird nur für Aufträge mit Status `failed` befüllt: `too_many_records`, `checkpoint_unavailable`, `integrity_error` oder `attempts_exhausted`.
- Die Datei wird zu `expires_at` gelöscht (`completed_at` plus 7 Tage). Der Auftrag zeigt dann `expired` an und kann nicht mehr heruntergeladen werden.

```json
{
  "id": "aex_01j9xk3m7q8r2s4t6v8w0y2z4e",
  "status": "completed",
  "filter": {
    "stream": "admin",
    "from": "2026-07-01T00:00:00Z",
    "to": "2026-10-01T00:00:00Z",
    "action": "user.",
    "category": null,
    "actor_type": null,
    "actor_id": null,
    "target_type": null,
    "target_id": null,
    "org_id": null,
    "outcome": null,
    "request_id": null,
    "correlation_id": null,
    "agent_only": false
  },
  "include_ip": false,
  "record_count": 18240,
  "file": {
    "name": "records.ndjson.gz",
    "sha256": "9f2c4b8e1d7a3f6c0b5e8d2a4c7f1e3b6a9d0c2e5f8b1a4d7c0e3f6a9b2c5d8e",
    "size": 2381904
  },
  "manifest_sha256": "3b7e1f9c2d5a8e0b4f6c1a3d7e9b2f5c8a0d4e6b1c3f7a9e2d5b8c0f4a6e1d3b",
  "failure_reason": null,
  "created_at": "2026-10-19T09:00:00Z",
  "started_at": "2026-10-19T09:00:02Z",
  "completed_at": "2026-10-19T09:01:10Z",
  "expires_at": "2026-10-26T09:01:10Z",
  "recorded_before": "2026-10-19T09:00:00Z",
  "requested_by": {"type": "api_key", "id": "key_01j9xk3m7q8r2s4t6v8w0y2z4d"}
}
```

## Fehler

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

| HTTP | `code` | Wann |
|---|---|---|
| 401 | `unauthenticated` | Der API-Schlüssel fehlt, ist ungültig oder wurde widerrufen. |
| 403 | `insufficient_permissions` | Dem Schlüssel fehlt `audit-exports:read`. |
| 404 | `not_found` | Der Auftrag existiert nicht, gehört zu einer anderen Umgebung oder die ID ist fehlerhaft. |
| 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/audit-exports/aex_01j9xk3m7q8r2s4t6v8w0y2z4e \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

```bash
keenauth audit-exports get aex_01j9xk3m7q8r2s4t6v8w0y2z4e
```

## Personenbezogene Daten

Dieser Endpunkt enthält personenbezogene Daten: Audit-Ereignisse. [Personenbezogene Daten in den KeenAuth-APIs](/docs/policies/personal-data) beschreibt, welche Daten gespeichert werden, wie lange sie aufbewahrt werden und wie sie gelöscht werden. Senden Sie in keinem Feld besondere Kategorien personenbezogener Daten (Gesundheit, biometrische Daten, Religion, politische Meinungen, sexuelle Orientierung).
