Accounting & Finance API

Invoice Parsing API — OCR Any Invoice Into Structured JSON

POST a PDF or scanned invoice and get back labeled JSON: invoice number, dates, seller and buyer data, line items, totals, VAT and currency. Textract-grade OCR handles the pixels; LLM structuring handles the meaning — no per-vendor templates, ever.

PDF & scanned images (JPG, PNG, TIFF)
Line items, totals & VAT — typed JSON
Async REST API — status URL or webhooks

14-day trial · 100,000 words included · No credit card required

See the Invoice OCR in Action

Run a real extraction job on a sample invoice — straight from this page.

Try it live — no signup needed

Live demo

Pick a sample document and watch this API process it in real time.

Demo runs on bundled sample documents. Want to test your own files? Start a free trial

That was a live API response. Get your own API key and 100,000 free trial words — no credit card required.

Double opt-in, unsubscribe anytime.

How the Invoice Parsing API Works

One multipart POST in, labeled invoice JSON out — fully asynchronous.

1

POST the invoice file

Send a PDF or scanned image (JPG/PNG/TIFF) up to 100 MB to /api/v1/finance/parse_invoice with your Bearer token.

2

Get a status URL

The API answers instantly with 202 Accepted and a status_url — OCR and AI structuring run on our queue, not in your request thread.

3

Poll or get a webhook

Poll the status URL or pass a webhook URL header to be called back the moment extraction completes.

4

Read structured JSON

Receive invoice number, issue and due dates, seller/buyer details, line items with quantities and unit prices, net/gross totals, VAT rates and currency.

Call it from any stack

Submit a job, poll the status URL, get structured JSON. SDKs available for PHP, Laravel, Python, Node.js, .NET and Flutter.

curl -X POST "https://sharpapi.com/api/v1/finance/parse_invoice" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file": "@invoice.pdf"}'
$response = Http::withToken('YOUR_API_KEY')
    ->post('https://sharpapi.com/api/v1/finance/parse_invoice', {"file": "@invoice.pdf"});

$statusUrl = $response->json('status_url'); // poll until status = success
import requests

