Germany e-invoicing 2027: generate ZUGFeRD from JSON
, 7 min read
From 1 January 2027, a business in Germany with more than €800,000 turnover the year before must send e-invoices to other businesses in Germany. From 1 January 2028, every business must, apart from a few exceptions. A ZUGFeRD file counts: a normal-looking PDF with the invoice data inside it as XML. This guide gives the dates from the law and the Federal Ministry of Finance (BMF), then shows how to make a valid ZUGFeRD invoice from JSON with one request.
The dates
| Since 1 January 2025 | Every business must be able to receive e-invoices. An email inbox is enough. There is no transition period for receiving, and it applies to small businesses (§ 19 UStG) too. |
| 2025 and 2026 | You may still send paper invoices, or, if the customer agrees, other electronic invoices such as a plain PDF. |
| 1 January 2027 | If your total turnover in the previous year was over €800,000, invoices to other businesses in Germany must be e-invoices, apart from the exceptions below. If it was €800,000 or less, the 2025 to 2026 rule still applies until 31 December 2027. |
| 1 January 2028 | E-invoices for all invoices between businesses based in Germany. |
The exceptions: invoices up to €250, travel tickets, invoices from small businesses under § 19 UStG, and supplies that are VAT-exempt under § 4 Nr. 8 to 29 UStG. Invoices to private customers are not affected, and EDI may continue until the end of 2027 if the customer agrees.
The newest BMF letter, of 15 October 2026, adds detail but keeps these deadlines. Trade bodies have asked for a delay; as of 7 November 2026 nothing has changed in the law.
What counts as an e-invoice
- The format must follow the European standard EN 16931. XRechnung does, and so does ZUGFeRD from version 2.0.1, except the profiles MINIMUM and BASIC-WL (BMF letter of 15 October 2024, paragraphs 25 and 30).
- A plain PDF is not an e-invoice, however it was made. Every mandatory detail has to be in the XML part.
- A file that fails the schema check counts as an ordinary invoice, not an e-invoice. So validate what you send.
- Email is a valid way to send it. No network or platform is required; you and your customer agree on the channel.
Make a ZUGFeRD invoice from JSON
Send the invoice as data: seller, buyer, lines with quantities, net prices and VAT rates. We calculate the lines, the VAT breakdown and the totals, and return a PDF/A-3 file with the EN 16931 XML inside (Factur-X 1.0, the same standard as ZUGFeRD 2.x).
curl https://api.pagenull.dev/v1/invoices \
-H "Authorization: Bearer $PAGENULL_API_KEY" \
-H "Content-Type: application/json" \
-o INV-2026-0142.pdf \
-d '{
"invoice": {
"number": "INV-2026-0142",
"issueDate": "2026-11-03",
"dueDate": "2026-11-17",
"buyerReference": "PO-7781",
"seller": {
"name": "Northwind Studio EOOD",
"address": {
"line1": "12 Example Street",
"city": "Sofia",
"postcode": "1000",
"country": "BG"
},
"vatId": "BG123456789"
},
"buyer": {
"name": "Acme Robotics EOOD",
"address": {
"line1": "1 Vitosha Blvd",
"city": "Sofia",
"postcode": "1000",
"country": "BG"
}
},
"lines": [
{
"description": "API integration, October",
"quantity": 12,
"unit": "HUR",
"unitPrice": "85.00",
"vatRate": 20
},
{
"description": "PDF template design",
"quantity": 1,
"unitPrice": "340.00",
"vatRate": 20
}
],
"payment": {
"iban": "BG80BNBG96611020345678"
}
}
}'Keep the default profile, EN16931. BASIC isn’t among the profiles the BMF excludes either. Don’t use MINIMUM for German invoices: the BMF excludes it. The full field list is in the Factur-X and ZUGFeRD guide.
Check the file
Mustang, the free open-source validator from the ZUGFeRD community, checks the PDF/A part and the XML against the official rules. We publish a sample run with its unedited report, so you can run the same check on your own file:
java -jar Mustang-CLI-2.26.0.jar --action validate --source RE-2027-0001.pdfPublic-sector customers
Many public bodies in Germany ask for XRechnung and a Leitweg-ID, sent through their own portal. We put the Leitweg-ID in buyerReference, but we don’t make XRechnung files. Ask the authority which formats it accepts.
Countries where our file isn’t enough
Germany accepts a Factur-X/ZUGFeRD file sent by email. Many countries don’t: they require a specific network or a national system, and we don’t connect to any of them. If you invoice businesses in these countries, you need a provider that does.
| Belgium | Since 1 January 2026: Peppol-BIS, sent over the Peppol network. Another format only if both sides agree. |
| Poland | Since 1 February 2026 (largest firms) and 1 April 2026 (the rest): the national KSeF system, in its own FA(3) structure. |
| Italy | Since 2019: Italian XML, always through the Sistema di Interscambio (SdI). |
| Croatia | Since 1 January 2026: eRačun, exchanged between access points. |
| Spain | From 6 October 2027 (turnover over €8 million) and 6 October 2028 (the rest): through exchange platforms or the tax agency’s solution. |
We also don’t produce XRechnung or UBL, the XML-only formats, and we don’t send, receive or archive invoices. Peppol access, a national platform and long-term archiving are separate services.
Keep your copy
We store nothing: not the data, the XML or the PDF. German law requires you to keep invoices for years, so archive the file we return, or pass deliverTo to have it uploaded straight to your own storage.
Sources
Facts about other projects and rules, checked on 7 November 2026.
- § 14 UStG: invoices, the e-invoice definition and when one is required
- § 27 Abs. 38 UStG: transition rules for 2025 to 2027, including the €800,000 threshold
- §§ 33, 34, 34a UStDV: invoices up to €250, tickets and small businesses
- BMF letter of 15 October 2024: introduction of the e-invoice (ZUGFeRD from 2.0.1, except MINIMUM and BASIC-WL)
- BMF letter of 15 October 2025: the rules written into the UStAE (formats, email, format errors)
- BMF letter of 15 October 2026: supplementary rules, deadlines unchanged
- Belgium, FPS Finance: Peppol-BIS and the Peppol network from 1 January 2026
- Poland, KSeF: scope and dates of the mandatory national system
- Italy, Agenzia delle Entrate: e-invoices through the SdI since 2019
- Spain, AEAT: Orden HAC/1028/2026 and the B2B e-invoicing dates
- Croatia, Porezna uprava: Fiskalizacija 2.0 (eRačun) from 1 January 2026