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 Configuration โ†’ Apps.
  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 โ†’