Skip to main content

Compliance Reports API

One API produces a formatted, regulator-appropriate artifact from the governance data AxonFlow already holds. You choose a regulator, a framework and a reporting period; AxonFlow renders a real PDF, CSV, XLSX, JSON or JSONL file, stores it, and hands you a time-limited download link.

Before this API, every "export" on the platform was raw JSON. This one produces the document you attach to a submission.

Looking for the Customer Portal walkthrough?

This page is the API reference. If you want to select a jurisdiction, read your live posture, and generate a report from the Customer Portal UI, see Compliance Reports (Customer Portal).

Enterprise feature

Report generation requires an Evaluation or Enterprise licence. On the Community edition the routes are not registered. See Community vs Enterprise.

Quickstart

Three calls: create, poll, download.

# 1. Create. Returns 202 immediately with a job id.
curl -sS -X POST "$AXONFLOW_URL/api/v1/compliance/reports" \
-H "Content-Type: application/json" \
-d '{
"regulator": "euaiact",
"framework": "EU_AI_ACT",
"format": "pdf",
"period_start": "2026-04-01T00:00:00Z",
"period_end": "2026-06-30T23:59:59Z"
}'
# {"id":"creport-9f3c...","status":"pending","report_state":"","progress":0, ...}

# 2. Poll until status is `completed` or `failed`.
curl -sS "$AXONFLOW_URL/api/v1/compliance/reports/creport-9f3c..."
# {"id":"creport-9f3c...","status":"completed","report_state":"populated",
# "progress":100,"record_count":184,"checksum":"3b1f...","size_bytes":58213, ...}

# 3. Download. Responds 307 to a presigned URL valid for one hour.
curl -sSL -o eu-ai-act-q2.pdf \
"$AXONFLOW_URL/api/v1/compliance/reports/creport-9f3c.../download"

Requests are scoped by the X-Org-ID and X-Tenant-ID headers, which the AxonFlow Agent gateway and the customer portal proxy set from your validated credential. You never send them by hand from an application.

The three endpoints

MethodPathSuccessPurpose
POST/api/v1/compliance/reports202 AcceptedCreate a report job
GET/api/v1/compliance/reports/{id}200 OKPoll job status
GET/api/v1/compliance/reports/{id}/download307 Temporary RedirectPresigned artifact URL (1 hour)

Generation is asynchronous because a multi-year OJK report over a busy tenant is not a request-timeout-sized amount of work. The create call returns as soon as the job is durably recorded.

Statuses

statusMeaning
pendingRecorded, not started
processingCollecting data and rendering
completedArtifact stored and checksummed - downloadable
failedTerminal failure; error names the cause

A job reaches completed only when a checksummed artifact is durably stored. If no artifact storage backend is configured, the job fails with an error naming the missing configuration rather than reporting success you cannot download.

report_state: the three-state answer

Every create and poll response carries an explicit report_state. It exists because an empty report is ambiguous, and the two readings need different responses from you:

report_stateMeaningWhat to do
not_availableThe regulator's module is not enabled in this deploymentEnable the module, or pick a different regulator
enabled_emptyThe module is enabled and the period genuinely contains no governed activityNothing - this is a valid "no activity in range" attestation
populatedThe module is enabled and returned dataNothing
(empty string)Not determined yetThe job is still pending or processing. Poll again.

The field is always present on every create and poll response, including while it is the empty string. You never have to tell "absent" from "null" to work out what happened.

not_available is also returned synchronously: creating a report for a regulator whose module is not enabled is refused with 409 Conflict and {"error_code":"REGULATOR_NOT_AVAILABLE","report_state":"not_available"} rather than producing a job that can never succeed.

Regulators, frameworks and formats

Availability: the three US regulators (usinsurance, usbanking, ussecurities) ship in platform v10.1.0. A deployment on v10.0.0 or earlier refuses all three with 400 UNKNOWN_REGULATOR.

