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": []
}
| Field | Meaning |
|---|---|
valid | true if no errors (warnings allowed). |
format | Detected format, e.g. XRechnung (UBL or CII), Peppol BIS 3.0, EN 16931 CII / ZUGFeRD. null if not recognised. |
source | xml or pdf (XML extracted from a ZUGFeRD / Factur-X PDF). |
errors, warnings | Each 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.