- Customers subject to VAT in France are handled through the e-invoicing flow for domestic B2B transactions, with status updates reported back throughout.
- Customers not subject to VAT in France — international or B2C transactions, and territories excluded from the mandate such as Guyane, Mayotte, New Caledonia and French Polynesia — go through e-reporting instead.
Workflow
A single template covers both French flows and picks between them automatically from the result of the Lookup in Directory step.- found result means the customer is subject to e-invoicing, so Invopop records the document in the Annuaire, forwards it to the PPF, and sends it over Peppol.
- not found result means the transaction falls outside domestic e-invoicing — international B2B, B2C, or a customer in a territory excluded from the mandate — so it is recorded for e-reporting. For those, the Can Send action checks whether the customer is reachable on the Peppol network: if it is (a Belgian party, for example), the workflow sends the invoice over Peppol as well.
Chargebee France
- Workflow
- Code
Customer routing & identifiers
A single SIREN registered in the Annuaire can have several directory entries, registered under the same or different Plateformes Agréées. Each entry has a unique identifier — mapped to the Peppol inbox — in one of theSIREN, SIREN_SIRET, SIREN_SIRET_suffix or SIREN_suffix forms. When no Peppol inbox is set on the customer, Invopop defaults to 0225:SIREN, ignoring any SIRET present in the customer’s identities.
Use the custom fields below to control this. Set the Peppol inbox to target a specific directory entry, or provide the customer’s SIREN and SIRET so the directory lookup can resolve them. All three are configured as Single line text custom fields (or as metadata, using the hyphenated key):
E-reporting transaction fields
The e-reporting path applies thefr-ctc-flow10-v1 addon, which defines two invoice tax extensions. By default, the addon sets the billing mode to M1 — or M2 when the invoice is fully paid — and the B2C transaction category to TNT1. Use the custom fields below to override these defaults:
cf_ prefix). If you prefer to use custom fields instead, replace hyphens with underscores and add the cf_ prefix. See Custom fields & metadata for details.FAQ
Invoicing questionsHow do I configure my workspace for French invoicing?
How do I configure my workspace for French invoicing?
How can I view an XML attached to a PDF?
How can I view an XML attached to a PDF?
Attachments section in Adobe Acrobat Reader, or a tool like the SysTools PDF Extractor.Is Invopop ready for the September 2026 mandate?
Is Invopop ready for the September 2026 mandate?
What GOBL addons are required for France PA?
What GOBL addons are required for France PA?
peppol-bis-v3. The forthcoming fr-ctc-flow10-v1 addon covers e-reporting payloads — separate from the e-invoicing flow.Is a self-billed invoice a different document type in France?
Is a self-billed invoice a different document type in France?
untdid-document-type extension set to 389. In GOBL you never set the code yourself: add the self-billed tag and the fr-ctc-flow2-v1 add-on applies it automatically. See Self-billing for the full flow.Why was my VAT-exempt invoice never sent to the PPF?
Why was my VAT-exempt invoice never sent to the PPF?
VATEX-FR-CGI261* code, Invopop records it but sends no F1 and raises no lifecycle status, and the dashboard shows it as Exempt. Keep issuing the invoice to your customer as usual. An invoice that mixes exempt and taxable lines is still sent normally, and so is VATEX-FR-FRANCHISE. See VAT-exempt invoices.How many pops does a B2B e-invoice through France PA cost?
How many pops does a B2B e-invoice through France PA cost?
What does the record document step check against the Annuaire?
What does the record document step check against the Annuaire?
What should I do if the customer isn't registered in the Annuaire?
What should I do if the customer isn't registered in the Annuaire?
- Run a Directory lookup against the customer’s SIREN before you generate the invoice — ideally in a separate validation workflow run against customer data, so you can prompt them to fix their registration ahead of time.
- If the SIREN has no effective entry, route the invoice through your reporting workflow rather than the PA send workflow.
- If it slips through, the send workflow degrades rather than failing: the Verify document can be sent step branches and forwards the invoice to the PPF as déposée – non transmise.
Should I check the Annuaire at order time or at invoice time?
Should I check the Annuaire at order time or at invoice time?
How do I know whether an invoice is B2G?
How do I know whether an invoice is B2G?
Do I need a Chorus Pro account to invoice French public entities?
Do I need a Chorus Pro account to invoice French public entities?
Where do I put the service code and the numéro d'engagement on a B2G invoice?
Where do I put the service code and the numéro d'engagement on a B2G invoice?
private-id identity on the customer, and the commitment number (numéro d’engagement juridique) is the purchase order reference in ordering.purchases[0].code. Both are supplied by the public entity. The public sector guide lists every field.What should we do if the customer doesn't belong to the Peppol network?
What should we do if the customer doesn't belong to the Peppol network?
- 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
How do I handle B2C invoices in Peppol?
How do I handle B2C invoices in Peppol?
- Add an If/Else step that checks for a customer inbox using
count(customer.inboxes, true) > 0. - On the
falsebranch, generate a PDF and email it to the customer, then stop the flow.
How do I handle 'Receiver Not Found' errors?
How do I handle 'Receiver Not Found' errors?
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.Should I set the $regime field when using Peppol?
Should I set the $regime field when using Peppol?
Where do I find Peppol GOBL documentation?
Where do I find Peppol GOBL documentation?
eu-en16931-v2017 addon for the field and validation rules Peppol BIS Billing 3.0 builds on, and the Peppol app reference for supported document types and Participant ID schemes.How do I import received invoices in France?
How do I import received invoices in France?
How does Invopop convert received French invoices into GOBL?
How does Invopop convert received French invoices into GOBL?
gobl.peppol; CII and Factur-X via gobl.cii. The original structured XML (or PDF/A-3 with embedded XML) is preserved as a silo entry attachment.How do I import received invoices via France PA?
How do I import received invoices via France PA?
What format do received France PA invoices arrive in?
What format do received France PA invoices arrive in?
Can I receive invoices at more than one platform (PDP) for the same company?
Can I receive invoices at more than one platform (PDP) for the same company?
SIREN— the company as a whole.SIREN_SIRET— a specific establishment.SIREN_SIRET_ROUTINGCODE— a site, department, or workflow within an establishment.SIREN_SUFFIX— a custom routing suffix.
What is checked before a received invoice is recorded?
What is checked before a received invoice is recorded?
- Syntax — the invoice XML against the Flux 2 schematron for its syntax.
- Addressing — both parties carry a SIREN registered in the Annuaire, the transport addresses belong to the parties the invoice names, and the invoice is addressed to a party registered in your workspace.
- Unicity — the invoice is not already recorded for this party, number and year.
What reason does a rejected invoice come back with?
What reason does a rejected invoice come back with?
213 Rejetée status returned to the platform that sent the invoice:REJ_SEMAN— rejet pour erreur sémantique, when the invoice fails the Flux 2 schematron.ADR_ERR— adresse de facturation électronique erronée, when the addressing control fails.REJ_UNI— rejet sur contrôle unicité, when the invoice is already recorded.
How do I import received invoices via Peppol?
How do I import received invoices via Peppol?
Can I remove UBL or CII from the 'Peppol receive invoice' workflow if I only use one format?
Can I remove UBL or CII from the 'Peppol receive invoice' workflow if I only use one format?
How are incoming Peppol documents converted into GOBL?
How are incoming Peppol documents converted into GOBL?