E-Rechnung Konverter
REST · JSONCII + UBL + ZUGFeRDBeta

E-Rechnung API: XRechnung und ZUGFeRD per REST prüfen

Senden Sie eine XRechnung (CII oder UBL) oder ein ZUGFeRD-/Factur-X-PDF per POST und erhalten Sie JSON zurück: gültig oder nicht, erkanntes Format und jede verletzte Regel mit Regel-ID, Originalmeldung und deutscher Kurzerklärung. Kostenlos 50 Prüfungen pro Monat, Schlüssel sofort und ohne Zahlung.

Kostenlosen API-Schlüssel holen

Ein Schlüssel pro E-Mail-Adresse. Wir speichern Ihre E-Mail-Adresse und einen Hash des Schlüssels, siehe Datenschutz. Keine Kreditkarte, keine Zahlung.

Auf einen Blick

  • Endpoint: POST /api/v1/validate
  • Auth: Authorization: Bearer erk_… oder X-API-Key
  • Eingabe: XML-Body oder Multipart-Feld file (XML/PDF), max. 2,5 MB
  • Regeln: Schematron EN 16931 + XRechnung 3.0.2 (KoSIT-Release), ohne XSD-Schemaprüfung
  • Free: 50 Prüfungen / Monat, 60 Anfragen / Minute
  • OpenAPI: openapi.json · openapi.yaml (3.1)

Schnellstart mit curl

XRechnung-XML direkt als Body senden:

curl -X POST https://erechnung-konverter.vercel.app/api/v1/validate \
  -H "Authorization: Bearer $ERECHNUNG_API_KEY" \
  -H "Content-Type: application/xml" \
  --data-binary @rechnung.xml

ZUGFeRD-/Factur-X-PDF oder XML als Datei-Upload (Multipart). Bei PDFs wird die erste eingebettete XML geprüft:

curl -X POST https://erechnung-konverter.vercel.app/api/v1/validate \
  -H "Authorization: Bearer $ERECHNUNG_API_KEY" \
  -F "file=@rechnung-zugferd.pdf"

JavaScript (Node.js 18+)

import { readFile } from "node:fs/promises";

