CII, UBL und Peppol per REST in XRechnung umwandeln und zurück. Berechnet nur bei gültiger Datei. Für die Anfrage verarbeitet, ohne Dokumentenarchiv.
Auf dieser Seite
Die XRechnung-API von Klarbon wandelt CII-, UBL- und Peppol-BIS-Rechnungen mit einem REST-Aufruf in XRechnung um und XRechnung zurück in reines UBL oder CII. Jede erzeugte Datei wird vor der Ausgabe gegen das für das Ausgabeformat gewählte Regelwerk geprüft. Eine Umwandlung, die nicht gültig ist, kostet nichts. Die Dateien werden für die Anfrage verarbeitet, ohne Dokumentenarchiv.
Was die API macht
POST /api/v1/convert mit target=xrechnung schreibt XRechnung 3.0 in der Syntax der Quelle, UBL oder CII.
Die Antwort enthält die Datei und den vollständigen Prüfbericht mit Regelwerk und allen Meldungen.
Mit target=ubl oder target=cii wird aus einer XRechnung wieder die reine EN-16931-Syntax.
losses nennt Felder, die beim Schreiben des Zielformats geändert, weggelassen oder angenommen wurden. Angaben, die der Leser nicht in das Rechnungsmodell übernommen hat, sind nicht enthalten. Vergleichen Sie das Ergebnis mit dem Original.
Was sie nicht macht
XRechnung verlangt Angaben, die manchen Rechnungen fehlen, etwa eine Käuferreferenz. Ein deutscher öffentlicher Auftraggeber kann dafür eine Leitweg-ID vorgeben. Die API meldet, was fehlt, und erfindet nichts. Klarbon übermittelt keine Rechnungen an ZRE, OZG-RE oder andere Portale. Das reine Prüfen einer XRechnung ist in der Beta, siehe die API zur Prüfung von E-Rechnungen.
Schnellstart
Jedes Beispiel macht denselben Aufruf. Vor der Veröffentlichung läuft jedes einzelne gegen einen lokalen Klarbon-Server und die echte Validierung.
Legen Sie auf Ihrer Kontoseite einen Schlüssel an und setzen Sie ihn als KLARBON_API_KEY. Der Schlüssel gehört nie in die Adresse.
using System.Net.Http.Headers;
using System.Text.Json;
using var http = new HttpClient();
var key = Environment.GetEnvironmentVariable("KLARBON_API_KEY");
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", key);
var upload = new ByteArrayContent(await File.ReadAllBytesAsync("invoice.xml"));
upload.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
using var request = new HttpRequestMessage(HttpMethod.Post, "https://klarbon.app/api/v1/convert?target=xrechnung") { Content = upload };
request.Headers.Add("Idempotency-Key", "invoice-123456XX-xrechnung");
using var response = await http.SendAsync(request);
using var json = JsonDocument.Parse(await response.Content.ReadAsStringAsync());
var result = json.RootElement;
if (!result.GetProperty("ok").GetBoolean())
{
Console.Error.WriteLine($"{(int)response.StatusCode} {result.GetProperty("error")}: {result.GetProperty("message")}");
return 1;
}
var written = result.GetProperty("file");
await File.WriteAllBytesAsync(written.GetProperty("filename").GetString()!,
Convert.FromBase64String(written.GetProperty("content").GetString()!));
Console.WriteLine($"{written.GetProperty("filename")} written, {result.GetProperty("credits").GetProperty("balance")} credits left");
return 0;
Die Antwort
Die Antwort auf den curl-Aufruf oben, aufgezeichnet bei diesem Lauf mit KoSIT XRechnung test suite, business case 01.01a (CII), Apache-2.0.
Für die Seite gekürzt: file.content: base64 cut
{
"ok": true,
"file": {
"content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgi...",
"filename": "123456XX-xrechnung.xml",
"mime": "application/xml",
"bytes": 6867
},
"report": {
"detected": {
"syntax": "cii",
"customizationId": "urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0",
"profile": "xrechnung",
"container": "xml"
},
"ruleset": {
"id": "xrechnung-3.0-cii",
"name": "XRechnung 3.0 (CII)",
"version": "3.0.2"
},
"valid": true,
"engineVersion": "1.0.0",
"durationMs": 45,
"findings": [
{
"ruleId": "BR-DE-TMP-32",
"severity": "info",
"message": "[BR-DE-TMP-32] Eine Rechnung sollte zur Angabe des Liefer-/Leistungsdatums entweder BT-72 \"Actual delivery date\", BG-14 \"Invoicing period\" oder in jeder Rechnungsposition BG-26 \"Invoice line period\" enthalten.",
"location": "/rsm:CrossIndustryInvoice[1]/rsm:SupplyChainTradeTransaction[1]",
"test": "ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime or ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod or (every $line in ram:IncludedSupplyChainTradeLineItem satisfies $line/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod)",
"title": "BR-DE-TMP-32",
"what": "[BR-DE-TMP-32] Eine Rechnung sollte zur Angabe des Liefer-/Leistungsdatums entweder BT-72 \"Actual delivery date\", BG-14 \"Invoicing period\" oder in jeder Rechnungsposition BG-26 \"Invoice line period\" enthalten.",
"fix": "",
"link": null,
"officialUrl": null
}
]
},
"losses": [],
"credits": {
"spent": 1,
"balance": 200,
"plan": 0,
"bought": 200
}
}
Kosten
Vorausbezahlte API-Pakete, per Karte auf Ihrer Kontoseite gekauft: 1.000 Aufrufe für 39,00 €, 5.000 Aufrufe für 129,00 €, 25.000 Aufrufe für 449,00 €, 100.000 Aufrufe für 990,00 €, ohne Ablaufdatum. Ihr erster Schlüssel bringt 25 kostenlose Aufrufe. Kostenpflichtige Aufrufe verbrauchen zuerst das API-Guthaben, danach dieselben Credits wie die Website. Ein fehlgeschlagener Aufruf kostet nichts.
Aufruf
Kosten
POST /open
Kostenlos, faire Nutzung bis 1.000 am Tag pro Konto
POST /check
Kostenlos im Tageslimit Ihres Tarifs (20 am Tag im kostenlosen Tarif)
POST /convert, POST /make
1 Aufruf, nur wenn die erzeugte Datei gültig ist
POST /bank/convert
1 Aufruf je angefangene 500 Umsätze, nur bei erfolgreicher Umwandlung
Grenzen
Dateien bis 20 MB, PDFs bis 50 Seiten.
60 Anfragen pro Minute je Schlüssel, 120 je Konto. Eine 429 enthält Retry-After.
Bis zu 10 Schlüssel pro Konto. Idempotency-Key gilt 24 Stunden, ein erneuter Versuch wird also nie doppelt berechnet.
Fehler
Jeder Fehler ist { ok: false, error, message }: ein fester Code und ein klarer Satz.
Status
Code
Wann
401
auth
Kein Schlüssel oder ein unbekannter oder widerrufener Schlüssel.
402
no_credits
API-Guthaben und Credits reichen beide nicht. Nichts wurde ausgeführt; topUpUrl nennt die Kaufseite.
413
too_large
Über 20 MB oder 50 PDF-Seiten.
415
unsupported
Ein Dateiformat, das die Route nicht annimmt.
422
invalid
Die Datei war nicht lesbar oder die erzeugte Datei ist nicht gültig. Nicht berechnet.
429
limit
Ein Ratenlimit oder die kostenlosen Aufrufe des Tages.
503
engine_unavailable
Die Validierung ist kurz nicht erreichbar. Nicht berechnet.
Datenschutz
Dateien werden für die Anfrage verarbeitet, ohne ein Dokumentenarchiv anzulegen. Die Anwendungsprotokolle von Klarbon enthalten weder Dateinamen noch Inhalte noch Schlüssel. Der vollständige Schlüssel wird nicht gespeichert, nur ein HMAC davon und ein kurzes Anzeigepräfix.
Sie wird nur ausgegeben, wenn sie das passende XRechnung-Regelwerk besteht. Der Bericht in derselben Antwort zeigt das Regelwerk und jede Meldung.
Was passiert, wenn ein Pflichtfeld fehlt?
Der Aufruf antwortet mit 422 und einem Bericht, der das fehlende Feld nennt, zum Beispiel die Käuferreferenz. Es wird nichts berechnet; ergänzen Sie die Angaben und senden Sie die Anfrage erneut.
Kann ich XRechnung zurück in UBL oder CII umwandeln?
Ja. Mit target ubl oder cii erhalten Sie die reine EN-16931-Datei in dieser Syntax.
Übermittelt Klarbon die Rechnung an ein Behördenportal?
Nein. Klarbon erzeugt und prüft die Datei. Hochladen oder versenden Sie sie über ZRE, OZG-RE oder Ihren eigenen Kanal.