What is UBL 2.1?

UBL 2.1 (Universal Business Language) is the OASIS XML syntax used by PEPPOL BIS, XRechnung-UBL and OIOUBL. It is one of the two EN 16931 syntaxes (the other being CII). A plain UBL 2.1 invoice carries no national CustomizationID.

Open a UBL 2.1 file in the viewer → See every business term, a visual preview and the raw XML.

Country
International
Syntax
XML (OASIS UBL 2.1)
Version
2.1

Key facts

UBL is a syntax, not a profile

UBL 2.1 (Universal Business Language) is an OASIS standard: a library of XML document schemas for business documents, of which Invoice and CreditNote are two. It defines how an invoice is structured in XML - not what business rules it must follow. That is the key distinction from PEPPOL BIS, XRechnung or OIOUBL, which are profiles (CIUS) that add rules on top of the UBL syntax.

A "plain" UBL 2.1 invoice carries no national CustomizationID. The same UBL document becomes a PEPPOL, XRechnung-UBL or OIOUBL invoice once it declares the corresponding CustomizationID and satisfies that profile’s rules.

How profiles are distinguished

Because PEPPOL BIS, XRechnung-UBL and OIOUBL all share the UBL 2.1 root element, a reader tells them apart by the CustomizationID at the top of the document.

UBL 2.1 profiles distinguished by CustomizationID
ProfileCustomizationID ends inRegion
PEPPOL BIS Billing 3.0…poacc:billing:3.0Pan-European
XRechnung 3.0 (UBL)…xrechnung_3.0Germany
OIOUBL 3.0…oioubl:3.0Denmark
Plain UBL 2.1(none)International

UBL cbc / cac structure

UBL groups data with two namespace prefixes: cbc (Common Basic Components) for simple leaf values like cbc:ID or cbc:IssueDate, and cac (Common Aggregate Components) for nested structures like cac:AccountingSupplierParty or cac:InvoiceLine. This cbc/cac split is the visible signature of a UBL document and the main structural difference a developer notices versus CII’s ram/rsm naming.

UBL or CII?

EN 16931 permits two syntaxes: UBL and UN/CEFACT CII D16B. They are semantically equivalent - any EN 16931 invoice can be expressed in either. The choice is usually made for you by the target: PEPPOL requires UBL; Factur-X / ZUGFeRD use CII; XRechnung accepts both. Facturus uses the EN 16931 model as a hub, so it can transcode UBL to CII and back without losing meaning.

Frequently asked questions

What is the difference between UBL and CII?
Both are EN 16931 XML syntaxes. UBL is the OASIS schema (used by PEPPOL, XRechnung-UBL, OIOUBL); CII is the UN/CEFACT schema (used by Factur-X, XRechnung-CII). They are semantically equivalent.
Is UBL the same as PEPPOL?
No. UBL is the underlying XML syntax; PEPPOL BIS is a profile built on UBL 2.1. Every PEPPOL invoice is UBL, but not every UBL invoice is PEPPOL.
Does a plain UBL invoice have a CustomizationID?
A generic UBL 2.1 invoice carries no national CustomizationID. Declaring one (and following its rules) is what turns it into a PEPPOL, XRechnung or OIOUBL invoice.
Can UBL be converted to CII?
Yes. Both express the same EN 16931 model, so transcoding between UBL and CII preserves the business data - only the XML structure changes.

Convert UBL 2.1

Do more with Facturus