Get a parse job result representation
Return the selected parse wire body for a tenant-owned succeeded parse job.
format defaults to the job's original output_format. Fresh dual-artifact parses
can serve either openparser@1 or raw from object storage without re-running HPS
or charging pages. Historical jobs only serve the representation already present in
result_json; unavailable alternates return 422 result_format_unavailable with
guidance. Non-terminal jobs return 409 job_not_terminal. Playground tokens
(ocr:playground) and ocr:full keys are both accepted.
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
Parse representation to return. Defaults to the job's original output_format
when omitted. Fresh parses store both representations as immutable object-store
artifacts; historical jobs only expose the representation already present in
result_json. Requesting an unavailable alternate returns 422 and never
re-runs OCR.
Value in
- "openparser@1"
- "raw"
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/jobs/opj_V1StGXR8_Z5jdHi6B-myT/result" \ -H "Authorization: Bearer $OPENPARSER_API_KEY"{ "output_format": "openparser@1", "document_id": "string", "provenance": { "provider": "string", "model": "string", "version": "string", "operation": "string" }, "text": "string", "markdown": "string", "pages": [ { "number": 1, "source_page_number": 1, "width": 1, "height": 1, "unit": "pixel", "rotation_degrees": 0, "languages": [], "confidence": { "score": 0, "scope": "detection", "calibrated": false, "source_value": 0, "source_scale": "zero_to_one" }, "quality": { "score": { "score": 0, "scope": "detection", "calibrated": false, "source_value": 0, "source_scale": "zero_to_one" }, "defects": [], "metrics": [] }, "image_asset_id": "string", "element_ids": [], "reading_order": [] } ], "elements": [], "text_annotations": [], "relations": [], "assets": []}{ "error": { "code": "malformed_request", "message": "multipart field `request` is not valid JSON", "request_id": "req_01h2example", "retryable": false }}{ "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": "job_not_terminal", "message": "parse job is not terminal yet", "request_id": "req_01h2example", "retryable": true, "details": { "status": "running" } }}{ "error": { "code": "result_format_unavailable", "message": "requested parse representation is not available for this job", "request_id": "req_01h2example", "retryable": false, "details": { "requested_format": "raw", "available_format": "openparser@1", "guidance": "Re-admit a parse with dual artifacts, or request the available format." } }}{ "error": { "code": "rate_limited", "message": "request rate limit exceeded", "request_id": "req_01h2example", "retryable": true }}{ "error": { "code": "provider_indeterminate", "message": "job outcome indeterminate", "request_id": "req_01h2example", "retryable": true }}Reopen a completed extraction review POST
Take a sign-off back so the run returns to `pending` and its fields can be reviewed again. Only the reviewer who completed the run may reopen it. Both events stay in the log, so the trail shows the run was signed off and then reopened, while the review status and the lineage decision follow the live completion. Uses the same optimistic version check as field confirmations.
Download retained job source bytes GET
Stream the retained source document for a parse or single-document extract job. Jobs without retained source bytes return `404 source_not_available`. Check `has_source` on `GET /jobs/{id}` before calling. Playground tokens (`ocr:playground`) and `ocr:full` keys are both accepted, matching other job read routes. Optional `Range` requests may return `206` partial content or `416` when the range is unsatisfiable.