UBL 2.1 Validator

Free UBL validator for UBL 2.1 invoices and credit notes. Check your XML against Peppol BIS Billing 3.0 and EN16931 schematron rules and get instant results. Use it as a quick UBL checker before you send an invoice on Peppol.

Checks: EN16931 1.3.16 and Peppol BIS Billing 3.0.20 for UBL · EN16931 1.3.16 for CII · XRechnung 3.0.2 (KoSIT schematron 2.6.0) · Factur-X 1.09.2 / ZUGFeRD 2.5.2 · XML Schema UBL 2.1, CII D16B and Factur-X · last updated 20 October 2026

Schemas: Peppol BIS Billing 3.0 Invoice · Peppol BIS Billing 3.0 Credit Note · XRechnung 3.0 (UBL)

A CIUS or in-house rules? Bring your own XSD or Schematron

The UBL validation stack

A Peppol invoice passes through three validation layers. Understanding them helps you fix errors faster. The middle layer maps to the EN16931 business terms (BT and BG codes) that each field must satisfy. As a Peppol UBL validator, this tool runs all three layers in one check.

1

UBL 2.1 Schema

XML structure: correct element names, namespaces, and data types. Defined by OASIS.

2

EN16931 Business Rules

European semantic rules covering mandatory fields, calculation checks, and tax category logic. Rules prefixed BR- and BR-CO-.

3

Peppol BIS 3.0 Rules

Network-specific rules covering electronic address schemes, process identifiers, and code list restrictions. Rules prefixed PEPPOL-EN16931-.

What a valid result means

A valid result means the invoice passed the XML Schema and the official rules of the rule sets shown with it. Those rules check the structure, the content and the arithmetic of the invoice. They do not check that the data is correct, and they check the format of only a few identifiers.

Not checked by the official rules

  • That a VAT ID, Peppol ID or Leitweg-ID exists or is registered (no live lookups)
  • The VAT ID format beyond the country prefix (BR-CO-09); only Peppol BIS checks the VAT IDs of Norwegian, Swedish and Greek sellers. Data quality hint: ADV-VAT
  • The IBAN format (spaces or a wrong check digit), except a warning on some German invoices with payment means 58 or 59 (BR-DE-19, BR-DE-20, DE-R-019, DE-R-020). Data quality hint: ADV-IBAN
  • Most Peppol ID values: a placeholder such as unknown under scheme 0204 passes. Data quality hint: ADV-ENDPOINT
  • Empty elements in plain EN16931 CII and in Factur-X MINIMUM / BASIC WL (see PEPPOL-EN16931-R008). Data quality hint: ADV-EMPTY
  • That amounts, names and addresses are true

The items with a data quality hint are flagged in their own section of the result, apart from the errors and warnings. The hints are not part of the official rules and never change the result. See all data quality hints.

To check that a VAT ID exists, look it up in VIES; to look up a Peppol ID, search the Peppol Directory. Every rule is explained in the validation rules reference.

Supported UBL document types

CodeTypeUBL Document
380Commercial invoiceInvoice
381Credit noteCreditNote
384Corrected invoiceInvoice
386Prepayment invoiceInvoice
389Self-billed invoiceInvoice

Credit notes (code 381) use the UBL 2.1 CreditNote syntax and carry their own rules — see the Peppol credit note validation guide. Comparing syntaxes? Read UBL vs CII vs Factur-X.

People also ask about UBL and Peppol

What is a UBL invoice?

A UBL invoice is a business invoice written in Universal Business Language (UBL) 2.1, an OASIS XML standard. It uses a fixed set of XML elements (in the cbc: and cac: namespaces) to describe the seller, buyer, line items, taxes, and totals, so the invoice can be processed automatically. In Europe, a UBL invoice is the syntax used by Peppol BIS Billing 3.0 and the EN16931 standard.

Is Peppol BIS based on UBL?

Yes. Peppol BIS Billing 3.0 is built on UBL 2.1: it uses the UBL Invoice and CreditNote XML syntax and adds its own business rules, code lists, and identifier requirements on top. Every Peppol invoice on the network is a UBL 2.1 document. CII (Cross Industry Invoice) is not accepted on Peppol.

What UBL version does Peppol use?

Peppol uses UBL 2.1. Peppol BIS Billing 3.0 requires the UBL 2.1 Invoice and CreditNote schemas, and documents built on the older UBL 2.0 namespaces are rejected. This validator checks your file against the UBL 2.1 structure before applying the EN16931 and Peppol BIS rules.

How do I check if a UBL file is valid?

Upload the UBL XML file to a validator that runs the official EN16931 and Peppol BIS 3.0 schematron rules, such as this free UBL validator. It reports every schema error, missing mandatory field, invalid identifier, and business-rule violation with the exact rule ID and a plain-language explanation. Fix each reported issue and re-run the check until the file passes.

Can I validate UBL XML online for free?

Yes. This UBL validator checks UBL 2.1 XML invoices and credit notes online for free, with no signup and no upload limit. It runs the same EN16931 (CEN) and Peppol BIS Billing 3.0 schematron rules used across the Peppol network and shows results instantly with shareable links.

UBL validator FAQ

What is UBL 2.1?

Universal Business Language (UBL) 2.1 is an OASIS open standard that defines XML document formats for business documents like invoices, credit notes, and orders. It is the syntax used by Peppol BIS Billing 3.0 and the EN16931 European e-invoicing standard.

What is the difference between UBL and Peppol?

UBL 2.1 defines the XML structure: the tags, elements, and data types. Peppol BIS Billing 3.0 is a business profile on top of UBL that adds constraints, including which fields are mandatory, which code lists to use, and what business rules must be satisfied. EN16931 sits between them as the European semantic model. When you validate here, we check all three layers.

Which UBL document types can I validate?

This validator supports UBL 2.1 Invoice (InvoiceTypeCode 380 and variants like 384, 386, 389) and UBL 2.1 CreditNote (InvoiceTypeCode 381). These are the document types defined in Peppol BIS Billing 3.0.

What does a UBL validation check?

Validation runs two sets of schematron rules: EN16931 (CEN) business rules that check European standard compliance (BR-series rules), and Peppol BIS rules that check network-specific requirements like electronic address scheme IDs, process identifiers, and code list values.

What is an SEF file?

SEF (Stylesheet Export File) is a compiled form of XSLT stylesheets used by SaxonJS. The Peppol schematron rules (.sch files) are compiled into SEF format so they can run efficiently in the browser or on Cloudflare Workers without a full XSLT processor.

Is UBL 2.1 the same as UBL 2.0?

No. UBL 2.1 added significant elements compared to 2.0, including better support for credit notes, self-billing, and additional code lists. Peppol BIS Billing 3.0 specifically requires UBL 2.1. Documents using UBL 2.0 namespaces will fail validation.

Looking for the main Peppol validator? Go to peppolvalidator.com

Validating CII / Factur-X invoices? Use the Factur-X validator

Learn more about Peppol