Skip to main content

Introduction

Factur-X is France’s official hybrid electronic invoice standard, developed jointly by France and Germany to align with the European Norm EN 16931. Like ZUGFeRD, it combines two layers in one file:
  • a human-readable PDF/A-3 invoice (so recipients can view it as a normal invoice), and
  • an embedded XML file carrying the structured data for automated processing.
This dual approach makes Factur-X well suited for B2B invoicing, since a single document serves both business users (who need a visual invoice) and IT systems (which need structured data). It is legally recognized in France for electronic invoicing and ensures compliance with EU standards, which means invoices in Factur-X can also be processed across other EU countries that support EN 16931.

Prerequisites

To convert invoices to Factur-X format, ensure you have:
  • A valid API key and a basic understanding of the workflow engine and API.
  • An invoice with:
    • Supplier details (company name and required identities). Check the French regimes for specifics.
    • Line items with name, price, and applicable taxes.

Factur-X Setup

To issue Factur-X invoices, follow these instructions in the Invopop Console:
1

Connect the UN/CEFACT CII app

  1. Navigate to ConfigurationApps.
  2. Locate UN/CEFACT CII in the app discovery list.
  3. Click Connect to activate.
No additional configuration is needed.
2

Configure invoice workflow

Running

Use the following example gobl document which we will transform into a Factur-X invoice.
In this example, we’re issuing a Factur-X B2B invoice from a French supplier to another French business customer. Factur-X is the French implementation of the same standard as ZUGFeRD, combining a PDF invoice with embedded XML data.Notice:
  • the minimal version (facturx-b2b.min.mdx) contains only the essential fields required to create the invoice,
  • the de-zugferd-v2 addon is used (as Factur-X and ZUGFeRD share the same technical specification),
  • both supplier and customer have their SIRET and TVA (VAT) numbers properly specified,
  • there are no totals or calculations in the minimal version; all these will be calculated automatically when running gobl build,
  • the built version (facturx-b2b.mdx) shows the normalized document with calculated totals, line item sums, TVA breakdowns, and automatically generated fields,
  • the invoice will generate both a human-readable PDF and embedded XML following the UN/CEFACT CII standard, and,
  • Factur-X is mandatory for B2G transactions in France and widely adopted for B2B transactions.
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "FR",
    "$addons": [
        "eu-en16931-v2017",
        "fr-facturx-v1"
    ],
    "type": "standard",
    "series": "SAMPLE",
    "code": "2345",
    "issue_date": "2025-06-18",
    "currency": "EUR",
    "supplier": {
        "name": "Provide One Inc.",
        "tax_id": {
            "country": "FR",
            "code": "43498927917"
        },
        "identities": [
            {
                "type": "SIRET",
                "code": "49892791768734"
            }
        ],
        "addresses": [
            {
                "num": "42",
                "street": "Calle Pradillo",
                "locality": "Madrid",
                "region": "Madrid",
                "code": "28002",
                "country": "ES"
            }
        ],
        "emails": [
            {
                "addr": "billing@example.com"
            }
        ]
    },
    "customer": {
        "name": "Sample Consumer",
        "tax_id": {
            "country": "FR",
            "code": "39356000000"
        },
        "identities": [
            {
                "type": "SIRET",
                "code": "35600000012345"
            }
        ],
        "addresses": [
            {
                "num": "1",
                "street": "Rue Sundacsakn",
                "locality": "Saint-Germain-En-Laye",
                "code": "75050",
                "country": "FR"
            }
        ],
        "emails": [
            {
                "addr": "email@sample.com"
            }
        ]
    },
    "lines": [
        {
            "i": 1,
            "quantity": "20",
            "item": {
                "name": "Development services",
                "price": "90.00",
                "unit": "h"
            },
            "sum": "1800.00",
            "discounts": [
                {
                    "reason": "Special discount",
                    "percent": "10%",
                    "amount": "180.00"
                }
            ],
            "taxes": [
                {
                    "cat": "VAT",
                    "key": "standard",
                    "rate": "general"
                }
            ],
            "total": "1620.00"
        }
    ],
    "payment": {
        "advances": [
            {
                "description": "Paid in full",
                "percent": "100%",
                "amount": "1944.00"
            }
        ],
        "instructions": {
            "key": "card",
            "card": {}
        }
    }
}
In your invoice data, make sure to include the Factur-X addon and state the regime as FR.
Once you have saved in Invopop, select Run workflow and select “Factur-X invoice workflow” from the sidebar and the state should change to Sent.

France FAQ

Find answers to frequently asked questions about invoicing in France →

Participate in our community

Ask and answer questions about invoicing in France →