All formats
Factur-X / ZUGFeRD
PDF/A-3

Validate a Factur-X or ZUGFeRD hybrid PDF via API

A Factur-X invoice is a PDF/A-3 carrying its XML as an attachment. ZUGFeRD is the same document under its German name — same container, same syntax, same profiles. Factlint checks both layers: the PDF as an archivable document, and the XML as an invoice.

What it actually is

One file, two readings. A human opens the PDF and sees an invoice; software reads the XML attachment and extracts the data. The format requires both to say the same thing, and that is exactly what a check verifies: a valid PDF carrying a valid XML can still be an invalid invoice if the attachment is not declared as one.

The three layers checked

  1. 1The container — PDF/A-3 conformance, embedded fonts, output intent. Without these the document is not archivable, whatever it contains.
  2. 2The agreement between the two — the attachment’s declared relationship, and the profile announced in the XMP metadata against the one the XML actually applies.
  3. 3The invoice itself — the XML attachment then goes through the same rules as any CII submitted on its own.

The profiles

MINIMUM and BASIC WL do not carry enough data to be invoices under the standard: the French floor rejects them for issuance. Accepted profiles run from BASIC to EXTENDED, and the French mandate adds EXTENDED-CTC-FR.

What Factlint judges it against

The sealed floors that accept this format today. Every verdict names the one that issued it, and stays replayable.

  • fr-2026-08

    EN 16931 CIUS France + BR-FR-CTC (FNFE)

The codes that apply

6 documented codes apply to this format, all listed below.

See the codes

Try it

The free validator accepts this format without an account. Via API, the call is one line:

curl -X POST https://api.factlint.com/v1/validate \
  -F 'file=@facture.pdf' \
  -F 'jurisdiction=FR' \
  -F 'ruleset=latest' \
  -F 'pinned=true' \
  -H 'Accept-Language: fr'
Open the validator