RegulatorregulatorframeworkFormatsRetention shown on the artifact
EU AI ActeuaiactEU_AI_ACTpdf, csv, jsonLogs at least 6 months (Art. 12/19); technical documentation 10 years (Art. 18)
SEBI (India)sebiSEBI_AI_MLpdf, csv, xlsx, json5 years
RBI FREE-AI (India)rbiRBI_FREE_AIpdf, csv, xlsx, jsonPer the FREE-AI framework and the board-approved policy
MAS FEAT (Singapore)masfeatMAS_FEATpdf, csv, json7 years
OJK / BI / UU PDP (Indonesia)ojkOJK_AI_GOVERNANCE, UU_PDP, BI_PJP, OJK_BI_COMBINEDpdf, csv, json5 years
NAIC AI Systems Evaluation Tool (US insurance)usinsuranceNAIC_AIS, NYDFS_CL7, CO_REG_10_1_1pdf, csv, xlsx, jsonThe NAIC exhibits are an examination information request and set no retention period of their own. For the documentation NYDFS Circular Letter No. 7 describes, CL7 cross-references 11 NYCRR 243, New York's insurance records-retention regulation. This line states the REQUIREMENT, not this deployment's configured period.
US Banking Supervision (Federal and Farm Credit)usbankingUS_MRM, US_TPRM, GLBA_SAFEGUARDS, BSA_AML, FCA_EM31pdf, csv, jsonSet by the instrument in scope, not by this document: BSA suspicious-activity-report support for 5 years (31 CFR 1020.320(d)); GLBA information-security records under the interagency Guidelines Establishing Information Security Standards (12 CFR 30 App. B, 208 App. D-2, 364 App. B) for institutions the federal banking agencies supervise, with their annual written board report; ECOA / Reg B adverse-action records for 25 months where AI touches consumer credit (12 CFR 1002.12(b)). Farm Credit institutions retain on the schedule the FCA sets. This line states the REQUIREMENT, not this deployment's configured period.
US Securities Examination (SEC advisers and FINRA broker-dealers)ussecuritiesSEC_EXAM, FINRA_SUPERVISION, REG_SPpdf, csv, json, jsonlSet by the registration in scope, not by this document: an investment adviser under Advisers Act rule 204-2, generally 5 years from the end of the fiscal year of the last entry with the first 2 years in an appropriate office; a broker-dealer under Exchange Act rules 17a-3 and 17a-4, generally 3 to 6 years by record type, preserved either on write-once read-many (WORM) media or under the audit-trail alternative the 2022 amendments to rule 17a-4 added. AxonFlow provides no archival storage under either option; the artifact is an export for the firm's own recordkeeping system. This line states the REQUIREMENT, not this deployment's configured period.

framework may be omitted for the four regulators that define exactly one. It is required for ojk, usinsurance, usbanking and ussecurities - each reports against several instruments (three Indonesian, three US insurance, five US banking, three US securities), and selecting one for you would file the report under the wrong law.

The usbanking framework also selects the report PROFILE

usbanking renders the same evidence in two supervisory vocabularies, and the one you get is decided by the framework you ask for. There is no separate profile field, so a request cannot contradict itself:

frameworkProfileWhat changes
FCA_EM31Farm CreditHuman-oversight register in FCA Exam Manual EM-31.1's when/what/who/approver change-log form; quarterly board pack; the incident clock stated by reference to 12 CFR Part 609 and current FCA examination guidance
US_MRM, US_TPRM, GLBA_SAFEGUARDS, BSA_AMLFederalSR 26-2 / OCC Bulletin 2026-13 cited as current with SR 11-7 named as predecessor, including that the revised guidance excludes generative and agentic AI from its formal model definition while the underlying risk principles still apply; annual board pack

GET /api/v1/usbanking/exam-readiness publishes this mapping, so a client never has to keep its own copy.

What a usbanking report covers, and what it does not

The package is scoped to the requesting tenancy. An AxonFlow package scoped to the organization - the US insurance package is one - describes a different population over the same period on a multi-tenancy licence, rather than a larger or smaller one. The two measure different populations rather than disagreeing, and the artifact says so on its face. Its sources are platform tables rather than a module's own, and audit_logs.org_id is nullable, so an organization-wide report would silently omit records. The completeness section states how many records in the period carry no organization attribution, which is exactly the population an organization-wide report would have dropped. On a single-tenancy organization the two are the same set of records.

