Skip to content
·API Reference v1

API Reference

InvoiceParser Pro API

REST API for invoice data extraction. Upload a document, receive structured vendor/total/line-item data, download Excel or CSV, or push results to your systems via webhooks.

v1 · StableBase URL: api.invoiceparserpro.com/api/v1

Introduction

The InvoiceParser Pro API lets you extract structured data from PDF and image invoices at scale. Upload a file, receive a job ID, and poll for the completed result — or register a webhook and let us push the result to you.

All endpoints are under https://api.invoiceparserpro.com/api/v1. Responses are JSON. Errors always include a machine-readable code field.

Authentication

Pass your API key as a Bearer token in every request. Keys are created and managed from the API Access page. The raw key value is shown once at creation — store it securely.

Header
Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxxxxxxxxxx

A key acts for the workspace its creator owns, and works only while that workspace's plan includes it: REST API keys (ipp_live_) need the Scale plan. An AI assistant key (ipp_mcp_), available on every paid plan, works only on the MCP server and is refused here.

Quick start

Upload an invoice and retrieve the structured result in two requests.

1 · Upload

cURL
curl -X POST "https://api.invoiceparserpro.com/api/v1/invoices" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx" \
  -F "file=@invoice.pdf"

2 · Poll until completed

cURL
curl "https://api.invoiceparserpro.com/api/v1/invoices/{job_id}" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx"

Python example

Python
import time, requests

KEY = "ipp_live_xxxx_xxxxxxxxxxxxxxxx"
BASE = "https://api.invoiceparserpro.com/api/v1"
HEADERS = {"Authorization": f"Bearer {KEY}"}

# Upload
with open("invoice.pdf", "rb") as f:
    job = requests.post(f"{BASE}/invoices", headers=HEADERS,
                        files={"file": f}).json()

# Poll
while True:
    result = requests.get(f"{BASE}/invoices/{job['job_id']}",
                          headers=HEADERS).json()
    if result["status"] == "completed":
        print(result["result"])
        break
    time.sleep(2)

Rate limits

Limits are applied per API key on the two upload endpoints below. Exceeding a limit returns 429 Too Many Requests. Retry after a short wait.

EndpointLimit
POST /api/v1/invoices60 req / min / key
POST /api/v1/batches10 req / min / key

Errors

Every error response includes a machine-readable code field and a human-readable message.

INVALID_API_KEY401Invalid, revoked, or missing API key.
TIER_REQUIRED403API access requires a Scale plan or higher.
ALLOWANCE_UNAVAILABLE402Workspace allowance could not be reserved. Check billing or retry.
INVALID_FILE400Unsupported format, too large, or corrupt.
JOB_NOT_FOUND404Job not found or belongs to another account.
EXTRACTION_FAILED422Document could not be parsed.
Error shape
{
  "error": true,
  "code": "ALLOWANCE_UNAVAILABLE",
  "message": "Workspace allowance could not be reserved. Check billing or retry.",
  "details": null
}

A rate-limited request (429) is answered by the rate limiter itself, with an error message and no code.

Invoices

Upload invoices for extraction, poll job status, list jobs, and download structured Excel or CSV output.

POST/api/v1/invoices
API key

Upload and process an invoice

Upload a PDF or image, extract vendor, totals, line items, and validation metadata. Returns a job_id that can be polled with the job retrieval endpoint. Runs synchronously when the background queue is disabled; otherwise returns 202 Accepted and processes asynchronously.

Rate limit: 60 requests / minute / API key

Parameters

  • fileformrequired
    file (pdf, png, jpg, jpeg, webp)
    The invoice document. Single file per request. Max size enforced by server-side validation (typical limit: 10 MB).
  • export_modeformoptional
    string
    Default: standard
    Column set used for the generated Excel and CSV. Accepts `standard` (core AP fields) or `full` (every extracted field, including raw line item metadata).
  • include_bounding_boxesformoptional
    boolean
    Default: false
    When `true`, includes a `field_locations` object in the result containing Azure Document Intelligence polygon coordinates for each extracted field. Useful for building UI overlays or verifying extraction position on the source document.
  • external_idformoptional
    string
    Caller-supplied idempotency key. If a job already exists with the same `external_id` for your account, the existing job is returned without reserving another invoice. Scoped to your account. Recommended for safe retries after network errors.
  • Authorizationheaderrequired
    string
    Bearer token in the form `Bearer ipp_live_...`.

