What Factur-X is
A PDF for people, an XML for software, in one file. Factur-X is the French name; ZUGFeRD is the German name for the same thing.
Factur-X is published by the FNFE-MPE, the French e-invoicing forum, together with its German counterpart FeRD. A Factur-X file is a PDF/A-3 document with an XML file called factur-x.xml attached. The XML uses the Cross Industry Invoice syntax and follows EN 16931.
The PDF stays readable by anyone, which is why Factur-X is popular with small and mid-sized businesses. The XML lets the buyer’s software book the invoice without typing. In France the XML is also what the platforms read to report the invoice to the tax administration.
The French e-invoicing reform
The French reform moves invoices between French businesses onto approved platforms (plateformes agréées). The platform receives the invoice, delivers it to the buyer’s platform and sends the key data to the tax administration. Transactions that are not domestic B2B, such as sales to consumers or abroad, are reported separately (e-reporting).
- 1 September 2026In forceReceive, and large firms sendEvery business must be able to receive e-invoices. Large and mid-sized businesses must send them.
- TodayNowChoose a platformSmaller businesses pick an approved platform and test their invoice files with it.
- 1 September 2027ComingEveryone sendsSmall and micro businesses must send e-invoices too.
The platforms accept three base formats: Factur-X, UBL and CII. CastPDF creates Factur-X. It is not a platform, and it does not transmit or report invoices: you upload the file to your platform, or your platform fetches it from your system. Check the dates and the profile with your platform, because both have changed before.
One request for a Factur-X invoice
This French invoice names both companies by their SIREN numbers in legal_registration_id with scheme 0002. The built-in template prints the page; pass your own template_id for a French layout of your own.
{
"e_invoice": {
"standard": "factur-x",
"profile": "en16931",
"invoice": {
"number": "F-2026-0412",
"issue_date": "2026-10-11",
"currency": "EUR",
"seller": {
"name": "Atelier Morel SARL",
"vat_id": "FR11904123452",
"legal_registration_id": "904123452",
"legal_registration_scheme": "0002",
"address": { "line1": "12 rue de la Charité", "city": "Lyon", "postal_code": "69002", "country_code": "FR" }
},
"buyer": {
"name": "Brasserie du Port SAS",
"vat_id": "FR13904987658",
"legal_registration_id": "904987658",
"legal_registration_scheme": "0002",
"address": { "line1": "5 quai du Port", "city": "Marseille", "postal_code": "13002", "country_code": "FR" }
},
"payment": { "iban": "FR7630006000011234567890189", "due_date": "2026-11-10" },
"lines": [
{ "name": "Menu boards, set of 4", "quantity": 4, "unit_price": "180.00", "vat": { "category": "S", "rate": 20 } },
{ "name": "Installation", "quantity": 3, "unit_code": "HUR", "unit_price": "55.00", "vat": { "category": "S", "rate": 20 } }
]
}
},
"filename": "F-2026-0412"
}curl https://api.castpdf.com/v1/pdf \
-H "Authorization: Bearer $CASTPDF_API_KEY" \
-H "Content-Type: application/json" \
-d @F-2026-0412.json \
-o F-2026-0412.pdfThe reply is the Factur-X PDF, with the header x-e-invoice: factur-x/en16931. The total here is EUR 1,062.00: EUR 885.00 net plus EUR 177.00 VAT at 20 %.
What French invoices must show
A French invoice already needs the usual details: both parties, the date, a sequential number, each item with its VAT rate and the totals. The reform adds a few more, such as the buyer’s SIREN number and the delivery address when it differs from the billing address.
- Put both SIREN numbers in
legal_registration_idwith scheme0002, as in the request above. - Send a different delivery address in
delivery, with a name and an address. - Add any other wording your platform asks for, such as the type of operation, in
notes.
Your approved platform has the final list, because it checks each invoice before it passes it on. Ask for its validation rules early and test a few real invoices with it.
Which Factur-X profile to use
| Profile | What it carries | The `profile` to send |
|---|---|---|
| MINIMUM | Header and totals, no lines | minimum |
| BASIC WL | Header, totals and VAT breakdown, no lines | basic-wl |
| BASIC | The invoice with simple lines | basic |
| EN 16931 | The full European standard | en16931 (the default) |
| EXTENDED | EN 16931 plus extra fields | extended |
EN 16931 is the safe choice, because it carries the whole invoice and every platform reads it. The smaller profiles exist for special cases. Ask your platform before you use one.
What is checked before the file exists
- Country codes, currency codes and VAT categories against their official code lists.
- VAT rules: a 20 % rate needs category
S, an exempt line needs a reason, reverse charge needs the buyer’s VAT number. - The IBAN check digits, so a typo never reaches your customer.
- The totals, computed with exact decimals and the EN 16931 rounding rules.
In our test suite every Factur-X XML passes the Factur-X 1.09 XSD and Schematron for its profile, plus the CEN EN 16931 rules from BASIC up. The PDF/A checker veraPDF 1.30.3 found all 16 of our sample PDFs compliant with PDF/A-3b. Run a test invoice through your platform before you switch, because platforms can add rules of their own.