Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.invopop.com/llms.txt

Use this file to discover all available pages before exploring further.

E-invoicing in France applies domestic B2B invoicing where both parties are registered in the Annuaire. For B2C, cross-border, or any flow where one party is not in the Annuaire, use the reporting flow instead.
The France PA invoicing flow covers regulated B2B exchanges — both parties registered in the Annuaire. The same GOBL document drives both sides: a single invoice with the fr-ctc-flow2-v1 add-on, generated as the format negotiated with the receiver. On receipt, any of the accepted formats is converted back to that same representation.

Formats

The PA specification accepts five formats. In practice the three base formats below cover essentially all real-world traffic, and Invopop supports both sending and receiving on all three.
FormatNotes
UBLPeppol France CIUS — recommended default. Native Peppol format with the widest receiver support.
CIIUN/CEFACT XML, semantically equivalent to UBL. Common in cross-border and industrial contexts.
Factur-XHybrid PDF/A-3 with embedded CII. Identical to ZUGFeRD and aligned with EN 16931.
Switching format is a workflow-config change rather than a data-model change — you author and validate one GOBL invoice, and the workflow’s generation step produces whichever format the counterparty expects.

Sending

The send workflow records the invoice for compliance, generates the chosen format, transmits it to the receiver’s PA over Peppol, and forwards the F1 copy to the PPF as the fifth corner. The Record Invoice step validates SIRENs and checks both parties against the Annuaire. Invoices where either side is missing are rejected — branch non-regulated traffic into the reporting flow upstream of this workflow.

How it works

1

Set State → processing

Moves the invoice into a visible “in progress” state for operator dashboards.
2

Add Signature

Locks the GOBL envelope so downstream steps work against an immutable document.
3

Record Invoice

Validates SIRENs, checks both parties against the Annuaire, and stores the invoice in the local PA database.
4

Generate UBL Document

Produces a Peppol France CIUS UBL invoice or credit note. Swap for Generate CII Document if the receiver requires CII, or Generate PDF (Factur-X) for hybrid PDF.
5

Send Peppol Document

Transmits the generated document to the receiver’s PA over the Peppol network.
6

Set State → sent

Marks Peppol delivery as successful.
7

Forward Invoice to PPF

Generates the simplified F1 invoice and forwards it, along with the mandatory 200 déposée status, to the PPF.
8

Set State → completed

Marks the full e-invoicing flow — Peppol delivery and PPF reporting — as complete.

France PA send invoice workflow

Records and sends a France-compliant invoice via Peppol and the PPF.

Receiving

The receive workflow detects the inbound format, imports it into a GOBL document, and records it against your registered party. The same workflow handles UBL, CII, and Factur-X — the format-detection branch routes each payload to the correct importer.

How it works

1

Import Peppol Document

Pulls the inbound payload from Peppol and branches on the detected format:
  • UBLImport UBL Document converts the UBL XML to GOBL.
  • CIIImport UN/CEFACT CII Document converts the CII XML to GOBL.
  • PDFImport PDF (Factur-X) extracts the embedded CII and converts it to GOBL.
2

Set Folder → expenses

Files the invoice under the Invoices · Expenses folder so it lands in the right place for accounting workflows.
3

Record Invoice

Validates SIRENs, resolves your registered party as the customer (or supplier in self-billing flows), and guards against duplicate processing.
4

Set State → registered

Marks the incoming invoice as successfully received.

France PA receive invoice workflow

Imports an incoming Peppol invoice (UBL, CII, or Factur-X) and records it.

Example invoices

