Skip to main content
Watch events as they arrive over Server-Sent Events or a WebSocket. Use it for live dashboards, tailing, and dev feedback.
Best-effort and lossy by design: the durable delivery guarantee is signed outbound webhooks. Use the stream to observe, not to guarantee receipt.

Server-Sent Events

Each event is an SSE frame; a control frame signals a gap if you resumed past the buffer:

In the browser

Resume

The buffer holds roughly the last 1,000 events (up to ~5 minutes). Resume from where you left off with the Last-Event-ID header (SSE sends it automatically on reconnect) or the ?after_seq= query parameter. If your resume point has already aged out, Hookie emits a stream-gap event with the range you missed, then continues live.

WebSocket

From the console

Signed-in users get the same stream over the session-authenticated /admin/api/stream endpoint: no ingest key required, same SSE and WebSocket behavior, same resume. It is the endpoint to point a dashboard of your own at when you already have a browser session and would rather not mint an ingest key for it. The console tails it in Live mode. Switch on Live on a project’s Observability or Deliveries tab:
  • Observability lists events as they are stored, newest first (the last 50), and re-runs your search as they land. Click an event’s ID to trace its whole chain.
  • Deliveries re-reads the delivery list and destination health when an event arrives and every 10 seconds, because delivery outcomes and retries are not on the stream.
Pause holds what arrives without dropping it; Resume shows it. A tab in Live mode is one stream connection against your plan’s limit. When the stream refuses one (the limit is reached), the tab says so and refreshes every 10 seconds instead. Without Live, each view’s Refresh button fetches new arrivals and shows when it last did.

Limits

  • Concurrent connections are capped per plan (Free: 1, Pro: 5, Team: 20).
  • Authenticate with an active ingest key: a revoked key, or one past its expiry, is refused with 404. Create and rotate keys in the project’s Ingest keys tab. The stream is a read-only tail and never exposes stored data. A key streams its own project’s events only: project_id is optional, and naming any other project answers 403.
  • A suspended workspace cannot open a stream: 403 with "reason": "workspace_suspended".