FurniOpsDocs
API referenceAudit

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.

  • Scopesaudit:write
  • Rate classwrite
POST/v1/audit-events/{id}/undo

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.

Authorization

apiKey
AuthorizationBearer <token>

An API key (fo_live_… / fo_test_…) as a bearer token

In: header

Path Parameters

id*string

Audit event ID

Match^aud_[0-9A-Za-z]{22}$

Header Parameters

FurniOps-Version?string

Dated API version; pinned per organisation on first use and overridable per request

Value in

  • "2026-10-01"
  • "2026-10-04"
FurniOps-Mode?string

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"
FurniOps-Dry-Run?string

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}