Every usbanking artifact carries these disclosures, and they are worth reading before the package reaches an examiner:

  • Coverage. It reports activity that routed through AxonFlow's governed paths. It is not a discovery of AI systems elsewhere in the institution.
  • Containment. AxonFlow does not automatically evaluate kill-switch thresholds, so any configured kill switch is triggered manually. The containment it evidences is policy denial and approval holding.
  • Fairness testing. AxonFlow performs no statistical fairness, bias or disparate-impact testing. Where an instrument expects it, that remains the institution's own work.
  • Legal determinations. Nothing classifies a system's risk tier, analyses any law's applicability, or asserts compliance with any instrument.
  • Model validation. The package is evidence from the governance layer. It is not a model validation report and does not constitute effective challenge.

The cross-index appendix maps each section to the NIST AI RMF functions (Govern, Map, Measure, Manage). It does not reproduce the Treasury / Cyber Risk Institute FS AI RMF control-objective identifiers.

The ussecurities framework also selects the supervised population

ussecurities covers SEC-registered investment advisers and FINRA member broker-dealers as one regulator, because the evidence set is identical and only the instrument each clause is cited against differs. The supervised population is derived from the framework you ask for, never requested: a separate population field would make a request whose two halves contradict each other expressible, so the contradiction is made unrepresentable instead of validated.

frameworkPopulationVocabulary the artifact is cited against
SEC_EXAMSEC-registered investment adviserAdvisers Act rule 204-2 (books and records), rule 206(4)-1 (Marketing) and rule 206(4)-7 (Compliance), read against the SEC Division of Examinations FY2026 priorities
FINRA_SUPERVISIONFINRA member broker-dealerFINRA Rule 3110 (Supervision) with Regulatory Notice 24-09 and the 2026 Regulatory Oversight Report, and Exchange Act rules 17a-3 and 17a-4 for records
REG_SPBoth populationsThe amended Regulation S-P (17 CFR part 248) incident-response and service-provider oversight obligations, which reach advisers and broker-dealers alike

GET /api/v1/ussecurities/exam-readiness publishes this mapping, so a client never has to keep its own copy. Like the usbanking readiness route, it is GET-only, scoped from the auth-stamped headers, gated on tenant-wide read authority like the exports, and publishes counts, presence and disclosures only - never evidence rows, which come from the report facade and only from there.

The ussecurities package renders eight sections in the order the published SEC/FINRA AI sweep letters ask for them (see the sections table below). Its interaction archive carries the Ed25519 attribution chain in band in the json and jsonl renderings: each archived interaction carries its per-record signature, chain linkage and signing key id, so the export is independently verifiable record by record. The pdf and csv renderings carry the chain-head summary instead, and say so, naming the renderings that carry the full proof. Three attribution states are kept apart on the artifact: an interaction with no attribution record, one that is hash-chained but unsigned, and one that is signed.

Two citation disciplines the package holds everywhere, worth knowing before the artifact reaches an examiner:

  • Preservation is cited against the population's own rule. A broker-dealer preserves under Exchange Act rule 17a-4, satisfied on write-once read-many (WORM) media or under the audit-trail alternative the 2022 amendments to that rule added - the artifact never names WORM without the alternative beside it. An investment adviser preserves under Advisers Act rule 204-2, never 17a-4. AxonFlow provides neither form of preservation: the package is an export, and producing it preserves nothing.
  • SAR confidentiality is cited to the statute. 31 U.S.C. 5318(g)(2) is the Bank Secrecy Act's own confidentiality bar and binds every filer; for a broker-dealer it is implemented by FinCEN at 31 CFR 1023.320(e). No FinCEN part number is cited on the adviser side, deliberately.

jsonl: offered to ussecurities alone

