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.

With a format selected, the result also shows an error if the file declares another format.

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

  1. 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.
  2. 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.
  3. 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-….
  4. 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

FormatSyntaxWhat is checked
XRechnung 3.0, including Extension and CVDUBL (Invoice, CreditNote), CIIXML, schema, EN 16931 and XRechnung rules
EN 16931UBL (Invoice, CreditNote), CIIXML, schema, EN 16931
ZUGFeRD / Factur-X, profile EN 16931 (COMFORT) or XRECHNUNGCII inside a PDFthe 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-… and BR-CO-… come from EN 16931, BR-DE-… from the XRechnung rules, cvc-… from the XML schema and PDFA-… from the PDF/A check. The list of the API’s own codes explains messages such as NO_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_version names 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?

Drop the file into the box or choose it: an XML file (XRechnung, EN 16931) or a ZUGFeRD or Factur-X PDF, up to 10 MB. Click Validate invoice. The tool reads the format, syntax, profile and version from the file itself, not from its name.

Which formats are validated?

XRechnung 3.0 in UBL and CII syntax (including CVD and the Extension, except the Extension as a UBL credit note), EN 16931 invoices in UBL and CII, and ZUGFeRD and Factur-X PDFs with the EN 16931 (COMFORT) or XRECHNUNG profile. Other ZUGFeRD / Factur-X profiles (MINIMUM, BASIC WL, BASIC, EXTENDED, EXTENDED-CTC-FR), ZUGFeRD 1.0, older XRechnung versions, the XRechnung 3.0 Extension as a UBL credit note and Peppol BIS are recognised but not validated yet.

What does an error like BR-DE-15 mean?

Each error names the rule the invoice breaks. BR-DE-… are the German XRechnung rules (BR-DE-15: the buyer reference BT-10, the Leitweg-ID for public bodies, is missing). BR-… and BR-CO-… come from EN 16931, cvc-… from the XML schema and PDFA-… from the PDF/A check. Codes such as NO_EINVOICE_XML are the vatcheckapi API's own.

Why are some messages in German?

The rule sets are not translated. The XRechnung rules report in German; EN 16931, the XML schema and the PDF/A check report in English. The rule id is the same in every language.

Are my invoices stored?

No. The file is sent to the vatcheckapi API for this check only and processed transiently: it is never stored, its content goes into no log, and the result is not stored either.

Is the result a tax check?

No. The tool checks technically whether the file conforms to the rule sets. It does not check whether the invoice matches the transaction or is correct for tax purposes. It is not tax or legal advice.

How often can I use the tool?

For free and without an account, up to 5 checks an hour and 30 a day, shared with the other free tools. For more invoices, use the API.

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."
}

Free VAT, EORI and IBAN tools

Start using our VAT validation API for free today

Get 150 validations / month for free