api.openparser.dev · Bearer auth · openparser@1

OpenParser REST API

POST multipart files to /parse and /extract on api.openparser.dev. Set ocr_model and output_format openparser@1 on parse. Sync routes block until done; async and batch routes return a job id to poll with GET /jobs/{id}.

api.openparser.devAuthorization: Bearerocr_model + openparser@1
/ api

Parse, extract, and jobs

Three route groups on one host. Parse turns files into layout blocks. Extract fills your JSON schema. Jobs carry async and batch results.

Parse

POST /parse with a multipart file and request JSON. Returns ParsedDocument: blocks[], markdown, bounding boxes, and per-block confidence. Change ocr_model without changing response fields.

b1
0.99
b4
0.98
b6
0.70

Extract

POST /extract against a parse job or uploaded file. Supply a JSON schema and llm_model. Responses include field values with citations tied to block ids from the parse output.

Jobs

Async and batch routes return 202 with a job id. GET /jobs/{id} for status and results. GET /jobs lists recent work. GET /files/{id}/content retrieves stored bytes.

/ api

REST endpoints

Parse and extract each expose sync, async, and batch variants. Job routes handle polling, listing, and file retrieval.

endpointsapi.openparser.dev
  • Full API reference
POST/parserequest
curl https://api.openparser.dev/parse \
  -H "Authorization: Bearer op_live_…" \
  -H "Idempotency-Key: $(uuidgen)" \
  -F 'request={"ocr_model":"paddleocr-vl-1.6","output_format":"openparser@1"};type=application/json' \
  -F "file=@statement.pdf"
response200 · 1.9s
{
  "output_format": "openparser@1",
  "document_id": "doc_3f9a2c",
  "page_count": 1,
  "markdown": "## Payment Authorization\n| Item | Amount |\n| --- | --- |\n| Total | $4,318.20 |",
  "blocks": [
    {
      "index": 0,
      "page_number": 1,
      "kind": "text",
      "text": "## Payment Authorization"
    },
    {
      "index": 1,
      "page_number": 1,
      "kind": "table",
      "table_html": "<table><tr><th>Item</th><th>Amount</th></tr><tr><td>Total</td><td>$4,318.20</td></tr></table>",
      "bbox": {
        "left": 14,
        "top": 53,
        "right": 146,
        "bottom": 123
      },
      "confidence": 0.98
    }
  ],
  "regions": [],
  "contents": [],
  "chunks": []
}

Hosted OCR model catalog and per-page prices are on Models & pricing. The openparser@1 output contract is on openparser@1 schema.

/ questions

OpenParser API FAQ

Authentication, processing modes, output format, and client libraries.

How do I authenticate?

Send Authorization: Bearer op_live_… on every request. Create keys in Studio under API keys. The CLI stores the same token after openparser auth login.

When should I use sync vs async?

POST /parse and POST /extract block until the result is ready. Use them for single documents that finish in a few seconds. POST /parse/async and /extract/async return 202 with a job id; poll GET /jobs/{id}. Batch routes queue up to 100 items in one request.

What is the output format?

Set output_format to openparser@1 on parse requests. ParsedDocument responses include document_id, page_count, blocks[], markdown, and stable fields for downstream code. Extraction returns your schema JSON plus grounding citations into those blocks.

Are there official SDKs?

Yes. @openparser/sdk for TypeScript, the openparser package on PyPI for Python, and @openparser/cli for shell and agent workflows. All clients target the same REST surface documented in the API reference.

/ integrate

Get started with the API

Create a key in Studio, send Bearer auth to api.openparser.dev, and set output_format openparser@1 on parse requests.