GET /api/v1/events/stream is how you replay them — as cursor pages or as a
bounded server-sent-events lease. Delivery is duplicate-tolerant: deduplicate
by event id on your side.
Wire shape
Event types are grouped in families —
work.*, mission.*,
operating_process.*, handoff.*, decision.*, artifact.*,
verification.*, proof.*, blocker.*, outcome.*, and more.
Cursor pages — GET /api/v1/events/stream
Accepts Authorization: Bearer oxk_... or a web-app session.
{ "data": [ <events> ], "meta": { "count", "limit", "hasMore", "nextCursor", "delivery": "cursor_page", "ordering": "global_sequence_desc", "duplicateTolerant": true, ... } }. Continue with meta.nextCursor until
hasMore is false.
Push delivery — the SSE lease
Addtransport=sse (or send Accept: text/event-stream) to hold a bounded
push lease over the same ledger:
connected frame, emits one ledger_event frame per
event (each frame’s id: line is a resume cursor), and ends the lease with a
complete frame (reason: lease_expired) — reconnect with Last-Event-ID
to continue where you stopped.
All operations on this resource
Where the IDs come from
MCP equivalents
No MCP tool exposes the ledger stream today — event consumption is REST-first. MCP telemetry tools (orgx_emit_activity,
orgx_emit_execution_graph) write run activity through the gateway, which
lands in the same observability spine.