Events
What changed in what you can see, in order, to stay in sync.
Updated on January 1, 1970
Privacy and analytics
We use necessary technical cookies and, only with your consent, analytics and marketing pixels to improve the website and measure campaigns.
What changed in what you can see, in order, to stay in sync.
Updated on January 1, 1970
Read-only in every door.
What changed in everything you can see (brands, workspaces and your own account), oldest first from a cursor: the sync feed. Each event carries its type, who did it and the ids it touched; read the records with their own operations. cursor_expired means the cursor is older than the 30-day log: bootstrap again. Optional brand / workspace narrow it.
| Field | Value |
|---|---|
| Kind | Read |
| HTTP method | POST /api/v1/events.list |
| MCP tool | events_list |
| Scope | events.read |
| Minimum role | self |
| Human confirmation | No |
| Doors | API, Screens, Apps |
| Status | Available |
Input
{
after?: string // Cursor: the `id` of the last event already read (`next_cursor`). Empty starts at the oldest kept event.
types?: string[] // ≤ 50 items · Only these types (`*`, exact, or `prefix.*`).
limit?: integer // 1–200 · default 100
from_now?: boolean // default false · Return no events, only the newest cursor: take it before reading a bootstrap snapshot, then follow from it.
newest_first?: boolean // default false · Read history backwards (screens): newest first, from `before`; `next_cursor` is then the next `before`. Sync reads forwards with `after`.
before?: string // With `newest_first`: only events older than this id.
brand?: string // uuid · Only this brand (UUID).
workspace?: string // uuid · Only this workspace and its brands (UUID).
}Output
{
items: Array<{
id: string // Ordered id; also the cursor to read what came after it.
object: "event"
type: string // `<entity>.<verb>`, stable once published.
schema_version: integer // 1–9007199254740991
operation: string // The operation that made the change.
plane: "staff" | "client"
occurred_at: string
actor: {
kind: "person" | "token" | "service_account" | "agent" | "nodo" | "system"
id: string | null // The person or service account; null for the system.
client: string | null // The agent or integration that acted for them, when known.
}
door: "api" | "mcp" | "portal" | "web" | "app" | "agent" | "voice" | "composer" | "system"
scope: "platform" | "brand" | "workspace" | "self"
brand_id: string | null
workspace_id: string | null
data: {
object_ids: string[] // Ids of the records the change touched; read them with their read operation.
changed_fields: string[] // Names of the fields the call sent; never their values.
}
request_id: string | null // Same id as the call log entry (`X-Request-Id`).
}>
next_cursor: string | null // Send it as `after` to continue; it advances even when nothing you can see happened.
has_more: boolean
cursor_expired: boolean
}