E-Rechnung validator API
Send the XML your library generated as a string or a file. The answer lists every EN 16931 and KoSIT rule violation with XPath.
curl -H "Authorization: Bearer $FINEKOT_KEY" -F file=@invoice.xml https://api.finekot.com/v1/e-invoice
{
"valid": false,
"verdict": "technically_invalid",
"profile": {"name": "XRechnung 3.0"},
"errors": 3, "warnings": 1,
"issues": [
{"rule": "BR-DE-15", "severity": "error",
"message": "Das Element \"Buyer reference\" (BT-10) muss übermittelt werden.",
"location": "/ubl:Invoice[1]"},
…
],
"cost": 0.02, "balance": 0.98
}No subscription, no contract.
create from JSON €0.04 · PDF → XRechnung €0.10
A subscription bills the same monthly plan for 10 invoices or 1,000. Here you prepay any amount and pay per call; unused credit stays.
10 free checks a day · €1 free with a key · then €0.02 per check
Check @e-invoice-eu/core output in Node.js
The XML goes in the xml field of a JSON body, so nothing is written to disk. The same works for CII and for UBL credit notes.
import { InvoiceService } from "@e-invoice-eu/core";
const service = new InvoiceService(console);
const out = await service.generate(invoiceData, { format: "XRECHNUNG-UBL", lang: "de-de" });
const xml = typeof out === "string" ? out : new TextDecoder().decode(out);
const res = await fetch("https://api.finekot.com/v1/e-invoice", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.FINEKOT_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ op: "validate", xml }),
});
const rep = await res.json();
console.log(rep.verdict, rep.errors, "errors,", rep.warnings, "warnings");
for (const i of rep.issues) console.log(i.severity, i.rule, i.location);Validate an e-invoice
Official EN 16931 and XRechnung rules. Errors with rule id, message and location.
10 free checks a day · €1 free with a key · then €0.02 per check
Processed on servers in Germany (Hetzner, Falkenstein). The uploaded file is checked in memory and not stored.
The verdict, profile, totals and every rule violation appear here.
One check for every generator
Libraries map your data to UBL or CII. Whether the result is a valid E-Rechnung is decided by the business rules, which most libraries do not run.
The API applies EN 16931 1.3.17 always and KoSIT XRechnung schematron 2.6.0 for XRechnung profiles, and returns errors, warnings and infos separately. Warnings such as BR-DE-27 do not make the file invalid.
For the frequent rules the web report adds a short “How to fix” line with the element to change in UBL and CII.
Price in plain numbers
A prepaid balance, no subscription. Charged only for a successful answer; errors are free.
A new key comes with €1 of free credit: 50 validations.
Credits never expire. No subscription.
Apple Pay, Google Pay or card on the monobank page. The key is created for you if you have none.
No key in this browser yet.
For developers
Same checks over REST and MCP. One header, JSON out.
curl https://api.finekot.com/v1/e-invoice \
-H "Authorization: Bearer fk_live_…" \
-F file=@invoice.xml
# → {"valid":false,"errors":2,"issues":[{"rule":"BR-DE-15",…}]}
# X-Cost: 0.02curl https://api.finekot.com/v1/e-invoice \
-H "Authorization: Bearer fk_live_…" \
-H "Content-Type: application/json" \
-d '{"op":"create","output":"pdf","invoice":{…}}'
# → Factur-X PDF url + validation report · X-Cost: 0.04claude mcp add --transport http finekot https://api.finekot.com/mcp --header "Authorization: Bearer fk_live_…"
Full reference: /llms.txt · /openapi.json · /.well-known/mcp.json