E-Rechnung per API: E-Rechnungen kostenlos erstellen, lesen und prüfen
Das Wichtigste in Kürze
- Die REST-API von e2invoice bietet drei Kernfunktionen: E-Rechnung erstellen (
POST /api/invoice/simple), E-Rechnung lesen (POST /api/invoice/read) und E-Rechnung validieren (POST /api/invoice/validate). - Erzeugt wird ZUGFeRD/Factur-X im Profil EN 16931 – ein PDF/A-3 mit eingebetteter XML-Rechnung.
- Kostenlos: 10 Aufrufe pro Tag ohne Anmeldung, unbegrenzt mit kostenlosem API Key aus dem Dashboard.
- Vollständige OpenAPI-Dokumentation unter /api/docs.
Übersicht der Endpunkte
| Methode | Pfad | Zweck | Zählt zum Tageslimit |
|---|---|---|---|
| POST | /api/invoice/simple |
E-Rechnung aus JSON erstellen | ja |
| GET | /api/invoice/{id}/pdf |
PDF mit eingebetteter XML abrufen (24 h gültig) | nein |
| POST | /api/invoice/read |
XML/PDF auslesen, Daten als JSON | ja |
| POST | /api/invoice/validate |
XML/PDF nach EN 16931 und XRechnung prüfen | ja |
| GET | /api/invoice/rate-limit |
Verbleibendes Tageskontingent | nein |
Authentifizierung und Limits
Für Tests genügt es, die API ohne Key aufzurufen: Pro Nutzer und Tag sind 10 Aufrufe frei. Für den produktiven Einsatz legen Sie nach dem Login unter Dashboard → API Keys kostenlos einen Key an und senden ihn mit jeder Anfrage:
-H "x-api-key: e2i_IHR_API_KEY"
# oder
-H "Authorization: Bearer e2i_IHR_API_KEY"
Mit Key ist die Nutzung unbegrenzt. Ohne Key enthält jede zählende Antwort die Header X-RateLimit-Limit, X-RateLimit-Remaining und X-RateLimit-Reset; ist das Kontingent erschöpft, antwortet die API mit HTTP 429 und Retry-After.
E-Rechnung erstellen
Der Endpunkt POST /api/invoice/simple nimmt die Rechnungsdaten als JSON entgegen, berechnet Positionsbeträge, Umsatzsteuer je Steuersatz und Summen und liefert eine configId samt Download-URL zurück.
curl -X POST https://www.e2invoice.com/api/invoice/simple \
-H "Content-Type: application/json" \
-H "x-api-key: e2i_IHR_API_KEY" \
-d '{
"invoiceNumber": "RE-2026-001",
"invoiceDate": "2026-09-27",
"dueDate": "2026-10-11",
"buyerReference": "04011000-12345-67",
"seller": {
"name": "Muster GmbH",
"address": "Hauptstraße 1",
"postCode": "10115",
"city": "Berlin",
"email": "rechnung@muster.de",
"phone": "+49 30 123456",
"contactPerson": "Max Mustermann",
"vatId": "DE123456789",
"legalForm": "GmbH",
"registrationNumber": "HRB 12345",
"registrationCourt": "Amtsgericht Berlin",
"managingDirectors": "Max Mustermann"
},
"buyer": {
"name": "Kunde AG",
"address": "Kundenweg 2",
"postCode": "80331",
"city": "München"
},
"items": [
{ "name": "Beratung", "quantity": 8, "unit": "HUR", "price": 120, "vatRate": 19 }
],
"bankAccount": { "iban": "DE89370400440532013000", "bic": "COBADEFFXXX" }
}'
Die Antwort enthält documentUrl – darüber laden Sie das fertige PDF mit eingebetteter XML herunter:
curl -o RE-2026-001.pdf "https://www.e2invoice.com/api/invoice/<configId>/pdf"
Wichtige Optionen:
documentType:invoice,credit_note,corrected_invoice,cancellation,prepayment_invoice(Anzahlung),partial_invoice(Abschlag),final_invoice(Schlussrechnung) sowie die Bauleistungs-Typen nach VOBprepaidAmount,prepaidVatAmount,precedingInvoices: Verrechnung von Abschlägen in der Schlussrechnung (Details)items[].vatCategoryunditems[].vatExemptionReason: Steuerbefreiungen, Kleinunternehmer, Reverse Chargeseller.taxNumber,seller.legalForm,seller.registrationCourt,seller.managingDirectors: Impressums- und Pflichtangaben
Ungültige Eingaben beantwortet die API mit HTTP 400 und einer Liste aller Fehler mit Feldpfad, zum Beispiel seller: Seller must provide at least one of: vatId, taxNumber or registrationNumber (BR-CO-26).
E-Rechnung lesen
POST /api/invoice/read nimmt eine Datei als multipart/form-data im Feld file entgegen – XRechnung (UBL oder CII), ZUGFeRD oder Factur-X als XML oder PDF:
curl -X POST https://www.e2invoice.com/api/invoice/read \
-H "x-api-key: e2i_IHR_API_KEY" \
-F "file=@eingangsrechnung.pdf"
Die Antwort enthält die normalisierten Rechnungsdaten (invoice) mit Verkäufer, Käufer, Positionen, Umsatzsteuer, Summen, Zahlungsinformationen, Anhängen und Verweisen auf vorherige Rechnungen, außerdem das Prüfergebnis (validation) und die Roh-XML (xml). Die Feldnamen sind unabhängig davon, ob die Quelle UBL oder CII ist – ideal für den automatischen Import in eine Buchhaltung.
E-Rechnung validieren
const form = new FormData();
form.append('file', fileInput.files[0]);
const response = await fetch('https://www.e2invoice.com/api/invoice/validate', {
method: 'POST',
headers: { 'x-api-key': 'e2i_IHR_API_KEY' },
body: form,
});
const result = await response.json();
if (!result.valid) {
for (const error of result.errors) {
console.log(`${error.rule} (${error.path}): ${error.message}`);
}
}
Jeder Befund enthält die Regel-ID (z. B. BR-CO-15), das betroffene Feld (z. B. BT-112) und eine Beschreibung. Welche Fehler am häufigsten auftreten und wie man sie behebt, erklärt der Artikel E-Rechnung prüfen: Die häufigsten Validierungsfehler.
Gespeicherte Rechnungen: Storno und Schlussrechnung
Mit API Key und "store": true werden erstellte Rechnungen zusätzlich im Konto gespeichert; die Antwort enthält dann invoiceId. Darauf bauen zwei Abläufe auf:
- Stornieren:
POST /api/invoices/{invoiceId}/cancelmit{ "invoiceNumber": "ST-2026-001" }erzeugt die Stornorechnung (Typcode 384) mit allen Positionen der Originalrechnung als negative Beträge und Verweis auf das Original. - Schlussrechnung aus Abschlägen:
POST /api/invoice/simplemitdocumentType: "final_invoice"undpartialInvoiceIds– Verweise, gezahlter Bruttobetrag und enthaltene Umsatzsteuer werden aus den gespeicherten Abschlagsrechnungen übernommen.
Über /api/contacts lassen sich außerdem Absender und Empfänger im Adressbuch speichern, deren Felder direkt als seller/buyer verwendet werden können.
Datenschutz
Rechnungsdaten für das Erstellen werden 24 Stunden vorgehalten, damit das PDF abgerufen werden kann, und danach automatisch gelöscht. Dateien zum Lesen und Validieren werden nicht gespeichert. Alle Server stehen in Deutschland.