Urgent.News

What's breaking now, across thousands of outlets.

Tech

Adding Peppol e-invoicing (EN 16931) to a self-hosted Flask app

Since 1 January 2026 , Belgian businesses have to exchange B2B invoices as structured e-invoices over the Peppol network. A PDF by email no longer counts. I maintain TimeTracker , an open-source, self-hosted time tracker that also generates invoices. I'm based in Belgium and so are many of the people it's built for, so the mandate turned a nice-to-have into a must-have. This post covers what I…

Since January 1, 2026, Belgian businesses are required to exchange B2B invoices as structured e-invoices over the Peppol network. TimeTracker, an open-source self-hosted time tracker that generates invoices, needed to adapt to this change. EN 16931 is the European semantic standard that defines the data required in an e-invoice, including seller, buyer, VAT breakdown, and totals.

UBL 2.1 and CII are XML syntaxes that can carry EN 16931 data, while Peppol BIS Billing 3.0 outlines the Peppol network's rules for e-invoicing over the EN 16931 standard. The process involves generating UBL and POSTing it to an adapter URL, which forwards it to a certified Access Point provider. The adapter returns a message ID for tracking purposes.

A small peppol-bridge service facilitates the process, handling provider differences and storing send history.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

The QA Script That Checks 8,556 PDF Links (and What It Caught)

A link you never click is a bug your customer finds I generated an 871-page hyperlinked PDF planner with Python — 8,556 internal link annotations across 730 daily pages, 105 weekly spreads, 24 monthly…

  • QA script verifies 871-page hyperlinked PDF planner for broken links
  • Script checks every link annotation for correct destination page
  • Script caught bugs during development, prevented release issues

More from Sunday 27 September →