Job and accepts ?wait_seconds=N.
All list routes use keyset cursor pagination — not offset. Pass next_cursor
from the previous page verbatim.
List jobs
workspace_id(optional) — Restrict to one workspace. Omit to include document-operation jobs too.kind(optional, repeatable) — Filter by job kind:parse,split,classify,categorize,extract,ground,ingestion,reconciliation,kg_build,file_upload,file_replace,file_delete,workspace_delete,intelligent_search.status(optional, repeatable) — Filter by status:queued,running,succeeded,failed,cancelled.created_after(optional) — ISO 8601 timestamp; restrict to jobs created strictly after this time.cursor(optional) — Opaque cursor from a previous page’snext_cursor.limit(optional, default 50, max 200) — Rows per page.
Get job
result_state — never a 404. “This expired”
and “this never existed” are different conditions, and a 404 would conflate them.
kind— What the job is doing (see kinds table below).status—queued,running,succeeded,failed, orcancelled.force— Echoes the request’sforceflag for job kinds that support it, such askg_build; otherwisenull.result— Present only onsucceededand only while retained.result_state—available,expired, ornot_retained.error— Present only onfailed.progress— Present whenrunning; includesunits_total,units_done,items_total,items_done,stage.payload_expires_at— When the job’s input and result payloads are deleted.
Get a Ground crop
options.include_previews: true, each match that has a visual
region can include a stable cropped_image_url pointing to this route.
Use the returned cropped_image_url unchanged. The encoded artifact_ref is
opaque and must not be constructed by clients. Every request requires the same
API-key authentication, verifies tenant ownership, and confirms that the crop
belongs to the job result.
Range(optional) — One byte range, such asbytes=0-65535. A satisfiable range returns206 Partial Content.
file_not_found(404) — The job is unavailable, the crop reference is invalid or absent from the Ground result, or its bytes no longer exist.range_not_satisfiable(416) — The requested byte range is invalid.
Cancel job
cancelled is a first-class terminal status, not a
failed variant.
Request body:
reason(optional) — Stored in the job’s error payload for the audit trail.
job_not_found(404) — Job does not exist for this key.job_not_cancellable(409) — Job already reached a terminal state.
Stream job events
text/event-stream).
Each frame is a JobEvent JSON object with a monotonic sequence id.
JobEvent fields:
sequence— Monotonic sequence number per job. UseLast-Event-IDto resume without gaps.at— Timestamp of this event.status— Job status at this point in time.progress—nulluntil running; includesunits_total,units_done,items_total,items_done,stage.message(optional) — Human-readable status message for display.
Last-Event-ID: <sequence> to keep numbering monotonic.
For time-sensitive UI updates, prefer streaming. For background polling, use get_job.
Job kinds
Polling strategy
?wait_seconds=N to receive the result inline when the job finishes quickly.