Request

cURL
curl -X POST "https://api.invoiceparserpro.com/api/v1/invoices" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx" \
  -F "file=@invoice.pdf" \
  -F "export_mode=standard" \
  -F "external_id=my-pipeline-run-1234" \
  -F "include_bounding_boxes=false"

Response

202 Accepted
{
  "success": true,
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "processing",
  "message": "Invoice queued for processing. Use GET /api/v1/invoices/{job_id} to check status and retrieve results."
}
GET/api/v1/invoices/{job_id}
API key

Retrieve an invoice job

Returns the current status of a job and, once complete, the full extracted payload including line items, totals, tax breakdown, confidence level, `automation_ready` boolean, and download URLs for Excel and CSV. `automation_ready` is `true` when confidence is HIGH and math validation passed — safe to use as a no-human-review gate in automated pipelines. `document_type` is `invoice`, `credit_note`, `debit_memo` or `other`. `document_check` is `null` for one invoice; for a file that is not one invoice it says why: `{"kind": "statement"}` for a supplier statement (its `document_type` is `other`), or `{"kind": "multiple_invoices", "invoice_numbers": [...]}` for several invoices in one file. Hold either one rather than posting it as a bill.

Parameters

  • job_idpathrequired
    string (uuid)
    The job identifier returned by POST /api/v1/invoices.
  • Authorizationheaderrequired
    string
    Bearer token in the form `Bearer ipp_live_...`.

Request

cURL
curl -X GET "https://api.invoiceparserpro.com/api/v1/invoices/550e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx"

Response

200 OK
{
  "success": true,
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "completed",
  "filename": "acme-2026-01.pdf",
  "created_at": "2026-04-11T14:02:19.314Z",
  "completed_at": "2026-04-11T14:02:31.802Z",
  "credits_charged": 1,
  "result": {
    "vendor": "Acme Corp",
    "invoice_number": "INV-2026-001",
    "invoice_date": "2026-01-15",
    "due_date": "2026-02-14",
    "subtotal": 1000.00,
    "tax": 100.00,
    "total": 1100.00,
    "currency": "USD",
    "confidence": "HIGH",
    "automation_ready": true,
    "validation_status": "valid",
    "document_type": "invoice",
    "document_check": null,
    "line_items": [
      {
        "description": "Consulting services",
        "quantity": 10,
        "unit_price": 100.00,
        "tax_amount": 10.00,
        "amount": 1000.00
      }
    ]
  },
  "downloads": {
    "excel": "/api/v1/invoices/550e8400-.../download/excel",
    "csv":   "/api/v1/invoices/550e8400-.../download/csv"
  }
}
GET/api/v1/invoices/{job_id}/download/{format}
API key

Download invoice output

Streams the generated Excel or CSV file for a completed job. Returns a 400 error when called before the job has reached the `completed` state.

Parameters

  • job_idpathrequired
    string (uuid)
    The job identifier returned by POST /api/v1/invoices.
  • formatpathrequired
    string
    Either `excel` (returns an .xlsx file) or `csv`.
  • Authorizationheaderrequired
    string
    Bearer token in the form `Bearer ipp_live_...`.

Request

cURL
curl -X GET "https://api.invoiceparserpro.com/api/v1/invoices/550e8400-.../download/excel" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx" \
  -o invoice.xlsx

Response

200 OK · binary
HTTP/1.1 200 OK
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Content-Disposition: attachment; filename="invoice_550e8400.xlsx"

<binary spreadsheet body>
GET/api/v1/jobs
API key

List invoice jobs

Returns recent jobs for the authenticated API key owner, ordered newest first. Each entry includes the extraction confidence so you can filter for low-confidence results without fetching each job individually.

Parameters

  • limitqueryoptional
    integer (1–100)
    Default: 50
    Maximum number of jobs to return in a single page.
  • offsetqueryoptional
    integer (>= 0)
    Default: 0
    Pagination offset. Combine with `limit` for simple offset pagination.
  • Authorizationheaderrequired
    string
    Bearer token in the form `Bearer ipp_live_...`.

Request

cURL
curl -X GET "https://api.invoiceparserpro.com/api/v1/jobs?limit=20&offset=0" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "jobs": [
      {
        "job_id": "550e8400-e29b-41d4-a716-446655440000",
        "status": "completed",
        "filename": "acme-2026-01.pdf",
        "confidence": "HIGH",
        "credits_charged": 1,
        "created_at": "2026-04-11T14:02:19.314Z",
        "completed_at": "2026-04-11T14:02:31.802Z"
      }
    ],
    "limit": 20,
    "offset": 0
  }
}

