What is a UBL invoice?
UBL (Universal Business Language) is the OASIS XML vocabulary behind most European e-invoices. An EN 16931 UBL invoice starts with <Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"> and uses the cac: and cbc: namespaces for its elements. Country profiles (XRechnung, Peppol BIS, NLCIUS, the Belgian and Italian CIUS) all build on the same structure, which is why one viewer can show them all.
Where UBL invoices come from
| Profile | Country / network | Customization ID starts with |
|---|---|---|
| Peppol BIS Billing 3.0 | Belgium, Netherlands, Nordics, Peppol network worldwide | urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 |
| XRechnung (UBL syntax) | German public sector | urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0 |
| NLCIUS | Dutch government and businesses | urn:cen.eu:en16931:2017#compliant#urn:fdc:nen.nl:nlcius:v1.0 |
| Generic EN 16931 | Any EU country, ERP exports | urn:cen.eu:en16931:2017 |
The viewer reads the customization ID, names the profile in the header and chooses the matching labels. A file without a customization ID is shown as plain UBL 2.1.
UBL or CII?
EN 16931 allows two XML syntaxes for the same invoice content. UBL is used by Peppol and by most Western and Northern European profiles; UN/CEFACT CII is used inside ZUGFeRD and Factur-X and as the second XRechnung syntax. The data model is identical, only the element names differ: cbc:ID in UBL is ram:ID in CII, cac:InvoiceLine becomes ram:IncludedSupplyChainTradeLineItem. This page accepts both and renders them identically, so you do not need to know which one you received.
Reading the XML yourself
If you only have a text editor, these are the elements that matter: cbc:ID (invoice number), cbc:IssueDate, cbc:DueDate, cbc:DocumentCurrencyCode, cac:AccountingSupplierParty and cac:AccountingCustomerParty (seller and buyer with cac:PartyTaxScheme/cbc:CompanyID as VAT number), cac:PaymentMeans/cac:PayeeFinancialAccount/cbc:ID (IBAN), cac:TaxTotal (VAT breakdown) and cac:LegalMonetaryTotal/cbc:PayableAmount (amount due). The viewer does exactly this mapping and adds the code-list labels, so a VAT category S reads as "standard rate".
What you get
- Header: invoice number, dates, currency, buyer reference, order reference.
- Parties: names, addresses, VAT and registration numbers, electronic endpoints.
- Lines with quantities, units, unit prices, VAT category and net amounts.
- VAT breakdown, totals, payment means with IBAN and payment reference.
- The same content as JSON for import into other software.
Frequently asked questions
Does this page validate the invoice too?
It shows syntax problems and a quick EN 16931 check. For the complete rule sets use the profile pages: <a href="/peppol-validator/">Peppol validator</a> for BIS Billing 3.0 and <a href="/xrechnung-viewer/">XRechnung</a> for German files.
UBL 2.0, 2.1 or 2.3: which one is it?
EN 16931 invoices use the UBL 2.1 Invoice and CreditNote schemas. Later UBL releases (2.2, 2.3) are backwards compatible for invoices, so files declared as 2.1 remain valid. Older UBL 2.0 files from pre-2017 systems are opened, but shown as legacy.
Does it also read CII invoices?
Yes. UN/CEFACT Cross Industry Invoice (CII D16B) files, used by XRechnung-CII, ZUGFeRD and Factur-X, are rendered the same way.
Can I convert UBL to PDF?
Open the file here and use the browser print dialog with "Save as PDF". The rendered layout is designed for A4 printing.
Developers: same engine as an API
curl -F file=@invoice.pdf https://einvoicechecker.com/v1/validatecurl -F file=@invoice.xml https://einvoicechecker.com/v1/parsecurl -F file=@invoice.xml "https://einvoicechecker.com/v1/render?lang=en" -o invoice.html