
# Denetim dışa aktarımı oluşturma

`POST /v1/audit-exports` · izin `audit-exports:write`

Eşleşen denetim kayıtlarını, KeenAuth'a güvenmeden doğrulayabileceğiniz imzalı bir pakete yazan bir iş kuyruğa alır. İş, `202 Accepted` yanıtıyla döner; ardından [Denetim dışa aktarımını alma](get.md) ile takip edin ve [Denetim dışa aktarımını indirme](download.md) ile dosyayı alın.

Dışa aktarım yalnızca API anahtarlarıyla (gizli veya kısıtlı) oluşturulabilir; iş, anahtarı `requested_by` olarak kaydeder. Ortam, anahtardan alınır.

## İstek

`Idempotency-Key` zorunludur (16 ila 64 karakter, `A-Z a-z 0-9 _ -`). Aynı anahtar ve aynı gövde, ilk işi `Idempotent-Replayed: true` ile döndürür; aynı anahtar farklı bir gövdeyle gönderilirse `422 idempotency_key_reuse` hatası döner. SDK'lar ve CLI bu üstbilgiyi sizin yerinize ayarlar.

Filtreler, [Denetim olaylarını listeleme](../audit-events/list.md) bölümündekiyle aynıdır; atlanan bir alan filtre uygulamaz. Farklılıklar:

| Alan | Tür | Açıklama |
|---|---|---|
| `stream` | string | `admin` (varsayılan) veya `application`. |
| `from` | RFC 3339 | Dahil alt sınır. Varsayılan olarak saklama süresi penceresinin başlangıcıdır. 92 günlük bir sınır yoktur; bir paket en fazla 50 milyon satır içerebilir (yer tutucular dahil). |
| `to` | RFC 3339 | Hariç üst sınır. Varsayılan olarak şimdi'dir; gelecekte olamaz. |
| `action`, `category`, `actor_type`, `actor_id`, `target_type`, `target_id`, `org_id`, `outcome`, `request_id`, `correlation_id`, `agent_only` | | Listedeki filtrelerle aynıdır. Listedeki `client` filtresi burada kullanılamaz; `client` alanı `400 unknown_field` hatası verir. |
| `include_ip` | boolean | 13 aydan yeni kayıtlara tam IP adresini ve kullanıcı aracısını ekler. Ayrıca `audit-events:read_ip` iznini gerektirir. Varsayılan `false`. |

```json
{
  "stream": "admin",
  "from": "2026-07-01T00:00:00Z",
  "to": "2026-10-01T00:00:00Z",
  "action": "user."
}
```

Ortam başına aynı anda en fazla 3 iş çalışır (geliştirme ve staging ortamlarında 1).

## Yanıt

`202 Accepted` ve `status` değeri `queued` olan iş. `filter`, uygulanan filtreyi; `from` ve `to` varsayılanları doldurulmuş hâliyle gösterir. `recorded_before`, anlık görüntünün üst sınırıdır: yalnızca bundan önce saklanmış kayıtlar pakete girer.

```json
{
  "id": "aex_01j9xk3m7q8r2s4t6v8w0y2z4e",
  "status": "queued",
  "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": null,
  "file": null,
  "manifest_sha256": null,
  "failure_reason": null,
  "created_at": "2026-10-19T09:00:00Z",
  "started_at": null,
  "completed_at": null,
  "expires_at": null,
  "recorded_before": "2026-10-19T09:00:00Z",
  "requested_by": {"type": "api_key", "id": "key_01j9xk3m7q8r2s4t6v8w0y2z4d"}
}
```

## Hatalar

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

| HTTP | `code` | Ne zaman |
|---|---|---|
| 400 | `malformed_request` | `Idempotency-Key` eksik veya hatalıysa ya da gövde geçerli JSON değilse. |
| 400 | `unknown_field` | Gövdede yukarıda listelenmeyen bir alan varsa. |
| 400 | `invalid_filter` | Denetim servisi filtreyi reddetmişse, örneğin `to` gelecekteyse. |
| 400 | `range_outside_retention` | `from` veya `to`, planınızın denetim saklama penceresinin dışındaysa. |
| 422 | `validation_failed` | Bir alan geçersizse (yanlış tür, hatalı zaman damgası, `to` değerinin `from` değerinden sonra olmaması, bilinmeyen enum değeri, hatalı kimlik, boş dize). |
| 422 | `idempotency_key_reuse` | `Idempotency-Key`, farklı bir gövdeyle kullanılmışsa. |
| 401 | `unauthenticated` | API anahtarı eksik, geçersiz veya iptal edilmişse. |
| 403 | `insufficient_permissions` | Anahtarda `audit-exports:write` izni yoksa, `include_ip` kullanılmış ancak `audit-events:read_ip` izni yoksa (`required_permissions` ikisini de listeler) veya çağıran bir API anahtarı değilse. |
| 429 | `rate_limited` | Bu ortamda çok fazla iş çalışıyorsa ya da hız sınırı aşılmışsa; `Retry-After` değerine uyun. |
| 503 | `service_unavailable` | Bir bağımlılık geçici olarak kullanılamıyorsa; daha sonra yeniden deneyin. |

## Örnek

```bash
curl https://api.eu.keenauth.com/v1/audit-exports \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"from": "2026-07-01T00:00:00Z", "to": "2026-10-01T00:00:00Z", "action": "user."}'
```

```bash
keenauth audit-exports create --from 2026-07-01T00:00:00Z --to 2026-10-01T00:00:00Z --action user.
```

## Kişisel veriler

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