EN 16931 validator

Find out why your e-invoice gets rejected

Drop in a Factur-X, ZUGFeRD, XRechnung, or Peppol invoice. You get back the exact rules it breaks, what each one means, and how to fix it. Free, no signup, nothing stored.

Drop an invoice here

Factur-X or ZUGFeRD PDF, or a bare XRechnung, Peppol, or CII file.

Your invoice is checked and discarded. Nothing is stored.

What gets checked

Four stages, in order. If a stage cannot run, the report says so and the result is never reported as a pass.

The PDF container

Whether the XML is embedded, referenced from the catalog, flagged with the right relationship, and declared in the metadata. Most rejected hybrid invoices fail here, not in their XML.

The XML schema

Structure and element order against the published CII D16B and UBL 2.1 schemas. Order matters in both, and an out-of-sequence element fails before any business rule is evaluated.

The EN 16931 rules

The full published rule set, the same one national platforms run. Failures come back as BR-01, BR-CO-15 and so on, with the business term and the exact element.

Formats

  • Factur-X

    France, all conformance levels

  • ZUGFeRD 2.x

    Germany, hybrid PDF

  • XRechnung

    German public sector, CII and UBL

  • Peppol BIS 3

    Cross-border UBL

ZUGFeRD 1.0 is recognised, but it predates EN 16931 and uses a different data model, so the EN rules are not applied to it. The report tells you that rather than passing it silently.

Run it on every invoice

The same checks are available as an API, so you can validate before you send instead of finding out when a platform bounces it back.

curl -X POST https://pdfpipe-einvoice.onrender.com/v1/einvoice/validate \
  -H "Authorization: Bearer pp_live_..." \
  -F "file=@invoice.pdf"

The response is a JSON report: a verdict, the detected profile, every finding with its rule code and business term, and which stages ran.

Read the docs

What this does not tell you

Full PDF/A conformance is not checked. We report the PDF/A violations that are unambiguous from the document structure: encryption, a missing output intent, fonts that are not embedded, and a missing or incomplete association between the PDF and its XML. We do not check the rest of the standard, which covers colour spaces, transparency, and a long tail that only a dedicated engine gets right. A document can pass every check here and still fail a full PDF/A validator, so run one if that matters to you.

A pass is not a guarantee of acceptance. Tax authorities, Peppol Access Points, and individual buyers apply their own rules on top of EN 16931, including country extensions and registration checks that no file-level validator can see. This tool reports what the published rule set says about your document, and nothing more.

This is not legal, tax, or accounting advice. The results are provided as is, without warranty of any kind. Decide your compliance position with a qualified adviser, not with this page.

Rule text comes from the EN 16931 validation artefacts published by CEN/TC 434 and the European Commission, used unmodified under the European Union Public Licence v1.2. The artefacts are available from the upstream repository.
Factur-X, ZUGFeRD, XRechnung, and Peppol are trade marks of FNFE-MPE, FeRD, KoSIT, and OpenPeppol AISBL respectively, and are used here only to identify the invoice formats this tool reads. PDFPipe is not affiliated with, endorsed by, or certified by any of them, nor by CEN or the European Commission.