PEPPOL Validator XML Viewer PEPPOL lookup PEPPOL Radar Error codes EN 16931 Mapper
Free tool · No registration

PEPPOL Validator
BIS 3.0 & SK CIUS

Upload an XML invoice and check the rules before sending. We only show a result once live API validation has actually run. If the API is unavailable, you will not get a made-up "green pass".

SK CIUS 2025 EN 16931 PEPPOL BIS 3.0 UBL 2.1 Batch upload Live API result

What the validator checks

This tool is built for server-side validation of XML documents. We only show a result once the Slovak e-Invoicing Centre validation gateway responds; if it is down, you will not get a false confirmation.

UBL 2.1invoice structure, mandatory UBL elements and basic types
EN16931business rules, amounts, currencies, parties and tax data
PEPPOLBIS 3.0 profile, identifiers and sender context
SK CIUSSlovak tax ID, identifier schemes, IBAN and local recommendations

Safe use

Use the public validator for test or anonymized XML. Production documents and sensitive data belong in workspace/API mode with an audit trail, retention policy and higher limits.

Recommended flow: validate XML → remediate errors → re-check → send workflow. For PDFs or scans, a mandatory human review step remains before sending.
Drag XML files here
or click to choose files
XML · max 1 MB per file · batch upload supported
For developers

REST API — validation without UI

POST /api/validate-file
This upload form uses the same endpoints. The public mode has a daily soft limit; send production documents via a workspace/API key.
# Validate a single XML file via JSON payload
curl -X POST https://efakturacentrum.sk/api/validate-file \
  -H "Content-Type: application/json" \
  -d '{
    "filename": "faktura.xml",
    "content": "<Invoice xmlns=\"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\">...</Invoice>"
  }'

# Batch validate multiple XML files
curl -X POST https://efakturacentrum.sk/api/validate \
  -H "Content-Type: application/json" \
  -d '{
    "files": [
      { "filename": "faktura1.xml", "content": "<Invoice>...</Invoice>" },
      { "filename": "faktura2.xml", "content": "<Invoice>...</Invoice>" }
    ]
  }'
import { readFile } from "node:fs/promises";

const xml = await readFile("faktura.xml", "utf8");
const response = await fetch("https://efakturacentrum.sk/api/validate-file", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ filename: "faktura.xml", content: xml })
});

const result = await response.json();
console.log(result.valid, result.fatal_count, result.issues);
import json
from urllib.request import Request, urlopen

with open("faktura.xml", "r", encoding="utf-8") as f:
    xml = f.read()

payload = json.dumps({"filename": "faktura.xml", "content": xml}).encode("utf-8")
req = Request(
    "https://efakturacentrum.sk/api/validate-file",
    data=payload,
    headers={"Content-Type": "application/json"},
    method="POST",
)

print(json.loads(urlopen(req, timeout=30).read()))
{
  "filename": "faktura.xml",
  "valid": false,
  "fatal_count": 1,
  "warning_count": 0,
  "summary": {
    "invoice_id": "FV-2026-0001",
    "seller_name": "Moja Firma s.r.o.",
    "payable_amount": "1240.00",
    "currency": "EUR"
  },
  "issues": [
    {
      "level": "fatal",
      "layer": "EN16931",
      "rule_id": "BR-CO-10",
      "message": "Súčet riadkov nesedí s LegalMonetaryTotal."
    }
  ]
}

Frequently asked questions about validation

Why does my XML pass XSD but fail EN 16931? What does it mean that an invoice failed validation? What is the difference between an XSD error and a Business Rule? What to send a supplier when an e-invoice fails validation? Looking for a specific BT field? EN 16931 ↔ UBL Mapper →
Validating invoices...
SK CIUS · EN16931 · PEPPOL BIS 3.0