So your invoice does not come back

Drop your ZUGFeRD, Factur-X or XRechnung file. In about two seconds you see whether it passes, and for every error the line, the excerpt and what to change. No sign-up, no install.

Free and without an account. With an account you check 20 invoices a week.

Your invoice stays in memory. We do not store it, not even briefly.
Servers in Nuremberg, Germany, checked with Mustang 2.26 and the KoSIT validator 1.6.3.
Against EN 16931, XRechnung 3.0.2 and Factur-X up to 1.09.2.
Check result Example
1 error, 1 warning ZUGFeRD 2.3.2 (Factur-X 1.0.07) · Profile EN 16931
Invoice RE-2026-0815 Recipient Beispiel AG Amount 1.190,00 EUR
BR-DE-1BT-31Line 42
The seller's VAT identifier or tax registration identifier must be present.
41 <ram:SellerTradeParty>
42 <ram:Name>Muster GmbH</ram:Name>
43 </ram:SellerTradeParty>
FixAdd ram:SpecifiedTaxRegistration with schemeID="VA" and the VAT number.
BR-CL-16BT-81Line 96
The payment means code should come from code list UNTDID 4461.

This is what every result looks like. Check your own invoice →

Not just what is wrong, but where

Other validators name the rule and leave you to find the spot. We give you the line number, show the excerpt from your file and say what belongs there.

Line and excerpt

Every message carries the line number and the affected spot from the original, highlighted. Schema errors included, and XML embedded in a ZUGFeRD PDF too.

A fix, not a rule number

160 rules come with plain text naming the field, the path and an example. “BR-DE-1” helps nobody, “the seller's VAT number is missing” does.

Two engines, not one

Every file runs through Mustang and through the KoSIT validator of the German federal government. Whatever either one flags shows up in the result.

Look up any error code →
EnginesMustang 2.26.0 · KoSIT 1.6.3
StandardEN 16931
XRechnung3.0.2 (2026-08-31)
ZUGFeRD / Factur-Xup to 2.5.2 / 1.09.2
Response time, median1,8 s
Response time, 95 %2,5 s
Stored invoicesnone
Server locationNuremberg, Germany
First page of a validation report with checksum, rule set and one error including line number and excerpt

The result as a report you can file

Anyone who checks an invoice often has to show that they checked it. The report records what was checked, when and with which rule set, ready for the archive or the finance department.

Checksum, timestamp, rule set

SHA-256 of the checked file, the time with time zone and the versions of both engines. That is what ties a report to a file later on.

The checked invoice attached

On request the original file is appended as further pages and embedded to PDF/A-3. One document instead of two.

German, English, French

For groups with recipients abroad. From the Automate plan; a sample is available without an account.

Look at the sample report (PDF) →

After the check it goes on

Two steps that otherwise cost manual work: fixing the error and getting the next invoice right from the start.

Fix errors automatically

Upload the faulty invoice. Whatever can be derived safely we correct ourselves. Only where we would have to guess do we ask, for example about the routing id. You get a valid file back. In the Automate plan.

Repair an invoice →

Create invoices

Turn structured data into a valid ZUGFeRD PDF or XRechnung, with several line items, all VAT categories and the routing id for public authorities. In the browser or through the API.

Create an invoice →

One call, structured JSON back

The same check as in the browser, as a REST endpoint. The answer carries rule, field, line, excerpt and the fix, everything your code needs to carry on.

validate_invoice

Checks PDF and XML against EN 16931, XRechnung and Factur-X.

extract_xml

Pulls the embedded XML out of a ZUGFeRD PDF.

check_consistency

Compares the visible PDF data with the XML. Finds tampered amounts.

create_invoice

Turns data into a valid invoice, stateless, per call.

validation_report

Returns the report as PDF/A-3, on request with the checked file.

All five are available as an MCP server too, so an AI agent can call them directly: npx zugferd-mcp-client.

Read the API documentation →
# check an invoice against EN 16931 curl -X POST https://api.zugferd-validator.de/v1/validate \ -H "X-Api-Key: your_key" \ -d '{"file_content":"...","file_type":"pdf"}' # answer { "valid": false, "format": "ZUGFeRD 2.3.2 (Factur-X 1.0.07)", "errors": [{ "rule_id": "BR-DE-1", "field": "BT-31", "line": 42, "snippet": [ { "line": 42, "text": " <ram:Name>…" } ], "fix_suggestion": "add the VAT number" }] }

Clear. No surprises.

Start free. Move up when you need more.

Free
0 / month

free forever

Check invoices one by one – in the browser or by API.

Start for free
  • 20 validations / week
  • 1 login
  • 1 invoice / month created
  • All 4 MCP tools
  • 160 rule fixes
  • Structured JSON
  • One invoice at a time
  • “Created with zugferd-validator.de” footer on generated invoices
  • No support, no SLA
Scale
69 / month

billed yearly · 828 €/year

For high volume and business-critical processes.


  • Unlimited validations
  • Company account with 10 logins: one quota, one invoice, one contract
  • Extra logins for 49 € per user and year
  • Unlimited invoice creation
  • Batch check (bigger batches)
  • Everything in Automate
  • Dedicated support
  • Fair use: 300 calls / hour

All prices exclude VAT.  ·  See the full API documentation →

More than 300 calls an hour, or bulk processing? Enterprise plan on request →

You set up logins for colleagues yourself: open a company account under Team in your account and invite them. Everyone signs in with their own address, you share the quota, there is one invoice for the company and one data processing agreement. The account also shows who validated how much.

¹ Fair use: Automate is built for 60 API calls an hour, Scale for 300 — enough for normal business. For higher throughput, bulk processing or a fixed SLA, see the Enterprise plan.

