---
title: "Validate an EU e-invoice (EN 16931, XRechnung; UBL, CII, ZUGFeRD/Factur-X PDF)"
method: POST
path: "/einvoice/validate"
tags: ["E-invoice"]
---

# Validate an EU e-invoice (EN 16931, XRechnung; UBL, CII, ZUGFeRD/Factur-X PDF)

`POST /einvoice/validate`

## Request

- Base URL: `https://api.wsystem.dev`
- URL: `https://api.wsystem.dev/einvoice/validate`
- Auth: none declared

Send the invoice as the raw request body (Content-Type application/xml or application/pdf), or JSON {"xml": "..."} / {"base64": "<XML or PDF>"}. Detects UBL Invoice/CreditNote or UN/CEFACT CII (also the XML embedded in a ZUGFeRD/Factur-X PDF), checks the XML schema and the official CEN EN 16931 Schematron rules, plus the KoSIT XRechnung 3.0 rules when the invoice is an XRechnung (or rules=xrechnung). Returns valid true/false and every error with its official rule ID (e.g. BR-CO-10), plain-English message, XPath location, business terms and a fix hint where known. When the seller is Slovak (UBL), it adds Slovak eFaktúra field checks written from the Financial Administration's Peppol BIS transposition v1.12 (0245:DIČ endpoints, addresses, IČO, BT-33, BT-7, VATEX), as warnings with ruleset SK-FS, plus the invoice UUIDv5 cross-check in 'slovakia'. Each error has error_class 'format' (XML Schema) or 'business_rule' (Schematron), with format_error_count and business_rule_error_count; for German invoices (seller or buyer DE, XRechnung or ZUGFeRD) 'germany.de_vat_status' says how the BMF letter of 15 Oct 2026 reads the result (a business-rule error without a format error is in principle still an e-invoice for VAT). For French invoices (seller or buyer FR) 'france' checks the supplier and client SIREN the 2026 reform requires (BT-30 / BT-47 with scheme 0002), suggests the SIREN from an FR VAT number when it is missing, and lists the French items it does not check (hint only; French XP Z12-012 rules not run). Peppol BIS 3 specific rules are not checked yet. Technical check, not tax advice. Free tier shared with other endpoints, then x402 $0.03.

## Query parameters

- `rules` string: auto | en16931 | xrechnung

## Request body

- object
  - `xml` string
  - `base64` string

## Response `200`

Successful Response

- unknown

## Other responses

- `402`: Payment Required: x402 v2 challenge (PAYMENT-REQUIRED header). Returned when the free tier is used up, or for a bare call without input.
- `422`: Validation Error
- `429`: Free tier used up and x402 disabled

---

[API](https://skmtc.dev/wsystem/apis/w-system-eu-business-data-api-vat-vies-eori-company-registry.md) · [All operations](https://skmtc.dev/wsystem/apis/w-system-eu-business-data-api-vat-vies-eori-company-registry/llms.txt) · [OpenAPI document](https://skmtc.dev/wsystem/apis/w-system-eu-business-data-api-vat-vies-eori-company-registry/revisions/ab39146b346f?raw)
