How to validate a Peppol invoice (EN 16931 and Peppol BIS 3.0 rules)
Updated 2026-11-12
Before a Peppol invoice is accepted, it is checked against official rules. If it fails, the receiving side can reject it. Validating your own invoices (and the ones you receive) catches problems early.
The three layers of checks
- XML structure (UBL 2.1 schema): the file is a well-formed UBL Invoice or CreditNote with elements in the right order.
- EN 16931 business rules: the European standard's rules, with IDs like
BR-..., for example totals that must add up and VAT breakdowns that must match the lines. - Peppol BIS Billing 3.0 rules: extra rules for the Peppol network, with IDs like
PEPPOL-EN16931-R..., for example required electronic addresses and references.
Each failed rule has an ID and a message. Fatal errors mean the invoice is not compliant; warnings are advice.
Common errors and what they mean
| Rule | Meaning | Typical fix |
|---|---|---|
PEPPOL-EN16931-R003 |
A buyer reference or purchase order reference must be provided | Add your customer's reference or PO number |
BR-CO-16 |
Amount due must equal total with VAT minus paid amount plus rounding | Recalculate totals; don't edit amounts by hand |
BR-01 |
The specification identifier (CustomizationID) is missing | The file was not produced as a Peppol BIS 3.0 invoice |
BR-03 |
The invoice issue date is missing | Add the issue date |
Check a file for free, without uploading it
Use Check an invoice: drop in a UBL / Peppol XML file and it is checked in your browser against the official CEN EN 16931 (v1.3.17) and OpenPEPPOL BIS 3.0.22 rules. The file never leaves your device.
Passing validation means the file is technically compliant. It does not prove the VAT treatment or the amounts are right for your situation.