E-invoice validation API

Validate XRechnung, ZUGFeRD / Factur-X and Peppol BIS 3.0 invoices from your code or CI pipeline with the same official rules as our online validator. One POST, a JSON answer, no API key.

Request

POST https://invoiceer.io/api/validate as multipart/form-data with the invoice in the field file. It accepts UBL or CII XML, or a ZUGFeRD / Factur-X PDF with embedded XML (up to 10 MB).

curl -F "[email protected]" https://invoiceer.io/api/validate
import httpx

with open("invoice.xml", "rb") as f:
    r = httpx.post("https://invoiceer.io/api/validate", files={"file": f}, timeout=60)
result = r.json()
if not result["valid"]:
    for e in result["errors"]:
        print(e["code"], e["text"])

Response

A valid invoice:

{"valid": true, "format": "Peppol BIS Billing 3.0 (UBL Invoice)", "source": "xml", "errors": [], "warnings": []}

An invalid one (amount due doesn't match the totals):

{
  "valid": false,
  "format": "Peppol BIS Billing 3.0 (UBL Invoice)",
  "source": "xml",
  "errors": [
    {
      "level": "error",
      "code": "BR-CO-16",
      "text": "[BR-CO-16]-Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).",
      "location": "/Invoice[1]/LegalMonetaryTotal[1]"
    }
  ],
  "warnings": []
}
FieldMeaning
validtrue if no errors (warnings allowed).
formatDetected format, e.g. XRechnung (UBL or CII), Peppol BIS 3.0, EN 16931 CII / ZUGFeRD. null if not recognised.
sourcexml or pdf (XML extracted from a ZUGFeRD / Factur-X PDF).
errors, warningsEach with level, rule code (e.g. BR-CO-16, BR-DE-15, PEPPOL-EN16931-R001, or an XML schema error), text and location (XPath or line and column).

Every business rule has a plain-language explanation at https://invoiceer.io/rules/<code>, for example /rules/BR-CO-16. Link your users there.

Errors in the request itself (empty file, not XML, a PDF without embedded XML, XML with a DOCTYPE) return HTTP 400 with {"error": "..."}.

Rules used

  • XRechnung: the official KoSIT validator with the XRechnung configuration (UBL and CII).
  • Peppol BIS Billing 3.0: OpenPeppol schematron, including EN 16931.
  • EN 16931 (CEN) for UBL and CII, which covers ZUGFeRD / Factur-X EN 16931 profiles.

Limits and privacy

  • Free, no sign-up. Fair use: 40 checks per hour per IP address. Above that you get HTTP 429.
  • Files are processed in memory and discarded immediately. We don't store invoices or results.
  • Provided as is, without guarantees. For production volumes or an SLA, email [email protected].

Creating e-invoices from Stripe

If you bill with Stripe, you don't need to generate and validate e-invoices yourself: Invoiceer for Stripe turns every Stripe invoice into a validated XRechnung, ZUGFeRD or Peppol invoice automatically.