Hosted in the EU · Mustang + KoSIT · EN 16931

Validate, fix and create
e-invoices

Check any e-invoice against EN 16931 right in your browser — free, no sign-up. Both syntaxes, CII and UBL, including the national flavours ZUGFeRD, Factur-X and XRechnung. Fix errors automatically with concrete suggestions, or create and validate invoices through the REST API and MCP client, straight from your AI agent.

Check an invoice online Get a free API key
zugferd-validator.de · result
1 error, 1 warning
EN 16931 · CII syntax · ZUGFeRD 2.4 / Factur-X
Invoice INV-2026-042 Example Ltd 1,190.00 EUR
BR-CO-26 BT-31 · Seller VAT identifier
The seller VAT identifier (BT-31) is missing.
FixAdd ram:SpecifiedTaxRegistration with schemeID VA.
BR-CL-10 BT-81 · Payment means
Payment means code is not from UNTDID 4461.

Let us fix the errors? We repair the invoice and only ask for what is missing.

Also by API and MCP

Check, create and repair e-invoices from your own code or your AI agent. One request, structured JSON back — no extra software.

  • REST API to validate, create and repair
  • MCP client for Claude and other AI agents
  • EN 16931 in both syntaxes: CII and UBL
  • Includes Peppol BIS rule checks
  • Hosted in the EU
Terminal · validate
# Validate an invoice against EN 16931
curl -X POST https://api.zugferd-validator.de/v1/validate \
  -H "X-Api-Key: your_key" \
  -d '{"file_type":"xml","file_content":"..."}'

# Response
{
  "valid": false,
  "format": "ZUGFeRD 2.4 / Factur-X",
  "summary": "1 error, 1 warning",
  "errors": [{
    "rule_id": "BR-CO-26",
    "field": "BT-31",
    "fix_suggestion": "Add the seller VAT ID"
  }]
}
63
rule fixes in the database
10
supported formats
30s
max. validation time
100%
structured JSON

Create, check and repair e-invoices

Create, validate, extract, compare — right inside your workflow or your AI agent.

Create invoices
Turn structured data into a valid e-invoice — a ZUGFeRD or Factur-X PDF, or plain XRechnung XML with a routing ID for public buyers. Several line items, all VAT rates, plus credit notes and corrections. Stateless, one call at a time.
EN 16931 in CII and UBL
We check against EN 16931 in both syntaxes and against the national flavours built on it: ZUGFeRD, Factur-X and XRechnung.
Peppol BIS rule checks
The rule catalogue includes Peppol BIS checks, reported with their own rule IDs (PEPPOL-EN16931-R…). We are not a certified Peppol validator and not an Access Point — we check invoices, we do not send them.
Concrete fix suggestions
Every finding comes with a concrete fix, an XPath and an XML example.
Repair an invoice
Upload a broken invoice — we fix what can be fixed safely and only ask for what we cannot guess. You get a valid invoice back. Part of the Automate plan.
MCP-native for AI agents
Runs with any MCP-capable AI agent — no extra software.
Structured JSON
Every answer comes as JSON — no free text to parse, straight into your workflow.
GDPR compliant · hosted in the EU
Servers in Germany (Nuremberg), inside the EU. We process invoice data in memory only and drop it right after the check. Nothing is stored.

Four tools, one job each

Validate, extract, compare and create — every tool for one purpose, always structured JSON.

validate_invoice TOOL

Validates PDFs and XML files against EN 16931, in CII and UBL. Returns errors, warnings and metadata.

PDF · XML EN 16931 CII · UBL Fix suggestions
extract_xml TOOL

Pulls the embedded XML out of a ZUGFeRD or Factur-X PDF, with format and profile detection.

ZUGFeRD PDF Factur-X XML output
check_consistency TOOL

Checks whether the visible PDF data (number, date, amount) matches the embedded XML. Catches mismatches.

Tamper check PDF vs. XML ±0.01 EUR
create_invoice TOOL

Builds a valid ZUGFeRD or Factur-X PDF, or XRechnung XML, from structured data — several line items, all VAT categories, routing ID for public buyers.

PDF · XML Several line items Credit notes Stateless
Read the full API reference

A validated invoice in 4 steps

From sign-up to first result in under 5 minutes.

1
Get an API key
Sign up for free on your account page — no credit card, no setup.
2
Install the MCP client
Set up npx zugferd-mcp-client once in your MCP client (Cursor, Windsurf and the like).
3
Hand over the invoice
Pass the PDF or XML as base64 — the agent calls the API and gets structured results back at once.
4
Fix the errors
Every finding carries an XPath and a concrete fix — no digging through the spec.

Works with your stack

Works with every MCP-capable client and speaks plain REST for everything else.

AI agents
MCP-native, plug and play
Cursor / Windsurf
MCP client integration
Your own service
REST API over HTTP/JSON
npm / npx
zugferd-mcp-client

Prefer the command line? Validate with curl and in CI — see the docs →

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 invoice / week created
  • All 4 MCP tools
  • 63 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.

Get started
  • Unlimited validations
  • 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 →

¹ 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
Batch check (several invoices at once)
Repair invoice (automatic fixes)
validate_invoice
extract_xml
check_consistency
create_invoice
White label (no footer)
63 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 created per week (with a small footer), no credit card. Automate costs 19 € per month billed yearly (22.80 € per month billed monthly) for 500 validations and 20 white-label invoices per week, 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. Both weekly quotas reset every Sunday at midnight. To try validation without signing up, a public demo key gives 1 request per day and IP. See the plans.
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 your first invoice

Get an API key, be live in 5 minutes — free, no setup.

Check an invoice online Read the API documentation