Jobs
Read the job envelope; `Prefer: wait` long-polls for a state change
GET /v1/jobs/{id}: Read the job envelope; `Prefer: wait` long-polls for a state change
GET /v1/jobs/{id}
| Operation id | getJob |
| Key scope | read: every key |
| Section | Jobs |
#Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | yes | pattern ^job_[0-9a-hjkmnp-tv-z]{26}$ |
since_status | query | enum (7 values) | With Prefer: wait: answer once the status differs from this one (the state you last saw) instead of from the state at request start. · one of "queued", "running", "awaiting_input", "needs_attention", "succeeded", "failed", "canceled" | |
prefer | header | string | wait=<1-60>: wait up to that many seconds for the job to finish |
#Example request
curl -X GET "https://api.kaab.ist/v1/jobs/{id}" \
-H "Authorization: Bearer $KAAB_API_KEY"
#Responses
#200
Job envelope
{
"id": "job_01j9zqk3q7m4n5p6r7s8t9v0wx",
"object": "job",
"mode": "live",
"status": "queued",
"reason": null,
"program": {
"id": "prg_01j9zqk3q7m4n5p6r7s8t9v0wx",
"name": "acme-report",
"version": 3,
"version_id": "pv_01j9zqk3q7m4n5p6r7s8t9v0wx"
},
"inputs_hash": "sha256:2b8f1c",
"data": null,
"raw": null,
"warnings": [],
"meta": {
"tier": null,
"tier_requested": "browser",
"escalations": [],
"region": "eu",
"final_url": null,
"cache": "miss",
"duration_ms": 0,
"parked_ms": 0
},
"error": null,
"input_request": null,
"attention": null,
"progress": null,
"tags": [
"customer:42"
],
"webhook_url": null,
"created_at": "2026-09-18T10:00:00Z",
"started_at": null,
"finished_at": null,
"expires_at": null
}
#Errors
Every error answers with the error envelope; its code is one of the error codes.
| Status | When |
|---|---|
| 400 | request_invalid: request validation failed |
| 401 | Missing or invalid API key |
| 403 | The key's scope does not cover this operation |
| 404 | Resource not found |
| 429 | Rate limited; see Retry-After |
| 500 | internal: unexpected server error |