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}.
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.
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.
REST endpoints
Parse and extract each expose sync, async, and batch variants. Job routes handle polling, listing, and file retrieval.
/parserequestcurl 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"{
"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.
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.
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.