List events
One page of the organization's audit log, newest first.
GET /organizations/{org}/events
Returns the org’s audit log, newest first, filtered and paged. This is the one paginated list in the management API.
Authorization
Org owner. Anyone else gets 404, as if the log did not exist.
Path parameters
| Name | Type | Description |
|---|---|---|
org | string | The organization: its id (org_…) or its slug. It has to be an org your token can manage (see Who can call it) |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
per_page | integer | no | 1, 50 or 100. Default 50 |
page | integer | no | Zero-based. Default 0 |
entity | string | no | Only entries about this entity type |
verb | string | no | created, updated, deleted or login |
actor_id | string | no | Only entries caused by this user or client |
key_prefix | string | no | Only entries whose key starts with this |
from, to | ISO date | no | Time range |
Any other parameter, or a parameter given twice, is a 400.
Response
200 OK with an array of entries.
[
{
"id": "…",
"key": "tenant.updated",
"entity": "tenant",
"verb": "updated",
"at": "2026-10-18T09:12:00.000Z",
"actor": { "kind": "user", "id": "usr_65f1c2a9e4b0d3f7a1c8e90c" },
"data": { "id": "tnt_65f1c2a9e4b0d3f7a1c8e908", "name": "Acme France", "…": "…" },
"previous": { "name": "Acme FR", "…": "…" },
"changes": { "name": "Acme France" }
}
]
Paging links come in a Link header with first, prev, next and last, carrying your filters along. A relation is left out when it would point nowhere, and there is no header at all when everything fits on one page.
| Field | Type | Description |
|---|---|---|
id | string | |
key | string | The routing key, such as tenant.updated |
entity | string | |
verb | string | |
at | ISO date | |
actor | object | { kind: "user" | "client", id } or { kind: "system" } |
data | object | The resource as stored |
previous, changes | object | Updates only: the state before, and what moved |
data, previous and changes are snapshots of the resource as it was stored, so their field names are camelCase.
Errors
| Status | error | When |
|---|---|---|
400 | invalid_query | An unknown or repeated parameter, or a value out of range. The detail names it |
404 | not_found | You are not an owner of the org, or the org is not yours |
Example
curl https://loginwith.loginwith.dev/organizations/acme/events?verb=deleted&per_page=50 \
-H "Authorization: Bearer $TOKEN"