PDF Validation Tool
docs101 provides a free, public PDF validation tool for checking ZUGFeRD and Factur-X invoices. No account or login is required — anyone can upload a PDF and receive a detailed compliance report.
The PDF validation tool is available to everyone. You do not need a docs101 account. Simply upload a ZUGFeRD or Factur-X PDF and get instant results.
Who Is This For?
- Accountants and tax advisors verifying that received invoices are EN 16931-compliant
- Businesses checking invoices from suppliers before processing
- docs101 users confirming their own invoices pass all compliance checks
- Developers integrating ZUGFeRD/Factur-X generation and wanting to verify output
- Anyone who needs to check whether a PDF contains valid ZUGFeRD/Factur-X data
How to Use the Validation Tool
Step 1: Upload a PDF
Send a POST request to /api/validate-invoice with the PDF file attached as a multipart form upload using the field name file.
You can also use the Digital Invoice Check page on the docs101 website, which provides a user-friendly upload interface for the same validation service.
Step 2: Receive the Validation Report
The tool analyzes your PDF and returns a JSON report covering four areas:
- XML Embedding — Is a ZUGFeRD/Factur-X XML file embedded in the PDF?
- XML Extraction — Can the embedded XML be successfully extracted and read?
- KOSiT Validation — Does the XML pass EN 16931 validation via the official KOSiT validator?
- XMP Metadata — Does the PDF contain correct PDF/A-3 metadata for ZUGFeRD/Factur-X?
Step 3: Review the Results
The report contains everything you need to assess compliance. See the sections below for details on interpreting each part.
What the Tool Checks
1. Embedded XML Detection
The tool opens the PDF using pikepdf and searches for embedded XML files in two locations:
- Names tree (
/Root/Names/EmbeddedFiles/Names) — The standard location for embedded files in a PDF - Associated Files (
/Root/AF) — An alternative location used by some PDF generators
If an XML file is found, the check passes. If no XML is found, the PDF is not a valid ZUGFeRD/Factur-X document.
2. XML Extraction
Once an embedded XML file is detected, the tool extracts its content. This verifies that the XML is not corrupted and can be read as valid XML data. Extraction is attempted from both the Names tree and Associated Files paths.
3. KOSiT Validation
The extracted XML is sent to the KOSiT validator (Koordinierungsstelle fuer IT-Standards), the official German validation service for EN 16931 e-invoices. KOSiT checks:
- XML schema conformance — The XML structure matches the expected schema
- Schematron business rules — Business rules defined by EN 16931 are satisfied (e.g., totals add up, required fields present, valid code lists used)
- Error classification — Issues are categorized as errors, warnings, or informational messages
KOSiT is maintained by the German federal government and is the reference validator for EN 16931 in Germany. Passing KOSiT validation means the invoice XML meets the European e-invoicing standard.
4. PDF/A-3 XMP Metadata
ZUGFeRD/Factur-X requires the PDF to be in PDF/A-3 format with specific XMP metadata. The tool checks:
- PDF/A part — Must be
3(PDF/A-3) - PDF/A conformance — Must be
A,B, orU - Document type — Must be
INVOICE - Document file name — Must be
factur-x.xmlorzugferd-invoice.xml - Version — Must be a recognized version (e.g.,
1.0,1.0.07,2p1,2p2,2p3) - Filename match — The filename declared in XMP metadata must match the actual embedded XML filename
All of these conditions must be true for the XMP check to pass.
Understanding the Validation Report
The validation report is returned as JSON with the following structure:
Checks Array
The checks array contains four validation checks, each with an id and a status ("true" or "false"):
| Check ID | What It Means |
|---|---|
xml_embedded | An XML file was found embedded in the PDF |
xml_extractable | The embedded XML could be successfully extracted and read |
xml_validated | The XML passed KOSiT validation against EN 16931 |
xmp_valid | The PDF/A-3 XMP metadata is correct for ZUGFeRD/Factur-X |
If xml_embedded is "false", the PDF does not contain a ZUGFeRD/Factur-X XML at all. The remaining checks will also fail. This means the PDF is a regular invoice PDF, not a digital e-invoice.
Digital Invoice Flag
The top-level digital_invoice field is true only when the PDF contains valid embedded XML that passes KOSiT validation. If either the XML is missing or validation fails, this field is false.
XML Details
The xml_details object contains:
valid— Whether the XML passed KOSiT validation (true/false)validation_errors— Array of error objects from KOSiT (each withcodeandtext)validation_warnings— Array of warning objectsvalidation_infos— Array of informational messages
XMP Details
The xmp_details object contains:
valid— Whether all XMP checks passedpart— PDF/A part number (should be3)conformance— PDF/A conformance level (A,B, orU)document_type— Should beINVOICEdocument_file_name— The declared XML filenameversion— The ZUGFeRD/Factur-X versionconformance_level— The EN 16931 conformance level
Summary
The summary object extracts key facts from the invoice XML for quick review:
- Invoice ID — The invoice number
- Issue date — When the invoice was issued
- Due date — When payment is due
- Seller name and VAT ID — The invoicing company
- Amounts — Net total, tax total, gross total
- Payment terms — Payment conditions text and due date
Interpreting Common Results
All Checks Pass
All four checks show "true" and digital_invoice is true. The PDF is a fully compliant ZUGFeRD/Factur-X invoice that meets EN 16931 requirements.
XML Embedded but Validation Fails
xml_embedded and xml_extractable are "true", but xml_validated is "false". The PDF contains embedded XML, but it has errors. Check the validation_errors array for specific issues — common problems include missing required fields, incorrect VAT calculations, or invalid code list values.
No Embedded XML
xml_embedded is "false". The PDF is a regular document without ZUGFeRD/Factur-X data. It cannot be processed as a digital e-invoice.
XMP Metadata Invalid
xmp_valid is "false" while other checks pass. The invoice XML is valid, but the PDF metadata does not fully conform to ZUGFeRD/Factur-X requirements. Check xmp_details to see which specific metadata field is incorrect (wrong PDF/A part, missing document type, filename mismatch, etc.).
File Requirements
- Format: PDF files only (
.pdfextension required) - Size limit: Maximum 15 MB per file
- Content: The PDF should be a ZUGFeRD or Factur-X invoice with embedded XML
Validation Landing Page
When an invoice is validated through docs101, the results are available on a dedicated landing page at /pdf-validation/<uuid>. This page displays the validation results in a human-readable format, showing all checks, extracted invoice data, and any errors or warnings.
Best Practices
-
Validate after generation — After creating an invoice in docs101 or any other tool, upload it to the validation tool to confirm compliance
-
Check incoming invoices — Before processing a supplier invoice, validate it to ensure the embedded data matches the visual PDF
-
Review errors carefully — KOSiT errors often point to specific fields or rules. Use the error codes and descriptions to identify exactly what needs to be fixed
-
Check XMP metadata separately — Even if the XML validates, XMP metadata issues can cause problems with some processing software. Ensure all four checks pass
-
Use for troubleshooting — If an invoice is rejected by a partner's system, validate it with this tool first to identify the root cause
Technical Details
For more information on the ZUGFeRD/Factur-X standard and how it relates to EN 16931, see Concepts: ZUGFeRD Explained and the ZUGFeRD & Factur-X Guide.
Next: Learn how to manage your invoices with Accounting Exports.