AssurAI API Reference
Programmatic access to risks, controls, workpapers, evidence, audit plans, and users — all scoped to your organization. Authenticate with an API key and query or write data using standard HTTP.
Authentication
Every request must carry a valid API key. Pass it as a Bearer token or via the x-api-key header. Keys are org-scoped — you can only read and write your own org's data. Generate and revoke keys in Settings → Enterprise API.
Risks
Read and manage risk register entries
| Param | Type | Description | |
|---|---|---|---|
| status | string | opt | open · mitigated · accepted · closed |
| severity | string | opt | Critical · High · Medium · Low |
| category | string | opt | Operational · Financial · Compliance |
| limit | integer | opt | Max 200, default 50 |
| offset | integer | opt | Records to skip, default 0 |
| Param | Type | Description | |
|---|---|---|---|
| id | string | req | Risk UUID or short ID (e.g. r_9f2e4a) |
| Field | Type | Description | |
|---|---|---|---|
| title | string | req | Short risk description |
| severity | string | opt | Critical · High · Medium · Low |
| category | string | opt | Operational · Financial · Compliance |
| owner | string | opt | Assignee email |
| due_date | date | opt | ISO 8601 date string |
| likelihood | integer | opt | 1–5 scale |
| impact | integer | opt | 1–5 scale |
All body fields from POST are accepted. Only supplied fields are updated (partial update).
Returns 204 No Content on success. This operation is irreversible.
Controls
Read and manage control library entries
| Param | Type | Description | |
|---|---|---|---|
| status | string | opt | effective · deficient · not_tested |
| framework | string | opt | SOX · SOC2 · ISO27001 · NIST |
| limit | integer | opt | Max 200, default 50 |
Returns full control detail including linked test procedures and workpapers.
Required: name, framework. Optional: description, owner, frequency, control_type.
Partial update — only supplied fields are changed. Returns the updated control object.
Workpapers
Access and create audit workpapers
| Param | Type | Description | |
|---|---|---|---|
| status | string | opt | draft · in_review · approved · signed_off |
| prepared_by | string | opt | Filter by preparer email |
| project_id | string | opt | Filter by audit project UUID |
Returns full workpaper with body, review history, and linked evidence items.
Required: title. Optional: body (markdown), project_id, control_id, prepared_by, status.
Partial update. Advancing status from draft → in_review notifies assigned reviewers.
Evidence
Upload and retrieve supporting evidence files
| Param | Type | Description | |
|---|---|---|---|
| workpaper_id | string | opt | Filter by parent workpaper |
| file_type | string | opt | pdf · xlsx · csv · png · jpg |
Send as multipart/form-data. Max file size 50 MB. Accepted: PDF, XLSX, CSV, PNG, JPG.
Returns 204 No Content. The underlying file is permanently removed from storage.
Audit Plans
Create and manage audit engagements
| Param | Type | Description | |
|---|---|---|---|
| fiscal_year | integer | opt | e.g. 2026 |
| status | string | opt | planning · in_progress · completed |
Returns plan metadata plus a list of linked controls and workpapers.
Required: name. Optional: fiscal_year, start_date, end_date, lead_auditor, description.
Partial update. Advancing status to completed locks the plan for further edits.
Users
List org members and manage invitations
| Param | Type | Description | |
|---|---|---|---|
| role | string | opt | admin · auditor · reviewer · viewer |
| status | string | opt | active · invited · suspended |
Returns profile including role, joined date, and last-active timestamp.
| Field | Type | Description | |
|---|---|---|---|
| string | req | Invitee email address | |
| role | string | req | admin · auditor · reviewer · viewer |
| message | string | opt | Custom invite message |
Removes the user from your org. Their data (workpapers, evidence) is preserved. Returns 204 No Content.
Errors
HTTP status codes returned by the API
| Status | Meaning |
|---|---|
| 200 | OK — list or read succeeded |
| 201 | Created — POST succeeded |
| 204 | No Content — DELETE succeeded |
| 400 | Invalid request body or missing required field |
| 401 | Missing, malformed, or revoked API key |
| 403 | Key lacks the required scope for this operation |
| 404 | Resource not found or not in your org |
| 429 | Rate limit exceeded — 1,000 requests/hour per key |
| 5xx | Internal error — retry with exponential backoff |
Pagination
All list endpoints use limit/offset
Pass limit (max 200, default 50) and offset as query params. Every list response includes a meta envelope:
Rate Limits
Per-key rolling window
Each API key is limited to 1,000 requests per hour (rolling 60-minute window). Exceeding the limit returns 429 Too Many Requests. Keys do not share a budget. Retry with exponential backoff and respect the Retry-After header.