response = requests.post(
    "https://sharpapi.com/api/v1/finance/parse_invoice",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={"file": "@invoice.pdf"},
)
status_url = response.json()["status_url"]  # poll until status == "success"
{
    "data": {
        "type": "api_job_result",
        "id": "e00ebeec-6df3-4282-b515-8c447ea5d6ab",
        "attributes": {
            "status": "success",
            "type": "invoice_parse",
            "result": [
                {
                    "source_pages": [
                        1
                    ],
                    "document": {
                        "type": "invoice",
                        "original_type_label": "Invoice",
                        "is_invoice": true,
                        "is_copy": false,
                        "copy_type": null
                    },
                    "invoice": {
                        "invoice_number": "D7BDFA00-0019",
                        "issue_date": "2025-12-07",
                        "due_date": "2025-12-07",
                        "document_date": null,
                        "order_date": null,
                        "delivery_date": null,
                        "shipping_date": null,
                        "pricing_date": null,
                        "currency": "USD",
                        "exchange_rate": null,
                        "page_info": "1 of 1",
                        "amount_in_words": "",
                        "notes": "",
                        "remarks": "",
                        "delivery_instructions": "",
                        "terms_and_conditions": [],
                        "late_payment_interest_rate": null
                    },
                    "references": {
                        "delivery_order_number": "",
                        "purchase_order_number": "",
                        "sales_order_number": "",
                        "customer_reference": "",
                        "external_document_number": "",
                        "grn_number": "",
                        "route_number": "",
                        "lorry_number": "",
                        "serial_number": "",
                        "batch_number": "",
                        "other_references": []
                    },
                    "e_invoice": {
                        "uuid": "",
                        "e_invoice_code": "",
                        "e_invoice_type": "",
                        "e_invoice_version": "",
                        "submission_id": "",
                        "submission_document_id": "",
                        "submission_long_id": "",
                        "submission_status": "",
                        "validation_datetime": null,
                        "digital_signature_present": false,
                        "validated_link": "",
                        "original_e_invoice_ref": "",
                        "qr_code_present": false
                    },
                    "seller": {
                        "name": "OpenAl, LLC",
                        "trade_name": "OpenAl",
                        "registration_number": "",
                        "tin": "",
                        "sst_id": "",
                        "gst_id": "",
                        "vat_id": "GB434338990",
                        "msic_code": "",
                        "business_activity": "",
                        "address": {
                            "street_line_1": "548 Market Street",
                            "street_line_2": "PMB 97273",
                            "city": "San Francisco",
                            "state": "California",
                            "postcode": "94104-5401",
                            "country": "US"
                        },
                        "phone": "",
                        "fax": "",
                        "email": "",
                        "website": "",
                        "bank_details": [
                            {
                                "bank_name": "",
                                "account_name": "",
                                "account_number": "",
                                "sort_code": "",
                                "swift_code": "",
                                "iban": ""
                            }
                        ],
                        "contact_person": {
                            "name": "",
                            "role": "",
                            "phone": "",
                            "email": ""
                        }
                    },
                    "buyer": {
                        "name": "A2Z WEB LTD",
                        "trade_name": "",
                        "registration_number": "",
                        "tin": "",
                        "brn": "",
                        "sst_id": "",
                        "gst_id": "",
                        "vat_id": "",
                        "customer_account_number": "",
                        "billing_address": {
                            "location_name": "",
                            "street_line_1": "Unit 4e Enterprise Court, Farfield",
                            "street_line_2": "Park",
                            "city": "Rotherham",
                            "state": "",
                            "postcode": "S63 5DB",
                            "country": "GB"
                        },
                        "delivery_address": {
                            "recipient_name": "",
                            "location_name": "",
                            "street_line_1": "Unit 10 Enterprise Court",
                            "street_line_2": "Farfield Park",
                            "city": "Rotherham",
                            "state": "",
                            "postcode": "S63 5DB",
                            "country": "GB"
                        },
                        "delivery_address_same_as_billing": false,
                        "phone": "",
                        "fax": "",
                        "email": "",
                        "attention_to": {
                            "name": "",
                            "phone": "",
                            "email": ""
                        }
                    },
                    "sales_info": {
                        "salesperson_name": "",
                        "salesperson_code": "",
                        "salesperson_phone": "",
                        "sales_agent": "",
                        "sales_location": "",
                        "sales_department": "",
                        "outlet_name": ""
                    },
                    "financials": {
                        "subtotal": 15.57,
                        "gross_amount": null,
                        "total_discount_amount": null,
                        "shipping_charge": null,
                        "delivery_fee": null,
                        "total_excl_tax": 15.57,
                        "total_tax_amount": 3.11,
                        "service_tax_amount": null,
                        "total_incl_tax": 18.68,
                        "rounding_adjustment": null,
                        "total_payable": 18.68,
                        "amount_paid": null,
                        "amount_due": 18.68,
                        "tax_details": [
                            {
                                "tax_type": "VAT",
                                "tax_rate": 20,
                                "taxable_amount": 15.57,
                                "tax_amount": 3.11
                            }
                        ]
                    },
                    "line_items": [
                        {
                            "line_number": 1,
                            "item_code": "",
                            "stock_code": "",
                            "barcode": "",
                            "description": "OpenAl API usage credit",
                            "classification_code": "",
                            "country_of_origin": "",
                            "quantity": 1,
                            "free_quantity": null,
                            "unit_of_measure": "",
                            "unit_of_measure_raw": "",
                            "pack_size": "",
                            "total_units": null,
                            "weight": null,
                            "weight_uom": "",
                            "unit_price": 15.57,
                            "discount_percent": null,
                            "discount_amount": null,
                            "subtotal": 15.57,
                            "tax_rate": 20,
                            "tax_type": "VAT",
                            "tax_amount": 3.11,
                            "total_excl_tax": 15.57,
                            "total_incl_tax": null,
                            "expiry_date": null,
                            "batch_lot_number": "",
                            "service_start_date": null,
                            "service_end_date": null
                        }
                    ],
                    "payment": {
                        "payment_terms": "",
                        "payment_terms_days": null,
                        "payment_method": "",
                        "payment_date": null,
                        "payment_reference": "",
                        "jompay_biller_code": "",
                        "jompay_ref_1": ""
                    },
                    "logistics": {
                        "shipping_method": "",
                        "vehicle_number": "",
                        "driver_name": "",
                        "delivery_zone": "",
                        "delivery_time_constraint": "",
                        "carton_count": null,
                        "total_volume": null,
                        "total_weight": null,
                        "goods_received_confirmation": false,
                        "received_by": "",
                        "receiver_signature_present": false
                    }
                }
            ]
        }
    }
}

