E-Rechnung in der vorbereitenden Buchhaltung

Beide Workflows mit der API – Schritt für Schritt · API-Dokumentation

Rechnungseingang · Rechnungsausgang

Die API deckt beide Seiten der vorbereitenden Buchhaltung ab: eingehende Rechnungen, die geprüft und gebucht werden müssen, und ausgehende Rechnungen, die erzeugt, gebucht und exportiert werden. Beide Wege laufen durch das gleiche Journal und enden in derselben Übergabe an die Buchhaltung.

Das Journal ist dabei kein reines Archiv, sondern ein Freigabeworkflow: Eine Rechnung durchläuft die Status newin_progressdoneexported; die Zahlung wird unterwegs als paid vermerkt. Die Übergabe an die Buchhaltung nimmt ausschließlich Rechnungen im Status done mit – so wird nichts weitergereicht, an dem noch jemand arbeitet. Ab exported ist die Rechnung gesperrt und lässt sich nicht mehr ändern. Jeder Statuswechsel wird mit Zeitpunkt und Bearbeiter protokolliert.

Rechnungseingang

Eine E-Rechnung kommt herein – als XML oder als ZUGFeRD-PDF. Der Workflow: validieren, ins Journal buchen, prüfen und abschließen, als ZIP an die Buchhaltung übergeben.

1 Rechnung validieren und archivieren

Der Endpunkt POST /v1/assessment nimmt die Datei entgegen, erkennt Format und Standard automatisch und prüft gegen die Schematron-Regeln der EN16931 bzw. der jeweiligen CIUS. Mit dem Parameter archive=vault wird die Rechnung gleichzeitig revisionssicher archiviert und automatisch als neuer Eintrag im Journal angelegt – kein separater API-Call notwendig.

# XML validieren, archivieren und ins Journal übernehmen curl -X POST "https://api.xml-invoice.io/v1/assessment?archive=vault" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/xml" \ --data-binary @eingangsrechnung.xml # ZUGFeRD-PDF funktioniert identisch curl -X POST "https://api.xml-invoice.io/v1/assessment?archive=vault" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/pdf" \ --data-binary @eingangsrechnung.pdf

Die Response enthält den Header X-Validation-Assessment mit dem Wert accept oder reject sowie die Journal-ID der neu angelegten Rechnung im Body. Rechnungen mit dem Status reject können trotzdem ins Journal übernommen werden – die Entscheidung, wie mit fehlerhaften Rechnungen umgegangen wird, liegt in der eigenen Anwendungslogik.

2 Sachlich prüfen und Konten zuweisen

Nachdem die Rechnung im Journal liegt, werden Buchungsrichtung, Sachkonto und Gegenkonto hinterlegt. Erst wenn alle drei Pflichtfelder gesetzt sind, kann der Status auf done gesetzt werden – das API erzwingt diese Vollständigkeit und antwortet mit einem Fehler, der die fehlenden Felder benennt.

# Konten setzen, prüfen und freigeben curl -X PUT "https://api.xml-invoice.io/v1/invoices/{id}" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "direction": "incoming", "accounting": { "debitAccount": "4400", "creditAccount": "1600", "note": "Skonto bereits abgezogen" }, "status": "done" }'

3 Übergabe an die Buchhaltung

Der Endpunkt POST /v1/invoices/export/zip bündelt die übergebenen Rechnungen als ZIP-Archiv ihrer Originaldokumente und setzt sie auf den Status exported. Mitgenommen wird nur, was auf done steht; alles andere meldet der Header X-Skipped-Invoices.

# Freigegebene Rechnungen übergeben curl -X POST "https://api.xml-invoice.io/v1/invoices/export/zip" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{"ids": ["6789abcdef0123456789abcd", "6789abcdef0123456789abce"]}' \ -o Rechnungen_Export.zip

Das Archiv enthält die Originale so, wie sie eingegangen oder erzeugt wurden — XML oder ZUGFeRD-PDF, benannt nach der Belegnummer, die jede Rechnung beim Ablegen bekommt. Dazu kommt eine Belegliste als CSV: eine Zeile je Rechnung mit Partner, Beträgen nach Steuersatz, Belegart, Zahldatum, Kostenstelle und der Mitteilung des Mandanten. Sie geht zusätzlich ins Archiv und zählt deshalb als ein Dokument — dafür lässt sich die Übergabe über GET /v1/export/{id} jederzeit unverändert wiederholen, falls das ZIP verlorengeht. Die Kontierung nimmt die Buchhaltung in ihrem eigenen System vor; sie trägt die Verantwortung dafür.


