Convert E-Invoice XML to JSON
Upload a UBL, CII, Factur-X or ZUGFeRD invoice and receive a structured EN 16931 JSON object, parsed deterministically from the XML, no sign-up required.
Drop your e-invoice here
or browse files to upload
Accepted formats: XML (UBL / CII) or hybrid PDF · Max 20 MB
How E-Invoice to JSON Conversion Works
Upload XML or Hybrid PDF
Drop a UBL or CII XML file, or a Factur-X / ZUGFeRD PDF. The syntax is detected automatically, and for PDFs the embedded XML attachment is extracted first.
Deterministic BT Mapping
Every element is mapped to the EN 16931 semantic model: business terms become predictable JSON fields, identical for UBL and CII input. No AI, no guessing, no variance.
Receive Structured JSON
Download an InvoiceDocument JSON with seller, buyer, lines, totals and VAT breakdowns, ready for your ERP import, database, or approval workflow.
Why Convert E-Invoices to JSON?
E-invoicing mandates mean your inbox fills with UBL, CII, Factur-X and ZUGFeRD files, four different XML dialects your application would otherwise need to understand. This endpoint normalises all of them into one predictable JSON shape, keyed to the EN 16931 business terms. Because the field names mirror the request body of the create endpoints, the same model carries an invoice through your whole pipeline: receive a supplier invoice as XML, read it as JSON, store it, approve it, or even re-issue a corrected document through /v1/create. And because the parsing is deterministic, identical input always yields identical output, something AI extraction can never promise.
Built for Developers
A single REST endpoint. Upload e-invoice XML or a hybrid PDF, receive a BT-mapped InvoiceDocument JSON. Deterministic parsing, no AI.
- Supports all formats: DOCX, XLSX, PDF, images, no preprocessing needed
- Works on scanned and photographed invoices
- Every response validated against official Schematron rules
Supports ZUGFeRD · Factur-X · XRechnung · UBL · CII · EN 16931
API Documentation$ curl -X POST https://api.invoicexml.com/v1/extract/json \ -H "Authorization: Bearer sk_live_..." \ -H "Content-Type: multipart/form-data"\ -F "[email protected]" // => 200 OK // => { "id": "inv_8f3k...", "status": "completed" }
Frequently Asked Questions
Which input files are accepted?
Standalone e-invoice XML in UBL 2.1 or CII D16B syntax, or a hybrid PDF (Factur-X, ZUGFeRD, or any PDF/A-3 with an embedded invoice XML attachment). When you upload a PDF, the embedded XML is extracted automatically and then parsed. Maximum file size is 20 MB.
What does the JSON output look like?
A BT-first EN 16931 InvoiceDocument with consistent field names: invoiceNumber, issueDate, currency, seller, buyer, paymentDetails, lines, totals, and vatBreakdowns. It is the same shape the create endpoints accept as input, so you can read a received invoice, adjust it, and post it straight back to /v1/create/ubl or /v1/create/facturx.
Is any AI involved?
No. This endpoint is deterministic XML parsing: the same input always produces the same output, and every value comes straight from the source XML. For PDFs that carry no embedded XML (typed, scanned, or photographed invoices), use the AI-powered /v1/parse/json instead.
Is the invoice validated during conversion?
No, this endpoint parses, it does not run business rules. Values are mapped as they appear in the XML. For a full EN 16931 / CIUS validation pass, send the same file to /v1/validate/ubl, /v1/validate/cii, /v1/validate/facturx or /v1/validate/zugferd.
Ready to automate your invoices?
Validate, convert and embed compliant e-invoices through one API. Start your 30-day free trial. No credit card required.