ZUGFeRD 2.x / Factur-X
ZUGFeRD API. JSON rein, PDF mit XML raus.
ZUGFeRD 2.x / Factur-X ist ein normales PDF/A-3 mit der Rechnung als CII darin. Menschen öffnen das PDF, Maschinen lesen das XML. Dieselbe JSON-Payload wie für XRechnung API, anderes format.
Für Product Teams, die B2B-Empfängern ein PDF schicken müssen und trotzdem die Pflicht erfüllen. Nicht MINIMUM, nicht BASIC-WL.
API-Key holenXRechnung validieren, ohne Key
JSON → PDF/A-3 mit factur-x.xml
POST https://api.normbill.com/v1/invoices/generate mit format: "zugferd-2.x" oder "facturx-1.0". Antwort: xml plus pdf (base64). Bezahlpläne. Dieselbe Rechnungs-JSON wie die XRechnung API.
curl https://api.normbill.com/v1/invoices/generate \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "format": "zugferd-2.x", "invoice": {
"number": "INV-2026-0001",
"issue_date": "2026-06-15",
"due_date": "2026-07-15",
"buyer_reference": "04011000-1234512345-06",
"seller": {
"name": "Muster Lieferant GmbH", "vat_id": "DE123456789",
"address": { "country": "DE", "city": "Berlin",
"postal_code": "10115" },
"contact": { "name": "Billing", "phone": "+49 30 1234567",
"email": "billing@lieferant.example" }
},
"buyer": {
"name": "Beispiel Kunde AG",
"address": { "country": "DE", "city": "Hamburg",
"postal_code": "20095" },
"contact": { "email": "ap@kunde.example" }
},
"payment": { "iban": "DE89370400440532013000" },
"lines": [{ "name": "Beratungsleistung", "qty": 10,
"unit_price": 100, "vat": 19 }]
} }'Eine erfolgreiche Antwort (HTTP 200):
{
"format": "zugferd-2.x",
"profile": "ZUGFeRD 2.x (EN 16931, CII D16B)",
"xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rsm:CrossIndustryInvoice …",
"pdf": "JVBERi0xLjQK…",
"validation": {
"valid": true,
"tier": "structural",
"counts": { "errors": 0, "warnings": 0 },
"issues": []
}
}Welches Profil die Pflicht erfüllt
EN-16931-Profil: BASIC, EN 16931 oder EXTENDED. MINIMUM und BASIC-WL sind kein vollständiger Datensatz — sie erfüllen die Pflicht nicht. BMF-Schreiben vom 15.10.2024: ältere ZUGFeRD-1.0 / 2.0 vor 2.0.1 zählen nicht.
Eigenes PDF einbetten vs. Rendern
Die API rendert das Hybrid-PDF. Wenn ihr schon ein Corporate-PDF habt, sagt der Report trotzdem, ob das eingebettete XML die Strukturregeln überlebt — POST /v1/invoices/validate oder der Validator ohne Key.
Factur-X = ZUGFeRD für FR
Technisch aligned. Frankreich startet Sep 2026. Generation ja. Wir sind kein PDP/PA — Transport und Freistellung liegen bei euch.
XRechnung vs ZUGFeRD
B2G und Leitweg-ID: XRechnung API. B2B, Empfänger will ein PDF: ZUGFeRD. Ein JSON, zwei format-Werte. Der Vergleich: XRechnung vs ZUGFeRD.
PHP- und TypeScript-Client
composer require normbill/xrechnung
npm i @normbill/xrechnungComposer-Client: XRechnung PHP. MCP: @normbill/mcp. Generate, Validate, Parse. Dieselbe Oberfläche wie REST.
Preise ohne Vertriebsanruf
ZUGFeRD / Factur-X ist ein Paid-Merkmal. Paid ab €19. 30-Tage-Garantie. Design-Partner: 12 Monate Growth. Der Free-Plan erzeugt XRechnung, kein Hybrid-PDF.
FAQ
Welches ZUGFeRD-Profil erfüllt die Pflicht?
EN 16931 (BASIC, EN 16931, EXTENDED). MINIMUM und BASIC-WL tun es nicht. ZUGFeRD 1.0 und 2.0 vor 2.0.1 zählen nach dem BMF-Schreiben vom 15.10.2024 nicht.
Factur-X oder ZUGFeRD?
Dieselbe Technik, andere Bezeichnung. zugferd-2.x oder facturx-1.0. Frankreich startet Sep 2026; wir sind kein PDP/PA.
Speichert ihr das PDF?
Nein. Weder XML noch PDF. Speicher, EU, AVV.
Geht ZUGFeRD im Free-Plan?
Nein. Hybrid-PDF ist Paid ab €19. Free erzeugt XRechnung (KoSIT), ohne PDF.