Interactive UBL 2.1 invoice schema reference. Browse the XML tree structure, see Peppol BIS 3.0 requirements, and copy XPaths.
Select an element
Click any element in the tree to see its details, XML path, and Peppol requirements.
Send and receive UBL 2.1 invoices via our REST API. No XML assembly required.
UBL stands for Universal Business Language. It is an open, royalty-free XML-based standard maintained by OASIS for electronic business documents such as invoices, credit notes, orders, and despatch advices. UBL 2.1 is the version used by Peppol BIS Billing 3.0, the dominant e-invoicing standard across Europe.
A UBL invoice uses two XML namespace prefixes: cbc (Common Basic Components) for simple data elements like dates and amounts, and cac (Common Aggregate Components) for complex structures like addresses and parties. The root element is always <Invoice> with the UBL 2.1 namespace.
The base XML schema that defines all possible invoice elements. UBL 2.1 is very broad and supports many optional fields.
A subset (CIUS) of UBL 2.1 tailored for cross-border invoicing. Peppol makes some optional UBL fields mandatory and restricts allowed values.
This explorer shows the Peppol BIS 3.0 requirements for each element. Fields marked as "Peppol Required" must be present in every Peppol invoice. Fields without the Peppol indicator are valid UBL but not required by the Peppol network.
The two core parties on every invoice. Each contains legal name, address, VAT identifier, and Peppol endpoint ID. Both are mandatory in Peppol.
The monetary summary of the invoice. Includes line extension amount (sum of lines), tax exclusive amount, tax inclusive amount, and the final payable amount.
One entry per VAT category and rate combination. Each subtotal shows the taxable amount, tax amount, category code, and percentage. Required for every invoice.
Every invoice needs at least one line. Each line contains the item name, quantity with unit code, net amount, price, and VAT classification. Line IDs must be unique within the invoice.
cbc: elements contain simple values (text, dates, amounts, codes). cac: elements are containers that group related cbc: elements together. The root Invoice element has no prefix.
[1..1] means exactly one occurrence is required. [0..1] means the element is optional. [0..n] or [1..n] means the element can repeat. Peppol may make optional fields mandatory.
Each UBL element maps to an EN 16931 business term (BT-xx) or business group (BG-xx). Use this mapping to understand the semantic meaning of each field. BTs are leaf-level data, BGs are containers.
This tool is a static reference that runs entirely in your browser. No data is sent to any server. No cookies, no tracking, no account required. Bookmark it and use it anytime.
UBL (Universal Business Language) is an XML-based open standard for business documents. For e-invoicing, UBL 2.1 defines the structure of an invoice in XML, including elements for parties, line items, taxes, and totals. It is the format used by Peppol and is mandatory for B2B e-invoicing in Belgium since January 2026.
UBL 2.1 is the full XML schema with many optional elements. Peppol BIS 3.0 is a CIUS (Core Invoice Usage Specification) that restricts UBL 2.1 for use on the Peppol network. It makes certain optional fields mandatory (like BuyerReference and EndpointID) and defines specific code lists and validation rules.
EN 16931 defines the semantic data model for European e-invoices using business terms (BT-xx) and business groups (BG-xx). UBL 2.1 is one of two official XML syntaxes for expressing this model. Each EN 16931 business term maps to a specific XPath in UBL. The other syntax is CII (Cross Industry Invoice), used by ZUGFeRD and Factur-X.
In UBL XML, cbc: stands for Common Basic Components and contains simple values like text, dates, amounts, and codes. cac: stands for Common Aggregate Components and groups related elements together (e.g., cac:PostalAddress contains cbc:StreetName, cbc:CityName, etc.). This separation keeps the schema organized and reusable.
Key mandatory fields include: CustomizationID (BT-24), ProfileID (BT-23), Invoice ID (BT-1), IssueDate (BT-2), InvoiceTypeCode (BT-3), DocumentCurrencyCode (BT-5), BuyerReference (BT-10), seller and buyer details with EndpointID, at least one InvoiceLine, TaxTotal, and all LegalMonetaryTotal amounts. Use the "Peppol Required" filter in this explorer to see the complete list.
UBL credit notes use a separate root element (CreditNote instead of Invoice) with slightly different element names (e.g., CreditedQuantity instead of InvoicedQuantity). However, the overall structure is nearly identical. This explorer covers the Invoice document type. Most fields and their Peppol requirements apply equally to credit notes.
UBL validation happens in layers. First, the XML must be well-formed and valid against the UBL 2.1 XSD schema. Second, Peppol BIS 3.0 adds Schematron business rules (e.g., amounts must add up, required fields must be present). Use our Peppol Invoice Viewer to upload and validate your UBL XML files.
The base UBL 2.1 schema is the same everywhere. However, each country may apply a CIUS (Core Invoice Usage Specification) that adds national rules. For example, Belgium requires Peppol BIS 3.0, Germany uses XRechnung, and the Netherlands uses NLCIUS. All are subsets of UBL 2.1 with additional constraints. An invoice valid for Peppol BIS 3.0 is accepted across all Peppol-connected countries.
Search business terms and see UBL and CII XML paths side by side.
Detailed breakdown of every field in a Peppol BIS 3.0 UBL invoice.
Upload a UBL XML file and see it rendered as a readable invoice.
Upload any XML file to detect whether it is UBL, CII, ZUGFeRD, or Factur-X.
Need to send UBL invoices via Peppol? Create a free account or explore the Peppol API.
Map fields between UBL and CII with the EN 16931 Mapper. Check Peppol registration with the Peppol Radar.