Rechnungsausgang

Eine Ausgangsrechnung entsteht aus strukturierten Daten – als JSON oder CSV mit EN16931 Business Terms. Der Workflow: XML oder PDF generieren, ins Journal buchen, freigeben, exportieren. Ab Schritt 2 ist der Ablauf identisch zum Rechnungseingang.

1 Rechnung generieren und archivieren

POST /v1/render/xml erzeugt eine konforme XML-Rechnung aus Business-Term-Daten und validiert sie unmittelbar. POST /v1/render/pdf tut dasselbe und liefert zusätzlich ein PDF/A-3 mit eingebettetem XML – also eine fertige ZUGFeRD-Datei. Mit archive=vault wird die Rechnung archiviert und automatisch ins Journal übernommen.

# XRechnung als CII-XML generieren und archivieren curl -X POST "https://api.xml-invoice.io/v1/render/xml?format=cii&cius=xrechnung&archive=vault" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "BT-1": "RE-2026-042", "BT-2": "2026-02-15", "BT-5": "EUR", "BT-27": "Muster GmbH", "BT-44": "Kunde AG", "BT-153#1": "Beratungsleistung Q1", "BT-129#1": "1", "BT-146#1": "1200.00", "BT-152#1": "19" }' \ -o ausgangsrechnung.xml # Alternativ als ZUGFeRD-PDF (DIN 5008) curl -X POST "https://api.xml-invoice.io/v1/render/pdf?format=cii&cius=en16931&template=din5008&archive=vault" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d @invoice.json \ -o ausgangsrechnung.pdf

Die Response enthält dieselben X-Validation-* Header wie /v1/assessment. Eine Rechnung, die nicht validiert, wird trotzdem generiert und zurückgegeben – das Validierungsergebnis lässt sich im eigenen System auswerten.

2 Sachlich prüfen und Konten zuweisen

Identisch zum Rechnungseingang – Buchungsrichtung (outgoing), Sachkonto und Gegenkonto setzen, Status auf done setzen.

curl -X PUT "https://api.xml-invoice.io/v1/invoices/{id}" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "direction": "outgoing", "accounting": { "debitAccount": "1200", "creditAccount": "4400", "note": "Wiederkehrende Leistung, monatlich" }, "status": "done" }'

3 Übergabe an die Buchhaltung

Identisch zum Rechnungseingang. Ein Archiv kann Eingangs- und Ausgangsrechnungen gemeinsam enthalten.

curl -X POST "https://api.xml-invoice.io/v1/invoices/export/zip" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{"ids": ["6789abcdef0123456789abcd"]}' \ -o Rechnungen_Export.zip

Die vollständige Referenz aller Endpoints, Parameter und Response-Felder findet sich in der API-Dokumentation.

Haftungsausschluss: Wir übernehmen keine Gewähr für die Ergebnisse der Validierung und des XML/PDF-Renderers. Die auf dieser Website veröffentlichten Informationen wurden teilweise mit Unterstützung von KI recherchiert und aufbereitet. Trotz sorgfältiger Kontrolle und regelmäßiger Überprüfung können wir keine Haftung für die Richtigkeit, Vollständigkeit oder Aktualität der bereitgestellten Inhalte übernehmen. Wenn Sie Fehler finden oder Verbesserungsvorschläge haben, freuen wir uns über Ihr Feedback.

Compliance: Wir validieren gegen den offiziellen KoSIT Validator 1.6.3 mit den Konfigurationen XRechnung 3.0.2 und Peppol BIS 3.0.21. Die Images sind auf Docker Hub veröffentlicht, die Dockerfiles sind auf GitHub einsehbar.

Keine Steuer- oder Buchhaltungsberatung: Wir bieten keine Beratung in Steuer- oder Buchhaltungsfragen an. Bitte wenden Sie sich für solche Fragen an einen Steuerberater oder ein Steuerbüro.