Find out exactly why an e‑invoice fails EN 16931

Drop a Factur-X, XRechnung, UBL or CII invoice and run it through the same official rule set a receiving platform checks it against: EN 16931 schematron plus the profile's own rules. Every failure comes back with its BT reference and a plain explanation.

POST /v1/validate live
Request
curl https://api.einvoicekit.com/v1/validate \
  -H "Authorization: Bearer eik_live_..." \
  -F "file=@invoice.pdf"
200 valid: false BR-CO-15

This page runs the exact endpoint your own code would call.

Drop an invoice here or click to choose a file

.xml (UBL, CII, XRechnung) or .pdf (Factur-X / ZUGFeRD). Checked against the full official rule set, never stored.

No invoice at hand? Try a sample:

Files are processed in memory to produce the verdict, then dropped. Nothing is stored, and no account is needed to use this page.

What gets checked

Every run here is the full official rule set, never a preview of it:

The EN 16931 schematron: every mandatory field and every total, cross-checked the way a receiving platform checks them.
The detected profile's own rules on top of it: XRechnung, Factur-X (BASIC WL, EN 16931, EXTENDED), ZUGFeRD, Peppol BIS.

Validating a French invoice from your own code? Add the BR-FR rules FNFE-MPE publishes for the mandate with target=france, documented on the API page.

Free API key

100 validations plus 20 generated invoices a month, forever. No card.

Get your free API key