Batches

Submit multiple invoices in a single request. The batch is queued and processed asynchronously — poll the retrieve endpoint until status reaches `done`.

POST/api/v1/batches
API key

Create a batch

Upload up to 25 invoices in a single multipart request. Each file reserves one invoice from your workspace allowance; failed files are refunded. Returns a batch_id for polling. Processing is always asynchronous. Supply an external_id to retry without creating another batch.

Rate limit: 10 requests / minute / API key

Parameters

  • filesformrequired
    file[] (pdf, png, jpg, jpeg)
    Invoice files. Up to 25 per request. Each file reserves one invoice from your workspace allowance.
  • external_idformoptional
    string
    An account-scoped idempotency key. Reusing it returns the existing batch without another allowance reservation.
  • export_modeformoptional
    string
    Default: standard
    Column set for generated Excel/CSV: `standard` or `full`.
  • Authorizationheaderrequired
    string
    Bearer token in the form `Bearer ipp_live_...`.

Request

cURL
curl -X POST "https://api.invoiceparserpro.com/api/v1/batches" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx" \
  -F "files=@invoice-jan.pdf" \
  -F "files=@invoice-feb.pdf" \
  -F "files=@invoice-mar.pdf"

Response

202 Accepted
{
  "success": true,
  "batch_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "status": "processing",
  "file_count": 3,
  "message": "Batch of 3 invoice(s) queued. Poll GET /api/v1/batches/{batch_id} for status."
}
GET/api/v1/batches/{batch_id}
API key

Retrieve a batch

Returns the status of a batch job. When status is `done`, the response includes per-file extraction results and download URLs for the combined Excel and CSV outputs.

Parameters

  • batch_idpathrequired
    string (uuid)
    The batch identifier returned by POST /api/v1/batches.
  • Authorizationheaderrequired
    string
    Bearer token in the form `Bearer ipp_live_...`.

Request

cURL
curl -X GET "https://api.invoiceparserpro.com/api/v1/batches/7c9e6679-7425-40de-944b-e07fc1f90ae7" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx"

Response

200 OK
{
  "success": true,
  "batch_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "status": "done",
  "file_count": 3,
  "successful": 3,
  "failed": 0,
  "created_at": "2026-04-11T14:10:00.000Z",
  "completed_at": "2026-04-11T14:10:47.312Z",
  "results": [
    {
      "filename": "invoice-jan.pdf",
      "status": "success",
      "vendor": "Acme Corp",
      "invoice_number": "INV-2026-001",
      "total": 1100.00,
      "currency": "USD",
      "confidence": "HIGH"
    },
    {
      "filename": "invoice-feb.pdf",
      "status": "success",
      "vendor": "Globex LLC",
      "invoice_number": "GBX-0042",
      "total": 540.00,
      "currency": "USD",
      "confidence": "HIGH"
    }
  ],
  "downloads": {
    "excel": "/download/7c9e6679-.../excel",
    "csv":   "/download/7c9e6679-.../csv",
    "qb":    "/download/7c9e6679-.../qb",
    "zoho":  "/download/7c9e6679-.../zoho"
  }
}

Webhooks

Receive signed notifications when jobs and batches complete or fail, without polling. Verify X-IPP-Signature with HMAC-SHA256 over the raw body. Delivery is at least once: deduplicate by the event id or X-IPP-Delivery. Temporary failures retry up to eight attempts with increasing delays; delivery history and replay are available for 30 days.

POST/api/v1/webhooks
API key

Register a webhook

Register an HTTPS endpoint to receive signed event payloads. The signing secret is returned once — store it securely. Maximum 5 active webhooks per account.

Parameters

  • urlbodyrequired
    string (HTTPS URL)
    A public HTTPS endpoint on port 443. Private addresses, URL credentials, other ports and redirects are refused.
  • eventsbodyoptional
    string[]
    Default: all events
    Event types to subscribe to. Omit to subscribe to all. Valid values: `job.completed`, `job.failed`, `batch.completed`, `batch.failed`. Each event is recorded when processing reaches its final state. Batch events do not depend on polling. Retries retain the same event id and body.

Request

cURL
curl -X POST "https://api.invoiceparserpro.com/api/v1/webhooks" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-app.com/webhooks/ipp",
    "events": ["job.completed", "job.failed"]
  }'

