Nine OCR models, one OpenParser output

Document parsing API

Send a PDF or image to Paddle, Mistral, Azure, Google, or AWS Textract. The parse API returns normalized blocks, markdown, table structure, bounding boxes, and confidence when the selected model supports them.

Blocks and markdownBBox + confidenceSync, async, batch
1
2
3
b1 title
PAYMENT AUTHORIZATION
b2 field
Account
4021-8837
b3 field
Date
May 2025
b4 table
ItemAmount
Consulting$4,636.40
Adjustment-$318.20
Total$4,318.20
b5 checkbox
PaidPending
b6 signature
readingpaddleocr-vl-1.6
analyzing
0/6 blocks
[ api ]

POST /parse returns typed layout blocks

Call /parse, /parse/async, or /parse/batch. Poll /jobs for status. GET /files/{id}/content when you need the source bytes again.

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": []
}
[ console ]

Inspect parsed blocks in the playground

Upload a PDF, review markdown and block kinds, then create API keys for POST /parse.

openparser.dev/playgroundsigned in
playgroundno code
statement.pdf1 page · 48 KB
parsePaddleOCR-VLMistral OCRAzure DITextract9 models
extractClaudeGPT-4oLlamalocalany LLM
Run{ total: "$4,318.20" } b4
[ output ]

ParsedDocument with typed layout blocks

POST /parse returns blocks[], markdown, and stable fields your integration can rely on.

Typed layout blocks

Each page comes back as an ordered list of blocks. Kinds include text, headings, tables, figures, and signatures. Every block has an index you can cite downstream.

b1
0.99
b4
0.98
b6
0.70

OCR confidence

Blocks can include OCR confidence scores. Set a threshold and send low-confidence results to review before they enter your pipeline.

Normalized output

Responses use one normalized contract: document_id, page_count, blocks[], markdown, and stable fields for downstream processing.

schema {
total
}
{
total: "$4,318"
}

Downstream extraction

Parsing stops at layout. Point /extract at a parse job when you need JSON against a schema, with citations tied to block ids.

b4

Bounding boxes

Blocks include bbox coordinates on the source page. Highlight the region behind a citation or overlay parsed content on the original PDF.

b2b4b6
x, y, w, h

Tables and figures

Tables return as structured blocks with HTML. Figures carry their own block type so agents can treat charts and images differently from body copy.

[ pricing ]

Parsing bills by page count

Each ocr_model publishes a page rate. /extract bills separately by llm_model token usage.

free credits
$10
at signup
pay per page
$1/ 1,000 pages
open-weight hosted, starting at
+
extraction
Per token
billed on llm_model tokens
  • $10 credits at signup
  • Open-weight hosted models from $1 per 1,000 pages
  • Each ocr_model publishes its own page rate
  • Sync, async, and batch included
  • Extraction billed per token on the LLM you choose
  • Console and API keys
Create an API key
[ questions ]

Document parsing API FAQ

Nine ocr_model ids, ParsedDocument fields, sync/async/batch modes, and page pricing.

Which OCR models can the document parsing API run?

Choose from nine hosted models across Paddle, Mistral, Azure Document Intelligence, Google Document AI, and AWS Textract. Pass the model id in ocr_model on each parse request.

What does a parse response contain?

A ParsedDocument with output_format openparser@1, document_id, page_count, markdown, and blocks[]. Blocks can include text, headings, tables, figures, bounding boxes, and confidence values.

Can I parse PDFs asynchronously?

Yes. POST to /parse/async, then GET /jobs/{id} for status and the result when the job succeeds. Batch parsing uses /parse/batch with multiple files in one request.

How is parsing different from basic OCR?

Basic OCR returns a text dump. The parse endpoint returns typed layout blocks and markdown, with table structure, block ids, bounding boxes, and per-block confidence.

How much does parsing cost?

New accounts get $10 in credits. Open-weight hosted models start at $1 per 1,000 pages; other OCR models publish their own per-page rates. Structured extraction adds the token cost of the language model you select.

What file types can I send?

PDFs and images. Upload the file as multipart form data alongside the request JSON, as shown in the API reference.

Parse in Studio

Pick ocr_model and inspect blocks before you integrate

Upload a PDF, set ocr_model, and review markdown, block kinds, and confidence scores in Studio before you call POST /parse.