Full API documentation »

Who Builds on the Invoice OCR API

Anywhere invoices arrive as files and your system needs numbers.

AP Automation

Capture supplier invoices from email inboxes and portals, extract the data and push it straight into approval workflows.

inbox PDF → approval queue

Accounting Software

Add "drop an invoice here" to your bookkeeping product and post ledger entries from the parsed totals and VAT breakdown.

scan → {net, vat[], gross}

Expense Management

Let employees photograph receipts and invoices; parse amounts, dates and vendors for instant expense claims.

phone photo → expense record

ERP Integration

Feed structured invoice data into SAP, NetSuite, Dynamics or your in-house ERP without manual keying.

JSON → ERP document import

Procurement & 3-Way Matching

Match parsed line items, quantities and unit prices against purchase orders and goods receipts automatically.

line items ↔ PO ↔ GRN

Document Archives

Backfill years of scanned invoices into a searchable database with structured metadata per document.

50k scans → indexed JSON

More document endpoints in the catalog: Browse Accounting & Finance APIs →

Why Developers Pick This Invoice Parser

OCR + LLM in one call

Textract-grade OCR reads the document, an LLM labels it. You never stitch two vendors together or post-process raw text yourself.

Typed, labeled JSON schema

Dates as dates, amounts as numbers, line items as arrays. The same schema for every vendor layout — your integration code stays put.

No templates to maintain

New supplier, new layout, new language? Nothing to configure. The AI structuring generalizes instead of matching rules.

80+ languages

Parse invoices in English, German, Polish, French, Spanish and dozens more — including mixed-language documents.

Async with webhooks

202-and-poll by default; add a webhook URL header for callbacks. Designed for batch pipelines processing thousands of documents.

Per-word pricing, GDPR & SOC 2

No per-page OCR fees — you pay per processed word. SOC 2 Type II audited, GDPR compliant, documents processed transiently.

SharpAPI SOC 2 Type II

SharpAPI 现在 符合 SOC 2 Type II 标准. 您可以查看我们的详细信息 信任中心门户。

您的数据是您的数据。了解我们如何保护它并遵守全球隐私标准 数据处理和合规政策 .

Predictable pricing from $50/month

14-day free trial with 100,000 words included. No credit card required. 30-day money-back guarantee on your first payment.

Invoice Parsing API — FAQ

PDF files (native or scanned) and images — JPG, JPEG, PNG and TIFF — up to 100 MB. The OCR layer reads scans and photos, so paper invoices captured with a phone camera parse the same way as digital PDFs.

Invoice number, issue date, due date, seller and buyer names, addresses and tax IDs, individual line items with descriptions, quantities and unit prices, net, tax and gross totals, VAT rates and currency — returned as one structured JSON document.

Plain OCR gives you raw text and coordinates; you still have to figure out which number is the total and which line is a product. This endpoint combines Textract-grade OCR with LLM structuring, so the output is already labeled, typed JSON — no template rules per vendor layout.

Yes. There are no per-vendor templates to configure — the AI structuring adapts to layouts and languages it has never seen, including 80+ languages and mixed-language invoices.

Pricing is per processed word, not per page or per document — plans start at $50/month, and the 14-day free trial includes 100,000 words with no credit card required. There are no separate OCR fees.

SharpAPI is SOC 2 Type II certified and GDPR compliant. Uploaded invoices are processed transiently and never used to train models. Details are in the Data Handling and Compliance policy.

Stop Keying Invoices by Hand

Grab an API key, POST your first invoice, and get labeled JSON with line items and totals back in seconds.

无需信用卡