Extract

Extract structured data from multiple documents

POST
/extract/batch

Admit up to 100 file-backed extract child jobs in one durable batch. Every item uses file_index or file_id; parse_job_id reuse is single-extract-only and is not accepted in batch. Partial child failures are preserved. Parent status derivation follows JobStatus; billing is evaluated per child.

Authorization

bearerAuth
AuthorizationBearer <token>

Existing Eigenpal API key presented as a bearer token.

In: header

Header Parameters

Idempotency-Key*string

Client-supplied idempotency key. Required on every parse or extract POST. Must be unique per distinct request body for a given tenant and operation.

Length1 <= length <= 256

Request Body

multipart/form-data

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

application/json

application/json

application/json

curl -X POST "https://example.com/extract/batch" \  -H "Idempotency-Key: 7f9f2f3d-0f8a-4f0a-9a2b-2f6f0a7d2c11" \  -H "Authorization: Bearer $OPENPARSER_API_KEY" \  -F request="{    \"items\": [      {        \"client_item_id\": \"string\"      }    ]  }"
{  "id": "opj_b2c3d4e56f7a8901bcdef23456789012",  "operation": "parse_batch",  "status": "queued",  "output_format": "openparser@1",  "created_at": "2026-07-17T12:00:00Z",  "updated_at": "2026-07-17T12:00:00Z",  "child_count": 2}
{  "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": "insufficient_credits",    "message": "tenant has insufficient credits for admission",    "request_id": "req_01h2example",    "retryable": false  }}
{  "error": {    "code": "forbidden",    "message": "API key lacks required scope",    "request_id": "req_01h2example",    "retryable": false  }}
{  "error": {    "code": "idempotency_conflict",    "message": "Idempotency-Key was already used with a different request body",    "request_id": "req_01h2example",    "retryable": false  }}
{  "error": {    "code": "limit_exceeded",    "message": "source exceeds 50 MiB admission limit",    "request_id": "req_01h2example",    "retryable": false,    "details": {      "limit": "max_input_bytes",      "max_value": 52428800    }  }}
{  "error": {    "code": "unsupported_media_type",    "message": "only PDF, PNG, and JPEG uploads are accepted",    "request_id": "req_01h2example",    "retryable": false  }}

{  "error": {    "code": "unsupported_ocr_model",    "message": "unknown OCR model registry name",    "request_id": "req_01h2example",    "retryable": false,    "details": {      "ocr_model": "paddleocr-vl-9.9"    }  }}

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

{  "error": {    "code": "source_upload_failed",    "message": "source upload failed",    "request_id": "req_01h2example",    "retryable": true  }}