UBL vs. CII: which e-invoice syntax should you use?
The two EN 16931 syntaxes compared: structure, tooling, Peppol, Factur-X/ZUGFeRD and XRechnung — and how to convert between them.
5 min read · Updated 28 Oct 2026
EN 16931 allows two XML syntaxes: OASIS UBL 2.1 and UN/CEFACT Cross Industry Invoice (CII) D16B. Both carry the same business terms, so choosing between them is mostly about your network and your customers.
At a glance
- UBL — root element Invoice or CreditNote; dates as YYYY-MM-DD; used by Peppol BIS 3.0 and XRechnung UBL.
- CII — root element rsm:CrossIndustryInvoice; dates as udt:DateTimeString format 102 (YYYYMMDD); used by Factur-X, ZUGFeRD and XRechnung CII.
- UBL has separate documents for invoices and credit notes; CII uses one document with a type code.
- CII groups data into agreement, delivery and settlement blocks; UBL keeps parties and totals at document level.
Which one should I send?
- Sending via Peppol → UBL (Peppol BIS 3.0).
- Customers want a readable PDF → Factur-X / ZUGFeRD (CII inside a PDF).
- German public sector → XRechnung, either syntax.
- France → any of Factur-X, UBL or CII through your plateforme agréée.
Converting
Because both syntaxes map onto the same semantic model, conversion is lossless for EN 16931 core data. InvoiceVerify's Factur-X → UBL converter reads CII, maps it to the business terms and writes a Peppol BIS 3.0 UBL invoice that is validated immediately.
Watch the dates
The most frequent conversion bug is a date format mismatch: UBL wants 2026-10-28, CII wants 20261028 with format="102".
This guide summarises public specifications and official guidance. It is not legal or tax advice — check with your adviser for your situation.