Valinvo

Free ZUGFeRD and Factur-X validator

Valinvo's free validator checks a ZUGFeRD 2.x or Factur-X invoice, as the PDF with the invoice embedded or as the CII XML alone, against the official rules. For a PDF it also checks the PDF itself (PDF/A-3) and its metadata. Every problem comes with its rule ID, its location and a message. You need no account and no API key, and your file is processed in memory and not stored.

Open the validator · Use it from code (API quickstart)

What it checks

Not supported yet: the French profile EXTENDED-CTC-FR and ZUGFeRD 1.0. You get a clear message instead of a result.

The rules come from the official publishers (FeRD for ZUGFeRD / Factur-X, CEN for EN 16931, FNFE-MPE for the French rules) and are applied as published.

How to use it

  1. Open the validator and upload the PDF, or paste the XML.
  2. Click Validate.
  3. Read the list: each error shows the rule ID, the location and what is wrong. Fix the invoice in your system and validate again.

From code: the same check as an API

curl -X POST https://valinvo.bmk-hub.com/v1/validate \
  -H 'X-Accept-Terms: 1.0' \
  -H 'Content-Type: application/pdf' \
  --data-binary @invoice.pdf

For the XML alone, send Content-Type: application/xml. A valid ZUGFeRD PDF without a delivery date gives:

{
  "ruleSet": "zugferd-2.5.2-en16931+pdf-a-3u",
  "valid": true,
  "errors": [],
  "warnings": [{
    "rule": "PEPPOL-EN16931-R008",
    "message": "Document MUST not contain empty elements. (still status warning)",
    "location": "/rsm:CrossIndustryInvoice[1]/rsm:SupplyChainTradeTransaction[1]/ram:ApplicableHeaderTradeDelivery[1]"
  }]
}

Warnings do not make an invoice invalid. This one is common: the ZUGFeRD schema requires the delivery block even when there is no delivery date or ship-to address to put in it. An invoice with problems is a normal 200 answer with valid: false. A PDF without an invoice attachment gets 400 no_embedded_invoice. More in the quickstart.

Common ZUGFeRD and Factur-X errors

French rule IDs come back with the business term they concern, for example BR-FR-05_BT-22_PMT. The French rules' messages are in French, as published.

Questions

Is the validator really free? Yes. The online validator needs no account or API key. The API can also be tried without a key, with a small daily limit for creating invoices.

Is my invoice stored? No. The file is processed in memory and not stored. Please use sample data or invoices you are allowed to share.

Does "valid" mean the recipient or the French platform accepts it? Not necessarily. The check applies the official rules as published. A recipient or a plateforme agréée (PA) may check more, and the check is not tax or legal advice.

Can Valinvo also create the invoice? Yes. You send one JSON invoice and receive a ZUGFeRD PDF (zugferd-en16931) or a French Factur-X (factur-x-fr), checked against the same rules. See the quickstart.

By using the validator you accept the Terms of Use.

Quickstart · XRechnung validator · Peppol validator · ZUGFeRD / Factur-X validator · ZUGFeRD-csharp: your options · Error codes