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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Validation and parsing as a developer API: same engine, normalized JSON, messages in three languages. Self-hosted available.
Explore the API