jsonl is line-delimited JSON: one self-describing record per line, no enclosing array. It exists for one reason. A broker-dealer preserves records under Exchange Act rule 17a-4 on write-once read-many media or under the audit-trail alternative the 2022 amendments added, and the systems that ingest into either are line-oriented: they take a stream of records and commit each one, where a single JSON document has to be parsed whole first. Every line carries its schema, record type and job id, and every row record additionally carries the section key and the column headers its values are positional against, because line-oriented ingestion routinely splits a stream across batches.

It is offered to no other regulator, on the format matrix's own rule: a format is offered where the regulator's own practice wants it, not wherever it can be produced.

XLSX is offered only where the regulator's own submission practice is spreadsheet-shaped. Requesting a format a regulator does not offer is a 400 with UNSUPPORTED_FORMAT and the supported list in the message.

What each report contains

RegulatorSections
EU AI ActConformity assessments (Art. 43), Article 43 summary, risk management (Arts. 9-17), accuracy and bias monitoring (Art. 15), human oversight (Art. 14), audit trail (Art. 12)
SEBIReadiness checks, policy violations, LLM activity, decision-chain lineage, human oversight, PII redactions, retention posture
RBI FREE-AIBoard reports, AI incidents, kill switches, kill-switch activation history, model validations, AI system registry
MAS FEATFEAT assessments, four-pillar summary, AI system registry, kill-switch history
OJK / BI / UU PDPAI governance summary, policy violations, LLM and decision activity, human oversight, PII redactions, cross-border transfers (UU PDP Pasal 56), 72-hour breach log (Art. 46), BI PJP, retention posture
US Banking SupervisionScope, completeness and disclosures; AI and agent inventory; per-decision reconstruction; human oversight register; kill-switch and containment attestation; data-boundary report; third-party AI annex; monitoring summary; board pack; NIST AI RMF cross-index
US Securities ExaminationEight sections in the order the published SEC/FINRA AI sweep letters ask for them: AI-use inventory and observed responsible persons; interaction archive (prompts, outputs and agent actions, with the attribution chain in band on json/jsonl); consequential-output log (policy-flagged, with human disposition); supervision evidence in the population's own vocabulary; Regulation S-P annex (incident response and service-provider oversight); disclosure-vs-reality reconciliation (declared beside observed); financial-crime evidence (Fraud and Risk Add-on); scope, completeness and instruments
NAIC / NYDFS / Colorado (US insurance)Exhibit A "Quantify Regulated Entity's Use of AI Systems", Exhibit B "AI Systems Governance Risk Assessment Framework" (the form offers a narrative and a checklist variant), Exhibit C "High Risk AI Systems Details" with exceptions and overrides, Exhibit D "AI Systems Model Data Details", a fairness-testing pointer section, the NYDFS CL7 annex, the Colorado 10-1-1 annex, scope, completeness and form version

Sections are always emitted, even when empty, carrying a sentence saying so. A dropped section would make "we recorded no HITL oversight" indistinguishable from "this report does not cover HITL oversight", which on a regulatory artifact is a different claim.

What the US insurance report is, and what it is not

The NAIC instrument this report renders is formally titled "Artificial Intelligence Systems Evaluation: Optional Supplemental Exhibits for State Regulators" and is known as the NAIC AI Systems Evaluation Tool. It comes from the NAIC Big Data and Artificial Intelligence (H) Working Group, and it is an examination information request that supplements existing market conduct, financial analysis and financial examination review procedures. It is not an annual-statement filing, so nothing here is something you submit on a statutory schedule.

The usinsurance report renders that exhibit structure over the governance data AxonFlow holds. It is source evidence for your response to a regulator's information request, never a claim of compliance with any instrument it names, and several of the exhibits' fields are the carrier's own work rather than AxonFlow's:

  • The fairness section is a pointer, never a result. It names the instrument and records what AxonFlow holds that supports it. AxonFlow performs no statistical fairness or bias testing; the NYDFS CL7 three-step quantitative analysis remains the insurer's own actuarial and data-science work, and the section says so on the artifact.
  • AxonFlow does not classify a system as high risk. That is the carrier's determination; Exhibit C, "High Risk AI Systems Details", renders the classification you supply.
  • No shadow-AI discovery. Only traffic routed through the AxonFlow gateway is visible, so Exhibit A quantifies governed usage and says so.
  • No line-of-business mapping and no ECDIS register. AxonFlow holds neither.
  • No share-of-adverse-decisions figure. AxonFlow does not compute it.
  • No model validation and no legal determinations.

