Validate an XRechnung, ZUGFeRD, Factur-X or UBL e-invoice

$0.01 per call · failed calls are never charged · no account needed: a card key or USDC

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.

Run it free (3 free calls) Buy credits by card (from $1) Example result (JSON)

Try it with your own inputs

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…

Uses one of your 3 free calls. Nothing is charged, and a call that fails is not counted.

Inputs

NameTypeDescription
urlstringAbsolute 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)
xmlstringThe e-invoice XML as text (CII or UBL), up to 5 MB in a POST body
profilestringauto (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://tools.funwords.eu/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://tools.funwords.eu/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://tools.funwords.eu/mcp

Related tools