Factur-X in France from 2026
Factur-X is the hybrid PDF + XML format at the heart of the French e-invoicing reform. From 1 September 2026 every business in scope must be able to receive e-invoices through a certified platform (PDP), and large and mid-size companies must issue them. Small businesses and micro-entrepreneurs follow on 1 September 2027. Factur-X is one of the three formats the reform accepts, next to UBL and CII.
The profiles MINIMUM and BASIC WL are allowed for a transition period only; a proper invoice for VAT purposes should be BASIC, EN 16931 or EXTENDED.
Factur-X profiles
| Profile | Content | Use |
|---|---|---|
| MINIMUM | Identifiers, totals, VAT total, no lines | Transition only, not a complete invoice for VAT |
| BASIC WL | Header and VAT breakdown, no lines | Transition only |
| BASIC | Lines with simple structure | Smallest compliant invoice under EN 16931 |
| EN 16931 (COMFORT) | Full EN 16931 semantic model | Recommended default for B2B |
| EXTENDED | EN 16931 plus extra elements (multiple deliveries, extended references) | Industry needs; not all platforms accept it |
The profile is read from GuidelineSpecifiedDocumentContextParameter/ID in the XML, for example urn:cen.eu:en16931:2017. The validator shows which profile it found and applies the rule set that belongs to it.
Chorus Pro and the PDP platforms
Invoices to the French public sector already go through Chorus Pro, which accepts Factur-X and validates the embedded XML on upload. The B2B reform adds the plateformes de dématérialisation partenaires (PDP): every company picks one, and the platform checks the file before it is forwarded to the buyer and to the tax administration. A Factur-X PDF that fails EN 16931 rules is rejected at that point and the supplier has to reissue it. Checking a sample from your invoicing software here before you connect it to a PDP saves that round trip.
Factur-X also carries the French-specific data the reform asks for, such as the SIREN of both parties and the invoice category (goods, services, mixed). The validator reports the values it finds in the parsed JSON so you can compare them with your records.
What the validator checks
- PDF/A-3 attachment named
factur-x.xmlpresent and readable. - Profile identifier (
urn:factur-x.eu:1p0:basicand so on) and specification version. - EN 16931 core rules: mandatory fields, VAT category codes, currency, calculation rules.
- Full schematron rule set through the KoSIT reference validator, which implements the same EN 16931 rules as the FNFE-MPE validator.
Frequently asked questions
How do I see the XML inside a Factur-X PDF?
Drop the PDF here and open the XML tab: the embedded factur-x.xml is extracted and shown. In Adobe Reader it is also visible under the paperclip (attachments) panel; most other PDF viewers hide it.
What is the difference between Factur-X and ZUGFeRD?
None in the file itself: Factur-X 1.0.x and ZUGFeRD 2.x are the same specification, published jointly by FNFE-MPE and FeRD. The difference is the surrounding rules: French platforms and SIREN requirements on one side, German BR-DE rules on the other. The <a href="/zugferd-validator/">ZUGFeRD validator</a> page covers the German side.
Can I validate a UBL or CII invoice without a PDF?
Yes. The French reform also accepts pure UBL and CII XML. Drop the XML file and it is validated with the same EN 16931 rules.
Is this the official FNFE-MPE validator?
No. FNFE-MPE publishes its own validation service. This tool uses the EN 16931 schematron rules and the KoSIT implementation, which cover the same European business rules. French-specific extensions (CTC-FR) are not checked yet.
My Factur-X says MINIMUM profile. Is that a problem?
MINIMUM contains only totals and identifiers, not line items. It is not a complete invoice and will be rejected by many recipients. Ask the sender to switch to BASIC or EN 16931.
Developers: same engine as an API
curl -F file=@invoice.pdf https://einvoicechecker.com/v1/validatecurl -F file=@invoice.xml https://einvoicechecker.com/v1/parsecurl -F file=@invoice.xml "https://einvoicechecker.com/v1/render?lang=en" -o invoice.html