Peppol is now the default rail for cross-border B2B e-invoicing in Europe. Mandates in the Netherlands, Belgium, the Nordics, and beyond expect a structured UBL 2.1 invoice that conforms to the European standard EN 16931 and the Peppol BIS Billing 3.0 Core Invoice Usage Specification (CIUS). Validating your UBL before you send it means an Access Point will accept it instead of silently rejecting it after transmission.
What the UBL validator checks
A UBL invoice has three distinct compliance layers. Our validator runs all three automatically, and a file must pass every layer to be accepted by a Peppol Access Point or your trading partner's accounting system.
UBL 2.1 XML schema - validates the document against the OASIS UBL 2.1 Invoice and CreditNote schemas. Catches structural errors (missing required elements, wrong element ordering, malformed dates, and namespace declaration errors) before the business-rule check runs.
EN 16931 Schematron: the BR rule set - this is where most rejections originate. The rules check VAT arithmetic consistency (BR-CO-14: invoice total VAT must equal the sum of all VAT category amounts), category constraints (BR-S-08: standard-rate lines must carry a rate greater than zero), and mandatory business terms (BR-01: specification identifier, BR-06: seller name, BR-16: at least one invoice line).
Peppol BIS Billing 3.0 CIUS - the PEPPOL-EN16931-R rules layer Peppol's own constraints on top of EN 16931. The most common are the electronic address checks: both seller and buyer need an Endpoint ID with a valid Electronic Address Scheme (for example 0088 for GLN or 9930 for a German VAT number), and the document must carry a buyer reference or a purchase order line.
Common UBL validation errors, and what they mean
These are the rule violations we see most frequently. If your file fails, one of these is likely the cause.
BR-06 - Seller name missing
The AccountingSupplierParty has no registration or party name. Every UBL invoice must name the seller. Add the cac:PartyLegalEntity/cbc:RegistrationName element.
BR-CO-14 - VAT total does not match VAT breakdown
The TaxTotal/TaxAmount does not equal the sum of the TaxSubtotal amounts. This fires when rounding differences between line-level and header-level VAT create a discrepancy of even one cent. Compute the header VAT total from the breakdown, not independently.
PEPPOL-EN16931-R020 - Endpoint ID scheme missing
The seller or buyer EndpointID is present but has no schemeID, or uses a scheme that is not on the Peppol Electronic Address Scheme code list. Set a valid scheme such as 0088 (GLN), 0192 (Norwegian org number) or 9930 (German VAT).
BR-S-08 - Standard-rate line carries a zero rate
A line declares VAT category code S (standard rate) but a 0% rate. If zero-rate is intended, use category code Z (zero-rated) or E (exempt) instead.
From validation to a clean invoice
If your file fails, you do not have to hand-edit XML. Create a compliant UBL invoice from scratch with our guided wizard, which fills in the Peppol electronic addresses and tax breakdown for you, or convert an existing PDF invoice into UBL and validate the result here.