Skip to main content
The unified job resource covers all async operations: document operations, ingestions, knowledge-graph builds, intelligent search, file operations, and reconciliation. Every job-creating method returns a 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

List all jobs for the authenticated tenant, newest first. Query parameters:
  • 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’s next_cursor.
  • limit (optional, default 50, max 200) — Rows per page.
Response:

Get job

Retrieve full details of a job, including the result for terminal jobs. A late poll always returns the job with a result_state — never a 404. “This expired” and “this never existed” are different conditions, and a 404 would conflate them.
Response (running):
Response (succeeded):
Response (failed):
Job fields:
  • kind — What the job is doing (see kinds table below).
  • statusqueued, running, succeeded, failed, or cancelled.
  • force — Echoes the request’s force flag for job kinds that support it, such as kg_build; otherwise null.
  • result — Present only on succeeded and only while retained.
  • result_stateavailable, expired, or not_retained.
  • error — Present only on failed.
  • progress — Present when running; includes units_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

Stream a source-image crop produced by a successful Ground job. When Ground is requested with 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.
Headers:
  • Range (optional) — One byte range, such as bytes=0-65535. A satisfiable range returns 206 Partial Content.
Errors:
  • 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

Cancel a queued or running job. cancelled is a first-class terminal status, not a failed variant. Request body:
Body fields:
  • reason (optional) — Stored in the job’s error payload for the audit trail.
Response (200):
Errors:
  • job_not_found (404) — Job does not exist for this key.
  • job_not_cancellable (409) — Job already reached a terminal state.

Stream job events

Stream real-time job status updates as Server-Sent Events (text/event-stream). Each frame is a JobEvent JSON object with a monotonic sequence id. JobEvent fields:
  • sequence — Monotonic sequence number per job. Use Last-Event-ID to resume without gaps.
  • at — Timestamp of this event.
  • status — Job status at this point in time.
  • progressnull until running; includes units_total, units_done, items_total, items_done, stage.
  • message (optional) — Human-readable status message for display.
Output:
The stream closes when the job reaches a terminal state or the ceiling (300 s) passes. Resume a disconnected stream with 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

Or use ?wait_seconds=N to receive the result inline when the job finishes quickly.