Document Extraction API

One endpoint that turns invoices, receipts, and other business documents into structured JSON. Send a file, get named fields and line items back. Rule-based parsing reads every field, then an AI model checks the result and corrects what it finds wrong before you get it.
97%

97% field-level accuracy

Tested on 500+ real receipts and invoices

Every result also carries confidence and needs_review.
How we test →

What it does

One API, many documents

Invoices and receipts through a single endpoint with a consistent response shape.

Structured, not raw text

Named fields and line items you can use directly — no post-processing of OCR text.

Confidence on every result

Each response includes a confidence score so you know what to trust and what to review.

Looking for a specific document type? See the Invoice Parser API and the Receipt OCR API.

Real output

Live example

Sample document

SellerNunez Inc
Invoice #31293737
Date2020-12-15
7 line items
Total$408.66

Real output from the API — nothing hand-edited. The data object returned by GET /api/v1/documents/{id}.

{
  "document_type": "invoice",
  "document_number": "31293737",
  "invoice_id": "31293737",
  "receipt_id": null,
  "date": "2020-12-15",
  "due_date": null,
  "currency": "USD",
  "merchant": "Nunez Inc",
  "merchant_address": "6551 Janet Gardens, Michaelberg, KS 90952",
  "merchant_email": null,
  "customer": "Alvarez Inc",
  "subtotal": "371.51",
  "tax": "37.15",
  "tax_rate": "10.00",
  "discount": null,
  "shipping": null,
  "total": "408.66",
  "payment_method": null,
  "notes": null,
  "line_items": [
    {
      "description": "Women's black cocktail dress, size 4",
      "quantity": 3,
      "price": "19.99",
      "line_total": "59.97",
      "vat_rate": "10.00"
    },
    {
      "description": "Christmas Dress Grace Karin Sleeveless Christmas dress Red Black size Large",
      "quantity": 1,
      "price": "9.99",
      "line_total": "9.99",
      "vat_rate": "10.00"
    },
    {
      "description": "Windsor womens black and Pink Bodycon Sleeveless Dress, Womens Size Small",
      "quantity": 1,
      "price": "15.83",
      "line_total": "15.83",
      "vat_rate": "10.00"
    },
    {
      "description": "Lumiere Large Multicolored Orange Short Dress NWT",
      "quantity": 4,
      "price": "4.99",
      "line_total": "19.96",
      "vat_rate": "10.00"
    },
    {
      "description": "Xhilaration Womens L Burgandy Boho Embroidered Festival Mini Dress NEW",
      "quantity": 4,
      "price": "14.95",
      "line_total": "59.80",
      "vat_rate": "10.00"
    },
    {
      "description": "Johnny Was Medium Linen Wrap Dress Dessert Rose Embroiderd Bohemian",
      "quantity": 2,
      "price": "89.99",
      "line_total": "179.98",
      "vat_rate": "10.00"
    },
    {
      "description": "Pre-Owned Women's Nah Nah Dress Size 8 Black Sheer Formal Sexy",
      "quantity": 2,
      "price": "12.99",
      "line_total": "25.98",
      "vat_rate": "10.00"
    }
  ]
}

Code

Submit the file, then fetch the JSON.

Every sample submits the file, then fetches the result until its status is completed or failed. On Starter and Pro, a webhook can deliver it instead.

# 1. Submit the document
curl -X POST https://docuparseapi.com/api/v1/extract \
  -H "Authorization: Bearer $DOCUPARSE_API_KEY" \
  -F "file=@invoice.pdf"
# → {"success": true, "document_id": "<id>", "status": "queued"}

# 2. Fetch the result (repeat until "status" is "completed" or "failed")
curl https://docuparseapi.com/api/v1/documents/<id> \
  -H "Authorization: Bearer $DOCUPARSE_API_KEY"

Try it on your own document

Upload a receipt or invoice and see the JSON. No sign-up needed.

Try it on your document — no sign-up

Output

Fields returned

document_type
document_number
invoice_id
receipt_id
date
due_date
currency
merchant
merchant_address
merchant_email
customer
subtotal
tax
tax_rate
discount
shipping
total
payment_method
notes
confidence
needs_review
line_items[] (description, quantity, price, line_total, vat_rate)

Full schema with types →

FAQ

Questions

Which documents can I send?

+
Any PDF, JPG, PNG or CSV, up to 10 pages per document. Receipts, invoices, purchase orders and expense reports get structured fields, AI correction and dashboard analytics.

What does document_type return?

+
invoice, receipt, purchase_order, expense_report or unknown.

Is it built for SaaS products?

+
Yes. One bearer token and one endpoint, the same JSON shape for every layout, and per-document billing that stays predictable as your users upload more.

How is AI used?

+
Rule-based parsing reads every field, then an AI model checks the result and corrects what it finds wrong before you get it.

How do high-volume teams use it?

+
Bulk uploads and batch processing up to 5,000 documents a month self-serve, with a spend dashboard to review results.

How long can a document be?

+
Every document includes up to 10 pages. A 10-page invoice counts as one document, the same as a one-page receipt. A document of 11 to 20 pages counts as two documents.

Are webhooks included?

+
On Starter and Pro. On Free, fetch results with GET /api/v1/documents/{id}.

What we parse →

How the extraction works+
  1. 01Read — the document is converted to text with OCR (for images) or parsed directly (for digital PDFs).
  2. 02Parse — deterministic rules pull out each field and line item and normalize dates and amounts.
  3. 03Check — the result is scored for confidence: totals are reconciled (subtotal + tax = total), required fields are verified, and formats are validated.
  4. 04Review — an AI model then reviews every document and corrects the fields it finds wrong, looking hardest at the ones the rules were unsure of.

Every response includes a confidence score and a needs_review flag, so you always know which results to trust and which to double-check.

Try it on your own document.

20 documents a month free, with full API access. No credit card. Webhooks on Starter and Pro.

Try it on your document — no sign-up