Concepts

Engines, Products & Outputs

Engines, Products & Outputs

A DeepRead request is two choices:

  1. 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.
  2. 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 sendProductPrice on Standard
pipeline=extract, with or without a schema or blueprintExtract — 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 schemaDeep 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 schemaDeep 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; product is deep-extract-fast.
  • extract — costs nothing extra: Extract is already fast, so speed=fast stays at the Extract price ($15 per 1,000 pages) and product stays extract. 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):

DocumentExtractDeep ExtractDeep Extract Fast
1–2 page business document13 s1 min 26 s38 s
30-page annual report15 s2 min 14 s1 min
40-page PDF of big tables6 min 32 s6 min 19 s3 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 fast and standard? Those names still work exactly as before: fast is extract, standard is deep-extract, and searchable is deep-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 with searchable_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 engine
  • extraction.fields (only when extracting structured data): a list of field objects shaped like:
    • key (field identifier)
    • value
    • needs_review (boolean)
    • review_reason (string, when flagged)
    • location.page (always) and location.bounding_box (where on the page the value was found; send include_markers=true to get it)
  • pages: only present when per_page=true (see gotchas below)
    • Page objects carry page-level flags needs_review and review_reason, plus per-page fields[]
  • review: review summary, including:
    • needs_review, quality_score
    • fields_needing_review, fields_total, review_rate (0–1)
    • flags (structured { scope, target, severity, reason } entries you can surface in UI/logs)
  • pipeline and product (top level), and document.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 send preview=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-extract only — extract + searchable_pdf=true is rejected (a single OCR pass has no word-position layer to build the PDF from). pipeline=searchable is still accepted as a legacy alias for deep-extract + searchable_pdf=true.

Defaults & Notes

  • pipeline defaults to extract on Free and Standard and to deep-extract on Enterprise — pass an explicit engine to override on any plan.
  • searchable_pdf defaults to false (deep-extract only).
  • incognito defaults to false; retention_days is unset by default (content kept under the standard retention).
  • preview defaults to false: 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_page so there's per-page data to render in the preview.
  • Bounding boxes are off by default. Send include_markers=true to get them, on either engine and on every plan. Do not rely on preview=true alone: it creates the preview link, and boxes are only guaranteed when include_markers=true is sent. Send both for click-to-highlight in the preview. The preview works on every plan when you send preview=true.
  • Schema vs blueprint:
    • Use either schema or blueprint_id (mutually exclusive).
  • Pages are optional:
    • If you don't need per-page breakdowns, keep per_page=false to reduce payload size.

Next steps