Base URL, Authentifizierung, Rate Limit, Credits und Fehlerformat: was für jeden Request gilt. Die Endpoints sind auf der nächsten Seite beschrieben.
api.xml-invoice.io aber noch nicht öffentlich erreichbar. Für einen
früheren Zugang schreiben Sie an:
api@xml-invoice.io.
Die API validiert, erzeugt, rendert und archiviert E-Rechnungen. xml-rechnung.eu nutzt dieselben Endpoints. Kommunikation über HTTPS, Rechnungen als XML oder ZUGFeRD-PDF im Request-Body, Responses als JSON.
Ein Request verarbeitet ein Dokument, synchron. Es gibt keine Batch-Verarbeitung und keine Queue: Mit der Response ist die Verarbeitung abgeschlossen.
curl -X POST https://api.xml-invoice.io/v2/assessment \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/xml" \
--data-binary @rechnung.xml
Base URL https://api.xml-invoice.io ·
Version v2 · Format JSON ·
Zeitstempel ISO 8601 · Feldnamen camelCase
api.xml-invoice.io. xml-rechnung.eu nutzt
für eine ältere Version eine andere Domain; v2-Requests liefern dort
404. URLs aus Responses sind immer gültig.
Jeder Request trägt den Token Ihres Kontos im Authorization-Header. Keine
Session, kein OAuth-Flow, kein vorgeschalteter Token-Request.
Authorization: Bearer xrv_0123456789abcdef0123456789abcdef
Den Token finden Sie in Mein Konto. Er gilt für das gesamte Konto und ist wie ein Passwort zu behandeln. Verwenden Sie ihn nur serverseitig: In clientseitigem JavaScript ist er für jeden in den Entwicklertools sichtbar.
Mögliche Fehler bei der Authentifizierung:
| Response | Ursache |
|---|---|
401 unauthorized |
Header fehlt oder Token ungültig. |
403 email-not-verified |
E-Mail-Adresse des Kontos nicht bestätigt. Der Link steht in der Willkommensmail. |
403 api-not-enabled |
Kein API-Zugang im Tarif. Er gehört zum Abo Plus; Credits allein gelten nur für die Anwendung. |
Das Rate Limit gilt je Token: 300 Requests pro Minute. Alle Server, Programme und Nutzer mit demselben Token teilen sich dieses Limit.
Requests ohne Token werden je IP-Adresse gezählt, 100 pro Minute. Das betrifft Login, Registrierung und die kostenlosen Validierungs-Endpoints; für Letztere gilt zusätzlich ein eigenes, niedrigeres Limit.
Jede Response enthält die Werte des für diesen Request geltenden Limits:
| Header | Bedeutung |
|---|---|
X-RateLimit-Limit |
Requests pro Minute. |
X-RateLimit-Remaining |
Verbleibende Requests im aktuellen Fenster. |
X-RateLimit-Reset |
Unix-Zeitstempel, zu dem das Fenster zurückgesetzt wird. |
Bei Überschreitung antwortet die API mit 429 und dem Typ
rate-limited. Für die Verarbeitung großer Mengen
X-RateLimit-Remaining auswerten und bei Bedarf bis
X-RateLimit-Reset warten.
Abgerechnet wird die Archivierung, ein Credit je Dokument. Validieren und Erzeugen ohne Archivierung sowie alle lesenden Requests sind frei. Preise und Tarifumfang stehen auf der Preisseite.
| Request | Credits |
|---|---|
Validieren oder erzeugen, ohne archive=true | nein |
Validieren oder erzeugen mit archive=true | ein Credit |
| Übergabe an die Buchhaltung anlegen | ein Credit für die Belegliste |
| Journal lesen, Beleg abrufen, Übergabe erneut holen | nein |
Jede abrechnende Response enthält den aktuellen Stand im Body:
{
"valid": true,
"document": { "documentNumber": "BEL-2026-00042", … },
"credits": { "used": 13, "limit": 120, "remaining": 107 }
}
Dieselben Werte stehen in den Headern
X-Credits-Used, X-Credits-Limit und
X-Credits-Remaining, auch bei kostenfreien Requests.
Ohne verfügbare Credits antwortet die API mit 402 und
credits-exhausted, bevor sie den Request verarbeitet. Es gibt keine
teilweise archivierten Rechnungen, und abgelehnte Requests kosten nichts.
Alle Fehler folgen RFC 9457 (application/problem+json):
HTTP/1.1 409 Conflict
Content-Type: application/problem+json
{
"type": "https://api.xml-invoice.io/problems/conflict",
"title": "Conflict",
"status": 409,
"detail": "This invoice is already in the journal.",
"duplicateOf": "67108d2f1c4b2a0e9d5f3a81"
}
Werten Sie type aus: Dieses Feld ist stabil. title und
detail sind für Menschen gedacht und können sich ändern. Je nach Fehler
kommen weitere Felder hinzu, im Beispiel duplicateOf.
| type | Status | Ursache |
|---|---|---|
invalid-request | 400 | Ungültiger Parameter, Body oder ID. |
unauthorized | 401 | Token fehlt oder ungültig. |
credits-exhausted | 402 | Keine Credits verfügbar. |
api-not-enabled | 403 | Kein API-Zugang im Tarif. |
email-not-verified | 403 | E-Mail-Adresse nicht bestätigt. |
account-inactive | 403 | Konto inaktiv. |
no-tenant | 403 | Token keinem Konto zugeordnet. |
not-found | 404 | Rechnung, Übergabe oder URL nicht vorhanden. |
conflict | 409 | Rechnung bereits vorhanden oder bereits übergeben und abgeschlossen. |
payload-too-large | 413 | Body größer als 1 MB. |
invalid-invoice | 422 | Aus den übergebenen Daten lässt sich keine gültige Rechnung erzeugen. |
rate-limited | 429 | Rate Limit überschritten. Siehe X-RateLimit-Reset. |
internal | 500 | Interner Fehler. Er wird protokolliert. |
validator-unavailable | 503 | Validator nicht erreichbar. Kein Urteil über die Rechnung; Request später wiederholen. |
service-unavailable | 503 | Vorübergehend nicht erreichbar. |
Responses, die auf ein Dokument verweisen (archivierte Rechnung, Prüfbericht, Belegliste), enthalten einen Share-Link:
"invoiceUrl": "https://api.xml-invoice.io/v2/s3/share/29dd3a9d…",
"invoiceUrlExpiresAt": "2026-10-27T07:15:58+02:00"
Der Share-Link funktioniert ohne Token, kann an Kunden oder deren Buchhaltung weitergegeben werden und läuft nach sieben Tagen ab. Bis dahin liefert derselbe Beleg denselben Link; danach den Beleg erneut abfragen, um einen neuen zu erhalten.
Direkte Speicherpfade gibt die API bewusst nicht heraus, weil sie Ablageort und Kontokennung offenlegen würden.
413.
E-Rechnungen liegen auch als ZUGFeRD-PDF weit darunter. Eingebettete Anlagen
(BT-125) werden deshalb nicht angenommen; die Alternative beschreiben
die Endpoints.messages enthält den Originalwortlaut
des KoSIT-Validators. Wir übersetzen nicht, damit der Wortlaut der Prüfung
unverändert bleibt.Alle Endpoints mit Parametern, Responses und Kosten: Validierung, Erzeugung, Journal, Übergabe.
Die KoSIT-Validatoren als Container für den eigenen Betrieb, ohne Konto.
Konto, Token und Credits gelten auch in der Anwendung xml-rechnung.eu. Zum Start gibt es 10 Credits. Der API-Zugang gehört zum Abo Plus, 12,00 € im Monat.
Keine Steuer- oder Rechtsberatung: Wir beraten weder steuerlich noch rechtlich. Bitte wenden Sie sich für solche Fragen an einen Steuerberater oder ein Steuerbüro.
Angebot für Unternehmer: Unser Angebot richtet sich ausschließlich an Unternehmer im Sinne des § 14 BGB — an Gewerbetreibende, Freiberufler und juristische Personen. Ein Vertragsschluss mit Verbrauchern ist nicht vorgesehen. Alle genannten Preise sind Nettopreise und verstehen sich zuzüglich der gesetzlichen Umsatzsteuer.
Compliance: Wir prüfen mit dem offiziellen KoSIT-Validator 1.6.3 und den Konfigurationen für XRechnung 3.0.2 und Peppol BIS 3.0.21. Die Images sind auf Docker Hub verfügbar.
Haftungsausschluss: Die auf dieser Website veröffentlichten Informationen wurden teilweise mit Unterstützung von KI recherchiert und aufbereitet. Trotz sorgfältiger Kontrolle und regelmäßiger Überprüfung können wir keine Haftung für die Richtigkeit, Vollständigkeit oder Aktualität der bereitgestellten Inhalte übernehmen. Wenn Sie Fehler finden oder Verbesserungsvorschläge haben, freuen wir uns über einen Hinweis.