Skip to main content
Returns the current state of a job, including its full result once it has succeeded. This is the polling endpoint for every async flow, and it is never rate-limited.
GET /jobs/{job_id}

Request

job_id
uuid
required
The id returned when the job was started. Jobs are tenant-scoped — an id belonging to another tenant returns 404.

Response

job_id
uuid
action
string
"parse", "ground", or "categorize".
status
string
"pending", "running", "succeeded", or "failed". The last two are terminal. See Jobs.
result
object | null
Populated only when status is "succeeded". A tagged union on result_type — the shape is documented on each method page: parse, ground, categorize. Artifact URLs inside the result are freshly signed on every read (valid 1 h), so re-fetching the job is the way to get a new download link.
error
object | null
Populated only when status is "failed": { "code": "...", "message": "..." }. Cancelled jobs carry code: "cancelled".
created_at
datetime
started_at
datetime | null
completed_at
datetime | null

Example

curl -s "$NDI_BASE/jobs/0c9b2c1e-8f4a-4a91-b7a5-3f2d1e0a9c8b" \
  -H "X-API-Key: $NDI_API_KEY"
Running
{
  "job_id": "0c9b2c1e-8f4a-4a91-b7a5-3f2d1e0a9c8b",
  "action": "parse",
  "status": "running",
  "result": null,
  "error": null,
  "created_at": "2026-07-12T21:04:11Z",
  "started_at": "2026-07-12T21:04:12Z",
  "completed_at": null
}