const xml = await readFile("rechnung.xml");
const res = await fetch("https://erechnung-konverter.vercel.app/api/v1/validate", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.ERECHNUNG_API_KEY}`,
    "Content-Type": "application/xml",
  },
  body: xml,
});
const result = await res.json();
if (!res.ok) throw new Error(result.error.code + ": " + result.error.message);
console.log(result.valid, result.format, result.errors.map(e => e.rule));

Den Schlüssel nur serverseitig verwenden (Umgebungsvariable), nie im Browser-Code ausliefern. Die API sendet keine CORS-Header.

Antwort

valid ist true, wenn keine Regel mit Fehlerstufe verletzt ist; Warnungen stehen separat in warnings. format ist CII oder UBL; XML ohne CII- oder UBL-Rechnungswurzel wird mit 400 not_an_einvoice abgelehnt (zählt nicht). message_de ist null, wenn es für eine Regel noch keine deutsche Erklärung gibt. Jede Regel-ID ist in unseren Fehlercodes erklärt.

{
  "valid": false,
  "format": "CII",
  "document": "invoice",
  "profile": "urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0",
  "rules": "KoSIT XRechnung 3.0.2 Schematron (CII: en16931 + xrechnung)",
  "errors": [
    {
      "rule": "BR-DE-15",
      "message": "Das Element \"Buyer reference\" (BT-10) muss übermittelt werden.",
      "message_de": "Die Leitweg-ID bzw. Käuferreferenz (BT-10) fehlt."
    }
  ],
  "warnings": [
    {
      "rule": "BR-DE-TMP-32",
      "message": "Eine Rechnung sollte zur Angabe des Liefer-/Leistungsdatums …",
      "message_de": "Für das Liefer-/Leistungsdatum sollten entweder das Lieferdatum (BT-72) …"
    }
  ],
  "invoice": { "number": "123456XX", "total": "336.9" },
  "usage": { "plan": "free", "limit": 50, "used": 3, "remaining": 47, "reset": "2026-11-01T00:00:00.000Z" }
}

Header: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (Unix-Sekunden, Beginn des nächsten Monats UTC).

OpenAPI-Spezifikation

Die vollständige Beschreibung aller Endpunkte, Felder, Header und Fehlercodes gibt es als OpenAPI 3.1: /openapi.json (JSON) und /openapi.yaml (YAML).

  • Postman: Import → Link → https://erechnung-konverter.vercel.app/openapi.json einfügen; den Schlüssel unter Authorization als Bearer Token setzen.
  • Insomnia: Import → From URL → dieselbe Adresse.
  • Clients generieren: z. B. mit OpenAPI Generator oder openapi-typescript.

Fehlerformat und Statuscodes

{ "error": { "code": "quota_exceeded", "message": "Freikontingent (50/Monat) aufgebraucht, …" } }
Statuserror.codeBedeutung
400bad_request / not_an_einvoice / invalid_emailLeerer Body, Feld „file“ fehlt, PDF ohne eingebettete XML, DOCTYPE im XML, keine CII-/UBL-Rechnung
401api_key_required / unauthorizedKein oder ungültiger Schlüssel
405method_not_allowedNur POST
409email_existsFür die E-Mail-Adresse gibt es schon einen Schlüssel
413payload_too_largeDatei über 2,5 MB
415unsupported_media_typeContent-Type nicht unterstützt
429quota_exceeded / rate_limitedMonatskontingent aufgebraucht bzw. mehr als 60 Anfragen pro Minute (Header Retry-After)
500internal_errorPrüfung fehlgeschlagen (zählt als Aufruf), bitte melden
503storage_unavailable / service_unavailableVorübergehend nicht verfügbar, später erneut versuchen

Gezählt wird jede Prüfung, die tatsächlich läuft (auch mit Ergebnis valid: false). Anfragen mit 4xx-Fehlern vor der Prüfung (400, 401, 413, 415, 429) zählen nicht.

Limits und Tarife

Free ist jetzt verfügbar. Bezahlte Tarife sind geplant und noch nicht buchbar; Preise pro Monat, Endpreise inkl. 19 % USt, Änderungen vorbehalten. Wer beim Schlüssel das Häkchen setzt, bekommt eine einmalige Nachricht zum Start (nach Bestätigung per Link).

Freejetzt verfügbar

0 € / Monat

50 Prüfungen / Monat

Startergeplant

15 € / Monat

2.000 Prüfungen / Monat

Growthgeplant

39 € / Monat

5.000 Prüfungen / Monat

Scalegeplant

79 € / Monat

15.000 Prüfungen / Monat

Was die API prüft und was nicht

  • Geprüft werden die veröffentlichten Schematron-Regeln der KoSIT (EN 16931 und, bei XRechnung-Kennung, XRechnung 3.0.2) für CII und UBL. Eine XSD-Schemaprüfung findet nicht statt; das Ergebnis ist daher nicht identisch mit dem vollständigen KoSIT-Prüftool.
  • Bei ZUGFeRD/Factur-X wird nur die eingebettete XML geprüft, nicht PDF/A-3 oder XMP-Metadaten.
  • Rechnungsdateien werden nur im Arbeitsspeicher verarbeitet, nicht gespeichert und nicht an KI-Dienste übermittelt.
  • Beta: kostenlos, ohne Verfügbarkeitszusage. Bei Missbrauch können Schlüssel gesperrt werden. Schlüssel verloren? Mail an stoertebeker@mail.grokbot.com.

Lieber im Browser prüfen? Zum kostenlosen Validator. Überblick für Suchende und Entscheider: XRechnung API im Überblick · ZUGFeRD API im Überblick · Factur-X API im Überblick.

In English

REST API to validate German/EU e-invoices: XRechnung (CII and UBL) and ZUGFeRD / Factur-X PDFs. POST /api/v1/validate with an XML body (Content-Type: application/xml) or a multipart file field (XML or PDF, max 2.5 MB), authenticated with Authorization: Bearer erk_…. The response is JSON: valid, detected format (CII/UBL), and errors/warnings as {rule, message, message_de}. Rules: published KoSIT Schematron for EN 16931 + XRechnung 3.0.2 (no XSD schema step). OpenAPI 3.1 spec: /openapi.json (or YAML), importable into Postman or Insomnia by URL. Errors use {"error": {"code", "message"}} with 401 for missing/invalid keys and 429 for quota or rate limits.

Free tier: 50 validations per month per key, 60 requests per minute; get a key instantly above (email only, no card). Paid tiers (planned, not yet available): €15 / 2,000, €39 / 5,000, €79 / 15,000 validations per month, prices include 19% German VAT. Invoice files are processed in memory only and never stored.