Skip to content

Job status

Base URL https://api.accessful.de/api/v1/upload-service. Every request needs the X-API-Key header — see Authentication.

GET /job-status/{caseId}

200 OK — a finished case:

{ "jobStatus": "completed", "stage": "finished", "score": 87 }

score is the accessibility quality of the result, 0–100 (final once completed). 404 is returned for an unknown caseId.

jobStatus Meaning
queued Waiting in the queue.
running Currently processing.
completed Finished — result ready to download. terminal
failed Processing failed. terminal
analyzer_failed The accessibility analysis step failed. terminal
canceled The job was canceled. terminal
quota_pending Awaiting an asynchronous quota check.
quota_exceeded Rejected — contract quota exhausted. terminal

When polling, stop as soon as you see a terminal state.

Alongside jobStatus, every response carries a stage field — the fine-grained pipeline phase, orthogonal to the coarse status. Use it to show progress beyond a plain “running”: the long AI-remediation phase is distinguishable from analysis.

stage Meaning
queued Accepted, waiting for the first analysis to start.
analyzing Initial analysis of the uploaded file is running.
resolving AI remediation of the file is running.
revalidating Re-analysis of the remediated file is running.
finished Processing finished; score reflects the final file.
failed Processing stopped on an unrecoverable error.

While a case is queued, the response also tells you where it sits in the analysis queue — the same live “waiting position” the web UI shows — so you can surface a meaningful “7 of 23, ~5 min” instead of a static “queued”.

200 OK — a case still waiting:

{
"jobStatus": "queued",
"stage": "queued",
"score": 0,
"queuePosition": 7,
"queueTotal": 23,
"estimatedWaitSeconds": 300
}
Field Type Notes
queuePosition integer 1-based rank in the queue (1 = next to be processed).
queueTotal integer Total number of cases currently waiting (the queue length).
estimatedWaitSeconds integer Best-effort wait estimate in seconds, derived from queue depth and analyzer throughput. May be absent if no estimate is available.

The position is a best-effort live snapshot recomputed on every request: it only ever decreases as cases ahead are processed, and a single dequeue shifts everyone behind it. For a push-based alternative, register the case.queued webhook to receive the starting position the moment a case is accepted.