Convert UN/CEFACT CII to UBL 2.1
Peppol network delivery (Belgium, Nordics, and most B2B receivers) expects UBL, not CII.
Deadline: Ongoing — required whenever a CII-native sender needs to reach a Peppol-only receiver.
Some ERPs (particularly SAP- and Sage-based back-ends common in France and Germany) produce CII natively. If a downstream receiver — most Peppol-network participants — only accepts UBL, you need syntax conversion, not just re-validation.
The conversion goes through the same canonical model as every other pair: parse the CII into every EN 16931 business term, then serialize as UBL. The result is validated against the official EN 16931 UBL Schematron before InvoiceHub returns it.
Try it
curl -X POST https://api.invoicehub.dev/api/v1/convert \
-H "Authorization: Bearer ih_live_xxx" \
-H "Content-Type: application/json" \
-d '{"from": "UN_CEFACT_CII", "to": "UBL_2.1", "document": "<source document>"}'Real UBL 2.1 output
Excerpt from actual, verified conversion output — not a mocked example.
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" ...>
<cbc:CustomizationID>urn:cen.eu:en16931:2017</cbc:CustomizationID>
<cbc:ID>INV-2026-0142</cbc:ID>
<cbc:IssueDate>2026-06-19</cbc:IssueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<cac:AccountingSupplierParty>...</cac:AccountingSupplierParty>
<cac:LegalMonetaryTotal>
<cbc:PayableAmount currencyID="EUR">1190.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>...</cac:InvoiceLine>
</Invoice>Common validation errors
- BR-01 — CustomizationID (BT-24) missing on the source — every EN 16931 invoice must declare its specification identifier.
- BR-16 — No invoice lines found — check ram:IncludedSupplyChainTradeLineItem exists on the source CII.
- BR-CO-10 — Sum of line net amounts does not match the document line-extension total.
Get an API key
Free tier includes unlimited validation and UBL 2.1 generation. This conversion requires the Pro plan or above.