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
- 10 MB. Above that: 413.
- 50 checks per IP per UTC day, 10 per minute, shared with
POST /v1/validate. Then 429 andRetry-After. - An empty file is rejected.
- ZUGFeRD 1.0 (
CrossIndustryDocument) is recognised and not passed by this CII Schematron.
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