Engines, Products & Outputs
Engines, Products & Outputs
A DeepRead request is two choices:
- Engine (
pipeline) — how thoroughly we read the document:extract(default on Free and Standard) — one OCR pass. Seconds per page.deep-extract(default on Enterprise) — two independent OCR passes reconciled by an LLM judge, automatic rotation correction, and a verification read of every extracted value. Takes longer; catches what a single read misses.
- Fields or not (
schema/blueprint_id) — send a schema or a blueprint and you get structured fields back; send neither and you get the document as Markdown.
Together they decide the product you are billed for:
| You send | Product | Price on Standard |
|---|---|---|
pipeline=extract, with or without a schema or blueprint | Extract — the document as Markdown with tables, layout blocks and bounding boxes, plus your fields when you send a schema, each with a review flag, the reason for it and its location | $15 per 1,000 pages |
pipeline=deep-extract, with or without a schema | Deep Extract — the two-pass engine, verified values, searchable PDF add-on | $35 per 1,000 pages |
pipeline=deep-extract and speed=fast, with or without a schema | Deep Extract Fast — Deep Extract about twice as fast, same accuracy | $90 per 1,000 pages |
Every result carries product, so you always know what ran. GET /v1/pipelines lists the engines and the products with prices.
speed
Send speed=fast to run a job faster (Standard and Enterprise plans; a Free account gets 402). Omit it (or send speed=standard) for the normal speed.
deep-extract— about 2x faster on typical documents, same accuracy. Sold as Deep Extract Fast at $90 per 1,000 pages, against $35 for Deep Extract;productisdeep-extract-fast.extract— costs nothing extra: Extract is already fast, sospeed=faststays at the Extract price ($15 per 1,000 pages) andproductstaysextract. It makes no difference on short documents and is about 2x faster on long documents with big tables (40+ pages).
How long a document takes, median from submit to result in our public benchmarks (November 2026):
| Document | Extract | Deep Extract | Deep Extract Fast |
|---|---|---|---|
| 1–2 page business document | 13 s | 1 min 26 s | 38 s |
| 30-page annual report | 15 s | 2 min 14 s | 1 min |
| 40-page PDF of big tables | 6 min 32 s | 6 min 19 s | 3 min 55 s |
The method and the runs are under How long it takes on the benchmarks page.
Example: Fast mode in the API reference. speed is separate from the legacy pipeline=fast alias, which means extract.
Coming from
fastandstandard? Those names still work exactly as before:fastisextract,standardisdeep-extract, andsearchableisdeep-extract+searchable_pdf=true. Your responses keep showing the name you send.
Two add-ons govern data handling rather than output, and work on either engine (Enterprise plans):
incognito=true— the submitted document is never stored in the clear and is crypto-shredded the moment the job finishes (no preview link; not combinable withsearchable_pdf). Results are unaffected.retention_days=N(1–365) — everything about the job (document, preview artifacts, extracted results) is deleted N days after submission; from the deadline on the job returns no content and the preview link answers 410.
See Incognito Processing and Retention in the OCR API reference.
The extract engine
What it's optimized for
- Speed and cost on high-volume, clean documents
- A single OCR pass, then extraction against your schema if you sent one
How it works (conceptually)
- Convert: PDF → 300 DPI page images
- OCR: one vision read per page → Markdown
- Extraction: if you provide a schema (or a
blueprint_id), extract structured fields - Locate: find every block, and every extracted value, on the page
The deep-extract engine
What it's optimized for
- Accuracy on real-world PDFs (scans, stamps, tilted photos, dense tables)
- Self-checking output via multi-model disagreement detection
- Actionable review flags, not "confidence theater"
- More than text: chart values, ticked and empty checkboxes, stamps, signatures and barcodes come back as typed layout blocks (see Layout blocks)
How it works (conceptually)
- Convert: PDF → 300 DPI page images
- Rotate: auto-correct orientation (all pages in parallel)
- Dual OCR: run two vision OCR passes in parallel
- Consensus judge: detect material differences (amounts, IDs, dates, names)
- Auto-resolution: when there's disagreement, re-check the source image and pick the correct value
- Extraction and verification: if you provide a schema, extract structured fields, then read every value a second time and flag disputes
- Locate: find every block, and every extracted value, on the page
Outputs you can rely on
When you fetch a completed job (GET /v1/jobs/{job_id}), DeepRead returns a few "stable contracts" that matter for product decisions (every response carries schema_version: "dp02"):
document.content.text: extracted document text as markdown (full-document)document.layout: typed dp.lite.v1 layout object (blocks + page-mappings), on either engineextraction.fields(only when extracting structured data): a list of field objects shaped like:key(field identifier)valueneeds_review(boolean)review_reason(string, when flagged)location.page(always) andlocation.bounding_box(where on the page the value was found; sendinclude_markers=trueto get it)
pages: only present whenper_page=true(see gotchas below)- Page objects carry page-level flags
needs_reviewandreview_reason, plus per-pagefields[]
- Page objects carry page-level flags
review: review summary, including:needs_review,quality_scorefields_needing_review,fields_total,review_rate(0–1)flags(structured{ scope, target, severity, reason }entries you can surface in UI/logs)
pipelineandproduct(top level), anddocument.page_count
If preview=true and the job completes, you'll also see:
artifacts.preview_url: a public viewer link (token-based) intended for sharing results (every plan, when you sendpreview=true)
Searchable PDF (add-on)
Add searchable_pdf=true to a deep-extract request to also receive a searchable PDF (Enterprise plans):
curl -X POST /v1/process \ -H "X-API-Key: sk_live_..." \ -F "file=@document.pdf" \ -F "pipeline=deep-extract" \ -F "searchable_pdf=true"
The completed job then includes artifacts.searchable_pdf_url (a downloadable PDF with an embedded, selectable text layer) alongside the usual text + structured data, and the response carries searchable_pdf: true.
deep-extractonly —extract+searchable_pdf=trueis rejected (a single OCR pass has no word-position layer to build the PDF from).pipeline=searchableis still accepted as a legacy alias fordeep-extract+searchable_pdf=true.
Defaults & Notes
pipelinedefaults toextracton Free and Standard and todeep-extracton Enterprise — pass an explicit engine to override on any plan.searchable_pdfdefaults tofalse(deep-extractonly).incognitodefaults tofalse;retention_daysis unset by default (content kept under the standard retention).previewdefaults tofalse: the preview link is readable by anyone who has it, so it is created only when you ask for it.- If you request images, DeepRead will auto-enable
per_pageso there's per-page data to render in the preview.
- If you request images, DeepRead will auto-enable
- Bounding boxes are off by default. Send
include_markers=trueto get them, on either engine and on every plan. Do not rely onpreview=truealone: it creates the preview link, and boxes are only guaranteed wheninclude_markers=trueis sent. Send both for click-to-highlight in the preview. The preview works on every plan when you sendpreview=true. - Schema vs blueprint:
- Use either
schemaorblueprint_id(mutually exclusive).
- Use either
- Pages are optional:
- If you don't need per-page breakdowns, keep
per_page=falseto reduce payload size.
- If you don't need per-page breakdowns, keep
Next steps
- Jobs & Webhooks
- Human Review Flags
- API details live in the reference:
POST /v1/processandGET /v1/jobs/{job_id}under API Reference