ValidateFin
Back to blog
·Updated Mar 11, 2026·UBL/Peppol·By Eliel Nicaise

Common UBL & Peppol BIS 3.0 Errors and How to Fix Them

The most frequent UBL 2.1 and Peppol BIS Billing 3.0 validation errors, with root causes and practical fixes for each.

Why UBL invoices get rejected

UBL 2.1 invoices sent via the Peppol network must comply with both the UBL schema and the Peppol BIS Billing 3.0 business rules. These rules enforce EN 16931 compliance, ensuring invoices are machine-processable across Europe. Violations cause rejection by the receiving access point or the buyer's ERP system.

This guide covers the most common UBL and Peppol errors, organized by category. Each includes the specific rule violated, the XML element involved, and a tested fix.

ValidateFin checks all of these rules in your browser — no file uploaded.

Schema and structure errors

Fundamental XML structure issues that prevent parsing.

Wrong UBL namespace

The root element must use the correct UBL 2.1 namespace: urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 or CreditNote-2. A wrong or missing namespace causes immediate schema failure.

Missing CustomizationID or ProfileID

Peppol requires cbc:CustomizationID (e.g., urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0) and cbc:ProfileID (urn:fdc:peppol.eu:2017:poacc:billing:01:1.0). Without these, the access point cannot route the invoice.

Invalid document type

Peppol BIS 3.0 only supports Invoice and CreditNote. Other UBL document types (DebitNote, Order) are not valid in the billing context.

Tax and amount errors

Peppol enforces strict mathematical rules on tax calculations.

PEPPOL-EN16931-R004: Currency mismatch

DocumentCurrencyCode must match the currency of all monetary amounts. You cannot mix EUR and USD amounts in a single invoice.

PEPPOL-EN16931-R040/R041: Tax calculation errors

The tax amount must equal the taxable amount × tax rate (within rounding tolerance). TaxTotal must equal the sum of all TaxSubtotal amounts. Even 0.01 difference causes failure.

PEPPOL-EN16931-R053: Payable amount mismatch

PayableAmount must equal LegalMonetaryTotal/TaxExclusiveAmount + TaxTotal/TaxAmount - PrepaidAmount. This end-to-end consistency check catches most mathematical errors.

Party and identification errors

Buyer and seller identification issues.

Missing seller VAT number

The seller (AccountingSupplierParty) must include a VAT identification number in PartyTaxScheme/CompanyID for tax-liable invoices. The format must match the country (e.g., FR + 11 chars, DE + 9 digits).

Invalid endpoint identifier scheme

Peppol requires EndpointID with a valid scheme (e.g., 0208 for Belgian enterprise number, 0106 for Dutch KvK). Using the wrong scheme prevents network routing.

Missing or invalid buyer reference

BuyerReference (BT-10) is mandatory in Peppol BIS 3.0. For German XRechnung, this must be the Leitweg-ID. Missing or malformed references cause buyer-side rejection.

Validate your UBL invoice now

ValidateFin checks UBL schema, Peppol BIS 3.0 business rules, EN 16931 mandatory fields, and VAT number formats — all in your browser, no file uploaded.

Open UBL Validator

Frequently Asked Questions

How many Peppol validation rules are there?

Peppol BIS Billing 3.0 defines approximately 150 business rules (PEPPOL-EN16931-R*) on top of the UBL schema. ValidateFin checks all of them.

What is the difference between UBL schema validation and Peppol rules?

UBL schema (XSD) validates XML structure. Peppol rules validate business logic: tax math, mandatory fields, code list values. An invoice can pass XSD but fail Peppol rules.

Can I send a UBL invoice without Peppol?

Yes. UBL is an open standard. You can send UBL invoices via email, SFTP, or any channel. Peppol BIS 3.0 rules only apply when using the Peppol network.

Which UBL version does Peppol use?

Peppol BIS Billing 3.0 uses UBL 2.1. There is no official Peppol support for UBL 2.2 or 2.3 yet.

What is a Schematron rule?

Schematron is an XML validation language used to express Peppol business rules. Unlike XSD (which validates structure), Schematron can validate cross-field relationships like "if tax category is S, then tax rate must be > 0".

How do I find my Peppol endpoint?

Your Peppol endpoint is registered with your access point provider. It uses a scheme ID (e.g., 0208 for BE enterprise number) and your identifier. Check with your AP provider.

Can ValidateFin check NLCIUS or XRechnung rules?

ValidateFin validates against Peppol BIS 3.0 and EN 16931 core rules, which cover the majority of NLCIUS and XRechnung requirements. Country-specific extensions may require additional validation.

What is BR-CO-10?

BR-CO-10 is an EN 16931 rule requiring that the sum of Invoice line net amounts equals the Tax exclusive amount. It is one of the most commonly failed rules due to rounding issues.

Do credit notes follow the same rules?

Yes. Peppol BIS 3.0 applies the same business rules to both Invoice and CreditNote. The main difference is the document type code (380 for invoice, 381 for credit note).

How often do Peppol rules change?

Peppol publishes rule updates roughly twice per year (spring and fall releases). Each update may add, modify, or remove rules. ValidateFin stays current with the latest release.