Skip to main content
A ledger event is one accepted, workspace-scoped change record. Work commands, operating-process transitions, handoffs, decisions, artifacts, and run milestones all append events to the same ledger, and 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.
Response: { "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

Add transport=sse (or send Accept: text/event-stream) to hold a bounded push lease over the same ledger:
The stream opens with a 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.