
# Obtener una exportación de auditoría

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

Devuelve un trabajo de exportación y su estado: `queued`, `running`, `completed`, `failed` o `expired`.

## Solicitud

| Parámetro | En | Obligatorio | Descripción |
|---|---|---|---|
| `export_id` | path | sí | Identificador del trabajo de exportación, con el prefijo `aex_`. |

## Respuesta

`200 OK` y el trabajo. Los campos vacíos son `null`.

- `record_count`, `file` y `manifest_sha256` solo se rellenan en trabajos `completed` y `expired`. `file` describe `records.ndjson.gz` dentro del paquete (`sha256` es hexadecimal).
- `failure_reason` solo se rellena en trabajos `failed`: `too_many_records`, `checkpoint_unavailable`, `integrity_error` o `attempts_exhausted`.
- El archivo se elimina en `expires_at` (`completed_at` más 7 días); el trabajo pasa entonces a `expired` y ya no se puede descargar.

```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"}
}
```

## Errores

Todo error es un cuerpo `application/problem+json` con un `code` estable.

| HTTP | `code` | Cuándo |
|---|---|---|
| 401 | `unauthenticated` | Falta la clave de API, no es válida o ha sido revocada. |
| 403 | `insufficient_permissions` | La clave no tiene `audit-exports:read`. |
| 404 | `not_found` | El trabajo no existe, pertenece a otro entorno o el identificador tiene un formato incorrecto. |
| 429 | `rate_limited` | Se superó el límite de frecuencia; respete `Retry-After`. |
| 503 | `service_unavailable` | Una dependencia no está disponible temporalmente; reintente más tarde. |

## Ejemplo

```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
```

## Datos personales

Este endpoint contiene datos personales: eventos de auditoría. [Datos personales en las API de KeenAuth](/docs/policies/personal-data) describe qué se almacena, cuánto tiempo se conserva y cómo se elimina. No envíe categorías especiales de datos personales (salud, datos biométricos, religión, opiniones políticas, orientación sexual) en ningún campo.
