Undo an audited change
Puts back the change an audit entry records, by running the operation that undoes it as you: besides audit:write, you need the permission and scopes that operation needs, and the undo is recorded with undo_of. An entry's undo says whether it can be undone. A target changed since, or an entry already undone, answers 409; a change that cannot be undone, or older than 30 days, answers 422. So an undo never runs twice: a retry answers 409. To redo the change, undo the undo's own entry. An entry identity recorded (source: identity) answers 422 here: undo it with identity's POST /v1/org/audit-events/{id}/undo. With FurniOps-Dry-Run the undo is previewed.
- Scopes
audit:write - Rate classwrite
/v1/audit-events/{id}/undoPuts back the change an audit entry records, by running the operation that undoes it as you: besides audit:write, you need the permission and scopes that operation needs, and the undo is recorded with undo_of. An entry's undo says whether it can be undone. A target changed since, or an entry already undone, answers 409; a change that cannot be undone, or older than 30 days, answers 422. So an undo never runs twice: a retry answers 409. To redo the change, undo the undo's own entry. An entry identity recorded (source: identity) answers 422 here: undo it with identity's POST /v1/org/audit-events/{id}/undo. With FurniOps-Dry-Run the undo is previewed.
Authorization
apiKey An API key (fo_live_… / fo_test_…) as a bearer token
In: header
Path Parameters
Audit event ID
^aud_[0-9A-Za-z]{22}$Header Parameters
Dated API version; pinned per organisation on first use and overridable per request
Value in
- "2026-10-01"
- "2026-10-04"
The data the request acts on: test is the organisation's sandbox. An OAuth token picks it (live by default); an API key's mode is fixed, and naming the other one is refused
Value in
- "live"
- "test"
Preview the write and change nothing: true answers the would-be response, explain a Preview (application/vnd.furniops.preview+json)
Value in
- "true"
- "explain"
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/v1/audit-events/string/undo"{ "object": "undo", "undone": "string", "operation": "string", "response": null}List audit events GET
The organisation's audit timeline, newest first: what members, API keys, connected apps and FurniOps staff did, from sign-in policy to API keys and data operations. Filter by action, actor or time (`since`, `until`). Addresses are shown as a /24 or /48 prefix only. FurniOps AI acting for a member is the actor `agent` `assistant` with `on_behalf_of` the member. FurniOps staff acting through support access are the actor `staff`, with the member in `data.acting_for` and the grant in `data.support_grant`; `data.agent.conversation_id` names the assistant conversation when FurniOps AI made the change.
Read the platform's daily health GET
The last 90 days per component, in UTC days: minutes measured, slow and failing. Public and cached for 5 minutes.