Each example below pairs a hand-authored minimal GOBL invoice with the built version produced by gobl build. Paste either into the GOBL builder to preview the document, or use the minimal version as a starting point for your own integration.
A regulated B2B invoice between two French parties, both registered in the Annuaire. The fr-ctc-flow2-v1 add-on drives validation for the PA e-invoicing flow.Notice:
  • both parties carry a SIREN identity with iso-scheme-id 0002 and a peppol inbox under scheme 0225 so the workflow can route via Peppol,
  • fr-ctc-billing-mode B7 marks this as a standard B2B invoice; untdid-document-type 380 confirms the commercial invoice type,
  • the payment, payment-method, and payment-term notes carry the French legal-mention text (penalty clauses, late-payment terms, early-payment discount), each tagged with the appropriate UNTDID 4451 subject code,
  • ordering.code records the customer’s purchase order reference.
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "FR",
    "$addons": [
        "fr-ctc-flow2-v1"
    ],
    "type": "standard",
    "series": "FAC",
    "code": "2024-00001",
    "issue_date": "2024-06-13",
    "currency": "EUR",
    "tax": {
        "ext": {
            "fr-ctc-billing-mode": "B7",
            "untdid-document-type": "380"
        }
    },
    "supplier": {
        "name": "Fournisseur Example SARL",
        "tax_id": {
            "country": "FR",
            "code": "732829320"
        },
        "identities": [
            {
                "type": "SIREN",
                "code": "732829320",
                "ext": {
                    "iso-scheme-id": "0002"
                }
            }
        ],
        "inboxes": [
            {
                "key": "peppol",
                "scheme": "0225",
                "code": "732829320"
            }
        ],
        "addresses": [
            {
                "num": "123",
                "street": "Rue de la Paix",
                "locality": "Paris",
                "code": "75001",
                "country": "FR"
            }
        ],
        "emails": [
            {
                "addr": "facturation@fournisseur.fr"
            }
        ],
        "telephones": [
            {
                "num": "+33100200300"
            }
        ]
    },
    "customer": {
        "name": "Client Example SAS",
        "tax_id": {
            "country": "FR",
            "code": "356000000"
        },
        "identities": [
            {
                "type": "SIREN",
                "code": "356000000",
                "ext": {
                    "iso-scheme-id": "0002"
                }
            }
        ],
        "inboxes": [
            {
                "key": "peppol",
                "scheme": "0225",
                "code": "356000000"
            }
        ],
        "addresses": [
            {
                "num": "456",
                "street": "Avenue des Champs-Elysees",
                "locality": "Paris",
                "code": "75008",
                "country": "FR"
            }
        ],
        "emails": [
            {
                "addr": "comptabilite@client.fr"
            }
        ],
        "telephones": [
            {
                "num": "+33100200400"
            }
        ]
    },
    "lines": [
        {
            "quantity": "10",
            "item": {
                "name": "Services de conseil",
                "price": "100.00",
                "unit": "h"
            },
            "discounts": [
                {
                    "percent": "10%",
                    "reason": "Remise fidelite"
                }
            ],
            "taxes": [
                {
                    "cat": "VAT",
                    "rate": "standard"
                }
            ]
        }
    ],
    "ordering": {
        "code": "PO-2024-001"
    },
    "notes": [
        {
            "key": "payment",
            "text": "Une penalite fixe de 40 EUR sera appliquee en cas de retard de paiement.",
            "ext": {
                "untdid-text-subject": "PMT"
            }
        },
        {
            "key": "payment-method",
            "text": "Des penalites de retard s'appliquent conformement a nos conditions generales de vente.",
            "ext": {
                "untdid-text-subject": "PMD"
            }
        },
        {
            "key": "payment-term",
            "text": "Aucun escompte n'est offert pour paiement anticipe.",
            "ext": {
                "untdid-text-subject": "AAB"
            }
        }
    ],
    "payment": {
        "instructions": {
            "key": "credit-transfer",
            "credit_transfer": [
                {
                    "iban": "FR7630006000011234567890189",
                    "name": "Fournisseur Example SARL"
                }
            ]
        },
        "terms": {
            "detail": "Paiement a 30 jours"
        }
    }
}
A credit note that partially cancels a previously issued PA invoice. The preceding array references the original invoice by series, code, and issue date.Notice:
  • type is credit-note and untdid-document-type is 381 (commercial credit note),
  • the preceding block makes the link to the original invoice explicit — required for PA matching at the PPF.
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "FR",
    "$addons": [
        "fr-ctc-flow2-v1"
    ],
    "type": "credit-note",
    "series": "AV",
    "code": "2024-001",
    "issue_date": "2024-06-20",
    "currency": "EUR",
    "tax": {
        "ext": {
            "fr-ctc-billing-mode": "B7",
            "untdid-document-type": "381"
        }
    },
    "preceding": [
        {
            "type": "standard",
            "series": "FAC",
            "code": "2024-001",
            "issue_date": "2024-06-13"
        }
    ],
    "supplier": {
        "name": "Fournisseur Example SARL",
        "tax_id": {
            "country": "FR",
            "code": "732829320"
        },
        "identities": [
            {
                "type": "SIREN",
                "code": "732829320",
                "ext": {
                    "iso-scheme-id": "0002"
                }
            }
        ],
        "inboxes": [
            {
                "key": "peppol",
                "scheme": "0225",
                "code": "732829320"
            }
        ],
        "addresses": [
            {
                "num": "123",
                "street": "Rue de la Paix",
                "locality": "Paris",
                "code": "75001",
                "country": "FR"
            }
        ],
        "emails": [
            {
                "addr": "facturation@fournisseur.fr"
            }
        ]
    },
    "customer": {
        "name": "Client Example SAS",
        "tax_id": {
            "country": "FR",
            "code": "356000000"
        },
        "identities": [
            {
                "type": "SIREN",
                "code": "356000000",
                "ext": {
                    "iso-scheme-id": "0002"
                }
            }
        ],
        "inboxes": [
            {
                "key": "peppol",
                "scheme": "0225",
                "code": "356000000"
            }
        ],
        "addresses": [
            {
                "num": "456",
                "street": "Avenue des Champs-Elysees",
                "locality": "Paris",
                "code": "75008",
                "country": "FR"
            }
        ],
        "emails": [
            {
                "addr": "comptabilite@client.fr"
            }
        ]
    },
    "lines": [
        {
            "quantity": "2",
            "item": {
                "name": "Services de conseil - Annulation partielle",
                "price": "100.00",
                "unit": "h"
            },
            "taxes": [
                {
                    "cat": "VAT",
                    "rate": "standard"
                }
            ]
        }
    ],
    "notes": [
        {
            "key": "payment",
            "text": "Une penalite fixe de 40 EUR sera appliquee en cas de retard de paiement.",
            "ext": {
                "untdid-text-subject": "PMT"
            }
        },
        {
            "key": "payment-method",
            "text": "Des penalites de retard s'appliquent conformement a nos conditions generales de vente.",
            "ext": {
                "untdid-text-subject": "PMD"
            }
        },
        {
            "key": "payment-term",
            "text": "Aucun escompte n'est offert pour paiement anticipe.",
            "ext": {
                "untdid-text-subject": "AAB"
            }
        }
    ],
    "payment": {
        "instructions": {
            "key": "credit-transfer",
            "credit_transfer": [
                {
                    "iban": "FR7630006000011234567890189",
                    "name": "Fournisseur Example SARL"
                }
            ]
        }
    }
}
An advance (down-payment) invoice — used when a payment is collected before the final goods or services are delivered.Notice:
  • fr-ctc-billing-mode is B1 (advance / down payment) and untdid-document-type is 386,
  • the final invoice issued at delivery normally references this advance to net it off the total.
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "FR",
    "$addons": [
        "fr-ctc-flow2-v1"
    ],
    "type": "standard",
    "series": "FAC",
    "code": "2024-AV-001",
    "issue_date": "2024-06-01",
    "currency": "EUR",
    "tax": {
        "ext": {
            "fr-ctc-billing-mode": "B1",
            "untdid-document-type": "386"
        }
    },
    "supplier": {
        "name": "Fournisseur Example SARL",
        "tax_id": {
            "country": "FR",
            "code": "732829320"
        },
        "identities": [
            {
                "type": "SIREN",
                "code": "732829320",
                "ext": {
                    "iso-scheme-id": "0002"
                }
            }
        ],
        "inboxes": [
            {
                "key": "peppol",
                "scheme": "0225",
                "code": "732829320"
            }
        ],
        "addresses": [
            {
                "num": "123",
                "street": "Rue de la Paix",
                "locality": "Paris",
                "code": "75001",
                "country": "FR"
            }
        ],
        "emails": [
            {
                "addr": "facturation@fournisseur.fr"
            }
        ]
    },
    "customer": {
        "name": "Client Example SAS",
        "tax_id": {
            "country": "FR",
            "code": "356000000"
        },
        "identities": [
            {
                "type": "SIREN",
                "code": "356000000",
                "ext": {
                    "iso-scheme-id": "0002"
                }
            }
        ],
        "inboxes": [
            {
                "key": "peppol",
                "scheme": "0225",
                "code": "356000000"
            }
        ],
        "addresses": [
            {
                "num": "456",
                "street": "Avenue des Champs-Elysees",
                "locality": "Paris",
                "code": "75008",
                "country": "FR"
            }
        ],
        "emails": [
            {
                "addr": "comptabilite@client.fr"
            }
        ]
    },
    "lines": [
        {
            "quantity": "1",
            "item": {
                "name": "Acompte - Projet de developpement",
                "price": "5000.00"
            },
            "taxes": [
                {
                    "cat": "VAT",
                    "rate": "standard"
                }
            ]
        }
    ],
    "notes": [
        {
            "key": "payment",
            "text": "Une penalite fixe de 40 EUR sera appliquee en cas de retard de paiement.",
            "ext": {
                "untdid-text-subject": "PMT"
            }
        },
        {
            "key": "payment-method",
            "text": "Des penalites de retard s'appliquent conformement a nos conditions generales de vente.",
            "ext": {
                "untdid-text-subject": "PMD"
            }
        },
        {
            "key": "payment-term",
            "text": "Aucun escompte n'est offert pour paiement anticipe.",
            "ext": {
                "untdid-text-subject": "AAB"
            }
        }
    ],
    "payment": {
        "instructions": {
            "key": "credit-transfer",
            "credit_transfer": [
                {
                    "iban": "FR7630006000011234567890189",
                    "name": "Fournisseur Example SARL"
                }
            ]
        },
        "terms": {
            "detail": "Paiement immediat"
        }
    }
}
A French supplier invoicing a customer in another EU member state. Cross-border B2B is not transmitted via the PA e-invoicing flow — it falls under e-reporting instead — but the same GOBL document is used as the source of truth for both.Notice:
  • the customer carries a DE tax ID and a generic email inbox rather than a Peppol address,
  • VAT is exempt with the untdid-tax-category K and cef-vatex VATEX-EU-IC to mark the intra-community supply,
  • once the fr-ctc-flow10-v1 add-on is released, this document will additionally feed the periodic e-report to the PPF.
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "FR",
    "$addons": [
        "fr-ctc-flow2-v1"
    ],
    "type": "standard",
    "series": "FAC",
    "code": "2024-INT-001",
    "issue_date": "2024-06-15",
    "currency": "EUR",
    "tax": {
        "ext": {
            "fr-ctc-billing-mode": "B7",
            "untdid-document-type": "380"
        }
    },
    "supplier": {
        "name": "Fournisseur France SARL",
        "tax_id": {
            "country": "FR",
            "code": "732829320"
        },
        "identities": [
            {
                "type": "SIREN",
                "code": "732829320",
                "ext": {
                    "iso-scheme-id": "0002"
                }
            }
        ],
        "inboxes": [
            {
                "key": "peppol",
                "scheme": "0225",
                "code": "732829320"
            }
        ],
        "addresses": [
            {
                "num": "123",
                "street": "Rue de la Paix",
                "locality": "Paris",
                "code": "75001",
                "country": "FR"
            }
        ],
        "emails": [
            {
                "addr": "facturation@fournisseur.fr"
            }
        ]
    },
    "customer": {
        "name": "Kunde Deutschland GmbH",
        "tax_id": {
            "country": "DE",
            "code": "111111125"
        },
        "inboxes": [
            {
                "email": "buchhaltung@kunde.de"
            }
        ],
        "addresses": [
            {
                "num": "10",
                "street": "Berliner Strasse",
                "locality": "Berlin",
                "code": "10117",
                "country": "DE"
            }
        ],
        "emails": [
            {
                "addr": "buchhaltung@kunde.de"
            }
        ]
    },
    "lines": [
        {
            "quantity": "5",
            "item": {
                "name": "Consulting services",
                "price": "200.00",
                "unit": "h"
            },
            "taxes": [
                {
                    "cat": "VAT",
                    "rate": "exempt",
                    "ext": {
                        "untdid-tax-category": "K",
                        "cef-vatex": "VATEX-EU-IC"
                    }
                }
            ]
        }
    ],
    "notes": [
        {
            "key": "payment",
            "text": "A fixed penalty of 40 EUR will apply to any late payment.",
            "ext": {
                "untdid-text-subject": "PMT"
            }
        },
        {
            "key": "payment-method",
            "text": "Late payment penalties apply as per our general terms of sale.",
            "ext": {
                "untdid-text-subject": "PMD"
            }
        },
        {
            "key": "payment-term",
            "text": "No discount offered for early payment.",
            "ext": {
                "untdid-text-subject": "AAB"
            }
        }
    ],
    "payment": {
        "instructions": {
            "key": "credit-transfer",
            "credit_transfer": [
                {
                    "iban": "FR7630006000011234567890189",
                    "name": "Fournisseur France SARL"
                }
            ]
        },
        "terms": {
            "detail": "Payment within 30 days"
        }
    }
}

