Jobs

Reopen a completed extraction review

POST
/jobs/{id}/review/reopen

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.

Authorization

bearerAuth
AuthorizationBearer <token>

Existing Eigenpal API key presented as a bearer token.

In: header

Path Parameters

id*string

Durable OCR job identifier (opj_…).

Match^opj_[A-Za-z0-9_-]+$
Lengthlength <= 128

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/jobs/opj_V1StGXR8_Z5jdHi6B-myT/review/reopen" \  -H "Authorization: Bearer $OPENPARSER_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "expected_version": 0  }'
{  "job_id": "opj_V1StGXR8_Z5jdHi6B-myT",  "status": "pending",  "machine_output": null,  "corrected_output": null,  "lineage": {    "format": "lineage@1",    "id": "string",    "profiles": [      "string"    ],    "entities": {},    "activities": {},    "agents": {},    "derivations": [],    "relations": [],    "outputs": [],    "attributes": {      "property1": null,      "property2": null    }  },  "version": 0,  "events": [    {      "version": 1,      "actor_id": "string",      "created_at": "2019-08-24T14:15:22Z",      "type": "field_confirmed",      "path": "string",      "previous_value": null,      "value": null,      "note": "string"    }  ],  "created_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z",  "completed_at": "2019-08-24T14:15:22Z",  "reviewed_by_actor_id": "string",  "viewer_actor_id": "string"}
{  "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": "string",    "message": "string",    "request_id": "string",    "retryable": true,    "details": {      "property1": null,      "property2": null    }  }}
{  "error": {    "code": "string",    "message": "string",    "request_id": "string",    "retryable": true,    "details": {      "property1": null,      "property2": null    }  }}

{  "error": {    "code": "rate_limited",    "message": "request rate limit exceeded",    "request_id": "req_01h2example",    "retryable": true  }}