Skip to content New Introducing our Perfect Docs Guaranteed offer — 99.2% accuracy for high-volume teams. Limited spots available. Learn more

Document OCR API, built for developers

OCR any PDF document or image through one endpoint and get structured, validated JSON back — invoices, utility bills, mortgage documents, IDs or any schema you define. Auth is one header; results arrive in seconds via webhook.

  • 500 pages free
  • No credit card
# Upload a document — any PDF or image
curl -X POST https://api.invofox.com/v1/ingest/uploads \
  -H "x-api-key: $INVOFOX_API_KEY" \
  -F "[email protected]" \
  -F 'info={"type":"invoice"}'

# → the document.processed webhook delivers:
{
  "type": "invoice",
  "data": {
    "invoiceNumber": "INV-2026-0841",
    "provider": {
      "name": "Acme Supplies GmbH",
      "taxId": "DE811570831"
    },
    "totalAmount": 1804.28
  }
}

OCR a PDF document to structured JSON

This is the invoice from the quickstart above, in full — line items, dates, IBAN and totals that actually add up, ready for your ERP.

Fields shown are the default invoice schema — define your own fields for any document type.

GET /documents/{id} json
 {
  "_id": "68a1f30b2c9e4d0012f7a1b3",
  "type": "invoice",
  "data": {
    "invoiceNumber": "INV-2026-0841",
    "issueDate": "2026-07-02",
    "dueDate": "2026-08-01",
    "provider": {
      "name": "Acme Supplies GmbH",
      "taxId": "DE811570831",
      "iban": "DE89370400440532013000"
    },
    "lines": [
      {
        "description": "Thermal paper rolls 80x80",
        "quantity": 40,
        "unitPrice": 21.90,
        "amount": 876.00
      },
      {
        "description": "Label printer ZD421",
        "quantity": 2,
        "unitPrice": 307.85,
        "amount": 615.70
      },
      {
        "description": "Shipping & handling",
        "quantity": 1,
        "unitPrice": 24.50,
        "amount": 24.50
      }
    ],
    "subtotal": 1516.20,
    "taxRate": 0.19,
    "taxAmount": 288.08,
    "totalAmount": 1804.28,
    "currency": "EUR"
  }
} 

Limits, latency and pricing

The numbers you'd otherwise dig out of the docs.

  • ~10s typical latency

    From upload to structured JSON

    Processing is asynchronous — subscribe to the document.processed webhook instead of polling.

  • 1→N classifier + splitter

    Batches and mixed files welcome

    Send a zipped batch or one messy multi-document PDF — the splitter separates it and the classifier routes each document to the right extractor.

  • Any document type

    Not just invoices

    Utility bills, mortgage packets, IDs, delivery notes — pre-trained types or your own schema. Layout-independent by design, no templates.

  • 500 pages free

    Usage-based pricing

    Per-page pricing that scales linearly — no seats, no setup fees. Start free, no credit card.

Every document type, one API

Pre-trained types extract data from any PDF document or image out of the box — or define your own schema for anything else. Each linked card has its own deep-dive page.

Why a specialized OCR API beats DIY

What you'd have to build around Tesseract or a hyperscaler API is already inside.

  • Validated JSON, not raw text

    OCR engines return characters; hyperscalers return boxes. This API returns typed, validated fields with your business rules already applied.

  • Any layout, zero templates

    Trained on real-world document diversity — skewed scans, photos, 100-page PDFs. No per-vendor templates to build or maintain.

  • Document ops included

    Retries, async queues, webhooks, classification and splitting ship with the API — the infrastructure DIY pipelines spend months rebuilding.

Benchmarked, not claimed: GPT-4o vs Claude vs Invofox for document parsing — with code samples →

OCR API FAQ

~/invofox / faq.json
howto.json
1
2 ··"question" "How do I OCR a PDF to structured JSON?"
3
4 ··"answer" "Upload the PDF to the ingest endpoint with its document type, subscribe to the document.processed webhook, and read the extracted fields from the document endpoint. The whole flow is shown in the quickstart above in cURL, Python and Node — no OCR engine to run, no post-processing to write."
5
How-to howto.json
main 0 errors 0 warnings UTF-8 LF JSON

Something still unclear? Read the docs