---
title: "Check OJK compliance readiness"
method: GET
path: "/api/v1/ojk/audit/readiness"
tags: ["OJK Compliance"]
---

# Check OJK compliance readiness

`GET /api/v1/ojk/audit/readiness`

## Request

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

Validates readiness for an OJK regulatory audit across five checks:
Data Retention, PII Detection, Human Oversight, Audit Logging, and
Breach Notification.

Every check QUERIES the state it names or reports `unknown` (#3242) —
four of the five were previously unconditional `pass` literals. Check
statuses are `pass`, `warning`, `fail` or `unknown`, and each carries
`details` describing what was OBSERVED plus an `observed` measurement.

Scoring: a pass counts 1, a warning 0.5, a failure 0, and an `unknown`
check scores ZERO while STILL counting in the denominator — an
unobservable dimension must drag the score down, never inflate it.
`measured_checks` / `unknown_checks` expose the split. `ready` requires
no failures, **no unknowns**, and a score of at least 80.

**Enterprise Feature**.

## Headers

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

## Response `200`

Compliance readiness assessment

- OJKComplianceReadinessResponse
  - `ready` boolean: True at score 80+
  - `score` integer
  - `framework` string
  - `checks` object[]
    - `name` string
    - `description` string
    - `status` 'pass' | 'fail' | 'warning' | 'unknown': `unknown` was MISSING and is emitted routinely (#3435 R8), the same defect corrected on SEBIComplianceCheck.status in the same PR. `OJKCheckUnknown = "unknown"` (ojk/types.go) is assigned by every check in ojk/readiness.go that could not MEASURE the control it names, and four of the five checks read the database, so an unreachable database puts four of them here. The exception is the first, Data Retention, which reads configuration rather than a table and is therefore only ever `pass` or `fail`.
    - `details` string
  - `recommendations` string[]

## Other responses

- `400`: Missing organization scope (code `missing_org`)
- `500`: Failed to validate readiness (code `internal_error`)

---

[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)
