API / Batch
API docs
Status: single-file API is live and free. Batch stays on the waitlist.
POST /v1/validate checks one file, with no API key. Free up to 50 validations per IP per UTC day, and at most 10 per minute. Above that the response is 429 with Retry-After.
Batch and higher volume: from €79/month. Joining the waitlist is free; you are charged only after confirmation.
What it checks
XRechnung XML (UBL and CII), and a ZUGFeRD PDF when an XML is embedded. The engine is the KoSIT validator with the official XRechnung configuration.
- KoSIT validator 1.6.3
- XRechnung 3.0.2, configuration release 2026-08-31 (
scenarios.xmldated 2026-09-02) - EN 16931 Schematron 1.3.16
Result
Rule code (BR-…), location, and a German fix hint. The site shows these classes: pass, valid with warnings, reject, not an e-invoice, format unclear.
Limits
- Max 5 MB. Larger files get 413.
- An empty file is rejected.
- 50 validations per IP per UTC day, 10 per minute. After that, 429.
Privacy
Invoice files (XML/PDF) are processed only in the memory of that HTTP request. They are not written to disk, not logged as XML, and not sent to a language model. After the response the file is discarded (persisted: false).
Technical events contain no file contents, only metadata (byte size, type, error count).
Scope
A file can pass here and still be rejected by ZRE/OZG-RE or another portal (portal and bank overlays). No Peppol access point, no invoice editor, no portal submit, no legal or tax advice.
Request
curl -F "file=@rechnung.xml" https://checkxrechnung.com/v1/validate
Example response
Against invalid-xrechnung-ubl.xml: 14 errors. Below is the first one, with the fields POST /v1/validate returns. The website response at /api/validate also has resultClass, sessionId, uploadIndexInSession, sanitized, scenario, recommendation, customization, extractedName and kind.
{
"ok": false,
"persisted": false,
"fileName": "invalid-xrechnung-ubl.xml",
"bytes": 2496,
"hasXml": true,
"syntax": "UBL Invoice",
"invoiceType": "XRechnung",
"summary": { "errors": 14, "warnings": 0 },
"versions": {
"product": "RechnungCheck",
"domain": "checkxrechnung.com",
"xrechnung": "3.0.2",
"kosit_validator": "1.6.3",
"kosit_configuration": "2026-08-31",
"en16931_schematron": "1.3.16"
},
"issues": [
{
"severity": "error",
"code": "BR-08",
"location": "/Invoice",
"message": "[BR-08]-An Invoice shall contain the Seller postal address.",
"hint": "Die Verkäuferanschrift (BG-5) fehlt. StreetName, CityName, PostalZone und Country/IdentificationCode setzen.",
"source": "kosit",
"rule_url": "https://checkxrechnung.com/fehler/br-08"
}
]
}
Files over 5 MB get 413. The 51st check from one IP on a UTC day, or the 11th in a minute, gets 429 and a link to the waitlist.
ZUGFeRD / Factur-X
POST /v1/zugferd/validate accepts a PDF up to 10 MB. It uses the same free limit as POST /v1/validate: 50 checks per IP per UTC day and 10 per minute, with no API key. The counters are shared across /v1/.
The PDF/A-3 check is a structure check (PDF header, XMP pdfaid:part 3, conformance A/B/U, the embedded XML, and AFRelationship Alternative). If veraPDF is installed, the response sets pdfa.engine to verapdf. Otherwise pdfa.engine is structure and pdfa.label says this is not a full veraPDF validation.
The embedded file is factur-x.xml, zugferd-invoice.xml, or xrechnung.xml. The profile is MINIMUM, BASIC WL, BASIC, EN16931, EXTENDED, or XRECHNUNG. The XML is checked with the EN 16931 CII Schematron 1.3.16 shipped in the KoSIT configuration. Profile XRECHNUNG is also checked with the XRechnung CII Schematron. Each hit includes rule_url when a page exists under /fehler/.
MINIMUM, BASIC WL, and BASIC are subsets of EN 16931, so a correct file of those profiles can fail this Schematron. profileNote says so.
curl -F "file=@factur-x-en16931.pdf" https://checkxrechnung.com/v1/zugferd/validate
curl -F "file=@factur-x-en16931.pdf" https://checkxrechnung.com/v1/zugferd/extract
POST /v1/zugferd/extract returns the embedded XML and a JSON summary (invoice number, date, seller, buyer, totals, profile). The same 10 MB cap and free limit apply. Details: /en/zugferd.
More
Sample files · Error codes · Changelog · llms.txt · openapi.json
Bobook Limited, Venture Hub, 136 Capel Street, Dublin 1, D01 T2C9, Ireland · info@bobook.club