Factur-X Explained: France's Hybrid E-Invoice Format (2026)
Short answer: Factur-X is a PDF invoice with a structured XML file embedded inside. People read the PDF. Software, and the French tax authority’s systems, read the XML. It’s one of the three base formats of France’s e-invoicing reform, alongside UBL and CII, and it’s technically identical to Germany’s ZUGFeRD. The current version is Factur-X 1.09.2 (August 2026). For the French reform, use the EN 16931 profile, or EXTENDED-CTC-FR if you need extra French fields, and send the file through your Plateforme Agréée, not by email.
This guide is for small French businesses, foreign sellers with French customers, and developers asked to “generate Factur-X”. For the reform’s dates, platforms and penalties, see E-invoicing in France. This page goes deeper on the format itself.
Factur-X at a glance
Section titled “Factur-X at a glance”| What it is | A hybrid e-invoice: a PDF/A-3 file with a CII XML file embedded inside |
| Maintained by | FNFE-MPE (Forum National de la Facture Électronique et des Marchés Publics Électroniques), jointly with Germany’s FeRD |
| Current version | Factur-X 1.09.2, published 4 August 2026 (= ZUGFeRD 2.5.2) |
| XML syntax | UN/CEFACT Cross Industry Invoice (CII), D22B schema, backward compatible with D16B |
| Built on | The European standard EN 16931 |
| Profiles | MINIMUM, BASIC WL, BASIC, EN 16931, EXTENDED. France adds the EXTENDED-CTC-FR reference profile |
| Role in the French reform | One of three base formats (with UBL and CII) that every Plateforme Agréée must accept |
| Also used | On Chorus Pro for French public sector invoices since 2018, and in Germany as ZUGFeRD |
| Cost | Free. The specification is a free download from FNFE-MPE |
Do you need Factur-X? Find your situation
Section titled “Do you need Factur-X? Find your situation”| Your situation | What to do |
|---|---|
| French business invoicing French businesses, subject to the issuance obligation (from 1 September 2026 or 2027) | Issue e-invoices through your Plateforme Agréée. Factur-X is a good choice if your customers like a readable PDF. UBL or CII also work |
| Your platform or software already creates the e-invoice for you | You may never handle the Factur-X file directly. Check that it uses the EN 16931 profile or EXTENDED-CTC-FR |
| Foreign business with no French establishment, invoicing French businesses | You’re outside the French e-invoicing obligation. Your customer may still ask for Factur-X. See foreign companies |
| Invoicing German businesses | Factur-X in a qualifying profile is a valid German e-invoice. It’s the same file as ZUGFeRD |
| Invoicing French public bodies | Send through Chorus Pro, which has accepted Factur-X since 2018 |
| Selling only to consumers | No e-invoice. Your sales may need e-reporting instead (see France: e-reporting) |
How a Factur-X file works
Section titled “How a Factur-X file works”A Factur-X invoice is one PDF file containing two things:
- A PDF/A-3 document that looks like a normal invoice. PDF/A is the archive version of PDF, and version 3 allows file attachments.
- An XML file named
factur-x.xml, attached inside the PDF, with all the invoice data in structured form.
The PDF’s XMP metadata declares the profile, so receiving software knows what to expect:
<rdf:Description rdf:about="" xmlns:fx="urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"> <fx:DocumentType>INVOICE</fx:DocumentType> <fx:DocumentFileName>factur-x.xml</fx:DocumentFileName> <fx:Version>1.0</fx:Version> <!-- version of this metadata schema, not of Factur-X --> <fx:ConformanceLevel>EN 16931</fx:ConformanceLevel> <!-- must match BT-24 in the XML --></rdf:Description>The XML is what counts. Under the French reform, the platforms read the structured data, check it against the business rules, route the invoice and pass the required data to the tax authority. The PDF is there for people.
What the XML looks like
Section titled “What the XML looks like”Here’s a shortened excerpt for the wholesale order in the France guide: Atelier Lumière, a Lyon candle maker, sells 200 candles at €12.00 to a Paris concept store. The excerpt shows the two parties. The SIREN and VAT numbers are made up.
<ram:SellerTradeParty> <ram:Name>Atelier Lumière SAS</ram:Name> <!-- BT-27: seller name --> <ram:SpecifiedLegalOrganization> <ram:ID schemeID="0002">123456782</ram:ID> <!-- BT-30: seller SIREN (0002 = SIRENE) --> </ram:SpecifiedLegalOrganization> <ram:PostalTradeAddress> <ram:PostcodeCode>69002</ram:PostcodeCode> <ram:CityName>Lyon</ram:CityName> <ram:CountryID>FR</ram:CountryID> <!-- BT-40 --> </ram:PostalTradeAddress> <ram:SpecifiedTaxRegistration> <ram:ID schemeID="VA">FR11123456782</ram:ID> <!-- BT-31: seller VAT number --> </ram:SpecifiedTaxRegistration></ram:SellerTradeParty><ram:BuyerTradeParty> <ram:Name>Maison Concept SARL</ram:Name> <!-- BT-44: buyer name --> <ram:SpecifiedLegalOrganization> <ram:ID schemeID="0002">987654324</ram:ID> <!-- BT-47: buyer SIREN, a new mandatory mention --> </ram:SpecifiedLegalOrganization> <!-- ...buyer address and VAT number... --></ram:BuyerTradeParty>And the totals, which must add up exactly:
<ram:SpecifiedTradeSettlementHeaderMonetarySummation> <ram:LineTotalAmount>2400.00</ram:LineTotalAmount> <!-- BT-106 --> <ram:TaxBasisTotalAmount>2400.00</ram:TaxBasisTotalAmount> <!-- BT-109: total excl. VAT --> <ram:TaxTotalAmount currencyID="EUR">480.00</ram:TaxTotalAmount> <!-- BT-110: TVA at 20% --> <ram:GrandTotalAmount>2880.00</ram:GrandTotalAmount> <!-- BT-112: total incl. VAT --> <ram:DuePayableAmount>2880.00</ram:DuePayableAmount> <!-- BT-115: amount due --></ram:SpecifiedTradeSettlementHeaderMonetarySummation>The reform’s new mandatory mentions, such as the buyer’s SIREN, the delivery address and the category of the transaction, must be in this structured data. Printing them on the PDF alone isn’t enough.
Factur-X versions
Section titled “Factur-X versions”| Version | Released | What changed |
|---|---|---|
| 1.0 | 31 December 2017 | First version, built on the new EN 16931 standard. Taken up by Chorus Pro in 2018 |
| 1.0 release matching ZUGFeRD 2.1 | 24 March 2020 | Factur-X and ZUGFeRD become one identical joint standard |
| 1.07 | 18 September 2024 | Joint release with ZUGFeRD 2.3 |
| 1.08 | 4 December 2025, in use from 15 January 2026 | Moved to CII D22B. Sub-lines for kits and bundles. New EXTENDED elements for the French B2B reform. Supports reference profiles such as EXTENDED-CTC-FR |
| 1.09 | 10 June 2026, in use from 1 July 2026 | Updated EN 16931 code lists. More EXTENDED elements from the revised EN 16931-1, with adjustments for French B2B exchanges |
| 1.09.2 | 4 August 2026 | Corrigendum to 1.09, fixing inconsistencies in the new EXTENDED elements. Current version |
Sources: FNFE-MPE’s Factur-X page, the joint 1.08 press release and FeRD’s 1.09.2 announcement.
FeRD has said the next joint release is expected in autumn 2026, mainly adding gross-price invoices. We couldn’t find it published as of 26 October 2026. Each version is backward compatible, so a valid 1.08 file doesn’t become invalid when 1.09 comes out.
Factur-X profiles and the French reform
Section titled “Factur-X profiles and the French reform”A profile sets how much data the XML carries. The French rules are set by the AFNOR standard XP Z12-012, referenced in the tax code, which defines the formats and profiles usable under the reform.
| Profile | What it carries | French reform | German B2B |
|---|---|---|---|
| MINIMUM | Parties and totals only | Not usable: not enough structured data | No |
| BASIC WL | Header and totals, no lines | Reported as tolerated during the start-up phase only, until 1 September 2027. Check with your platform | No |
| BASIC | Simple lines, a subset of EN 16931 | Not used as a separate profile. A BASIC file is also valid EN 16931, so declare it as EN 16931 | Yes |
| EN 16931 | Everything in the European standard | Yes, the default, with the French business rules (BR-FR) applied | Yes |
| EXTENDED | EN 16931 plus many extra fields | Yes, but platforms validate it against EXTENDED-CTC-FR | Yes |
| EXTENDED-CTC-FR | A subset of EXTENDED with the extra French data fields | Yes, for cases the base standard can’t handle | n/a |
The French status of each profile comes from published summaries of XP Z12-012, which is revised regularly. The France guide notes the MINIMUM restriction too. The details of BASIC WL in particular are still to be confirmed in updated texts, so ask your platform which profiles it accepts.
EN 16931 with French rules
Section titled “EN 16931 with French rules”In the reform, the EN 16931 profile works as a French CIUS: the European standard with extra French business rules, coded BR-FR, on top. They cover the reform’s new mandatory mentions, such as the buyer’s SIREN, the delivery address and the transaction category, plus checks on identifiers, decimals and code lists. The same rules apply whether you send Factur-X, UBL or CII. FNFE-MPE publishes them as schematron files in its France_RFE repository.
EXTENDED-CTC-FR
Section titled “EXTENDED-CTC-FR”EXTENDED-CTC-FR is the French extension, a subset of Factur-X’s EXTENDED profile. It adds French data fields, coded EXT-FR-FE-..., for cases the European standard doesn’t cover well: extra third parties (a payer, agents, a separate invoicer), invoicing on behalf of others, factoring and subcontracting. It also relaxes a few rules, for example allowing a small rounding tolerance on each line. A typical small business selling goods or services doesn’t need it.
Its profile ID (BT-24) is urn:cen.eu:en16931:2017#conformant#urn.cpro.gouv.fr:1p0:extended-ctc-fr. The plain EN 16931 profile is urn:cen.eu:en16931:2017.
Factur-X vs ZUGFeRD vs XRechnung
Section titled “Factur-X vs ZUGFeRD vs XRechnung”| Factur-X | ZUGFeRD | XRechnung | EN 16931 | |
|---|---|---|---|---|
| What it is | Hybrid: PDF/A-3 + CII XML | The same file under its German name | German CIUS, pure XML | The European standard behind all of them |
| Readable without software? | Yes | Yes | No | Not a file format |
| Syntax | CII | CII | UBL or CII | Defines the data. UBL and CII are its syntaxes |
| Maintained by | FNFE-MPE with FeRD | FeRD with FNFE-MPE | KoSIT | CEN |
| Current version | 1.09.2 | 2.5.2 | 3.0.2 | EN 16931-1:2026 |
| French reform | One of three base formats | Same as Factur-X | Not one of France’s formats | The base the French rules build on |
| German B2B | Yes, except MINIMUM and BASIC WL | Yes, except MINIMUM and BASIC WL | Yes | Reference for what counts |
| How it’s sent in France | Through a Plateforme Agréée | Through a Plateforme Agréée | n/a | n/a |
Factur-X generator: how to create one
Section titled “Factur-X generator: how to create one”Most small French businesses never build a Factur-X file themselves. Here are the options, from least to most technical.
1. Your Plateforme Agréée or invoicing software
Section titled “1. Your Plateforme Agréée or invoicing software”Under the reform, your Plateforme Agréée can usually create the e-invoice from what you type into its interface or from your invoicing software’s data. Invoicing tools with the DGFiP’s Solution compatible label are connected to a platform and pass invoices through it. Ask:
- Which format and profile it sends. EN 16931 Factur-X is a sensible default.
- Whether it covers the four new mentions, and where you enter the delivery address and transaction category.
- What happens on rejection, and how you see the status messages that come back.
2. The FNFE-MPE Excel tool
Section titled “2. The FNFE-MPE Excel tool”FNFE-MPE publishes a free Excel workbook, listed on its implementation page, that builds Factur-X files from CSV extracts. It’s useful for testing, or for very low volumes. You still have to send the result through your platform.
3. An invoicing API
Section titled “3. An invoicing API”If you run a SaaS or your own checkout, an e-invoicing API can take invoice data as JSON and return a Factur-X PDF, a UBL or CII file, or send it on to a platform for you. In France, check whether the provider is itself a Plateforme Agréée or works with one, because a file alone doesn’t meet the reform: it has to go through a PA.
4. Open-source libraries
Section titled “4. Open-source libraries”| Library | Language | What it does | Licence |
|---|---|---|---|
| factur-x by Akretion | Python | Turns a regular PDF plus an XML into Factur-X, extracts the XML, checks it against the official XSD and schematron, and can build CII or UBL from a dictionary of EN 16931 terms. Version 7.7, October 2026 | BSD-style |
| Mustang | Java (and command line) | Reads, writes, validates and converts Factur-X and ZUGFeRD. Version 2.26.0 supports Factur-X 1.09.2 | Apache 2.0 |
| horstoeko/zugferd | PHP | Builds and reads Factur-X and ZUGFeRD documents | MIT |
| atgp/factur-x | PHP | Embeds an XML in a PDF/A-3, listed by FNFE-MPE | Open source |
With the Python library, adding the XML to an existing PDF takes two lines:
from facturx import generate_from_file
generate_from_file("invoice-2027-0318.pdf", "factur-x.xml")The command-line tools that come with it, facturx-pdfgen, facturx-pdfextractxml and facturx-xmlcheck, do the same from a shell. You’re still responsible for producing correct XML with the French data, and for validating it.
Factur-X validator: how to check a file
Section titled “Factur-X validator: how to check a file”A Factur-X file can fail in three places: the PDF/A-3 container, the XML schema, or the business rules (EN 16931 and the French BR-FR rules).
| Tool | What it checks | Cost |
|---|---|---|
| FNFE-MPE validator | Factur-X, CII, UBL and CDAR (status messages) files against the reform’s formats and rules | Free, account required |
| Mustang command-line tool | XML schema, EN 16931 and profile rules, plus PDF/A through veraPDF | Free, open source |
factur-x (facturx-xmlcheck) | The XML against the official XSD and schematron | Free, open source |
| veraPDF | Whether the PDF is valid PDF/A-3 | Free, open source |
| France_RFE schematrons | The French BR-FR business rules, for developers building their own pipeline | Free |
FNFE-MPE is the body that co-writes Factur-X, which makes its validator the closest thing to an official reference for French files. Your platform will also validate every invoice and reject the ones that fail. Testing first saves rejected invoices and late payments.
Common errors
- The profile in the PDF metadata doesn’t match BT-24 in the XML.
- The buyer’s SIREN is missing from the structured data (BT-47).
- The totals don’t add up, often from rounding each line in the PDF but not in the XML.
- MINIMUM used for a reform invoice. It doesn’t carry enough data.
- The PDF isn’t real PDF/A-3, for example because fonts aren’t embedded or the colour profile is missing.
Worked example: Atelier Lumière’s first Factur-X
Section titled “Worked example: Atelier Lumière’s first Factur-X”Atelier Lumière, the Lyon candle maker from the France guide, is an SME, so it must issue e-invoices from 1 September 2027. A Paris concept store orders 200 candles at €12.00:
- Net: 200 × €12.00 = €2,400.00
- TVA at 20%: €480.00
- Total: €2,880.00
Its invoicing software carries the Solution compatible label and is connected to a Plateforme Agréée. When it issues the invoice:
- The software creates a Factur-X file in the EN 16931 profile, with both SIREN numbers, the category “delivery of goods” and the shop’s delivery address in the XML.
- It sends the file to Atelier Lumière’s platform, which validates it against EN 16931 and the BR-FR rules.
- The platform looks up the concept store in the national directory and routes the invoice to the store’s own platform.
- The platform passes the required invoice data to the tax authority.
The concept store’s owner opens the PDF and sees a normal invoice. Their accounting software reads the XML.
How GoodVat helps
Section titled “How GoodVat helps”A Factur-X file passes the platform’s checks only if the VAT data is right: the correct rate, the right VAT category, the reverse charge where it applies and the right identifiers. GoodVat Global Tax Compliance takes care of that side:
- Maps your obligations: which e-invoicing, e-reporting and VAT rules apply to you in France, Germany and every other country you invoice into
- Registers you for French VAT, OSS or IOSS where you need it
- Calculates the right VAT at checkout and sends your customers compliant invoices
- Files your VAT returns in France, the rest of the EU, the UK and US states
GoodVat is not a Plateforme Agréée, a Peppol access point or a format validator. In France, your e-invoices still go through a registered platform.
What is Factur-X?
Section titled “What is Factur-X?”Factur-X is a hybrid e-invoice format: a PDF/A-3 file that people can read, with a structured XML file in the UN/CEFACT CII syntax embedded inside. It follows the European standard EN 16931 and is maintained by France’s FNFE-MPE together with Germany’s FeRD. It is technically identical to Germany’s ZUGFeRD.
Is Factur-X mandatory in France?
Section titled “Is Factur-X mandatory in France?”No single format is mandatory. France’s e-invoicing reform accepts three base formats: UBL, UN/CEFACT CII and Factur-X, and every approved platform (Plateforme Agréée) must handle all three. Factur-X is popular with small businesses because the customer can still read the PDF, but you can use any of the three.
What is the latest version of Factur-X?
Section titled “What is the latest version of Factur-X?”Factur-X 1.09.2, published by FNFE-MPE and FeRD on 4 August 2026. It is identical to ZUGFeRD 2.5.2 and corrects version 1.09 of 10 June 2026, which added new EXTENDED elements needed for the French reform. Version 1.08 came out on 4 December 2025.
Which Factur-X profile should I use for the French reform?
Section titled “Which Factur-X profile should I use for the French reform?”Use the EN 16931 profile unless your platform or customer asks for something else. The French standard XP Z12-012 also defines EXTENDED-CTC-FR, a subset of the EXTENDED profile with extra French fields. MINIMUM can’t be used for the reform. Check your platform’s rules for BASIC WL, which is reported to be tolerated only during the start-up phase.
What is the difference between Factur-X and ZUGFeRD?
Section titled “What is the difference between Factur-X and ZUGFeRD?”There is no technical difference. Since 2020 they have been one joint Franco-German standard released under two names, so Factur-X 1.09.2 and ZUGFeRD 2.5.2 are the same specification. The national rules around the file differ: in France the invoice must go through an approved platform and meet French business rules, while in Germany it can be sent by email.
Can I send a Factur-X invoice by email in France?
Section titled “Can I send a Factur-X invoice by email in France?”Not as your compliant invoice, once you are subject to the issuance obligation. From 1 September 2026 for large and mid-sized companies, and 1 September 2027 for small businesses, invoices to French business customers must go through a Plateforme Agréée. Emailing the same Factur-X file directly does not meet the rule.
How do I validate a Factur-X invoice?
Section titled “How do I validate a Factur-X invoice?”FNFE-MPE runs a free online validator at services.fnfe-mpe.org that checks Factur-X, CII and UBL files against the French reform rules, after you create an account. Developers can also use the open-source Mustang command-line tool or the factur-x Python library, plus veraPDF to check that the PDF is valid PDF/A-3.
Is there a free Factur-X generator?
Section titled “Is there a free Factur-X generator?”Yes, a few. FNFE-MPE publishes a free Excel tool that builds Factur-X files from CSV data, and open-source libraries such as factur-x for Python and Mustang for Java can turn a regular PDF plus XML into a Factur-X file. For day-to-day invoicing, most businesses let their invoicing software or Plateforme Agréée generate it.
Related guides
Section titled “Related guides”- E-invoicing in Europe: every EU mandate, the main formats and the ViDA timeline
- E-invoicing in France: the September 2026 and 2027 dates, e-reporting and penalties
- Plateformes Agréées compared: how to choose the platform that sends your Factur-X invoices
- French e-invoicing for foreign companies: what applies if you’re not established in France
- ZUGFeRD explained: the German name for the same format, and the German profile rules
- XRechnung explained: Germany’s pure-XML format
- EN 16931 explained: the European standard behind Factur-X, UBL and CII