E-Rechnungen aus Build und Tests prüfen
Prüfen Sie XRechnung und ZUGFeRD aus Ihrem Build, Ihrer Testumgebung oder Ihrem eigenen Programm – mit demselben Prüfkern wie im Prüflabor. Ein Aufruf je Datei, das Urteil kommt als JSON zurück, der Lauf erscheint in Ihrem Verlauf.
Enthalten in den Tarifen Entwickler und Team.
Anmeldung
Legen Sie im Prüflabor unter „Schnittstelle“ einen API-Schlüssel an (bis zu 5 im Tarif Entwickler, bis zu 20 im Tarif Team). Der Schlüssel wird genau einmal angezeigt.
Senden Sie ihn im Kopf „Authorization: Bearer ert_…“ oder alternativ „X-API-Key: ert_…“. Bewahren Sie ihn wie ein Passwort auf, zum Beispiel als Secret in Ihrer CI.
Einen Schlüssel, den Sie nicht mehr brauchen, widerrufen Sie im Prüflabor. Endet Ihr Abo, bleiben die Schlüssel bestehen und funktionieren nach einer Verlängerung wieder.
Aufruf
XRechnung, CII oder UBL als XML:
curl -sS https://www.erechnung-tool.de/api/v1/pruefen \
-H "Authorization: Bearer $ERECHNUNG_API_KEY" \
-H "Content-Type: application/xml" \
--data-binary @rechnung.xmlZUGFeRD oder Factur-X als PDF:
curl -sS https://www.erechnung-tool.de/api/v1/pruefen \
-H "Authorization: Bearer $ERECHNUNG_API_KEY" \
-H "Content-Type: application/pdf" \
--data-binary @rechnung.pdfAls Formular mit dem Feld „datei“ und Parametern:
curl -sS "https://www.erechnung-tool.de/api/v1/pruefen?projekt=Export%20SAP&name=abc1234" \
-H "Authorization: Bearer $ERECHNUNG_API_KEY" \
-F "datei=@rechnung.xml"Verwenden Sie --data-binary statt -d: -d verändert Zeilenumbrüche und setzt einen falschen Content-Type.
Parameter
- projekt
- Projekt-ID oder exakter Projektname im Prüflabor. Ein unbekanntes Projekt führt zum Fehler projekt_unbekannt; es wird nicht angelegt.
- name
- Name des Laufs, 1 bis 80 Zeichen, zum Beispiel die Commit-Kennung. Ohne Angabe: Datum und Uhrzeit.
- speichern=0
- Ergebnis nicht als Lauf ablegen; „lauf“ ist dann null. Ohne Angabe wird das Prüfergebnis als Lauf gespeichert – nie die Datei.
Antwort
Jede geprüfte Datei ergibt HTTP 200 – auch eine ungültige Rechnung. Das Urteil steht im Körper. Die Kopfzeilen X-Pruefungen-Grenze und X-Regelstand nennen Ihre Grenze je Stunde und den verwendeten Regelstand.
{
"ergebnis": {
"urteil": "ungueltig",
"vollstaendig": true,
"erkannt": {
"quelle": "xml",
"syntax": "UBL",
"profil": "XRECHNUNG",
"standard": "XRechnung 3.0"
},
"pruefungen": [
{
"art": "schema",
"ergebnis": "bestanden"
},
{
"art": "regeln",
"ergebnis": "fehler",
"regelstand": "XRechnung 3.0.2"
}
],
"befunde": [
{
"id": "BR-DE-15",
"quelle": "regeln",
"schwere": "fehler",
"feld": {
"bt": "BT-10",
"name": "Käuferreferenz (Leitweg-ID)"
},
"fundstelle": "/Invoice",
"meldung": "[BR-DE-15] Das Element „Buyer reference“ (BT-10) muss übermittelt werden.",
"erklaerung": "Für XRechnung ist eine Käuferreferenz Pflicht; bei öffentlichen Auftraggebern ist das die Leitweg-ID.",
"loesung": "Tragen Sie die Käuferreferenz bzw. Leitweg-ID ein (BT-10, z.B. 04011000-1234512345-06). Die Leitweg-ID erhalten Sie vom Auftraggeber.",
"fingerabdruck": "BR-DE-15@/Invoice"
}
],
"beleg": {
"pruefsumme": "sha256:…",
"regelstand": "XRechnung 3.0.2",
"werkzeuge": {},
"zeitpunkt": "2026-10-08T12:00:00.000Z"
}
},
"lauf": {
"id": "0f6c…",
"url": "https://www.erechnung-tool.de/home/labor/lauf/0f6c…"
}
}Urteile
gueltig– Die Rechnung ist gültig.gueltig_mit_hinweisen– Gültig, mit Hinweisen, die Sie prüfen sollten.ungueltig– Mindestens ein Fehler; die Befunde nennen Regel, Feld und Lösung.nicht_pruefbar– Nicht vollständig geprüft, zum Beispiel PDF ohne eingebettetes XML (grund: kein_xml_im_pdf) oder ein Prüfschritt war nicht erreichbar.
GET https://www.erechnung-tool.de/api/v1/konto mit demselben Schlüssel liefert Ihren Tarif („stufe“) und die Prüfungen je Stunde („pruefungen_je_stunde“) – ohne eine Prüfung zu verbrauchen.
Fehler
Fehler kommen immer als { "fehler": { "code": "…", "text": "…" } } mit einem deutschen Satz.
| HTTP | code | wann |
|---|---|---|
| 400 | datei_fehlt | Kein Körper oder kein Formularfeld „datei“. |
| 400 | parameter | Ein Abfrageparameter ist ungültig. |
| 401 | schluessel_fehlt | Kein API-Schlüssel gesendet. |
| 401 | schluessel_ungueltig | Schlüssel falsch, unbekannt oder widerrufen. |
| 403 | stufe | Konto ohne Tarif Entwickler oder Team. |
| 404 | projekt_unbekannt | Projekt nicht gefunden. |
| 413 | datei_zu_gross | Datei größer als 4,4 MB. |
| 415 | format | Weder XML noch PDF oder unpassender Content-Type. |
| 429 | grenze | Prüfungen je Stunde erreicht; Retry-After nennt die Sekunden bis zum nächsten Fenster. |
| 429 | zu_viele_fehlversuche | Mehr als 30 Anmeldungen mit ungültigem Schlüssel je Stunde von derselben Adresse; mit Retry-After. |
| 503 | pruefdienst | Der Prüfdienst ist ausgefallen. Bitte später erneut versuchen. |
| 500 | intern | Unerwarteter Fehler auf unserer Seite. |
Grenzen
- Tarif Entwickler: 400 Prüfungen je Stunde
- Tarif Team: 1.200 Prüfungen je Stunde
- Die Grenze gilt gemeinsam für Schnittstelle und Prüflabor im Browser.
- Eine Datei je Aufruf, höchstens 4,4 MB.
In Ihrer CI
Shell-Schleife über alle exportierten Rechnungen (mit jq):
status=0
for datei in export/*.xml; do
urteil=$(curl -sS "https://www.erechnung-tool.de/api/v1/pruefen?name=$GIT_COMMIT" \
-H "Authorization: Bearer $ERECHNUNG_API_KEY" \
-H "Content-Type: application/xml" \
--data-binary @"$datei" | jq -r '.ergebnis.urteil')
echo "$datei: $urteil"
case "$urteil" in
gueltig|gueltig_mit_hinweisen) ;;
*) status=1 ;;
esac
done
exit $statusEine fertige Kommandozeile und eine GitHub Action folgen in Kürze.
Datenschutz
Ihre Datei speichern wir nicht. Sie wird nur von unserer Web-Anwendung und unserem eigenen Prüfdienst (Server in Deutschland) verarbeitet; an andere Dienste geben wir sie nicht weiter. Gespeichert wird höchstens das Prüfergebnis als Lauf – Urteil, Profil, Regelstand und die gefundenen Regeln mit ihrer Stelle, ohne Namen, Anschriften oder Beträge. Mit speichern=0 auch das nicht.
