Find out why your e-invoice is rejected

Drop a Factur-X PDF or a UBL/CII XML and see which core EN 16931 rules fail, explained in plain English with the field that caused it. Free, in your browser.

Factur-X ZUGFeRD XRechnung UBL 2.1 UN/CEFACT CII

Real output for the bundled broken sample, generated at build time. Nothing is uploaded: validation runs client-side.

Free validator

Check an invoice in seconds

Drop a Factur-X / ZUGFeRD PDF or an XML invoice (UBL or CII, incl. XRechnung). We extract the embedded XML if needed, detect the syntax and check the core EN 16931 business rules, every failure explained in plain English with its BT-field reference. Everything runs in your browser; your invoice never leaves your machine.

Drop an invoice here or click to choose a file

.xml (UBL, CII, XRechnung) or .pdf (Factur-X / ZUGFeRD), validated locally in your browser, nothing is uploaded.

No invoice at hand? Try a sample:

API preview

The same engine, from your code coming soon

Validate, generate and parse Factur-X, XRechnung, UBL and CII without touching XML or schematron yourself. These endpoints are in development, the examples below are the planned contract. Join the waitlist for early access and launch pricing.

POST /v1/validate coming soon

Validate a Factur-X PDF or UBL/CII XML against the full EN 16931 rule set (plus XRechnung CIUS rules). Returns every failed rule with its BT reference.

Request
curl https://api.einvoicekit.com/v1/validate \
  -H "Authorization: Bearer eik_live_..." \
  -F "file=@invoice.pdf"
Response
{
  "valid": false,
  "syntax": "cii",
  "profile": "urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:en16931",
  "errors": [
    {
      "rule": "BR-CO-15",
      "bt": "BT-112",
      "message": "Total with VAT (115.00) should be 120.00",
      "path": "//ram:GrandTotalAmount"
    }
  ],
  "warnings": []
}
POST /v1/generate coming soon

Build a compliant e-invoice from plain JSON. Output as UBL, CII (XRechnung) or a Factur-X PDF/A-3 with the XML embedded.

Request
curl https://api.einvoicekit.com/v1/generate \
  -H "Authorization: Bearer eik_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "format": "factur-x",
    "profile": "en16931",
    "invoice": {
      "number": "INV-2026-001",
      "issueDate": "2026-07-15",
      "currency": "EUR",
      "seller": { "name": "Acme SARL", "vatId": "FR40123456824",
                  "address": { "country": "FR" } },
      "buyer":  { "name": "Beispiel GmbH",
                  "address": { "country": "DE" } },
      "lines": [
        { "name": "Consulting", "quantity": 2,
          "unitPrice": 50.00, "vatRate": 20 }
      ]
    }
  }'
Response
{
  "id": "gen_9f2c1a",
  "format": "factur-x",
  "valid": true,
  "download": {
    "pdf": "https://api.einvoicekit.com/v1/files/gen_9f2c1a.pdf",
    "xml": "https://api.einvoicekit.com/v1/files/gen_9f2c1a.xml"
  }
}
POST /v1/extract coming soon

Parse any e-invoice into normalized JSON, the same shape regardless of whether the input was UBL, CII or a Factur-X PDF.

Request
curl https://api.einvoicekit.com/v1/extract \
  -H "Authorization: Bearer eik_live_..." \
  -F "file=@invoice.xml"
Response
{
  "syntax": "ubl",
  "invoice": {
    "number": "INV-2026-001",
    "issueDate": "2026-07-15",
    "currency": "EUR",
    "seller": { "name": "Acme SARL", "vatId": "FR40123456824" },
    "buyer":  { "name": "Beispiel GmbH" },
    "totals": { "net": 100.00, "vat": 20.00, "due": 120.00 },
    "lines": [
      { "name": "Consulting", "quantity": 2, "net": 100.00 }
    ]
  }
}

The API is next

The same engine behind this validator, as endpoints you can call: validate, generate and parse Factur-X, XRechnung, UBL and CII from your own code. Tell us what you are building and you shape what ships first.

Join the API waitlist

One email when the API opens, with launch pricing. No newsletter.