PDF to markdown
through one API.
Send a PDF to /parse and get markdown plus typed layout blocks. Headings and tables survive when the parser recognizes them on the page.
PDF in. Markdown and blocks out.
Call /parse sync, async, or batch. The response includes a markdown string and typed layout blocks you can inspect or store.
/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| …",
"blocks": [
{ "index": 0, "page_number": 1, "kind": "text",
"text": "## Payment Authorization" },
{ "index": 1, "page_number": 1, "kind": "table",
"table_html": "<table>…</table>",
"bbox": { "left": 14, "top": 53, "right": 146, "bottom": 123 },
"confidence": 0.98 }
],
"regions": [],
"contents": [],
"chunks": []
}Preview markdown in the playground.
Upload a PDF, inspect the markdown field and block kinds, then create an API key when you are ready to ship.
{ total: "$4,318.20" } b4Markdown you can store. Blocks you can inspect.
The markdown field is ready for chunking and retrieval. The blocks array carries types, bounding boxes, and confidence per region.
Markdown and typed blocks
Both ship in the same /parse response. Use markdown for storage and retrieval. Use blocks when you need per-region types or confidence.
Route low-confidence pages
Blocks can include OCR confidence scores. Send low-confidence results to review before they enter a retrieval index.
Headings, tables, figures
When the parser recognizes them, headings and tables survive in markdown and as typed blocks. Figures keep their own block type.
Extract after parse
Run /extract on the parse result to fill a JSON schema. Citations point back to block indexes and source-page bounding boxes.
Stable block indexes
Each block carries a stable index you can attach to vector metadata or hand to an agent tool call.
Batch document intake
POST multiple PDFs to /parse/batch and poll /jobs/{id} when you ingest folders on a schedule.
Pay for the pages you parse.
The first 1,000 pages are free. After that, parsing is $1 per 1,000 pages.
- No minimums
- No per-seat fees
- Sync, async, and batch
- Console and API keys
PDF parsing, answered.
What the /parse endpoint returns, how pricing works, and where the parser runs.
What does the PDF to markdown API return?
The /parse endpoint returns a markdown string plus normalized typed layout blocks. Blocks can include text, headings, tables, figures, bounding boxes, and confidence values.
Do I get markdown only, or blocks too?
Both ship in the same response. Use markdown for storage and retrieval. Use blocks when you need per-region types, bounding boxes, or confidence scores.
Which parser runs behind the API?
OpenParser hosts PaddleOCR-VL-1.6 behind a REST API. You call /parse with ocr_model set to paddleocr-vl-1.6.
How much does parsing cost?
The first 1,000 parsed pages are free. After that, parsing costs $1 per 1,000 pages.
Can I parse PDFs asynchronously?
Yes. The API supports synchronous, asynchronous, and batch parsing, plus job endpoints for checking status and retrieving results.
Does OpenParser run on my infrastructure?
No. OpenParser hosts PaddleOCR-VL-1.6 behind its API. You send files to the API; OpenParser runs the parser.
Test in the playground.
Ship with an API key.
Upload a PDF in the playground and inspect the markdown and blocks it returns. When you are ready, create a key and call /parse from your backend.