Response

200 OK
{
  "success": true,
  "data": {
    "webhook_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "url": "https://your-app.com/webhooks/ipp",
    "events": ["job.completed", "job.failed"],
    "secret": "whsec_a3f2c1...",
    "warning": "Store this secret securely. It will not be shown again.",
    "created_at": "2026-04-11T14:00:00.000Z"
  }
}
GET/api/v1/webhooks
API key

List webhooks

Returns all active webhook endpoints for the account. Signing secrets are never included in listings.

Parameters

  • Authorizationheaderrequired
    string
    Bearer token in the form `Bearer ipp_live_...`.

Request

cURL
curl -X GET "https://api.invoiceparserpro.com/api/v1/webhooks" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "webhooks": [
      {
        "webhook_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "url": "https://your-app.com/webhooks/ipp",
        "events": ["job.completed", "job.failed"],
        "created_at": "2026-04-11T14:00:00.000Z",
        "last_used_at": "2026-04-11T15:30:12.000Z",
        "failure_count": 0
      }
    ]
  }
}
DELETE/api/v1/webhooks/{webhook_id}
API key

Delete a webhook

Permanently deactivates a webhook endpoint. In-flight deliveries are not cancelled. Deletion is immediate and cannot be undone.

Parameters

  • webhook_idpathrequired
    string (uuid)
    The webhook identifier returned by the create or list endpoints.
  • Authorizationheaderrequired
    string
    Bearer token in the form `Bearer ipp_live_...`.

Request

cURL
curl -X DELETE "https://api.invoiceparserpro.com/api/v1/webhooks/3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx"

Response

200 OK
{
  "success": true,
  "message": "Webhook 3fa85f64-5717-4562-b3fc-2c963f66afa6 deleted"
}
GET/api/v1/webhooks/{webhook_id}/deliveries
API key

Inspect delivery history

Returns up to 100 recent deliveries for your webhook, including event id, status, attempt count and last HTTP status. Events are retained for 30 days.

Parameters

  • webhook_idpathrequired
    string (uuid)
    Your webhook identifier.

Request

cURL
curl "https://api.invoiceparserpro.com/api/v1/webhooks/3fa85f64-5717-4562-b3fc-2c963f66afa6/deliveries" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx"

Response

200 OK
{"deliveries":[{"event_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","event_type":"job.completed","created_at":"2026-10-10T14:00:00Z","status":"pending","attempts":1,"last_status":503,"last_error":null}]}
POST/api/v1/webhooks/{webhook_id}/deliveries/{event_id}/replay
API key

Replay a delivery

Queues another delivery of the original signed body and event id. The webhook must be active and the event must still be retained. Deduplicate repeated events at your receiver.

Parameters

  • webhook_idpathrequired
    string (uuid)
    Your active webhook identifier.
  • event_idpathrequired
    string (uuid)
    The event id from delivery history.

Request

cURL
curl -X POST "https://api.invoiceparserpro.com/api/v1/webhooks/3fa85f64-5717-4562-b3fc-2c963f66afa6/deliveries/7c9e6679-7425-40de-944b-e07fc1f90ae7/replay" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx"

Response

200 OK
{"success":true,"event_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","status":"pending"}

Account

Read account metadata, workspace invoice allowance and the email associated with the API key.

GET/api/v1/account
API key

Retrieve account info

Returns the tier and workspace usage. Paid REST uploads use this workspace allowance. remaining_included excludes paid overage; overage_limit is the additional invoice cap. The credits field is retained for legacy clients and does not control paid workspace intake.

Parameters

  • Authorizationheaderrequired
    string
    Bearer token in the form `Bearer ipp_live_...`.

Request

cURL
curl -X GET "https://api.invoiceparserpro.com/api/v1/account" \
  -H "Authorization: Bearer ipp_live_xxxx_xxxxxxxxxxxxxxxx"

Response

200 OK
{
  "success": true,
  "data": {
    "email": "you@example.com",
    "tier": "firm_pro",
    "credits": 0,
    "usage": {
      "firm_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "used": 450,
      "monthly_limit": 5000,
      "remaining_included": 4550,
      "overage_limit": 1000,
      "billing_cycle_start": "2026-10-01"
    }
  }
}

API keys

Manage API keys from the web UI via session authentication. Keys created here are the credentials used by every /api/v1 endpoint below.

