Free tool · XRechnung · ZUGFeRD
E-invoice validator
Upload an e-invoice as XML or PDF and check whether it conforms to the official rule sets: the XML schema, the EN 16931 business rules and the XRechnung rules, plus PDF/A-3 for ZUGFeRD / Factur-X. Every error comes with its rule id.
The file is sent to the vatcheckapi API for this check only. It is processed transiently and never persisted. Technical validation, not tax advice.
What the validator checks
- Format: XML or PDF, and for a PDF the embedded invoice file. The format, syntax (UBL or CII), profile and version are read from the invoice, not from the file name.
- XML: the file must be well-formed XML without a DOCTYPE and match the UBL or CII XML schema. Schema errors come with line and column.
- Business rules: the rules of the European standard EN 16931 (for example the calculation rules BR-CO-…) and, for XRechnung, the German national rules BR-DE-….
- PDF: for ZUGFeRD and Factur-X also PDF/A-3 conformance and the embedded file: file name, AFRelationship, MIME type, the link to the document and the XMP metadata.
An invoice is valid when no check reports an error. Warnings and notes don’t make it invalid. With “Validate as” you ask for a specific format: if the file declares another one, the result reports FORMAT_MISMATCH.
Supported formats
| Format | Syntax | What is checked |
|---|---|---|
| XRechnung 3.0, including Extension and CVD | UBL (Invoice, CreditNote), CII | XML, schema, EN 16931 and XRechnung rules |
| EN 16931 | UBL (Invoice, CreditNote), CII | XML, schema, EN 16931 |
| ZUGFeRD / Factur-X, profile EN 16931 (COMFORT) or XRECHNUNG | CII inside a PDF | the XML as above, plus PDF/A-3 and the embedded file |
Recognised but not validated yet (error UNSUPPORTED_PROFILE): ZUGFeRD / Factur-X MINIMUM, BASIC WL, BASIC, EXTENDED and EXTENDED-CTC-FR, ZUGFeRD 1.0, XRechnung versions before 3.0, the XRechnung 3.0 Extension as a UBL credit note, and Peppol BIS.
XRechnung, ZUGFeRD and Factur-X
- XRechnung is Germany’s national format for EN 16931 invoices, a pure XML file. German public bodies require it, usually with a Leitweg-ID as the buyer reference.
- ZUGFeRD is a PDF/A-3 with the invoice data embedded as CII XML: people read the PDF, software reads the XML. Factur-X is the same standard under its French name.
- EN 16931 is the European standard both are built on. An invoice can conform to EN 16931 without the XRechnung rules.
Germany is phasing in e-invoices for domestic B2B invoices: since 1 January 2025 every business must be able to receive them, and from 1 January 2028 domestic B2B invoices must be e-invoices, with exceptions such as small invoices up to 250 euros. The German page E-Rechnung validieren has the full timeline. Ask your tax adviser how it applies to you.
Understanding the errors
- Rule id: every message names its rule.
BR-…andBR-CO-…come from EN 16931,BR-DE-…from the XRechnung rules,cvc-…from the XML schema andPDFA-…from the PDF/A check. The list of the API’s own codes explains messages such asNO_EINVOICE_XML. - Schema errors first: when the XML schema fails, the business rules are not checked (warning
BUSINESS_RULES_SKIPPED). Fix the schema errors and validate again. - Report: “Download report” saves the result as JSON.
ruleset_versionnames the exact versions of the rule sets the invoice was checked against.
Rule sets
The checks run unchanged on the KoSIT validator with KoSIT’s XRechnung configuration (Apache License 2.0), the EN 16931 validation artefacts by CEN and the European Commission (EUPL 1.2) and veraPDF for PDF/A (Mozilla Public License 2.0). The result is a technical check against these rule sets, not tax advice.
Validate e-invoices by API
curl "https://api.vatcheckapi.com/v2/einvoice/validate?language=en" \
-H "apikey: YOUR-API-KEY" \
-H "Content-Type: application/xml" \
--data-binary @invoice.xml
Send a PDF with Content-Type: application/pdf. The response has valid, errors and warnings with rule_id, message and location, plus summary with the main invoice data. See the documentation and the e-invoice validation API page.
Frequently asked questions
How do I validate an e-invoice?
Which formats are validated?
What does an error like BR-DE-15 mean?
Why are some messages in German?
Are my invoices stored?
Is the result a tax check?
How often can I use the tool?
E-invoice validation API
Validate e-invoices in your own software
The vatcheckapi API validates XRechnung, ZUGFeRD / Factur-X and EN 16931 and returns the result as JSON, with every rule id. Send the file as the request body, as an upload or base64-encoded in JSON.
/v2/einvoice/validate documentation E-invoice validation API All documentation
150 free requests every month. An XML invoice counts as 1 request, a ZUGFeRD PDF as 2. No credit card required.
POST https://api.vatcheckapi.com/v2/einvoice/validate?language=en
{
"valid": false,
"format": "xrechnung",
"syntax": "UBL",
"profile": "XRECHNUNG",
"version": "3.0",
"container": "xml",
"pdfa": null,
"errors": [
{
"rule_id": "BR-DE-15",
"severity": "error",
"message": "Das Element \"Buyer reference\" (BT-10) muss übermittelt werden.",
"message_language": "de",
"source": "business_rules",
"location": "/ubl:Invoice[1]"
}
],
"warnings": [],
"language": "en",
"disclaimer": "Technical validation against the rule sets listed in ruleset_version. It is not tax or legal advice."
}