UBLExplain

Validate and explain UBL invoice errors

Paste a UBL Invoice or CreditNote XML, or upload a .xml file. Every issue is shown with a plain-English explanation, likely cause and suggested fix.

Paste or load UBL XML

Verktyg

Frequently asked questions

Which UBL versions and profiles do you support?

All of them. The validator auto-detects the profile from cbc:CustomizationID, cbc:ProfileID and cbc:UBLVersionID. We recognise Peppol BIS Billing 3.0, NLCIUS 1.0, XRechnung, EN 16931 (bare), SI-UBL 1.x/2.0 (legacy), OIOUBL and plain OASIS UBL 2.0–2.4. Generic UBL structural checks always run; profile-specific rules (Peppol EndpointID, NLCIUS EUR-only / KvK 0106) are layered on top when applicable.

Does this validator certify my invoice for Peppol?

No. This tool performs browser-based structural and semantic checks and explains issues in plain English. It is not a replacement for official Peppol validation or access-point certification.

Which checks are included?

Well-formed XML, root element (Invoice or CreditNote), required fields (ID, IssueDate, supplier, customer, currency), invoice lines, tax totals, monetary totals, currency consistency, plus profile-specific rules when the document declares a known CustomizationID.

Are my invoices uploaded?

No. Parsing and validation happen entirely in your browser. The XML never leaves the page.

What this tool does

The UBL validator parses your UBL XML invoice in the browser and surfaces missing fields, schema problems and common Peppol BIS Billing 3.0 issues with plain-English explanations.

Common UBL and Peppol problems it detects

  • Missing required elements such as ID, IssueDate, AccountingSupplierParty or LegalMonetaryTotal.
  • Invalid or missing CustomizationID / ProfileID for Peppol BIS Billing 3.0.
  • Currency mismatches between LineExtensionAmount, TaxTotal and DocumentCurrencyCode.
  • Totals that don't reconcile against LegalMonetaryTotal.
  • Embedded PDF attachments with broken Base64 or wrong mimeCode.

Why this matters

Peppol access points and ERP systems reject invoices that do not conform to UBL 2.x and EN 16931. A single missing attribute can block payment and force manual rework. Catching issues before sending saves days of email back-and-forth.

Example: totals mismatch

If LegalMonetaryTotal/PayableAmount is 121.00 but the sum of LineExtensionAmount is 100.00 and TaxTotal/TaxAmount is 20.00, the difference is 1.00. Common causes are a forgotten ChargeTotalAmount, a rounding rule, or a prepaid PrepaidAmount that wasn't subtracted.

How to fix the issue

  1. Add any missing mandatory UBL elements flagged in the report.
  2. Set CustomizationID to urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 and ProfileID to urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 for Peppol BIS Billing 3.0.
  3. Ensure every monetary amount uses the same currencyID as DocumentCurrencyCode.
  4. Reconcile totals with: LineExtensionAmount + ChargeTotalAmount − AllowanceTotalAmount = TaxExclusiveAmount; TaxExclusiveAmount + TaxAmount = TaxInclusiveAmount; TaxInclusiveAmount − PrepaidAmount + PayableRoundingAmount = PayableAmount.
  5. Re-run the validator and verify with your Peppol access point before resending.

Frequently asked questions

Is this an official Peppol validator?

No. UBL Explainer runs browser-based checks and offers plain-English explanations. For certification or production sign-off, also validate with your Peppol access point or the official Peppol validator.

Which UBL versions are supported?

UBL 2.1 and 2.2 Invoice and CreditNote documents, including Peppol BIS Billing 3.0.

Is my invoice uploaded?

No. The entire validation runs locally in your browser. The XML never leaves your device.