Skip to main content

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.

Free and Public

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:

  1. XML Embedding — Is a ZUGFeRD/Factur-X XML file embedded in the PDF?
  2. XML Extraction — Can the embedded XML be successfully extracted and read?
  3. KOSiT Validation — Does the XML pass EN 16931 validation via the official KOSiT validator?
  4. 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
info

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, or U
  • Document type — Must be INVOICE
  • Document file name — Must be factur-x.xml or zugferd-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 IDWhat It Means
xml_embeddedAn XML file was found embedded in the PDF
xml_extractableThe embedded XML could be successfully extracted and read
xml_validatedThe XML passed KOSiT validation against EN 16931
xmp_validThe PDF/A-3 XMP metadata is correct for ZUGFeRD/Factur-X
warning

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 with code and text)
  • validation_warnings — Array of warning objects
  • validation_infos — Array of informational messages

XMP Details

The xmp_details object contains:

  • valid — Whether all XMP checks passed
  • part — PDF/A part number (should be 3)
  • conformance — PDF/A conformance level (A, B, or U)
  • document_type — Should be INVOICE
  • document_file_name — The declared XML filename
  • version — The ZUGFeRD/Factur-X version
  • conformance_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 (.pdf extension 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

  1. Validate after generation — After creating an invoice in docs101 or any other tool, upload it to the validation tool to confirm compliance

  2. Check incoming invoices — Before processing a supplier invoice, validate it to ensure the embedded data matches the visual PDF

  3. 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

  4. Check XMP metadata separately — Even if the XML validates, XMP metadata issues can cause problems with some processing software. Ensure all four checks pass

  5. 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.