Get job status and result
Tenant-scoped durable job read. Jobs belonging to another tenant return 404. Batch jobs
include cursor-paginated child summaries. Playground tokens (ocr:playground) and ocr:full
keys are both accepted. Successful parse jobs return the originally requested output_format
in result; use GET /jobs/{id}/result?format= to select an alternate stored representation
without re-running OCR.
Authorization
bearerAuth Existing Eigenpal API key presented as a bearer token.
In: header
Path Parameters
Durable OCR job identifier (opj_…).
^opj_[A-Za-z0-9_-]+$length <= 128Query Parameters
Opaque pagination cursor for batch child summaries.
1 <= lengthMaximum number of batch child summaries to return.
1 <= value <= 10050Response Body
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/jobs/opj_V1StGXR8_Z5jdHi6B-myT" \ -H "Authorization: Bearer $OPENPARSER_API_KEY"{ "id": "opj_7f9f2f3d0f8a4f0a9a2b2f6f0a7d2c11", "operation": "parse", "status": "succeeded", "output_format": "openparser@1", "created_at": "2026-07-17T12:00:00Z", "updated_at": "2026-07-17T12:00:15Z", "completed_at": "2026-07-17T12:00:15Z", "pipeline_id": null, "pipeline_version": null, "result": { "output_format": "openparser@1", "document_id": "doc_01h2example", "provenance": { "provider": "paddle", "model": "paddleocr-vl-1.6" }, "text": "Hello", "markdown": "Hello", "pages": [ { "number": 1, "width": 1000, "height": 1400, "unit": "pixel", "element_ids": [ "e0" ], "reading_order": [ "e0" ] } ], "elements": [ { "id": "e0", "kind": "text", "role": "paragraph", "text": "Hello", "spans": [], "languages": [], "locations": [ { "page_number": 1, "bbox": { "left": 72, "top": 48, "right": 200, "bottom": 92 } } ] } ], "text_annotations": [], "relations": [], "assets": [] }}{ "error": { "code": "unauthorized", "message": "invalid API key", "request_id": "req_01h2example", "retryable": false }}{ "error": { "code": "forbidden", "message": "API key lacks required scope", "request_id": "req_01h2example", "retryable": false }}{ "error": { "code": "job_not_found", "message": "job not found", "request_id": "req_01h2example", "retryable": false }}{ "error": { "code": "rate_limited", "message": "request rate limit exceeded", "request_id": "req_01h2example", "retryable": true }}List jobs GET
Tenant-scoped chronological list of top-level OCR jobs (batch children are omitted). Returns lightweight summaries only — full results remain on `GET /jobs/{id}`. Cursor pagination is stable newest-first with an `id` tie-break. Optional `status` and `operation` filters are validated strictly; unknown values return `400`.
Get an extraction review GET
Return the immutable machine output beside the current corrected output and append-only review events. A succeeded extraction with no confirmations returns a synthesized pending review at version 0. Cross-tenant and unknown jobs return `404`.