Feature Free Automate Scale
Validations / week20500Unlimited¹
Invoices created / week120Unlimited¹
Max. API calls / hour60300
User logins1310
Company account: roles, rights and per-person limits
Extra logins available49 €/year
The account shows who validated how much
Batch check (several invoices at once)
Repair invoice (automatic fixes)
validate_invoice
extract_xml
check_consistency
create_invoice
White label (no footer)
160 fix suggestions
E-mail support
Dedicated support
SLA99 %99 %

E-invoicing, EN 16931 & validation — the short version

Answers on formats, syntaxes and validation.

What is EN 16931?
EN 16931 is the European standard that defines the semantic data model of an electronic invoice: which fields (Business Terms, BT-xxx) an invoice must carry and which business rules (BR-xxx) apply. It is written in two syntaxes: CII (Cross Industry Invoice) and UBL. ZUGFeRD, Factur-X and XRechnung are national flavours of the same standard.
Which formats does the validator support?
The validator checks e-invoices against EN 16931 in both syntaxes, CII and UBL. That covers the national flavours ZUGFeRD and Factur-X (PDF/A-3 with embedded CII) as well as XRechnung in UBL and in CII. ZUGFeRD and Factur-X are supported in all profiles: MINIMUM, BASIC WL, BASIC, EN 16931 and EXTENDED. The profile is detected automatically. You send either a PDF or an XML file.
Does the validator check Peppol BIS rules?
The rule catalogue includes Peppol BIS rule checks. Findings carry rule IDs such as PEPPOL-EN16931-R040, with the same fix suggestions as every other rule. To be precise about what this is not: we are not a certified Peppol validator and not a Peppol Access Point. We check invoice content, we do not send invoices over the Peppol network.
What is the difference between CII and UBL?
CII and UBL are two XML syntaxes for the same semantic model, and EN 16931 allows both. CII (Cross Industry Invoice, UN/CEFACT) is what ZUGFeRD and Factur-X embed in their PDF. UBL (OASIS) is common in Peppol and in the Benelux and Nordic markets. XRechnung exists in both. The validator reads both and tells you which one it found.
How do I validate an e-invoice?
Drop the file into the online validator, or send the PDF or XML base64-encoded by POST to /v1/validate with your API key in the X-Api-Key header. You get structured JSON back: detected format and profile, a list of errors and warnings with rule ID, the affected BT field, a concrete fix suggestion and an XPath, plus the invoice metadata. Validation runs against EN 16931 with Mustang Project and the KoSIT validator. Details in the API documentation.
What does a BR error mean?
BR rules are the business rules of EN 16931. Example: BR-CO-26 requires a seller identifier, such as the VAT number or a legal registration ID. If an invoice breaks a rule, the validator reports it with the rule ID, the field and a concrete fix. Rules prefixed BR-DE are German add-ons, rules prefixed PEPPOL-EN16931-R come from Peppol BIS. The full list lives in the error code reference.
Can I create invoices with it too?
Yes. Through POST /v1/create or the MCP tool create_invoice you turn structured JSON into a valid e-invoice — either a ZUGFeRD or Factur-X PDF (PDF/A-3 with embedded XML) or plain XRechnung XML with a routing ID for public-sector buyers. Several line items, all VAT categories (standard, exempt, reverse charge), discounts and charges and payment details are supported, and so are credit notes, corrections and prepayment invoices that reference the original. The API is stateless: each call returns the finished invoice, nothing is stored. You can validate on creation or afterwards with validate_invoice.
Is there a sandbox for invoice creation?
Yes. Every account has a sandbox key (zv_test_…, shown in your account) next to the live key. Use it to test your integration without spending your live quota. Invoices created in sandbox mode carry a clear tiled “DEMO” watermark on every page and a note in the XML — fully testable, but not valid for real business. Use the live key for real invoices. Validation itself you can try for free on the Free plan or with the public demo key.
What does it cost? Is there a free plan?
The Free plan stays free: 20 validations per week and 1 invoice per month (with a small footer), no credit card. Automate costs 19 € per month billed yearly (22.80 € per month billed monthly) for 500 validations per week and unlimited white-label invoices, plus the batch check and the automatic repair. Scale costs 69 € per month billed yearly (82.80 € monthly) for unlimited validation and invoice creation under fair use. A paid plan covers the whole company: 3 logins on Automate, 10 on Scale, everything on one invoice. The weekly quotas reset every Sunday at midnight, the free invoice at the start of each month. To try validation without signing up, a public demo key gives 1 request per day and IP. See the plans.
How do several colleagues work on one account?
In your account under Team you open the company account and invite colleagues by email. Everyone signs in with their own address and their own password. You share the weekly quota, and there is one invoice and one data processing agreement for the company. For every login you set the role (owner, billing, member, reviewer), switch validating and creating on or off, and can set a personal weekly limit. The account shows who validated how much. Automate comes with 3 logins, Scale with 10; if that is not enough, each extra login on Scale costs 4.90 euro per month or 49 euro per year, pro rata from the day you add it. You can add several at once. When someone leaves, you remove the access in one click and their key stops working at once.
Can I plug the API into Claude or other AI agents?
Yes. The validator ships an MCP client (zugferd-mcp-client) that installs through npm and plugs into MCP-capable AI tools such as Claude. It exposes the tools validate_invoice, extract_xml, check_consistency and create_invoice, so an agent can check, read and create e-invoices on its own.
Where is my invoice data processed?
On servers in Germany (Nuremberg), inside the EU. We process invoice data in memory only and drop it right after the check. Nothing is stored, which keeps the service GDPR compliant. Details in our privacy policy.

Check the invoice before the recipient does

Drop the file, read the result. Free, without an account, in about two seconds.