Events
1 endpoints in this family.
Read the event log
GET/api/v1/events
Every event Nodium emits — the ones your webhooks receive — is also written to a numbered log, kept 30 days. Read it from a cursor instead of depending on webhook deliveries: the webhook is a doorbell, the log is the truth. Each entry is the webhook envelope (id, event, workspace_id, external_id, occurred_at, data) plus its seq.
Start without after: data is empty and next_after is the current head — store it as your first cursor. Then call with after set to the last next_after you kept, and repeat while next_after moves: a page may be empty and still move forward (events of other clients are skipped). When a call returns the same next_after you sent, you are up to date; come back when a webhook rings, or every minute. Keep next_after only after you have stored the page.
Entries come in seq order and none is skipped: an entry is returned only once every earlier one is settled, so a recent entry can appear a moment after the webhook that announced it. Deduplicate on id (a webhook delivery and the log carry the same one). seq is unique across the whole log, not per client: expect gaps.
A key that sees every client of the account reads all of them, unless the Nodium-Tenant header names one; a key pinned to one client reads that client only. Entries older than your plan's content retention keep their envelope but an empty data.
Query parameters
afterintegerThe
next_afterof the previous call: return the entries after this position. Omit it to get the head only;0reads from the oldest entry kept.limitintegerEntries per call, 1 to 500. Default 100.
Response
A page of events and the cursor to continue from.
data.dataobject[]The entries, by
seq. Empty whenafteris omitted.Show fields
seqintegerThe position in the log.
idstringThe event id (
evt_…), the same as in webhook deliveries.eventstringThe event name, for example
message.received.workspace_idstringThe client where the event happened.
external_idstringYour id for that client, or
nullfor "My company".occurred_atstringWhen it happened (ISO 8601).
dataobjectWhat the event carries; see the webhook event catalogue.
data.next_afterintegerPass it as
afteron the next call. Every entry up to it was returned or is not yours to read.
Refusals
- 410
cursor_expired`after` is older than the oldest entry kept (30 days): some events were purged before you read them. Restart from `after=0`, or from the head. - 422
invalid_request`after` is not a non-negative integer. - 404
tenant_not_foundThe `Nodium-Tenant` header names no client this key can read.
curl https://nodium.io/api/v1/events \ -H "Authorization: Bearer $NODIUM_KEY"{ "data": { "data": [ { "seq": 0, "id": "…", "event": "…", "workspace_id": "…", "external_id": "…", "occurred_at": "…", "data": {} } ], "next_after": 0 }}