---
title: "Get OJK export status"
method: GET
path: "/api/v1/ojk/audit/export/{id}"
tags: ["OJK Compliance"]
---

# Get OJK export status

`GET /api/v1/ojk/audit/export/{id}`

## Request

- Base URL: `https://orchestrator.getaxonflow.com`
- URL: `https://orchestrator.getaxonflow.com/api/v1/ojk/audit/export/{id}`
- Auth: none declared
- TypeScript: <https://skmtc.dev/getaxonflow/apis/axonflow-orchestrator-api/docs/api/v1/ojk/audit/export/:id/get.ts> (a function with typed inputs; its response is checked against the schema)

Get the status of an OJK audit export by id.

**Enterprise Feature**.

## Path parameters

- `id` string, required

## Headers

- `X-Tenant-ID` string
- `X-Org-ID` string

## Response `200`

Export status. ⚠️ Current implementation is a **synchronous-echo
stub**: `GetExportStatus` performs no lookup and returns
`status: completed` for ANY id (with an empty `format` and a
fresh `created_at`) — it cannot distinguish a real export from a
fabricated id (`ojk_audit_export_service.go` GetExportStatus).
Exports run synchronously, so callers get the data inline from
the POST and normally never need this endpoint.

- OJKAuditExportResponse
  - `export_id` string
  - `status` string: Always `completed` (the export runs synchronously)
  - `framework` 'OJK_AI_GOVERNANCE' | 'UU_PDP' | 'BI_PJP' | 'OJK_BI_COMBINED'
  - `format` 'json': The format this response BODY is in, NOT the one that was requested. Always `json`: this endpoint writes `Content-Type: application/json` with the data inline, and no renderer for csv or xml exists on it. Rendered output is the compliance-report facade's job.
  - `requested_format` 'csv' | 'xml': Present ONLY when the caller asked for a format this endpoint does not produce. Its presence is the signal that the body is not what was requested. Absent on a json request.
  - `format_note` string: Prose explanation of the discrepancy, present exactly when `requested_format` is. Exists so a human reading the artifact does not have to infer it from two fields disagreeing.
  - `summary` object
    - `total_records` integer
    - `records_by_type` object
    - `date_range` object
      - `start` string, date-time
      - `end` string, date-time
    - `compliance_score` number, double
  - `data` object: Inline export payload; each key is present only when its data type was requested and rows exist
    - `policy_violations` object[]
      - `id` string
      - `timestamp` string, date-time
      - `policy_id` string
      - `policy_name` string
      - `severity` string
      - `action` string
      - `description` string
      - `tenant_id` string
    - `llm_calls` object[]
      - `id` string
      - `timestamp` string, date-time
      - `model_id` string
      - `provider` string
      - `input_tokens` integer
      - `output_tokens` integer
      - `cost` number, double
      - `latency_ms` integer
      - `policy_decision` string
    - `decision_chains` object[]
      - `id` string
      - `timestamp` string, date-time
      - `decision_id` string
      - `risk_level` string
      - `model_id` string
      - `requires_review` boolean
    - `hitl_records` object[]: Declared on the wire type but NEVER populated — the export service has no hitl_oversight query implementation (field is omitempty, so it is absent from real responses).
      - `id` string
      - `timestamp` string, date-time
      - `trigger_reason` string
      - `reviewer_id` string
      - `decision` string
      - `review_time_ms` integer
    - `pii_redactions` object[]: Declared on the wire type but NEVER populated — the export service has no pii_redactions query implementation (field is omitempty, so it is absent from real responses).
      - `id` string
      - `timestamp` string, date-time
      - `pii_type` string
      - `redaction_method` string
      - `confidence` number, double
    - `cross_border_transfers` object[]
      - `id` string
      - `timestamp` string, date-time
      - `data_residency` string
      - `transfer_basis` 'adequacy' | 'safeguards' | 'pasal_56b_dpa' | 'consent'
      - `destination_country` string
      - `data_categories` string[]
      - `approval_status` string
    - `breach_notifications` object[]
      - `id` string
      - `incident_timestamp` string, date-time
      - `discovery_time` string, date-time
      - `notification_deadline` string, date-time
      - `data_subjects_affected` integer
      - `data_types_involved` string[]
      - `notified_authority` string
      - `status` string: Effective status after deadline evaluation
      - `stored_status` string
      - `submitted_at` string, date-time
      - `acknowledged_at` string, date-time
      - `within_deadline` boolean
      - `created_at` string, date-time
  - `download_url` string: Omitted for inline exports
  - `created_at` string, date-time
  - `expires_at` string, date-time
  - `metadata` object
    - `export_version` string
    - `generated_by` string
    - `tenant_id` string
    - `checksum` string: SHA-256 hex of the export data

## Other responses

- `400`: Missing tenant headers (`missing_tenant`) or missing export id (`missing_export_id`)
- `404`: Nominally "export not found" (code `not_found`) — in the current stub this only fires on an internal error (e.g. database handle unavailable), never for an unknown id.

---

[API](https://skmtc.dev/getaxonflow/apis/axonflow-orchestrator-api.md) - [All operations](https://skmtc.dev/getaxonflow/apis/axonflow-orchestrator-api/llms.txt) - [OpenAPI document](https://skmtc.dev/getaxonflow/apis/axonflow-orchestrator-api/revisions/f408ef3ec9dd?raw)
