Validate an XRechnung, ZUGFeRD, Factur-X or UBL e-invoice
Validate an EU e-invoice: send XRechnung, ZUGFeRD / Factur-X (XML or the PDF that embeds it), Peppol or other EN 16931 XML as text, as a file in a POST body or by URL. Returns valid or not and every broken business rule with its number (BR-CO-15, BR-DE-15…), the field, a plain message and the fix. Checks a subset of the EN 16931 and XRechnung 3.0 rules: sums, VAT, mandatory fields. Use before sending an e-invoice or when one is rejected.
Inputs
| Name | Type | Description |
|---|---|---|
url | string | Absolute public http(s) URL of the e-invoice: an XML file or a ZUGFeRD / Factur-X PDF (or send `xml`, or the file in a POST body) |
xml | string | The e-invoice XML as text (CII or UBL), up to 5 MB in a POST body |
profile | string | auto (default: the German XRechnung rules run when the file names XRechnung), xrechnung or en16931. One of: auto, xrechnung, en16931. |
Request
Over HTTP, with a card key from /credits:
curl -H "Authorization: Bearer adt_…" "https://agent-data-tools.revmesh2074.workers.dev/einvoice/validate?url=https%3A%2F%2Fraw.githubusercontent.com%2Fitplr-kosit%2Fxrechnung-testsuite%2Fmaster%2Fsrc%2Ftest%2Fbusiness-cases%2Fstandard%2F01.01a-INVOICE_uncefact.xml"
Or one of your 3 free calls, no key:
curl "https://agent-data-tools.revmesh2074.workers.dev/einvoice/validate?url=https%3A%2F%2Fraw.githubusercontent.com%2Fitplr-kosit%2Fxrechnung-testsuite%2Fmaster%2Fsrc%2Ftest%2Fbusiness-cases%2Fstandard%2F01.01a-INVOICE_uncefact.xml&trial=1"
Without a key, the same URL answers 402 Payment Required with x402 and MPP terms, so an agent with a wallet pays per call in USDC (Base, Polygon, Arbitrum or Solana over x402; Base or Tempo over MPP) and retries.
Example result
{
"url": "https://raw.githubusercontent.com/itplr-kosit/xrechnung-testsuite/master/src/test/business-cases/standard/01.01a-INVOICE_uncefact.xml",
"valid": true,
"syntax": "CII",
"standard": "XRechnung 3.0",
"profile": "xrechnung",
"errors": [],
"warnings": [],
"rulesChecked": 103,
"invoice": {
"number": "123456XX",
"issueDate": "2016-04-04",
"currency": "EUR",
"seller": "[Seller name]",
"buyer": "[Buyer name]",
"lines": 2,
"totals": {
"lineNet": 314.86,
"taxBasis": 314.86,
"tax": 22.04,
"grand": 336.9,
"payable": 336.9
}
},
"coverage": "A subset of EN 16931 and XRechnung 3.0 business rules for invoices with lines, VAT and bank-transfer payment. Not checked: the XML schema itself, code lists beyond the common codes, allowances and charges, attachments, card and direct-debit payments. A file that passes here can still fail the official KoSIT validator."
}
From an AI agent (MCP)
Add the MCP server to Claude, Cursor or any MCP client. This tool is einvoice_validate, and the first 25 successful calls are free:
https://agent-data-tools.revmesh2074.workers.dev/mcp