Zum Inhalt springen
Invoapi

Integrationen · Python-SDK

ZUGFeRD und XRechnung in Python

ZUGFeRD, Factur-X und XRechnung in Python, ohne eigenes XML-Mapping: Das Python-SDK für Python 3.9 und neuer — nur die Standardbibliothek, keine weiteren Abhängigkeiten, vollständig typisiert. Für Skripte, Buchhaltungs-Tools, Django- oder FastAPI-Backends: jede erzeugte Rechnung ist vom offiziellen Validator geprüft, Tempolimits werden automatisch abgewartet.

Installieren

Das Paket liegt auf PyPI, der Quellcode offen auf GitHub:

Terminal
pip install invoapi

Auf dem Mac (und unter Linux) gibt es pip meist nicht, und das System-Python nimmt keine Pakete an. Legen Sie dort eine eigene Umgebung für Ihr Projekt an:

Terminal (Mac, Linux)
python3 -m venv .venv
source .venv/bin/activate
pip install invoapi

Mit uv geht es in einem Schritt: uv add invoapi.

Version 0.1.0, getestet mit Python 3.9 bis 3.14. Den API-Schlüssel legen Sie im Dashboard an und setzen ihn als Umgebungsvariable INVOAPI_API_KEY.

XRechnung in Python erzeugen

Python
import invoapi

client = invoapi.Client()   # liest INVOAPI_API_KEY

rechnung = client.generate({
    "invoice_number": "RE-2026-0001",
    "issue_date": "2026-10-28",
    "due_date": "2026-11-27",
    "currency": "EUR",
    "buyer_reference": "04011000-12345-34",
    "seller": {
        "name": "Muster GmbH", "street": "Musterstraße 1", "postal_code": "10115",
        "city": "Berlin", "country_code": "DE", "vat_id": "DE123456789",
        "email": "rechnung@muster.de", "phone": "+49 30 1234567",
    },
    "buyer": {
        "name": "Beispiel GmbH", "street": "Teststraße 10", "postal_code": "20095",
        "city": "Hamburg", "country_code": "DE", "email": "kreditoren@beispiel.de",
    },
    "items": [
        {"name": "Beratung", "quantity": 8, "unit": "HUR", "unit_price": 145, "vat_rate": 19},
    ],
    "payment": {"means_code": "58", "iban": "DE02120300000000202051"},
}, format="xrechnung")

if rechnung.is_valid:
    rechnung.save()   # RE-2026-0001.xml

Beträge dürfen auch Decimal sein, Datumsangaben datetime.date. Alle Felder beschreibt die API-Dokumentation.

ZUGFeRD-PDF in Python erstellen

Dieselben Daten ergeben mit format zugferd und output pdf ein hybrides ZUGFeRD-2.5-PDF: ein PDF/A-3 mit eingebetteter factur-x.xml, geprüft mit KoSIT, veraPDF und den ZUGFeRD-Profilregeln. Factur-X ist derselbe Standard unter französischem Namen.

Python
pdf = client.generate(daten, format="zugferd", output="pdf", profile="en16931")

if pdf.is_valid:
    pdf.save()   # RE-2026-0001.pdf, PDF/A-3 mit factur-x.xml

Eingangsrechnung prüfen

Python
from pathlib import Path

bericht = client.validate(Path("eingang.xml"))   # XML oder ZUGFeRD-PDF

if not bericht.is_valid:
    for fehler in bericht.errors:
        print(f"{fehler['rule']}: {fehler['message']}")

is_valid ist nur dann wahr, wenn ein offizielles Regelwerk tatsächlich gelaufen ist. Statt eines Pfads gehen auch bytes oder der XML-Text.

Alles Weitere

