Regional spotlight
Formats? Mandates?
We've got you covered!
-
Overview of B2G, B2B and B2C e-invoicing in France. -
Key formats, networks and channels you may need to support. -
High-level regulatory and compliance considerations.
e-invoicing in France
France is one of Europe’s most ambitious e-invoicing transitions. Mandatory B2B e-invoicing is being rolled out in phases: from September 2026, all businesses must be able to receive structured e-invoices, and large and mid-sized companies must also begin sending them. SMEs and micro-enterprises follow from September 2027. A key feature of the French model is that all domestic B2B invoices must flow through government-certified platforms called Plateformes Agréées (PA); direct point-to-point invoicing between companies is not permitted. Peppol is one of the accepted exchange formats between platforms, and a central directory (Annuaire) via the PPF (Portail Public de Facturation) enables recipient lookup. B2G e-invoicing has been mandatory since January 2020 via Chorus Pro.
Maventa’s France support goes live on 26 August 2026. French companies can already be created in Maventa and registered on Peppol. From 26 August they are also registered in the French Annuaire, so invoices can start arriving from the regulated network, and a buyer can refuse a received invoice through the French refusal API.
The first priority is meeting the 1 September 2026 deadline, so that French companies can receive structured e-invoices through Maventa. Sending and e-reporting will follow.
Timeline
The French mandate applies in two phases. Alongside the legal deadlines, here is when Maventa’s support becomes available, so you can plan your build and testing.
| Date | Milestone |
|---|---|
| 26 August 2026 | Maventa: France goes live. French companies are registered in the Annuaire, so invoices can start arriving from the regulated network. The rest of the receiving mandate is in place too: the French invoice formats and the refusal API. Partners can start testing. |
| 1 September 2026 | Mandate: all French businesses must be able to receive e-invoices. Large and mid-sized companies must also begin sending. |
| Early autumn 2026 | Maventa: AutoScan begins full line-level scanning, needed for e-reporting. |
| 1 September 2027 | Mandate: SMBs must also begin sending and e-reporting. |
Most of our partners serve SMBs. For an SMB, only receiving is mandatory from 1 September 2026. Sending and e-reporting do not become mandatory until September 2027, and Maventa will deliver both well before that deadline.
If you serve larger companies, which must also begin sending from 1 September 2026, please get in touch with Maventa.
How e-invoicing works in France
France requires all e-invoicing traffic to pass through certified platforms, called Plateformes Agréées (PA). A PA:
- Validates invoices against French rules (and can issue a Rejected status)
- Looks up recipients in the government directory
- Registers receivers under scheme
0225in their SMP for regulated traffic - Delivers invoices to the recipient’s PA via Peppol
- Reports tax data to the government’s data concentrator (the CdD, part of the PPF)
- Tracks and reports invoice lifecycle statuses
The government system, the PPF (Portail Public de Facturation), manages the central directory and collects the tax data.
Maventa is not becoming a certified platform. Instead, Maventa partners with MySupply, which acts as the PA and handles the French regulatory layer: invoice validation, directory management, tax data submission, and government communication. Maventa handles routing, format conversion, and delivery to your integration.
Registering a French company
Creating French companies in Maventa is available now, for selected partners only. Your vendor account has to be enabled for France before a registration with country: FR is accepted. Please contact Maventa Support for more information on how to set this up with your ERP for French companies.
MySupply registers the companies in the French Annuaire from 26 August 2026 onwards. Until then a French company can be created and registered on Peppol, but it cannot yet be reached from the regulated network.
Enabling French support for selected partners lets Maventa keep the rollout controlled while support is still being built. Registering a new French company via the API has three requirements:
- An enabled vendor account. France works like Italy and Poland: the API key used for the registration has to be on Maventa’s list of vendors enabled for France. A registration made with any other API key is rejected.
- Trusted vendor status. Company registration currently requires the vendor to be a trusted vendor, with KYC approval from Maventa. Contact Maventa Support to get started.
- A French company identifier. Use the company’s SIREN or SIRET number as the company identifier (see below).
These requirements apply to creating the company in Maventa. Once a French company exists in your vendor account, registering it on Peppol needs no separate approval and works the same as in any other country.
Mainland France only
Maventa currently supports creating accounts for mainland France (FR) companies only. The other territories inside the regulated system — Monaco, Guadeloupe, Martinique, and Réunion — cannot be registered yet, even though the mandate covers them. See Which territories the mandate covers.
If you have a customer in one of these territories, contact Maventa Support.
SIREN and SIRET
France identifies companies with two related numbers:
- SIREN (Système d’Identification du Répertoire des Entreprises) is a 9-digit number that identifies the legal entity, the company itself. Every company in France has exactly one SIREN, and it stays the same for the company’s entire lifetime.
- SIRET (Système d’Identification du Répertoire des Établissements) is a 14-digit number that identifies a specific establishment, a physical location or unit of activity of the company. It is constructed by appending a 5-digit NIC (Numéro Interne de Classement) suffix to the 9-digit SIREN.
| Identifier | Description | Format | Validation |
|---|---|---|---|
| SIREN | Identifies the legal entity (the company itself). Every company has exactly one. |
123456789 (9 digits) |
Validated against the INSEE/SIRENE registry |
| SIRET | Identifies a specific establishment: the 9-digit SIREN plus a 5-digit NIC suffix. |
12345678900025 (14 digits) |
Validated against the INSEE/SIRENE registry |
Which territories the mandate covers
The mandate does not reach every French territory, and one country that is not French is included. Companies in all French territories have SIREN and SIRET numbers, so they look identical to mainland companies — the identifier alone does not tell you whether a company is inside the regulated system. The country code does.
| Territory | Country code | Status |
|---|---|---|
| Mainland France | FR |
In the regulated system |
| Monaco | MC |
In the regulated system |
| Guadeloupe | GP |
In the regulated system |
| Martinique | MQ |
In the regulated system |
| Réunion | RE |
In the regulated system |
| French Guiana | GF |
Excluded from e-invoicing |
| Mayotte | YT |
Excluded from e-invoicing |
| New Caledonia | NC |
Outside scope |
| French Polynesia | PF |
Outside scope |
| Other overseas collectivities |
BL, MF, PM, WF
|
Outside scope |
French Guiana and Mayotte are overseas departments, but they sit outside the French VAT area that the mandate is built on, which is why they are excluded.
This table describes the scope of the French mandate, not what Maventa can register today. Maventa currently creates accounts for mainland France (FR) companies only — see Registering a French company. The territory codes still matter for recipients, because your customers can send to companies in any of them.
If you have customers in an overseas territory, contact Maventa Support before onboarding them.
Use the real country code, not FR for every French territory.
Maventa decides whether to route a domestic invoice into the regulated network based on the recipient’s country code. If your integration sets FR for companies in all French territories, invoices addressed to territories outside the mandate are routed into the regulated network, where they cannot be delivered. Set the actual country code for each territory.
Companies in territories outside the mandate are not registered in the Annuaire, so this fails safely: a domestic send addressed to one is stopped before transmission and returns an error rather than being silently misrouted.
Receiving invoices
Receiving French invoices works almost exactly like Maventa’s normal receiving process, so nothing changes there. The one difference is the invoice formats: use the French formats Maventa recommends for your French customers’ invoices (see Formats you need to support). See the Timeline for when testing opens.
From 1 September 2026, every French company must be able to receive structured e-invoices. Maventa supports this through two routes, depending on where the invoice comes from:
-
Domestic (French to French): the invoice travels through the regulated network. The sender’s PA passes it to MySupply, which routes it to Maventa for delivery. MySupply registers the receiver under the regulated French scheme
0225(keyed on SIREN or SIRET). -
Cross-border: the invoice arrives directly over the Peppol network as a standard Peppol BIS invoice. Maventa registers the company on Peppol under scheme
0002(SIREN) or0009(SIRET).
| Scheme | Identifier | Registered by | Used for |
|---|---|---|---|
0225 (FR:CTC) |
SIREN, optionally combined with a SIRET (see How the 0225 endpoint identifier is built) | MySupply | Domestic French regulated traffic |
0002 (SIRENE) |
SIREN (9-digit) | Maventa | Cross-border Peppol |
0009 (SIRET) |
SIRET (14-digit) | Maventa | Cross-border Peppol |
The cross-border Peppol identifiers use the format 0002:000000000 (9-digit SIREN) and 0009:00000000000000 (14-digit SIRET).
Peppol registration for French companies is available now. Both schemes are accepted, but the identifier must match the one used to create the company account in Maventa: a company created with a SIREN registers under 0002, and a company created with a SIRET registers under 0009. Register the company the same way as in any other country, with POST /v1/company/profiles. See Peppol network for the full registration process.
How the 0225 endpoint identifier is built
The regulated 0225 identifier is not a single number. It always starts with the company’s SIREN, and further parts can be appended with underscores to address a more specific part of the organisation. France defines four forms:
| Endpoint identifier | Made up of | Addresses |
|---|---|---|
0225:123456789 |
SIREN | The company as a whole |
0225:123456789_12345678900025 |
SIREN + SIRET | A single establishment |
0225:123456789_12345678900025_DIR-ACHATS-IT |
SIREN + SIRET + routing code (code routage) | A department or service within an establishment |
0225:123456789_BRANCHE |
SIREN + suffix (suffixe) | A named branch of the company |
The SIREN is repeated at the start of the SIRET, so the composite forms look redundant. This is intentional: the first segment identifies the legal entity and the second identifies the establishment, and both are always written in full.
You never create the 0225 registration yourself. MySupply registers the company in the Annuaire automatically, based on the identifier the company account was created with in Maventa: a company created with a SIREN is registered as 0225:SIREN, and a company created with a SIRET as 0225:SIREN_SIRET.
Maventa accepts only a SIREN or a SIRET as the company identifier. Registering a French company with anything else fails.
This means the routing code and suffix forms cannot be reached through the automatic registration. They require a manual Annuaire registration by MySupply, so contact Maventa Support if a customer needs one.
For most companies the SIREN alone is enough. The longer forms matter only when a company wants invoices separated by establishment, department, or branch rather than arriving in one place.
Invoices that arrive on paper or by email
Domestic French invoices always arrive as structured e-invoices through the regulated network. Invoices from abroad, however, can still arrive on paper or by email as a PDF. Before a French company can process such an invoice, and before it can be e-reported, it must be turned into a structured electronic format.
Maventa’s AutoScan service does this. French companies should activate AutoScan and use it for the invoices they receive from abroad: send email invoices straight to the scanning service, and paper invoices after first converting them to a PDF so they can be sent in. Scanning does not happen automatically, so make it part of your customers’ routine to always send every received email and printed invoice to AutoScan.
For France, invoices must be scanned with full line-level detail, so that MySupply can produce the required tax reports. AutoScan will start supporting full line scanning in early autumn 2026, and Maventa will support the France flow shortly after.
This is not mandatory yet: the SMB e-reporting mandate only starts in 2027. It is still worth preparing for it early.
Sending invoices
Sending is a later phase, following receiving compliance. This is how it will work:
- Domestic (French to French): Maventa routes the invoice through MySupply. MySupply reports the tax data to the government, passes the invoice on to the receiver’s PA, and produces the lifecycle statuses (such as Deposited). That status information is then returned for the invoice; the exact mechanism will be documented later.
- Cross-border: Maventa delivers the invoice to the receiver as usual, over Peppol, or by email or print, and sends a copy to MySupply for e-reporting.
-
B2C invoice: a consumer invoice is delivered to the receiver as usual, and a copy goes to MySupply for e-reporting. Mark it with
recipient_type=consumer(see below). - B2C sales reporting: for consumer sales, aggregate daily sales totals, rather than individual invoices, will most likely be reported through Maventa in a later phase.
Marking an invoice as B2C
Nothing in the invoice itself reliably tells whether it is B2B or B2C: companies in every French territory hold a SIREN or SIRET, and a consumer invoice carries no definitive marker. The distinction decides the route — domestic B2B travels through the regulated network via MySupply, while B2C is delivered directly with only an e-reporting copy — so the sender must state it explicitly.
For this, use the recipient_type parameter of the POST /v1/invoices endpoint:
- Set
recipient_type=consumerwhen the receiver is a consumer. - Leave it out for B2B invoices. B2B is the default.
The value is available in the API now, so you can adopt it ahead of the sending phase. Today it changes nothing about how the invoice is delivered; once the French sending phase is live, it tells the French flow whether to route the invoice through the regulated network or to e-report it, as described above.
This is the same parameter used for Norwegian consumer invoicing: recipient_type=consumer declares the receiver as a consumer for senders in any country, and only for Norwegian senders does it additionally switch on consumer routing (route_order).
Formats you need to support
A French invoice carries 15–20 data elements beyond a standard Peppol BIS invoice, so Peppol BIS 3.0 cannot fully represent one.
To serve French customers, your integration must support one of the French e-invoicing formats. Peppol BIS 3.0 alone is not enough: you cannot send to France with it, and invoices received from France convert to BIS 3.0 only with data loss.
France defines two profiles, each available in three syntaxes:
- EN16931-FR is the standard profile. It covers ordinary invoices: one seller, one buyer, a flat list of line items.
- EXTENDED-CTC-FR is the extended profile. It adds multi-seller invoices, sub-line hierarchies, and around 50 French-specific fields. Sectors such as construction, logistics, utilities, and transport typically need it, and even a simple company can receive EXTENDED invoices if it pays utility, telecom, or logistics bills.
The three syntaxes are UBL 2.1 and CII D22B (both pure XML) and Factur-X (a PDF/A-3 file with the CII XML embedded).
What Maventa recommends
Implement EN16931-FR in UBL 2.1. It covers the French requirements without data loss, and UBL carries forward to Peppol BIS 4.0, which builds on UBL 2.5. Add EXTENDED-CTC-FR if your customers or their suppliers need it. Choose CII only if you have an existing Factur-X or ZUGFeRD investment.
Format support in Maventa
| Format | API format code | Status |
|---|---|---|
| Peppol BIS 3.0 | PEPPOLBIS30 |
Supported |
| EN16931-FR (UBL) | AFNORXPZ12012UBL |
Supported |
| EN16931-FR (CII) | AFNORXPZ12012CII |
Supported |
| EXTENDED-CTC-FR (UBL) | AFNORXPZ12012EXTUBL |
Supported |
| EXTENDED-CTC-FR (CII) | AFNORXPZ12012EXTCII |
Supported |
| Factur-X | Receiving only: converted to XML and delivered with a readable PDF; not available to send or download through the API |
Use the format code as the return_format parameter when downloading a received invoice with GET /v1/invoices/{id}. Sending in a French format comes with the sending phase.
Maventa converts between standard formats where a sound conversion exists, but does not build custom, per-customer conversion layers. The official French formats are defined in the AFNOR XP Z12-012 standard and the DGFiP external specifications.
Lifecycle statuses
French e-invoicing tracks what happens to an invoice through four lifecycle status messages (CDAR messages) that travel between platforms. Each has an official code:
| Status | Code | Meaning |
|---|---|---|
| Déposée (Deposited) | 200 |
The invoice has been accepted by the tax authority (PPF). Sent back to the sender as confirmation. |
| Refusée (Refused) | 210 |
The buyer has commercially refused the invoice for a valid business reason. Requires a reason code. Terminal state. |
| Encaissée (Cashed) | 212 |
The seller confirms payment has been received. Only required for businesses on TVA sur les encaissements (VAT due when payment is received). |
| Rejetée (Rejected) | 213 |
The invoice failed technical validation at a platform. Terminal state. |
Maventa’s Invoices API exposes these statuses through a set of French response endpoints. There are two sides to it:
- Retrieving — a single endpoint returns every CDAR message recorded for an invoice, whichever status it carries. Deposited and Rejected are produced by the platforms, so you only ever read them.
- Submitting — the statuses a business raises itself each get their own dedicated endpoint. Refusal is available now; the Cashed status will get its own endpoint in a later phase.
These endpoints are available on stage for testing.
Retrieving lifecycle statuses
Call GET /v1/invoices/{id}/responses/fr to list the French lifecycle responses recorded for an invoice. Each entry gives:
- its
type—DEPOSITED,CASHED,REJECTED, orREFUSED, - a
statusshowing whether Maventa has transmitted it yet (PENDING,SENT, orERROR), - the
reason_code,requested_action_codeandcommentfor a refused response, - a
timestamp, and - a
file_idfor the underlying CDAR file, which you download withGET /v1/invoices/{id}/files/{file_id}.
See the List French e-invoicing responses endpoint in the Invoices API reference.
Refusing an invoice: new API for 1 September 2026
To meet the 1 September 2026 receiving mandate, ERPs must build support for a new, dedicated Maventa endpoint that refuses a received invoice.
When a buyer refuses an invoice, the ERP calls POST /v1/invoices/{id}/responses/fr/refused with:
- a refusal
reason_code(required): why the invoice is being refused. - a
requested_action_code(optional): what the buyer expects the seller to do about the refusal. - a
comment(optional): free text.
Refusal reason codes
The refusal reasons are defined in XP Z12-012 Annexe A. XP Z12-014, which describes the B2B use cases, refers to that list rather than defining its own. Of those reasons, 13 apply to B2B refusals, and the endpoint accepts exactly those. The public-sector (B2G) reasons are not accepted, because a B2B refusal carrying one of them fails French validation.
The 13 B2B refusal reason codes
| Code | Reason |
|---|---|
TX_TVA_ERR |
Incorrect VAT rate (taux de TVA erroné) |
MONTANTTOTAL_ERR |
Incorrect total amount (montant total erroné) |
CALCUL_ERR |
Calculation error on the invoice (erreur de calcul de la facture) |
NON_CONFORME |
Missing legal mention (mention légale manquante) |
DOUBLON |
Duplicate invoice, already issued or received (facture en doublon) |
DEST_ERR |
Wrong recipient (erreur de destinataire) |
TRANSAC_INC |
Unknown transaction (transaction inconnue) |
EMMET_INC |
Unknown issuer (émetteur inconnu) |
CONTRAT_TERM |
Contract has ended (contrat terminé) |
DOUBLE_FACT |
Double invoice (double facture) |
CMD_ERR |
Purchase order number incorrect or missing (n° de commande incorrect ou manquant) |
ADR_ERR |
Incorrect e-invoicing address (adresse de facturation électronique erronée) |
REF_CT_ABSENT |
Contractual reference needed to process the invoice is missing (référence contractuelle manquante) |
Requested action codes
A refusal can also state what the buyer expects the seller to do about it. The requested_action_code carries that as a code, so the seller’s service provider can automate the correction instead of reading it out of a free-text comment.
The field is optional and has no default. Leave it out when the buyer has not asked for anything specific: France defines no mapping from a reason to an action, and only the buyer knows whether they want a corrective invoice or a credit note.
The 7 requested action codes
| Code | Action |
|---|---|
NOA |
No action required (aucune action requise) |
PIN |
Further information required (information complémentaire requise) |
NIN |
Issue a corrective invoice (créer une facture rectificative) |
CNF |
Issue a full credit note (créer un avoir total) |
CNP |
Issue a partial credit note (créer un avoir partiel) |
CNA |
Refund the invoice payment (rembourser le paiement de la facture) |
OTH |
Other (autre) |
Maventa then generates the Refused (Refusée) CDAR message and transmits it to MySupply, which passes it on through the regulated network to the sender’s platform and reports it to the tax authority.
Refusal is only possible for invoices received through the French regulated system; a request for any other invoice is rejected (422). It is a terminal state: once an invoice carries a terminal response it cannot be refused again (409), and the sender must issue a new invoice if needed.
See the Refuse an invoice endpoint in the Invoices API reference.
Submitting the Cashed status will follow in a later phase, through its own dedicated endpoint, alongside sending and e-reporting.
E-reporting
E-reporting covers transactions that fall outside the domestic regulated invoice flow: cross-border transactions and B2C sales. For these, Maventa automatically sends a copy of the invoice to MySupply whenever one is needed for e-reporting, and MySupply reports the transaction data to the French tax authorities. This is a later phase.
Cross-border transactions need no action from the partner, because Maventa recognises them from the country codes. A B2C sale does: the sender has to declare the receiver as a consumer when sending the invoice, so that it is e-reported rather than handled as regulated domestic traffic.
It applies when a French company:
- sends a cross-border invoice,
- sends a B2C invoice (marked with
recipient_type=consumer, see Marking an invoice as B2C), or - receives a cross-border invoice. Here Maventa automatically forwards a copy of the received invoice to MySupply; this receiving-side reporting follows in a subsequent phase.
Reporting frequency depends on the company’s VAT regime:
- Standard VAT regime (most larger companies): every 10 days.
- Simplified VAT regime (smaller companies): monthly, within 7 days after the end of the month.
Flagging companies on the simplified regime through the onboarding API will be supported in a later phase. For now it is not supported. If you have customers on the simplified regime at the moment, let Maventa know. Through MySupply, Maventa reports per invoice, as each qualifying invoice is sent or received.
Archiving
French law (Article L123-22 of the Commercial Code) requires companies to archive their complete invoice records, including all lifecycle status transitions (Deposited, Refused, Rejected, Cashed), for 10 years. This obligation sits with the company, not with the platform.
Maventa retains invoice data for the current and previous year only, roughly two years. Partners cannot rely on Maventa as the long-term store for French invoices and lifecycle statuses.
French lifecycle statuses are part of the legally required invoice record. Partners must capture and store them in their own systems within Maventa’s retention window, so their customers can meet the 10-year obligation.
What integrators need to do
Maventa builds and operates the French compliance infrastructure with the help of MySupply. As an integrator, you connect to Maventa’s API and expose the capability to your own customers.
For receiving (1 September 2026):
- Register your customers through Maventa’s API during onboarding, using their SIREN or SIRET. MySupply then registers them in the French Annuaire for domestic traffic automatically. If a customer needs a routing code or branch suffix in their Annuaire address, contact Maventa Support, as that registration has to be made manually. See How the 0225 endpoint identifier is built.
- Set the real country code for companies and invoice recipients in overseas territories, rather than
FRfor everything French. Routing into the regulated network depends on it. See Which territories the mandate covers. - For cross-border traffic, register the company to receive over Peppol yourself, the same as any other Peppol registration. Use the same identifier the company account was created with, so the Peppol scheme matches.
- Download received invoices through Maventa’s API. See Formats you need to support.
- Build support for the new refusal API, so a buyer can refuse a received invoice. Let the buyer pick the refusal reason, and pass on what they expect the seller to do about it. See Refusing an invoice.
For sending and e-reporting (later phases):
- Send outbound invoices via Maventa’s API.
- Mark consumer invoices with
recipient_type=consumer, so Maventa can separate B2C from domestic B2B traffic. The value is available now, see Marking an invoice as B2C. - Handle the lifecycle statuses returned.
- Activate AutoScan for customers who receive invoices from abroad on paper or by email. Scanning is not automatic, so make it part of your customers’ process to always send received email and printed invoices to AutoScan.
- During onboarding, flag each customer’s VAT regime and whether they are on TVA sur les encaissements (which requires the Cashed status).
What comes next
Receiving compliance is the first milestone for 1 September 2026. Sending, e-reporting, and the remaining lifecycle statuses are being rolled out in later phases. This page will be updated with detailed documentation, including API specifications, as each capability becomes available.