Validate Peppol BIS Billing 3.0 — right in your browser

Check Peppol invoices against EN 16931 and the Peppol CIUS rules — including the seller and buyer electronic addresses that make them routable. Your file never leaves your machine.

Drop your invoice here
XRechnung (XML), ZUGFeRD / Factur-X (PDF or XML)
Checking invoice …

Most common errors

What is Peppol BIS Billing 3.0?

Peppol (Pan-European Public Procurement On-Line) is a network for exchanging electronic documents between businesses and public bodies across Europe and beyond. Peppol BIS Billing 3.0 is its billing profile — a CIUS (a constrained specialisation) of the European norm EN 16931, expressed in UBL syntax. On top of EN 16931 it adds its own rules, most importantly the electronic addresses that let an access point route an invoice to the right receiver.

Who needs to support it?

Peppol is the backbone of e-invoicing in a growing number of countries — the Nordics, the Netherlands, Belgium, Italy’s exchange system and others rely on it, and it is central to the EU’s cross-border plans. If your software sends or receives invoices across European borders, or your customers are connected to a Peppol access point, supporting Peppol BIS Billing 3.0 is not optional.

Electronic addresses: the Peppol-specific part

The most common reason a technically valid EN 16931 invoice fails as Peppol is missing electronic addresses. Peppol requires both a seller EndpointID (BT-34) and a buyer EndpointID (BT-49), each with a valid electronic address scheme — that is how the network knows where the document comes from and where it goes. Billhorse checks both with the rules PEPPOL-EN16931-R020 and PEPPOL-EN16931-R010, alongside the full EN 16931 rule set.

Generating Peppol

Validation is one half; Billhorse also generates Peppol BIS Billing 3.0. From a JSON invoice model, POST /v1/generate?format=peppol emits a UBL document with the correct Peppol CustomizationID and ProfileID; POST /v1/convert?format=peppol re-emits an existing invoice (UBL, CII or hybrid PDF) as Peppol. The generator does not invent routing data — supply the seller and buyer electronic addresses in the model and the output is routable. You can try generation live, in your browser, on the API page.

For software makers

If your product creates or receives Peppol invoices, the browser validator is the start: the same engine is available as a developer API — validate, parse, generate and convert over HTTP, error messages in three languages, self-hosted in your infrastructure if you need it.

Frequently asked questions

What does the validator check for Peppol?

Syntax (UBL), the detected profile via the CustomizationID, the EN 16931 business rules (BR, BR-CO), totals arithmetic, and the Peppol-specific rules PEPPOL-EN16931-R010/R020 — the seller and buyer electronic addresses (EndpointID) that Peppol requires for routing. Every finding carries a rule id with its own explainer page.

Is my invoice uploaded?

No. Validation runs as WebAssembly entirely in your browser. The file never leaves your machine — which makes the validator safe to use with real invoices containing real data.

Can Billhorse generate Peppol BIS 3.0?

Yes. The API generates Peppol BIS Billing 3.0 from a JSON invoice model with POST /v1/generate?format=peppol, and converts an existing invoice (UBL, CII or hybrid PDF) with /v1/convert?format=peppol. The document is only routable when the model carries seller and buyer electronic addresses (BT-34/BT-49) — the same rules the validator checks. Generation also runs client-side via WebAssembly.

What's the difference between Peppol BIS 3.0 and XRechnung?

Both are CIUS specialisations of EN 16931. XRechnung is Germany's national standard and exists in UBL and CII; Peppol BIS Billing 3.0 is the pan-European billing profile for the Peppol network, in UBL, and additionally requires electronic addresses for routing. A document can conform to both at once.

Validating is the start — the API does the rest

Validation and parsing as a developer API: same engine, normalized JSON, messages in three languages. Self-hosted available.

Explore the API