POST/api/v1/keys
Session

Create an API key

Creates a new key for the workspace the signed-in user owns. A `full` key (`ipp_live_...`) needs the Scale plan and works on this REST API and on the MCP server for AI assistants. An `mcp` key (`ipp_mcp_...`) can be created on any paid plan and works only on the MCP server (see /ai-assistants); this API refuses it. The full key value is returned once — store it securely, it will not be shown again. Requires session cookie or bearer session token.

Parameters

  • namebodyoptional
    string
    Human-readable label for the key, e.g. "production-worker" or "ci-pipeline".
  • scopebodyoptional
    string
    Default: full
    `full` (Scale: REST API and MCP server) or `mcp` (any paid plan: MCP server only).

Request

cURL
curl -X POST "https://api.invoiceparserpro.com/api/v1/keys" \
  -H "Content-Type: application/json" \
  -b "session=<your_session_cookie>" \
  -d '{"name": "production-worker"}'

Response

200 OK
{
  "success": true,
  "data": {
    "key_id": "7f3a9c21",
    "key": "ipp_live_xxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx",
    "name": "production-worker",
    "scope": "full",
    "created_at": "2026-04-11T14:02:19.314Z",
    "warning": "Store this key securely. It will not be shown again."
  }
}
GET/api/v1/keys
Session

List API keys

Returns every API key issued for the authenticated user, including created and last-used timestamps. The raw key value is never returned — only metadata.

Request

cURL
curl -X GET "https://api.invoiceparserpro.com/api/v1/keys" \
  -b "session=<your_session_cookie>"

Response

200 OK
{
  "success": true,
  "data": {
    "keys": [
      {
        "key_id": "7f3a9c21",
        "name": "production-worker",
        "scope": "full",
        "created_at": "2026-04-11T14:02:19.314Z",
        "last_used_at": "2026-04-11T15:44:02.119Z",
        "is_active": true
      }
    ]
  }
}
DELETE/api/v1/keys/{key_id}
Session

Revoke an API key

Permanently revokes a key. Subsequent requests using the revoked key will return 401 INVALID_API_KEY. Revocation is immediate and cannot be undone.

Parameters

  • key_idpathrequired
    string
    The id of the key to revoke, as returned by the create/list endpoints.

Request

cURL
curl -X DELETE "https://api.invoiceparserpro.com/api/v1/keys/7f3a9c21" \
  -b "session=<your_session_cookie>"

Response

200 OK
{
  "success": true,
  "message": "API key 7f3a9c21 revoked"
}

AI assistants (MCP)

The same extraction is available to AI assistants such as Claude, ChatGPT and Cursor through a remote MCP server (Model Context Protocol, Streamable HTTP). Its tools are invoice_to_excel, check_invoice, extract_invoice_data and get_result.

Server URL
https://api.invoiceparserpro.com/mcp

Without a key it runs a small free trial; with a key (an ipp_mcp_ key on any paid plan, or a Scale ipp_live_ key) documents go into your workspace and count against your plan. Setup for each assistant: Use InvoiceParser Pro in Claude, ChatGPT and Cursor.

Changelog

A history of additions, improvements, and fixes to the InvoiceParser Pro API. Breaking changes are flagged explicitly — all other changes are backwards-compatible.

October 2026Latest
  • NewRemote MCP server at https://api.invoiceparserpro.com/mcp for AI assistants (Claude, ChatGPT, Cursor): invoice_to_excel, check_invoice, extract_invoice_data and get_result. See /ai-assistants.
  • Newscope on POST /api/v1/keys: "mcp" creates an AI assistant key (ipp_mcp_) on any paid plan, usable only on the MCP server. REST API keys stay on the Scale plan. GET /api/v1/keys returns each key's scope.
April 2026
  • Newautomation_ready boolean added to extraction result — true when confidence is HIGH and math validation passes. Use as a no-human-review gate in automated AP pipelines.
  • Newinclude_bounding_boxes param on POST /invoices — opt-in field_locations object containing Azure Document Intelligence polygon coordinates per extracted field.
  • Newexternal_id idempotency key on POST /invoices — supply a caller-owned ID to safely retry on network errors or 5xx responses without double-charging credits.
  • NewDeveloper webhooks: POST / GET / DELETE /api/v1/webhooks. HMAC-SHA256 signed push delivery for job.completed, job.failed and batch.completed events.
  • NewBatch API: POST /api/v1/batches accepts up to 25 invoices per request. GET /api/v1/batches/{batch_id} returns per-file results and combined Excel/CSV/QB/Zoho downloads.
  • ImprovedGET /api/v1/jobs now includes confidence (HIGH / MEDIUM / LOW) on each job row — filter low-confidence results without fetching individual jobs.
  • NewAzure pipeline: VendorTaxId, CustomerTaxId, PaymentTerm, ServiceStartDate, ServiceEndDate, and PaymentDetails (IBAN / SWIFT / BPay) now extracted and returned in the result.
  • ImprovedPer-field confidence scores added to field_locations — granular extraction quality signals for document review UIs.