Python
pdf    = client.generate(daten, format="zugferd", output="pdf")   # ZUGFeRD PDF/A-3
daten  = client.parse(xml_oder_pdf)                                # Rechnung als dict
art    = client.detect(xml_oder_pdf)                               # Standard, Syntax, Version
cii    = client.convert(ubl_xml, "xml", format="xrechnung", syntax="cii")
html   = client.render(xml_oder_pdf, "html")                       # Lesefassung
summen = client.calculate(daten)["totals"]                         # kostenlos

Fehler

Jede Ablehnung löst eine Ausnahme mit der verständlichen Meldung der API aus. Alle erben von invoapi.InvoapiError und tragen request_id für Support-Anfragen.

InvalidRequestErrorRechnung oder Dokument fehlerhaft; details nennt die Felder
AuthenticationErrorSchlüssel falsch, E-Mail unbestätigt oder Konto gesperrt
QuotaExhaustedErrorGratis-Kontingent aufgebraucht
RateLimitErrorZu viele Aufrufe; retry_after nennt die Wartezeit
ServiceUnavailableErrorDienst kurz nicht erreichbar
APIConnectionErrorKeine Verbindung (DNS, TLS, Zeitüberschreitung)

Python-Bibliothek oder API?

Für ZUGFeRD in Python gibt es auch Open-Source-Bibliotheken wie factur-x oder drafthorse. Sie erzeugen das XML oder betten es in ein vorhandenes PDF ein; die offizielle Schematron- und KoSIT-Prüfung bringen sie nicht mit. Das SDK verlagert beides auf den Server:

Python-Bibliothekinvoapi Python-SDK
XML-Mappingim eigenen Code, je Formatein dict für alle Formate
KoSIT-PrüfungJava-Validator separat betreibenin jedem Aufruf enthalten
ZUGFeRD-PDFeigenes PDF/A-3 erzeugen und XML einbettenfertiges PDF mit Logo und Design
Neue VersionenBibliothek und Regelwerke aktualisierenserverseitig, ohne Update
Kostenkostenlos, eigener Aufwand100 Rechnungen kostenlos, dann ab 24 €/Monat

Mehr zu den Formaten: ZUGFeRD API · XRechnung API

Häufige Fragen zu ZUGFeRD und XRechnung in Python

Wie erstelle ich eine ZUGFeRD-Rechnung in Python?
Installieren Sie das SDK mit pip install invoapi und rufen Sie client.generate() mit format="zugferd" und output="pdf" auf. Sie erhalten ein fertiges ZUGFeRD-PDF (PDF/A-3 mit eingebetteter factur-x.xml), das bereits gegen die offiziellen Regeln geprüft ist; pdf.save() schreibt es auf die Platte.
Ist das auch eine Factur-X-Bibliothek für Python?
Ja. Factur-X und ZUGFeRD sind seit Version 2.1 derselbe Standard; das SDK erzeugt ZUGFeRD 2.5.2, die eingebettete Datei heißt factur-x.xml. Französische Empfänger lesen die Rechnung als Factur-X.
Wie erzeuge ich eine XRechnung mit Python?
Mit client.generate(daten, format="xrechnung"). Sie erhalten eine XRechnung 3.0.2 in UBL oder CII, geprüft mit dem KoSIT-Validator. Für Behörden gehört die Leitweg-ID in buyer_reference.
Funktioniert das SDK mit Django, FastAPI oder Odoo?
Ja. Das SDK nutzt nur die Standardbibliothek und läuft überall ab Python 3.9 — in Django-Views, FastAPI-Endpunkten, Celery-Jobs, Odoo-Modulen oder einfachen Skripten. Beträge dürfen Decimal sein, Datumsangaben datetime.date.
Was kostet das Python-SDK?
Das SDK selbst ist kostenlos und MIT-lizenziert. Die API enthält 100 Rechnungen kostenlos, danach ab 24 € im Monat für 500 Rechnungen (zzgl. USt.), monatlich kündbar.
ZUGFeRD & XRechnung in Python: E-Rechnung-SDK (pip install invoapi) · Invoapi