Jobs
GET /v1/jobs
Cost · Free (control-plane endpoint)
| Query | Type | Notes |
|---|---|---|
status |
enum | queued|running|succeeded|failed|timed_out|aborted |
type |
enum | search|batch_detail|chained_search_detail|building_units |
since |
ISO timestamp | created_at >= since |
limit |
int | default 50, max 500 |
offset |
int | default 0 |
200 response
{ "data": [ { "id": "8c2a...", "type": "batch_detail", "status": "succeeded", "result_count": 213, "error": null, "chain_stage": null, "created_at": "...", "started_at": "...", "completed_at": "..." } ], "meta": { "limit": 50, "offset": 0 }, "request_id": "..."}GET /v1/jobs/{id}
Cost · Free (control-plane endpoint)
{ "data": { "id": "8c2a...", "type": "chained_search_detail", "status": "running", "result_count": null, "chain_stage": "detail", "error": null, "created_at": "...", "started_at": "...", "completed_at": null }, "request_id": "..."}chain_stage is search or detail for chained jobs, null otherwise.
For chained_search_detail, status: succeeded means BOTH stages finished.
GET /v1/jobs/{id}/results
Cost · Free, billing happens once when the job completes, not on result reads
Returns paginated rows once status: succeeded.
| Query | Type | Notes |
|---|---|---|
limit |
int | default 100, max 1000 |
offset |
int | default 0 |
format |
enum | json (default), csv, ndjson |
200 response (JSON)
{ "data": [{ "zpid": "...", "...": "..." }, ...], "meta": { "count": 200, "total": 8541, "limit": 200, "offset": 400, "has_more": true }, "request_id": "..."}Errors
| Status | Code | Cause |
|---|---|---|
| 404 | job_not_found |
Wrong UUID, or not your account |
| 409 | job_not_ready |
status is not succeeded |
| 502/504 | upstream_error/upstream_timeout |
Result fetch failed |