Skip to main content

POST /v1/extract/invoice

Submit a PDF invoice for extraction. Returns a job_id immediately — processing happens asynchronously in the background.

Request

Headers
HeaderRequiredDescription
X-API-KeyYesYour Parzo API key
Body — multipart/form-data
FieldTypeRequiredDescription
filePDFYesInvoice PDF, max 50MB
localestringNoLanguage hint: it, en, de, fr. Default: it
Alternative — application/json
FieldTypeRequiredDescription
file_base64stringYesBase64-encoded PDF content
localestringNoLanguage hint

Example request

curl -X POST https://api.parzo.dev/v1/extract/invoice \
  -H "X-API-Key: inv_your_key_here" \
  -F "file=@invoice.pdf" \
  -F "locale=it"

Response 202 Accepted

{
  "job_id": "3419ae1e-93c3-48a1-95ac-833c390f9916",
  "status": "pending",
  "estimated_seconds": 15,
  "poll_url": "/v1/jobs/3419ae1e-93c3-48a1-95ac-833c390f9916",
  "webhook_configured": false,
  "quota_remaining": 99
}

Output JSON schema

When the job completes, the full extracted data is available via GET /v1/jobs/:id:
{
  "vendor": {
    "name": "Acme Srl",
    "vat_number": "IT12345678903",
    "fiscal_code": null,
    "address": "Via Roma 1",
    "city": "Milano",
    "zip_code": "20100",
    "country": "IT",
    "email": "billing@acme.it",
    "phone": null,
    "iban": null,
    "sdi_code": null
  },
  "buyer": {
    "name": "Cliente SpA",
    "vat_number": "IT98765432109",
    "fiscal_code": null,
    "address": "Via Milano 5",
    "city": "Roma",
    "zip_code": "00100",
    "country": "IT",
    "email": null
  },
  "invoice": {
    "number": "FT-2026-001",
    "date": "2026-04-01",
    "due_date": "2026-05-01",
    "type": "invoice",
    "currency": "EUR",
    "payment_terms": "30gg d.f.",
    "payment_method": "bank_transfer",
    "po_number": null
  },
  "financials": {
    "subtotal": 1000.00,
    "tax_rate": 22,
    "tax_amount": 220.00,
    "total": 1220.00,
    "discount": null,
    "stamp_duty": null,
    "withholding_tax": null,
    "currency": "EUR"
  },
  "line_items": [
    {
      "description": "Servizio consulenza",
      "quantity": 10,
      "unit": "ore",
      "unit_price": 100.00,
      "amount": 1000.00,
      "tax_rate": 22,
      "discount_pct": null
    }
  ],
  "validation": {
    "confidence": 0.95,
    "is_scanned": false,
    "warnings": []
  }
}

Error responses

StatusDescription
401Missing or invalid API key
413File exceeds 50MB limit
422File is not a valid PDF
429Monthly quota exhausted
Use GET /v1/jobs/:id to retrieve the result once processing is complete. Typical processing time is 5-30 seconds.