ZUGFeRD / Factur-X

Validate a ZUGFeRD PDF and extract the XML

Two endpoints for Factur-X and ZUGFeRD 2: validation with the EN 16931 CII Schematron, and extraction of the embedded XML. No API key.

Validate

curl -F "file=@factur-x-en16931.pdf" https://checkxrechnung.com/v1/zugferd/validate

The response includes profile (MINIMUM, BASIC WL, BASIC, EN16931, EXTENDED, XRECHNUNG), pdfa.engine and pdfa.label, the embedded filename, and issues. A Schematron hit includes rule_url when that rule has a page under /fehler/, for example BR-08.

PDF/A-3: if veraPDF is executable (VERAPDF_BIN or PATH), pdfa.engine is verapdf. Otherwise it is structure. The structure check reads the PDF header, XMP pdfaid:part and pdfaid:conformance, the embedded XML name, and AFRelationship. It does not certify full PDF/A-3 conformance.

The XML is checked with EN 16931 CII Schematron 1.3.16 from the KoSIT configuration dated 2026-08-31 (Saxon from validator jar 1.6.3). Profile XRECHNUNG also runs the XRechnung CII Schematron. MINIMUM, BASIC WL and BASIC are not full EN 16931. profileNote says so.

Extract

curl -F "file=@factur-x-en16931.pdf" https://checkxrechnung.com/v1/zugferd/extract

xml is the raw embedded document. summary has the invoice number, date, seller, buyer, currency, totals and profile. Here ok means an XML was found.

Limits

Samples: factur-x-en16931.pdf, factur-x-en16931-invalid.pdf, factur-x-minimum.pdf, zugferd-xrechnung.pdf. Generated here. Synthetic. Not third-party sample files.

FAQ

What does validate check?

PDF/A-3 basics, the embedded invoice, the profile, and the EN 16931 CII Schematron. XRECHNUNG also runs the XRechnung CII Schematron.

Is this veraPDF?

Only when veraPDF is installed. Otherwise a labelled structure check, not a full PDF/A-3 report.

Which profiles?

MINIMUM, BASIC WL, BASIC, EN16931, EXTENDED, XRECHNUNG.

Same limits?

Yes. 50 per IP per UTC day, 10 per minute, one shared counter. PDFs up to 10 MB.

Is the file stored?

No. persisted is false. Technical events do not contain the XML.

API docs · Sample files · Error codes · openapi.json · ZUGFeRD in the browser