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.