Job resource. Every
job-creating route accepts ?wait_seconds= to optionally block for a result.
Job states
Every job flows through these states:Sync vs async via wait_seconds
The ?wait_seconds= query parameter controls blocking on each job-creating route:
- 200 — Job reached a terminal state within
wait_seconds; full result is inline. - 202 — Timeout before completion; poll
GET /v1/jobs/{job_id}.
wait_seconds max is 300. It is always a query parameter, never a JSON body field.
Polling
Streaming job events
Subscribe to real-time status transitions instead of polling:text/event-stream (Server-Sent Events). Each event is a complete Job
JSON object. The stream closes when the job reaches a terminal state.
Idempotency
Use theIdempotency-Key HTTP header to make job-creating requests replay-safe:
- First call — Starts a new job.
- Repeated calls with the same key — Returns the original job without starting a new one.
- The key is scoped per API key.
Idempotency-Key is always an HTTP header, never a JSON body field.
Use for:
- Retrying after a network failure (the same job is returned)
- CI/CD pipelines (re-running a step is safe)
Listing jobs
?cursor=<next_cursor> to retrieve the next page. Optional filters: ?status=succeeded, ?kind=parse.
Cancellation
- Queued or running — Job is marked
cancelled. - Already terminal — Idempotent; returns the existing terminal job.