OJK Compliance

Export OJK audit data

Export audit data for OJK/BI regulatory submission.

Compliance frameworks — the label SELECTS the report sections when data_types is omitted (#3242). It is not a cosmetic tag:

FrameworkSections, in report order
OJK_AI_GOVERNANCEpolicy_violations, llm_calls, decision_chain, hitl_oversight
UU_PDPpii_redactions, cross_border_transfers, breach_notifications, policy_violations
BI_PJPdecision_chain, hitl_oversight, pii_redactions, cross_border_transfers, breach_notifications
OJK_BI_COMBINED (default)all seven sections

Data types: policy_violations, llm_calls, decision_chain, hitl_oversight, pii_redactions, cross_border_transfers, breach_notifications, all. All seven are implemented. An explicitly requested section outside the selected framework's scope is still served, flagged in_framework_scope: false. An UNKNOWN data type produces an explicit per-section error — never a silent empty section.

Formats: format is accepted as json (default), csv or xml, but this endpoint PRODUCES ONLY JSON: the response is written with Content-Type: application/json and the data is inline. When csv or xml is requested the response reports format: json (what the body IS), echoes the ask in requested_format, and explains the difference in format_note. It does NOT label a JSON body as csv (#3242) - a regulator artifact that misstates its own encoding is worse than one that refuses. Rendered output is the compliance-report facade's job.

report_state is carried per section and rolled up on the summary: populated (served, has records), enabled_empty (served, honestly zero for this organization and window), not_available (could not be served at all — always paired with an error and an error_kind of section_not_implemented / store_absent / query_failed). Read report_state, not the presence of a JSON key: every data array is omitempty, so absence alone is ambiguous.

Sections are capped at 100,000 records; a section that reaches the cap says so in its note.

The date range may span at most 5 years, matching the OJK 5-year (1825-day) retention requirement. start_date and end_date are dates (YYYY-MM-DD) and the window is inclusive of the whole final day, in UTC at both ends — a request for 2026-08-03 covers 2026-08-03T00:00Z..T23:59Z, which is 07:00..07:00 WIB. The export runs synchronously and returns status: completed with the data inline.

metadata.export_version is 2.0.0 for this contract. A 1.0.0 consumer that inferred "module not enabled" from an empty body must move to report_state.

Enterprise Feature: Available only for Indonesian financial services deployments.

post/api/v1/ojk/audit/export

Request

Headers

X-Tenant-IDstring

Deprecated fallback. Every OJK route is scoped to the caller's ORGANIZATION via X-Org-ID (#3242); X-Tenant-ID is used only when X-Org-ID is absent, which covers single-identifier deployments where the two values are the same. When both are present the organization wins. A request carrying neither header, or a whitespace-only value, is rejected with 400 (code missing_org).

X-Org-IDstring

Organization identifier — the authoritative OJK scope. Set by the AxonFlow agent from the validated client credential on every proxied route, so a caller cannot choose it.

Request body

start_datestring date required

Window start (YYYY-MM-DD)

end_datestring date required

Window end (YYYY-MM-DD, not before start_date; range at most 5 years)

format'json' | 'csv' | 'xml'

All three values are ACCEPTED. This endpoint PRODUCES only JSON: a csv or xml request succeeds and returns the same JSON body, with the response reporting format: json, echoing the ask in requested_format and explaining it in format_note. It does NOT label a JSON body as csv (#3242).

framework'OJK_AI_GOVERNANCE' | 'UU_PDP' | 'BI_PJP' | 'OJK_BI_COMBINED'
data_typesstring[]

Defaults to [all]

include_piiboolean

Response

Export completed

export_idstring
statusstring

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_notestring

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.

download_urlstring

Omitted for inline exports

created_atstring date-time
expires_atstring date-time

Example response

{
  "metadata": {
    "export_version": "1.0.0",
    "generated_by": "axonflow-ojk-module"
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.