
# Benutzerdaten-Export herunterladen

`GET /v1/jobs/user-exports/{job_id}/download` · Berechtigung `users:export`

Liefert einen einmalig verwendbaren Link zum Paket eines abgeschlossenen [Benutzerdaten-Exports](/docs/api/management/users/export). Jeder Aufruf schreibt einen Eintrag `user_export.downloaded` in das Verwaltungs-Audit-Log, bevor der Link ausgegeben wird.

## Anfrage

| Parameter | In | Pflichtfeld | Beschreibung |
|---|---|---|---|
| `job_id` | path | ja | Job-ID, mit dem Präfix `job_`. |

Ein Job, der mit `include_ip: true` erstellt wurde, erfordert zusätzlich die Berechtigung `audit-events:read_ip` für die Anmeldedaten, mit denen heruntergeladen wird.

## Antwort

`302 Found` mit leerem Body. `Location` ist ein relativer Link auf demselben Host, `/downloads/user-exports/{environment_id}/{job_id}/{token}`. Die Antwort enthält `Cache-Control: no-store` und `Referrer-Policy: no-referrer`.

- Der Link ist 15 Minuten gültig und funktioniert nur einmal: Das Token wird bei der ersten Anfrage verbraucht, auch wenn die Übertragung unterbrochen wird. Rufen Sie diese Operation erneut auf, um einen neuen Link zu erhalten.
- Der Link benötigt keine Anmeldedaten; das Token ist die einzige Berechtigung. Behandeln Sie `Location` vertraulich und protokollieren Sie den Wert nicht.
- Die Datei ist im Ruhezustand mit dem Schlüssel der Umgebung verschlüsselt. Deshalb wird keine signierte URL des Speichers verwendet; KeenAuth entschlüsselt die Datei und streamt sie.

Wenn Sie dem Link mit `GET` folgen, antwortet der Server mit `200 OK`, `Content-Type: application/zip`, `Content-Length` und `Content-Disposition: attachment; filename="user-export-job_….zip"`. `HEAD` wird mit `405` abgelehnt, damit Linkvorschauen das Token nicht verbrauchen. Vergleichen Sie den SHA-256-Wert der Datei mit `file.sha256` des Jobs. Wenn die Verbindung endet, bevor `Content-Length` Bytes übertragen wurden, ist das Paket unvollständig; verwerfen Sie es und fordern Sie einen neuen Link an. Ein ungültiger, bereits verwendeter oder abgelaufener Link liefert `404 not_found`.

## 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 widerrufen. |
| 403 | `insufficient_permissions` | Dem Schlüssel fehlt `users:export`, oder der Job wurde mit `include_ip` erstellt und dem Schlüssel fehlt `audit-events:read_ip` (`required_permissions` listet beide auf). |
| 404 | `not_found` | Der Job existiert nicht, gehört zu einer anderen Umgebung oder die ID ist fehlerhaft. Beim Link: Das Token ist ungültig, bereits verwendet oder abgelaufen. |
| 409 | `conflict` | Der Job ist noch nicht abgeschlossen oder seine Datei ist abgelaufen. |
| 429 | `rate_limited` | Das Ratenlimit wurde überschritten; beachten Sie `Retry-After`. Der Link selbst erlaubt 10 Anfragen pro Minute und IP-Adresse. |
| 503 | `service_unavailable` | Eine Abhängigkeit ist vorübergehend nicht verfügbar; wiederholen Sie die Anfrage später. |

## Beispiel

```bash
curl -L -o user-export.zip \
  https://api.eu.keenauth.com/v1/jobs/user-exports/job_01j9xk3m7q8r2s4t6v8w0y2z4e/download \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

Die CLI folgt dem Link selbst, schreibt das Paket in eine Datei (niemals auf die Standardausgabe), überschreibt keine vorhandene Datei und gibt Größe und SHA-256-Wert des geschriebenen Inhalts aus:

```bash
keenauth jobs user-exports download job_01j9xk3m7q8r2s4t6v8w0y2z4e --file user-export.zip
```

## Personenbezogene Daten

Dieser Endpunkt verarbeitet personenbezogene Daten: Profil des Endbenutzers. [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 in keinem Feld besondere Kategorien personenbezogener Daten (Gesundheit, biometrische Daten, Religion, politische Meinungen, sexuelle Orientierung).