March 2026
  • NewAPI v1 general availability. POST /api/v1/invoices, GET /api/v1/invoices/{job_id}, download endpoints, GET /api/v1/jobs, GET /api/v1/account, and API key management now stable.
  • NewThe three paid plans (today Starter, Team and Scale) launched with dedicated monthly document allowances; API key access on the top plan (today Scale).
  • NewEnterprise proof-of-concept programme: time-boxed free trial with invoice cap for teams evaluating the API at volume before committing.
  • ImprovedExtraction pipeline upgraded to GPT-4o for enrichment. Accuracy improvement on complex multi-page and non-standard invoice layouts.
  • Newexport_mode=full param on POST /invoices — returns all extracted fields in Excel/CSV, including raw line item metadata and auxiliary fields.
February 2026
  • NewAzure Document Intelligence integration for primary extraction. Bounding box polygon data now captured at the field level for every processed invoice.
  • NewMulti-tax support: taxes[] array returned alongside the scalar tax field — breakdown by tax type and rate where the source document provides it.
  • NewCurrency detection field added to result — confidence-weighted, automatically falls back to document-stated currency when detected.
  • Newpo_number added to result — purchase order number extracted directly from the invoice header where present.
  • Newvendor_address and vendor_country (ISO 3166-1 alpha-2) added to result — enables vendor geo-routing and country-specific tax rule application downstream.
  • Newcustomer_name added to result — bill-to party name as printed on the invoice. Useful for multi-entity AP workflows routing invoices by recipient.
  • Newvalidation_explanation added to result — human-readable description of any validation flag (e.g. "Subtotal + tax does not equal total"). Surfaces the exact reason a job requires review.
  • Newtotal_source added to result — indicates how the total was obtained: explicit_total, derived_from_gst, derived_from_net_amount, or unknown. Useful for audit trails.
  • Newwarning_severity added to result — set to "risk" when the validation engine flags a job as requiring human review. Use as a filter gate before posting to your ERP.
  • ImprovedLine item extraction upgraded: quantity, unit_price, tax_amount, and amount now consistently populated; partial rows no longer dropped.
  • ImprovedValidation engine now distinguishes derived_total_confirmed (subtotal + tax = total matches within tolerance) from strict valid — improves automation_ready precision.
January 2026
  • NewImage invoice support: JPEG and PNG accepted on all upload endpoints alongside PDF. Images are pre-processed and normalised before extraction.
  • NewZoho Books CSV export available on batch downloads alongside existing Excel and QuickBooks formats.
  • ImprovedCredit deduction is now atomic — a failed extraction no longer consumes a credit if the error is on the extraction side.
  • FixedDue date parsing corrected for invoices using DD/MM/YYYY locale — previously swapped month and day on ambiguous dates.
  • Fixedvalidation_status was missing from GET /invoices/{job_id} response on async (queued) jobs. Now included in all completion states.
December 2025
  • NewPOST /api/v1/invoices beta released to early access users. Synchronous processing with job_id polling via GET /api/v1/invoices/{job_id}.
  • NewGET /api/v1/account endpoint — returns tier and live credit balance. Recommended check before large batch operations.
  • NewAPI key management via web UI: create, label, and revoke keys from the API Access page. Keys scoped to account.
  • NewExcel (.xlsx) download for processed invoices — single-file and batch results.
  • ImprovedExtraction confidence classification (HIGH / MEDIUM / LOW) now returned on every completed job. Based on field completeness and cross-field validation.
October 2025
  • NewInvoiceParser Pro API private alpha. Core extraction: vendor, invoice_number, invoice_date, due_date, subtotal, tax, total, currency, and line items.
  • NewPDF invoice support. Single-file upload, synchronous extraction, JSON result.
  • NewCSV export for extracted invoice data.