Kurz gesagt: Sie senden einen kompakten JSON-Payload per HTTP POST an die fakturai REST-API und erhalten eine EN-16931-konforme ZUGFeRD-/Factur-X- oder XRechnung-Datei zurück — ohne XML-Wissen, ohne lokale Bibliotheken, ohne manuelle Namespace-Deklarationen. Die API prüft die erzeugte Datei vor der Auslieferung gegen ein KoSIT-orientiertes Akzept-Gate.
Lokale XML-Bibliotheken für ZUGFeRD oder XRechnung erfordern tiefes Format-Know-how: EN-16931-BT-/BG-Codes, Namespace-Deklarationen, Schematron-Regeln, Profil-Spezifika. Die API abstrahiert das:
Das Beispiel erzeugt eine ZUGFeRD/Factur-X-Rechnung mit einer Position. Tauschen Sie format gegen “xrechnung” aus, um stattdessen eine XRechnung zu erhalten.
import httpx, base64, pathlib
payload = {
"invoiceNumber": "RE-2026-0042",
"issueDate": "2026-06-16",
"seller": {
"name": "Muster GmbH",
"street": "Musterstraße 1",
"city": "Berlin",
"postalCode": "10115",
"countryCode": "DE",
"vatId": "DE123456789"
},
"buyer": {
"name": "Kunde AG",
"street": "Kundenweg 2",
"city": "München",
"postalCode": "80331",
"countryCode": "DE"
},
"lines": [
{
"description": "Beratungsleistung",
"quantity": 2,
"unitCode": "C62",
"unitPrice": 50.00,
"vatRate": 19.0
}
],
"currency": "EUR",
"format": "zugferd" # "zugferd" oder "xrechnung"
}
resp = httpx.post(
"https://api.fakturai.de/v1/invoices",
json=payload,
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
resp.raise_for_status()
pathlib.Path("rechnung.pdf").write_bytes(resp.content)
print("E-Rechnung gespeichert.")Für requests ersetzen Sie httpx.post durch requests.post — der Payload ist identisch.
import fs from "fs/promises";
const payload = {
invoiceNumber: "RE-2026-0042",
issueDate: "2026-06-16",
seller: {
name: "Muster GmbH",
street: "Musterstraße 1",
city: "Berlin",
postalCode: "10115",
countryCode: "DE",
vatId: "DE123456789",
},
buyer: {
name: "Kunde AG",
street: "Kundenweg 2",
city: "München",
postalCode: "80331",
countryCode: "DE",
},
lines: [{ description: "Beratungsleistung", quantity: 2, unitCode: "C62", unitPrice: 50.0, vatRate: 19.0 }],
currency: "EUR",
format: "zugferd", // "zugferd" oder "xrechnung"
};
const res = await fetch("https://api.fakturai.de/v1/invoices", {
method: "POST",
headers: { "Content-Type": "application/json", Authorization: "Bearer YOUR_API_KEY" },
body: JSON.stringify(payload),
});
if (!res.ok) throw new Error(`API error ${res.status}: ${await res.text()}`);
await fs.writeFile("rechnung.pdf", Buffer.from(await res.arrayBuffer()));
console.log("E-Rechnung gespeichert.");Der Payload ist dieselbe JSON-Struktur — die Sprache ist irrelevant für die API. In TypeScript fügen Sie eine Typ-Definition für den Payload hinzu; das Ergebnis bleibt ein Buffer bzw. ein ArrayBuffer.
| Feld (JSON) | EN-16931-Code | Pflicht |
|---|---|---|
invoiceNumber | BT-1 | ✓ |
issueDate | BT-2 | ✓ |
seller.vatId | BT-31 | ✓ |
lines[].unitCode | BT-130 | ✓ |
lines[].vatRate | BT-119 | ✓ |
currency | BT-5 | ✓ |
format | — | ✓ (zugferd oder xrechnung) |
Jede erzeugte Datei durchläuft serverseitig ein vierschichtiges Prüf-Gate:
Erreicht die Datei nicht ACCEPT-Status, gibt die API einen Fehler mit den konkreten Schematron-Regeln zurück — so sehen Sie sofort, welche Pflichtfelder fehlen oder welche Summe nicht stimmt.
Vorhandene Dateien — z. B. aus einem Drittsystem oder einem früheren API-Aufruf — können Sie ohne Konto im kostenlosen Validator gegen EN 16931 prüfen.
Neben der REST-API steht ein MCP-Server bereit, der dieselbe Erzeuge-und-prüfe-Logik als Tool-Call exponiert. AI-Agenten und MCP-Clients können damit E-Rechnungen erzeugen, ohne HTTP manuell zu formulieren. Details im Beitrag E-Rechnung per API & MCP erstellen.
fakturai erzeugt und prüft die technische Format- und Strukturkonformität nach EN 16931 mit einem KoSIT-orientierten Akzept-Gate. Die inhaltliche und steuerliche Richtigkeit des JSON-Payloads, die GoBD-konforme Archivierung der erzeugten Datei und die buchhalterische Behandlung bleiben in Ihrer Verantwortung. fakturai ist kein Buchhaltungssystem und gibt keine Rechts-, Steuer- oder Zustellungsgarantien.
German-first SEO page für „E-Rechnung Python / Node.js / SDK“-Intent. Illustrative Codebeispiele; technische Struktursprache nach EN 16931, kein Rechts-/Steuer-/Zustellungsversprechen (GHOA-1671).
English companion: Generate German e-invoices with Python and Node.js (API integration).