FAQ

Two channels depending on the recipient: B2G uses Chorus Pro (CII format); B2B from September 2026 uses the Plateforme Agréée model (UBL, CII, or Factur-X via Peppol). Invopop is an approved PA — install the France PA app for B2B and the Chorus Pro app for B2G.
In Factur-X PDFs, the XML file is embedded within the PDF itself. To extract and view it, use the Attachments section in Adobe Acrobat Reader, or a tool like the SysTools PDF Extractor.
Invopop is an officially approved Plateforme Agréée under the DGFiP mandate. Registration, invoicing, and lifecycle status are available today; e-reporting (Flow 10) is in active development. See the PA hub readiness matrix for the current state.
The base fr-fec-v3 regime plus the EN 16931 profile. For Peppol delivery, peppol-bis-v3. The forthcoming fr-ctc-flow10-v1 addon covers e-reporting payloads — separate from the e-invoicing flow.
In countries where Peppol is the standard but not mandatory, you may still need to issue an e-invoice when the recipient isn’t on the network. Both parties can agree on an alternative transfer method, but the invoice must still be EN16931 compliant.Recommended approach:
  • Set up a separate workflow that generates the XML without the send-Peppol-document step
  • Or reuse your existing workflow without the customer Peppol ID — the send step is automatically skipped
  • Fetch the generated XML and deliver it through the agreed channel, typically email
B2C invoices typically lack the structured customer information required for Peppol delivery, and most consumers don’t have inboxes. Use a conditional workflow:
  1. Add an If/Else step that checks for a customer inbox using count(customer.inboxes, true) > 0.
  2. On the false branch, generate a PDF and email it to the customer, then stop the flow.
This routes B2B invoices through Peppol while keeping a smooth path for consumers.
If a job fails with KO and receiver not found in the peppol network, treat it like an invalid email address — the recipient simply isn’t reachable on Peppol. Add the Lookup Participant ID step (ideally in a separate validation workflow run against customer data) so you catch missing IDs before generating the invoice.
No. The regime is automatically derived from the supplier’s settings, which is the recommended approach for Peppol — leave it unset on the document.
See the oasis-ubl-v2 addon and the Peppol app reference for required fields, supported document types, and Participant ID schemes.
More available in our France FAQ section