Audit trail
Who did what in the org.
Read the audit trail
GET
/api/v1/org/auditWho did what in the org, newest first: role changes, invitations, key changes, limit changes. Pages by cursor, 50 at a time and up to 100. Admins only.
An API key carrying the scope named here, or a signed-in session.
- Scope
audit:read- Key kinds
- Organization
- Access
- The caller must administer the organization.
Required and optional fields, allowed values and errors, as the page shows them.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
limit | Query | integer | Optional | How many to return: 1 to 100, 50 when absent. A number outside that range is clamped; text is ignored. |
cursor | Query | string | Optional | Where the last page ended: the cursor inside the previous page's links.next. Pass links as given; a cursor you edit is refused. |
Examples
curl "https://liviamatch.com/api/v1/org/audit" \
-H "Authorization: Bearer $LIVIA_API_KEY"Responses
200
One page of the trail.
{
"data": [
{
"id": "c8e2a6f9-3d41-4b07-9f5c-1b7d0a4e8c36",
"action": "member.role_changed",
"occurredAt": "2026-10-01T15:12:09.330Z",
"actor": {
"type": "user",
"id": "3a8d1e47-9c52-4b0f-a6d3-5e7b2c9f1a04",
"name": "Harper Quinn",
"email": "harper@hearthandkey.example"
},
"target": {
"type": "user",
"id": "e1a5c8d2-6f37-4b94-a0c1-8d2e4f6a9b13",
"label": "dev@hearthandkey.example"
},
"context": {
"from": "member",
"to": "admin"
}
}
],
"links": {
"next": null
}
}Fields (16)
| Field | Type | Description |
|---|---|---|
data | object[] | |
data[].id | string (uuid) | |
data[].action | string | What happened, as a dotted word: member.removed, api_key.created. |
data[].occurredAt | string (date-time) | |
data[].actor | object | |
data[].actor.type | string | |
data[].actor.id | string (uuid) | null | |
data[].actor.name | string | null | |
data[].actor.email | string | null | |
data[].target | object | |
data[].target.type | string | null | |
data[].target.id | string | null | |
data[].target.label | string | null | |
data[].context | object | What the action carried; keys differ by action. |
links | object | |
links.next | string | null | The URL of the next page, or null when this is the last. Follow it as given. |
Errors
| Status | Code | When |
|---|---|---|
| 403 | forbidden | The caller does not administer the org. |
| 400 | invalid-cursor | The cursor is not one a page linked to. |
Any call of this kind can also answer401 unauthenticated401 invalid-api-key403 insufficient-scope429 rate-limited429 monthly-cap-reached500 internal