GET /v1/events
List raw events from the WAL — the append-only source of truth.
Authorization
bearer PASETO v4 public token (or deployment gate key). Auth-disabled dev instances accept any caller.
In: header
Query Parameters
Response Body
curl -X GET "https://example.com/v1/events?scope=string"Authorization
bearer PASETO v4 public token (or deployment gate key). Auth-disabled dev instances accept any caller.
In: header
Path Parameters
Response Body
curl -X GET "https://example.com/v1/events/string"Event item shape
Real item shape — id, subject object, nested context
Each event is { id, scope, caller, observed_actor, subject: { id, type }, scope_key, modality, content, context: { observed_at, recorded_at, intent, labels }, wal_offset }. Note:
id (not event_id); subject is an object { id, type } (not a string);
observed_at / recorded_at / labels / intent are nested under context (not top-level).
This is the same shape recall and GET /v1/events/{id} return.
Behavior notes (v0.9.9)
exclude_content is a no-op on this endpoint
exclude_content=true is a no-op on GET /v1/events — content is returned in full regardless.
(It does work on recall, where it nulls content.)
- Envelope:
{ items: [...], next_cursor, has_more }. Defaultviewislocal; the enum islocal / granular / structured / holistic / descend. - Filters that work:
labels(comma-separated, any-match),observed_actor,modality,since/until(RFC 3339).GET /v1/events/{id}returns a single event; a missing/unknown id →404. limitmax is500butlimit=600returns200(clamped internally, not a422). A missingscopequery param →400(query-string validation returns400; body validation returns422).