The Tool is at version 4.0 and every page of it is marked DRAFT, with a multi-state pilot running. The artifact names the form revision it renders against; the adopted form may differ from it.

Access control

Two different authorities, deliberately:

ActionRequired
Poll report statusaudit:read - any caller who may read the audit trail
Create a reportAdministrator (owner, admin or policy admin)
Download an artifactAdministrator

Generating and downloading produce a whole-tenant compliance artifact, so they sit in the same authority class as evidence export. Polling returns job metadata only - id, status, progress, report_state, checksum - and no audit content, so a compliance viewer can watch a report they requested reach completion.

Every by-id path is scoped to the caller's own organization and tenant. A report id belonging to another tenancy returns 404, byte-identical to an unknown id, so the endpoint cannot be used to discover which report ids exist.

Errors

HTTPerror_codeCause
400UNKNOWN_REGULATORregulator is not one of the eight above
400UNKNOWN_FRAMEWORKFramework missing for ojk, usinsurance, usbanking or ussecurities, or not defined for the regulator
400UNSUPPORTED_FORMATFormat unknown, or not offered for that regulator
400INVALID_PERIODMissing, inverted, zero-length, or longer than 1096 days
400INVALID_BODYMalformed JSON, or an unrecognised field
401SCOPE_REQUIREDNo X-Org-ID / X-Tenant-ID - the request did not traverse an authenticating hop
403COMPLIANCE_REPORT_REQUIRES_EVALUATION_LICENSECommunity tier
404REPORT_NOT_FOUNDNo such report in your tenancy
409REGULATOR_NOT_AVAILABLEThat regulator's module is not enabled here
409REPORT_NOT_COMPLETEDDownload requested before the job finished; the message carries the failure cause when it failed
409REPORT_ARTIFACT_UNAVAILABLEThe job completed but its stored artifact is no longer retrievable
429COMPLIANCE_REPORT_LIMIT_EXCEEDEDDaily report budget for your tier
503INTERNAL_ERRORThe service has no database connection

Reports share the daily budget of the evidence-export tier: 3 per day on Evaluation, unlimited on Enterprise. A refused request - a malformed body, a tier refusal, an unavailable regulator - does not consume a slot.

Artifacts

Artifacts are stored in the object-storage backend the orchestrator is configured with (AUDIT_EXPORT_STORAGE_TYPE and its bucket/credential variables) under compliance-reports/{org}/{regulator}/{report-id}.{ext}. The download endpoint mints a presigned URL valid for one hour; the orchestrator never streams the bytes itself.

Each job records the SHA-256 of the artifact. Rendering is deterministic: the same job rendered twice produces byte-identical output, including the PDF's creation date, which is taken from the job record rather than the render clock. That is what makes the stored checksum a durable integrity claim rather than a one-time snapshot.

Known limitations

  • PDF glyph coverage. PDFs use the standard 14 core fonts so nothing is embedded and an air-gapped build produces the same bytes as any other. Those fonts are cp1252-encoded, so a character outside that set - Devanagari, Han, an emoji - renders as ?. Request json or csv when the data contains them; both carry full Unicode.
  • Row cap. Any single section is capped at 5,000 rows. When a section is truncated it says so, with the number of rows not shown. Narrow the reporting period for the full set.
  • BI PJP. Selecting BI_PJP or OJK_BI_COMBINED scopes the export, but the Bank Indonesia framework contributes no payment-service-specific data class of its own yet. The report says so in that section rather than showing it empty.
  • Legacy per-module exports. The older per-regulator export endpoints remain available and unchanged, with two corrections: SEBI's CSV export now returns real CSV, and its XML format returns 501 Not Implemented instead of JSON under an XML content type. RBI's PDF and XLSX exports are now real PDF and real XLSX. New integrations should use this API.