OCR router API with per-request ocr_model.
Set ocr_model on /parse and keep the same request shape, jobs API, and openparser@1 graph. Swap Paddle for Mistral, Azure, Google, or Textract without rewriting consumers.
9 OCR models on one API
Set ocr_model on /parse. Each model returns openparser@1 blocks and markdown. Prices per 1,000 pages below.
- PaddleOCR-VL 1.6paddleocr-vl-1.6
Open-weight hosted. General documents at the lowest page price.
ProviderBaidu / PaddlePricing / 1,000 pages$1OutputMarkdown + boxes - Mistral OCR 4mistral-ocr-4
Complex, visually rich docs when quality matters more than price.
ProviderMistralPricing / 1,000 pages$4.60OutputMarkdown + boxes - Mistral OCR 3mistral-ocr-3
Clean markdown without bounding-box regions.
ProviderMistralPricing / 1,000 pages$2.30OutputMarkdown - Azure DI Layoutazure-di-layout
Microsoft-centric deployments and layout-heavy enterprise PDFs.
ProviderMicrosoft AzurePricing / 1,000 pages$11.50OutputMarkdown + boxes - Azure DI Readazure-di-read
Search and indexing in Microsoft environments.
ProviderMicrosoft AzurePricing / 1,000 pages$1.73OutputPlain text + boxes - Google Enterprise Document OCRgoogle-docai-ocr
Google Cloud deployments needing structured OCR.
ProviderGoogle CloudPricing / 1,000 pages$1.73OutputMarkdown + boxes - AWS Textract Detectaws-textract-detect
Low-cost text detection for AWS-native pipelines.
ProviderAWSPricing / 1,000 pages$1.73OutputPlain text + boxes - AWS Textract Layoutaws-textract-layout
Headings, sections, and layout-aware reading order on AWS.
ProviderAWSPricing / 1,000 pages$4.60OutputMarkdown + boxes - AWS Textract Tables + Layoutaws-textract-tables-layout
Forms and financial docs with important tables in AWS.
ProviderAWSPricing / 1,000 pages$17.25OutputMarkdown + tables + boxes
Route with one field.
Every model uses POST /parse, /parse/async, and /parse/batch. Change ocr_model. Leave the rest of your integration alone.
/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": []
}Router mechanics.
OpenParser is the control plane: one auth surface, one job system, one document graph, per-model retail pricing.
One request shape
Multipart file plus JSON request body. Sync, async, and batch variants stay identical when you change engines.
Per-model page pricing
Each ocr_model publishes its own page rate. Open-weight hosted models start at $1 per 1,000 pages; premium engines cost what they cost.
Stable openparser@1 graph
Document metadata, ordered blocks, text, and markdown share one contract. Downstream code reads the graph, not vendor JSON.
Discover models at runtime
GET /models/ocr returns ids, guidance, capabilities, option controls, and current retail page prices.
Jobs API unchanged
Poll /jobs the same way for every engine. Batch up to 100 documents without a provider-specific queue.
Extraction stays separate
Parse meters pages. Extract meters LLM tokens. Cite block indexes from whichever OCR model produced the graph.
Pay the model you route to.
New accounts get $10 in credits at signup, about 10,000 pages on open-weight hosted models at $1/1,000 pages. Other engines publish their own page prices on the model catalog.
- Open-weight hosted from $1 / 1,000 pages
- $10 credits at signup
- Other models: published rates on /models/ocr
- Option surcharges listed per model
- Extraction billed per LLM token
OCR router FAQ.
Switching models, pricing, output stability, and when to use open-weight hosted vs cloud engines.
What is an OCR router?
An OCR router exposes multiple OCR engines behind one API. You pick a model id per request, keep the same endpoints, and receive the same openparser@1 document graph.
How do I switch OCR providers?
Change the ocr_model field on parse or file-backed extract requests. Example ids: paddleocr-vl-1.6, mistral-ocr-4, azure-di-layout, google-docai-ocr, aws-textract-layout.
Does every model cost the same?
No. OpenParser-hosted open-weight models start at $1 per 1,000 pages. Mistral, Azure, Google, and AWS publish higher page rates. Check GET /models/ocr for live numbers. New accounts get $10 in free credits.
Does the output format change by model?
The wire format stays openparser@1. Capability details differ: some models omit markdown or regions. The catalog marks those capabilities per id.
How do I list available OCR models?
Call GET /models/ocr, or openparser models ocr --json from the CLI, or client.models.ocr() in the TypeScript SDK.
When should I use open-weight hosted vs a cloud engine?
Start with open-weight hosted models like paddleocr-vl-1.6 for general documents and cost. Move to Mistral for richer visual docs, or Azure/Google/AWS when you need that vendor’s OCR behavior inside the same OpenParser integration.
Switch ocr_model and compare outputs in Studio.
Upload a PDF, change ocr_model, and inspect the openparser@1 graph before you use it in production.