
# Denetim dışa aktarımını indirme

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

Tamamlanmış bir dışa aktarma işinin paketine götüren tek kullanımlık bir bağlantı verir. API anahtarları (gizli veya kısıtlı) ve kontrol paneli kullanıcıları indirebilir; kontrol panelinden indirme için yakın zamanda yapılmış bir oturum açma gerekir (adım yükseltme, en fazla 5 dakika önce). Her çağrı, bağlantı verilmeden önce `admin` akışına bir `audit_export.downloaded` kaydı yazar.

## İstek

| Parametre | Konum | Zorunlu | Açıklama |
|---|---|---|---|
| `export_id` | yol | evet | Dışa aktarma işinin kimliği; `aex_` öneki ile birlikte. |

`include_ip: true` ile oluşturulan bir iş, indirme anahtarında ayrıca `audit-events:read_ip` gerektirir.

## Yanıt

Yanıt, `Accept` üst bilgisine bağlıdır. Her iki biçim de `Cache-Control: no-store`, `Referrer-Policy: no-referrer` ve `Vary: Accept` taşır ve ikisi de aynı `audit_export.downloaded` kaydını yazar.

- **`Accept`, `application/json` listesini içerir** (açıkça, sıfır olmayan `q` ile; `*/*` sayılmaz): JSON gövdesi ile `200 OK`. Bu biçimi bir tarayıcıdan veya kökenler arası yönlendirmeyi okuyamayan her istemciden kullanın: `url` değerini okuyun, ardından açın.

  | Alan | Tür | Açıklama |
  |---|---|---|
  | `url` | string | Aynı sunucudaki göreli bağlantı, `/downloads/audit-exports/{environment_id}/{export_id}/{token}`. |
  | `expires_at` | string (date-time) | Bağlantının çalışmayı bıraktığı zaman (verildikten 15 dakika sonra). |

- **Diğer tüm `Accept` değerleri**: boş gövdeyle `302 Found`. `Location` aynı göreli bağlantıdır.

- Bağlantı 15 dakika geçerlidir ve yalnızca bir kez çalışır: belirteç, aktarım kesilse bile ilk istekte harcanır. Yeni bir bağlantı için bu işlemi yeniden çağırın.
- Bağlantı için kimlik bilgisi gerekmez; belirteç tek kimlik bilgisidir. `Location` (veya `url`) değerini gizli tutun ve günlüğe kaydetmeyin.
- Dosya, ortamın anahtarıyla depolanırken şifrelenir; bu nedenle depolama için önceden imzalanmış bir URL kullanılmaz; KeenAuth dosyayı çözer ve akıtır.

Bağlantıyı izlemek, `Content-Type: application/x-tar`, `Content-Length` ve `Content-Disposition: attachment; filename="audit-export-aex_….tar"` ile `200 OK` döndürür. Tar paketi şunları içerir:

| Dosya | İçerik |
|---|---|
| `records.ndjson.gz` | Her kapsanan saatin her zincir kaydı, sıra numarasına göre, satır başına bir JSON nesnesi: eşleşen kayıtlar tamamen, diğerleri içeriksiz yer tutucular olarak (`"omitted": true`), böylece onları açığa çıkarmadan karma zinciri yeniden oluşturulabilir. |
| `manifest.json` | Filtre, sayılar, dosya karması ve kapsanan saat başına imzalı denetim noktası ile içerme kanıtı; kanonik JSON (RFC 8785). |
| `manifest.jws` | `manifest.json` üzerinde ES256 imzası; `audit-jwks.json` içindeki ortak anahtarlarla doğrulayın. |

`Content-Length` bayt gelmeden bağlantı sona ererse paket eksiktir; onu silin ve yeni bir bağlantı isteyin. Geçersiz, kullanılmış veya süresi dolmuş bir bağlantı `404 not_found` döndürür.

## Hatalar

Her hata, kararlı bir `code` içeren bir `application/problem+json` gövdesidir.

| HTTP | `code` | Ne zaman |
|---|---|---|
| 401 | `unauthenticated` | API anahtarı eksik, geçersiz veya iptal edilmiş. |
| 403 | `insufficient_permissions` | Anahtarda `audit-exports:read` yok; iş `include_ip` ile oluşturulmuş ve anahtarda `audit-events:read_ip` yok (`required_permissions` ikisini de listeler); ya da çağıran ne bir API anahtarı ne de bir kontrol paneli kullanıcısı. |
| 404 | `not_found` | İş yok, başka bir ortama ait veya kimlik biçimi hatalı. Bağlantıda: belirteç geçersiz, kullanılmış veya süresi dolmuş. |
| 409 | `conflict` | İş henüz tamamlanmadı veya dosyasının süresi doldu. |
| 429 | `rate_limited` | Hız sınırı aşıldı; `Retry-After` üst bilgisine uyun. |
| 503 | `service_unavailable` | Bir bağımlılık geçici olarak kullanılamıyor; daha sonra yeniden deneyin. |

## Örnek

```bash
curl -L -o audit-export.tar \
  https://api.eu.keenauth.com/v1/audit-exports/aex_01j9xk3m7q8r2s4t6v8w0y2z4e/download \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

`Accept: application/json` ile bağlantı, yönlendirme yerine JSON olarak döner:

```bash
curl https://api.eu.keenauth.com/v1/audit-exports/aex_01j9xk3m7q8r2s4t6v8w0y2z4e/download \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Accept: application/json"
```

SDK'lar JSON biçimini kullanır ve `url` ile `expires_at` döndürür. CLI bağlantıyı kendisi okur, paketi bir dosyaya yazar (asla standart çıktıya değil), mevcut bir dosyanın üzerine yazmayı reddeder ve yazdığının boyutunu ve SHA-256 değerini yazdırır:

```bash
keenauth audit-exports download aex_01j9xk3m7q8r2s4t6v8w0y2z4e --file audit-export.tar
```

## Kişisel veriler

Bu uç nokta kişisel veri taşır: denetim olayları. [KeenAuth API'lerinde kişisel veriler](/docs/policies/personal-data), neyin saklandığını, ne kadar süre tutulduğunu ve nasıl silindiğini açıklar. Hiçbir alanda özel nitelikli kişisel verileri (sağlık, biyometrik veriler, din, siyasi görüşler, cinsel yönelim) göndermeyin.
