/v1/jobs/{job_id}Poll async jobs for status, progress, result, and errors. Same resource supports cancelling a job while it is still queued. Auth: X-API-Key on both methods.
GET — Poll job
Returns a single JSON object for the job. input_s3_key and input_s3_bucket are not exposed; the API includes a presigned pdf_url for the source PDF (default expiry 3600s in _make_presigned_url).
Post-processing on read applies only to door-detector: result.doors / result.doors_found are filtered. TOC and content-extractor results are returned as stored.
Worker failures (e.g. URL_UNREACHABLE, PDF_CORRUPT, INTERNAL_ERROR) appear as status: failed with error_code on this object.
GET — Code examples
GET — Response — 200 OK
Shape varies by lifecycle stage; see the preview panel for queued vs complete examples.
GET — Errors
DELETE — Cancel job
Cancels a job only while status === "queued". Same auth and ownership rules as GET.
DELETE — Errors
Credits
Submitting jobs (for example spec parse or content-extract) consumes SPEC credits; polling GET /v1/jobs and DELETE /v1/jobs do not.
Typical spec workflow
POST /v1/documents→document_id- POST /v1/specs/parse/document → TOC
job_id GET /v1/jobs/{toc_job_id}until complete →result.divisions/ section codes- POST /v1/specs/content-extract with
job_id: TOC job id andsection_codesand/ordivision_codes GET /v1/jobs/{content_job_id}until complete →result.sections
Response Preview
{ "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "status": "queued", "model": "toc-parser", "model_version": "toc-parser-v1.0.0", "progress": "Queued", "result": null, "queued_at": "2025-03-01T18:00:00.000Z", "processing_started_at": null, "completed_at": null, "processing_time_ms": null, "pdf_url": "https://s3.example.com/presigned-get…" }