Rechnungen aus Excel oder Word? Wir machen Ihre Vorlage E-Rechnung-fähig – zum Festpreis.
Prüflabor · Schnittstelle

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.

Zur Schlüssel-Verwaltung im Prüflabor

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.xml

ZUGFeRD 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.pdf

Als 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.

HTTPcodewann
400datei_fehltKein Körper oder kein Formularfeld „datei“.
400parameterEin Abfrageparameter ist ungültig.
401schluessel_fehltKein API-Schlüssel gesendet.
401schluessel_ungueltigSchlüssel falsch, unbekannt oder widerrufen.
403stufeKonto ohne Tarif Entwickler oder Team.
404projekt_unbekanntProjekt nicht gefunden.
413datei_zu_grossDatei größer als 4,4 MB.
415formatWeder XML noch PDF oder unpassender Content-Type.
429grenzePrüfungen je Stunde erreicht; Retry-After nennt die Sekunden bis zum nächsten Fenster.
429zu_viele_fehlversucheMehr als 30 Anmeldungen mit ungültigem Schlüssel je Stunde von derselben Adresse; mit Retry-After.
503pruefdienstDer Prüfdienst ist ausgefallen. Bitte später erneut versuchen.
500internUnerwarteter 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 $status

Eine 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.

Tarife ansehen