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": []
  }
}

Playground · Dokumentation

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/xrechnung

Composer-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.

Preise · Design-Partner

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.

Etwas gefunden?

Fehler, fehlende Funktion, falsches Validierungsergebnis — sagen Sie es uns. Die aktuelle Seite wird automatisch mitgeschickt; E-Mail optional.