Parse

Parse a document synchronously

POST
/parse

Admit a parse job, wait up to the sync wait limit, and return the selected terminal parse representation when ready. output_format defaults to the versioned provider-neutral openparser@1; raw returns a stable provider envelope around the selected provider's untouched successful result. Terminal failed within the wait window returns 422 ErrorResponse; terminal indeterminate returns 504 ErrorResponse. Returns 202 with a durable job reference and Location if the wait limit expires first.

Example (multipart/form-data):

curl -X POST 'https://api.openparser.dev/parse' \  -H 'Authorization: Bearer YOUR_API_KEY' \  -H "Idempotency-Key: $(uuidgen 2>/dev/null || openssl rand -hex 16)" \  -F 'request={"ocr_model":"paddleocr-vl-1.6","output_format":"openparser@1"};type=application/json' \  -F 'file=@./document.pdf'

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

application/json

application/json

curl -X POST "https://example.com/parse" \  -H "Idempotency-Key: 7f9f2f3d-0f8a-4f0a-9a2b-2f6f0a7d2c11" \  -H "Authorization: Bearer $OPENPARSER_API_KEY" \  -F request="{    \"ocr_model\": \"string\"  }"
{  "output_format": "openparser@1",  "document_id": "doc_01h2example",  "provenance": {    "provider": "paddle",    "model": "paddleocr-vl-1.6"  },  "text": "# Invoice\\n\\nTotal due: $1,234.56",  "markdown": "# Invoice\n\nTotal due: $1,234.56\n",  "pages": [    {      "number": 1,      "width": 1700,      "height": 2200,      "unit": "pixel",      "element_ids": [        "e0",        "e1"      ],      "reading_order": [        "e0",        "e1"      ]    }  ],  "elements": [    {      "id": "e0",      "kind": "text",      "role": "heading",      "text": "# Invoice",      "spans": [],      "languages": [],      "locations": [        {          "page_number": 1,          "bbox": {            "left": 72,            "top": 48,            "right": 220,            "bottom": 92          }        }      ],      "confidence": {        "score": 0.98,        "scope": "recognition",        "calibrated": false      }    },    {      "id": "e1",      "kind": "text",      "role": "paragraph",      "text": "Total due: $1,234.56",      "spans": [],      "languages": [],      "locations": [        {          "page_number": 1,          "bbox": {            "left": 72,            "top": 180,            "right": 420,            "bottom": 220          }        }      ],      "confidence": {        "score": 0.95,        "scope": "recognition",        "calibrated": false      }    }  ],  "text_annotations": [],  "relations": [],  "assets": []}
{  "id": "opj_7f9f2f3d0f8a4f0a9a2b2f6f0a7d2c11",  "operation": "parse",  "status": "queued",  "output_format": "openparser@1",  "created_at": "2026-07-17T12:00:00Z",  "updated_at": "2026-07-17T12:00:00Z"}
{  "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  }}
{  "error": {    "code": "provider_indeterminate",    "message": "job outcome indeterminate",    "request_id": "req_01h2example",    "retryable": true  }}