Job
Async AI job objects
The object that AI endpoints create and that you poll or stream. See Async AI jobs for the endpoints that operate on it.
JSON
1{2 "job_id": "job_8f3a2b...",3 "type": "discover",4 "status": "running",5 "progress": {6 "message": "Reading datasheet — Electrical Characteristics",7 "fraction": 0.4,8 "updated_at": "2026-06-01T17:05:12Z"9 },10 "created_at": "2026-06-01T17:04:00Z",11 "completed_at": null,12 "stream_url": "https://api.zenode.ai/v1/jobs/job_8f3a2b.../stream",13 "usage": {14 "input_tokens": 18234,15 "output_tokens": 2451,16 "total_tokens": 2068517 },18 "result": null,19 "error": null,20 "request_id": "req_2c19..."21}| Field | Type | Notes |
|---|---|---|
job_id | string | Opaque job identifier |
type | string | discover | deep_dive — determines the shape of result |
status | string | queued | running | completed | failed | cancelled |
progress | object | null | Coarse progress — { message, fraction, updated_at } |
created_at | string | ISO-8601 |
completed_at | string | null | ISO-8601; set on a terminal status |
stream_url | string | Absolute URL of the SSE progress stream |
usage | object | null | LLM tokens consumed — { input_tokens, output_tokens, total_tokens } |
result | object | null | Typed result once completed; null until then |
error | Error | null | Populated when status is failed |
The result shape depends on type: a DiscoverResult
(summary + DiscoverPick[]) for discover, or a
DeepDiveResult
(answers of Answer) for deep_dive.
JobSummary
The compact list row returned by GET /v1/jobs — a Job without the heavy result
(job_id, type, status, progress, created_at, completed_at, error). Fetch the job by id
for the full payload.
Used by: Async AI jobs.