Skip to main content
GET
/
v1
/
events
Workspace events stream (SSE)
curl --request GET \
  --url https://api.reader.dev/v1/events \
  --header 'x-api-key: <api-key>'
"event: job:progress\ndata: {\"jobId\":\"j_abc\",\"status\":\"processing\",\"completed\":45,\"total\":100}\n\nevent: job:completed\ndata: {\"jobId\":\"j_abc\",\"status\":\"completed\",\"completed\":100,\"total\":100,\"creditsUsed\":100}\n\n"
A single long-lived HTTP connection that emits Server-Sent Events for every job in your workspace as they make progress. Use it for dashboards and realtime UIs.

Event types

EventPayload
job:progress{ jobId, status, completed, total }
job:completed{ jobId, status, completed, total, creditsUsed }
job:failed{ jobId, error }
A keep-alive comment (: ping) is sent every 30 seconds so intermediate proxies don’t close the connection as idle. Most SSE clients ignore comment frames automatically. For a stream scoped to a single job (with progress, page, error, and done events), use GET /v1/jobs/{id}/stream instead. See Events for the full concept guide.

Authorizations

x-api-key
string
header
required

Response

SSE stream that stays open until the client disconnects

Server-Sent Events stream. Each frame is a line-delimited event with an event: line, a data: line (JSON payload), and a trailing blank line. Keep-alive comments (: ping) are sent every 30 seconds. See Events for the full event catalog.

Example:

"event: job:progress\ndata: {\"jobId\":\"j_abc\",\"status\":\"processing\",\"completed\":45,\"total\":100}\n\nevent: job:completed\ndata: {\"jobId\":\"j_abc\",\"status\":\"completed\",\"completed\":100,\"total\":100,\"creditsUsed\":100}\n\n"