Watch a review as it runs
A server-sent event stream of a review's progress, ending when the review does. It never carries the result.
Last updated 12 September 2026
Watch a review as it runs
GET https://api.quorumtech.ch/attest/v1/attest/draft/jobs/{jobId}/events
Server-sent events: one progress event per change, and a final done or failed, with a
: keep-alive comment every fifteen seconds so an idle connection is not closed. Each
event's data is a progress frame.
The finished result is not carried here. Collect it from
GET /attest/v1/attest/draft/jobs/{jobId}, which is also what settles the bill, so watching
a review can never consume it. Free.
Open this alongside a review that answered 202 and the counts arrive as they change, rather than being asked for. Each event's data is one progress frame, the same shape the progress route returns. A : keep-alive comment every fifteen seconds keeps an idle connection open through proxies.
The stream ends with a done or a failed event. Neither carries the review: collect it from the job route, which is also what settles the bill, so nothing a watcher does can consume a review out from under the caller who started it. If the connection drops, reconnect, or fall back to polling the progress route.
Request
Path parameters:
| Parameter | Description |
| --- | --- |
| jobId | The jobId from a 202 response to POST /attest/v1/attest/draft. |
Example request
curl -X GET "https://api.quorumtech.ch/attest/v1/attest/draft/jobs/<jobId>/events" \
-H "Authorization: Bearer $QUORUM_API_KEY"
Responses
200
The stream. It ends when the review does.
Errors
The body is { "error": { "code", "message" } }; the full catalogue with what to do about each code is on the Errors page.
| Status | Codes | When |
| --- | --- | --- |
| 401 | | The key is missing, not recognised, or revoked. |
| 403 | | The key is not scoped to Attest. |
| 404 | | No such job. |
| 503 | not_configured | The evaluator is not configured (not_configured). |
Cost
Free. Watching a review never settles it; the credits stay held until the job route hands the finished result over.
Related articles
Fetch a page in one call
The same work as the extract call, with the request held open until the page is done and the Markdown returned directly.
Watch an extraction
Server-sent events for one job: its state now, every change after it, and the finished page. Closes when the job does.
Read an extraction's progress
One frame of a job's state without its Markdown, for a progress bar that should not carry a page's text with every poll.
Collect an extraction
Poll a job that answered 202. Returns its state while it runs and the Markdown once it is done.
Still need help?
Ask Quincy in the chat bubble below, or write to support@quorumtech.ch and we will help you directly.