Skip to content
CastPDF
Factur-X

Generate Factur-X invoices for the French reform

Factur-X is the hybrid e-invoice France and Germany share: a readable PDF/A-3 with the invoice XML inside. Our e-invoicing API works as a Factur-X generator. Send the invoice as JSON with "standard": "factur-x" and get a file your approved platform can carry, with totals computed by the EN 16931 rules.

  • Updated
  • 4 minute read
  • 100 free PDFs a month
  1. PDF/A-3bThe archival PDF that may carry an attached file.
  2. The page people readThe built-in template, or your own French layout.
  3. factur-x.xmlThe CII XML, the part your platform reads.
  4. One calculationThe totals on the page are the totals in the XML.
A Factur-X invoice: a PDF/A-3b invoice page with factur-x.xml attached. The page and the XML show the same totals.

What Factur-X is

In short

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. 1 September 2026In forceReceive, and large firms sendEvery business must be able to receive e-invoices. Large and mid-sized businesses must send them.
  2. TodayNowChoose a platformSmaller businesses pick an approved platform and test their invoice files with it.
  3. 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.pdf

The 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_id with scheme 0002, 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

Factur-X profiles in CastPDF
ProfileWhat it carriesThe `profile` to send
MINIMUMHeader and totals, no linesminimum
BASIC WLHeader, totals and VAT breakdown, no linesbasic-wl
BASICThe invoice with simple linesbasic
EN 16931The full European standarden16931 (the default)
EXTENDEDEN 16931 plus extra fieldsextended

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.

Common questions

Is Factur-X the same as ZUGFeRD?

Since ZUGFeRD 2.1, yes: the same XML, the same factur-x.xml file name and the same PDF metadata. CastPDF accepts both names, so the file says the standard your customer asked for.

Does CastPDF send my invoice to the French platform?

No. CastPDF creates the Factur-X file. Your approved platform transmits it to the buyer and reports it to the tax administration.

Can the Factur-X page be in French?

Yes. The built-in template prints your data as you send it, so names and line items can be in French. For French headings and labels, use your own template with template_id.

Which Factur-X profile do French platforms accept?

It depends on the platform. EN 16931 carries the full invoice and is the safest default. Confirm with your platform before you send smaller profiles.

Can I check a Factur-X file from another system?

Yes. Our free e-invoice validator extracts factur-x.xml from the PDF and checks the fields and totals. It is not the official Schematron validation, and the report says what it checked.
All use cases

Your first PDF in five minutes.

Pick a template, create a free test key and send one request. 100 PDFs a month are free, and you never need a card to start.