XRechnung EN 16931 CII D16B

Free XRechnung Validator Online

Check your XRechnung XML against EN 16931 and the German CIUS rules in seconds.

Drag and drop your invoices here, or click to browse.

Why validate your XRechnung here?

A rejected XRechnung means a delayed payment. Find the errors before your invoice reaches a federal, state, or municipal buyer.

Schema Check Comes First

The XML structure is verified against the underlying UN/CEFACT D16B XSD, so missing elements and data-type faults surface immediately.

EN 16931 Plus the German CIUS

Every European business rule runs, followed by the German CIUS rules that make an XRechnung stricter than a plain EN 16931 invoice, the same set KoSIT publishes.

Detects What You Upload

We read the specification identifier, recognise XRechnung versions and ZUGFeRD profiles (MINIMUM through EXTENDED), and apply exactly the matching rule set.

ZUGFeRD PDFs Welcome Too

The same CII core sits inside ZUGFeRD: drop a hybrid PDF and the embedded XML is extracted and validated just like a standalone XRechnung.

How It Works

Three steps from upload to a clean XRechnung.

Step 1

Drop Your XRechnung or ZUGFeRD File

Upload standalone XRechnung XML or a ZUGFeRD PDF; the embedded invoice data is read automatically.

Step 2

Schema, Norm, and CIUS Rules

The XML passes the XSD schema, then the EN 16931 Schematron, then the German XRechnung CIUS rules where the file declares them.

Step 3

Read Your Report

Get a clear pass or fail report with the business term (BT) and rule ID for every finding, so you can correct the XML before you send it.

Frequently Asked Questions

Common questions on validating XRechnung files.

XRechnung is Germany's usage specification (CIUS) of EN 16931 and can be written in two XML syntaxes: UN/CEFACT CII, the syntax ZUGFeRD also uses, or UBL. Upload either one; the validator detects the syntax and applies the matching rules.
The schema of the declared syntax, the full EN 16931 Schematron set, the XRechnung CIUS rules as published by KoSIT, and every ZUGFeRD profile from MINIMUM to EXTENDED.
Yes. For a file that declares the XRechnung specification, the buyer reference (BT-10, the Leitweg-ID) is mandatory and its absence is reported as an error. A plain EN 16931 or ZUGFeRD profile invoice does not require it.
Almost always. Public-sector platforms reject on the same EN 16931 and CIUS rules we run; the report names the violated rule ID, the business term (BT), and the fix, in plain language.
Nothing for up to 10 files at a time. Premium adds stricter XRechnung rule levels and batch validation for larger volumes.
An error is blocking: the file is non-compliant and a German receiver or public authority will reject it. A warning is advisory and does not block compliance, but flags a best-practice deviation. A file can pass with warnings, never with errors.

EN 16931 accepts two XML syntaxes, and CII is the one at the heart of German e-invoicing. Cross-Industry Invoice (CII) is the UN/CEFACT syntax at the core of ZUGFeRD and XRechnung. When you issue a ZUGFeRD invoice, it is the embedded CII XML, not the PDF page, that a public authority, your B2B partner, or a system such as DATEV actually reads. Validating that XML before you send it is the surest way to avoid a rejected X-invoice or a silently dropped ZUGFeRD file.


What this CII validator checks

A CII invoice has to clear two separate layers. This validator runs both and reports them separately, so you can see precisely where an XRechnung or ZUGFeRD payload falls short.

The CII D16B XSD schema - checks the XML against the UN/CEFACT Cross-Industry Invoice D16B schema. Structural problems surface here first: missing mandatory elements, wrong data types on monetary or quantity amounts, dates that are not valid YYYYMMDD strings, and broken namespace declarations. Nothing that fails the schema can reach the business-rule stage, so this layer always runs first.

EN 16931 Schematron: the business rules - this is where most rejected invoices originate. The rules verify VAT arithmetic (BR-CO-14: the invoice total VAT must equal the sum of the VAT category amounts), VAT category logic (BR-S-08: a standard-rate line needs a rate above zero), mandatory content (BR-01: specification identifier, BR-06: seller name), and payment data (BR-61: an IBAN is required for payment means 30 or 58). Your specification identifier declares the profile, from MINIMUM to EXTENDED, and that profile decides which rules are mandatory. The XRechnung CIUS layers further German rules on top.


CII errors we see most often

These violations come up again and again on German CII XML. If your file fails, start here.

BR-01 - Missing specification identifier
The GuidelineSpecifiedDocumentContextParameter/ID element is empty or absent. Every CII invoice must name its EN 16931 profile (for example urn:cen.eu:en16931:2017, or a ZUGFeRD URN such as urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended). Without it the validator cannot pick a rule set and rejects the file at once.

BR-CO-14 - VAT total does not match the breakdown
The invoice total VAT does not equal the sum of the VAT category breakdown amounts. It usually fires when rounding between line level and header level drifts by a cent. Derive the header VAT from the breakdown rather than calculating it on its own.

BR-S-08 - Standard-rate line carries a zero rate
A line is marked VAT category S (standard rate) but shows 0%. If you really mean zero, use category Z (zero-rated) or E (exempt) instead.

BR-AE-05 - Reverse-charge line has a non-zero rate
With VAT category AE (reverse charge / Steuerschuldnerschaft des Leistungsempfangers), the rate must be exactly zero: the recipient accounts for the tax.

XSD - Wrong date format
A date carries a format other than 102, or a value that is not a valid YYYYMMDD string. CII writes dates as a DateTimeString with format 102, which is stricter than the ISO style UBL uses.

XSD - Elements in the wrong order
CII is order-sensitive: child elements must appear in exactly the sequence the schema defines. An element placed before a sibling it should follow fails the XSD even when every value is correct. This trips up almost everyone hand-writing CII.


CII, ZUGFeRD and XRechnung: how they fit together

ZUGFeRD (Germany) and Factur-X (France) are not different XML formats: each wraps the same CII XML inside a PDF/A-3 container, and XRechnung can be sent as CII too. A CII file that validates here is exactly what you embed to build a compliant ZUGFeRD PDF, or send as a standalone X-invoice. Have a standalone XML? Validate it, then embed it. Already have a ZUGFeRD PDF? Drop it here and we validate the embedded CII for you.

CII is also one of the two syntaxes Peppol BIS Billing 3.0 carries, alongside UBL, and the route many German senders use on Peppol. Validating the CII first gives you a clean source before any conversion.


The XRechnung rules on top of EN 16931

XRechnung is pure XML: there is no PDF layer, so PDF/A-3b conformance does not apply. Instead, the German CIUS (Core Invoice Usage Specification) adds national rules on top of EN 16931, and the validator enforces them whenever a file declares the XRechnung specification:

  • DE-R-001 - BT-10 (Buyer reference / Leitweg-ID) is mandatory for all XRechnung invoices
  • DE-R-002 - The Leitweg-ID must follow the pattern {authority-id}-{optional-suffix}-{check-digit}
  • DE-R-009 - Payment means code must be one of the permitted values (30, 58, or 59)

If you are submitting to a federal or state portal (ZRE, OZG-RE), the Leitweg-ID must be obtained from the contracting authority before you issue the invoice, the validator will flag a missing or malformed ID immediately.

Ready for mandatory e-invoicing?

Make every invoice compliant, in a single message

Subscribe to get unlimited tools, choosable compliance profiles and the full set of premium features.

EN 16931 & PDF/A-3b compliant Results in seconds No installation Data never stored
3 free uses per day · No card required