200 Déposée status reach the PPF unchanged, and the same send workflow handles every customer. Only delivery differs: the invoice goes to Chorus Pro instead of Peppol. Invopop holds the connection with Chorus Pro, so there is nothing to register on the public portal.
This guide covers:
- Who this guide is for: French companies on the PA use this path; foreign entities use the standalone Chorus Pro app.
- How routing works: the record step decides whether a customer is a public entity, and the workflow branches on it.
- Setup: the send workflow with the public-sector branch.
- What a public buyer needs: the SIRET, service code and commitment number, and the limits Chorus Pro adds on top of the norm.
- Following the invoice: the Chorus Pro lifecycle and how the job reports it.
- Receiving from a public entity (G2B): public bodies can now invoice you through the same channel.
- Testing in sandbox and example invoices.
Who this guide is for
There are two ways to reach Chorus Pro through Invopop, and which one applies depends on the supplier, not the customer.Prerequisites
- A registered supplier: follow the registration guide to connect the France app and register the party in the Annuaire. The same registration serves B2B and B2G.
- The public entity’s identifiers: its SIRET and, where the entity requires them, a service code and a commitment number. The public entity gives you these; see What a public buyer needs.
- The invoicing guide: this page builds on the Invoicing in France guide and assumes you know how recording, formats and the PPF copy work.
How routing works
You do not mark an invoice as B2G yourself. When the Record outgoing document step records an invoice, it looks the customer up in the Annuaire. A customer whose line is routed to Chorus Pro’s public sphere, under matricule9999, is a public entity, and the invoice is flagged b2g. The flag is only set while the line is in force, so a party that leaves Chorus Pro stops being B2G.
The Is B2G? step then reads that flag and answers true or false, so the workflow can branch on it the same way it branches on Directory lookup:
Record
b2g when the customer is a public entity. The Chorus Pro rules are applied at this point, so a breach is reported here rather than minutes later by Chorus Pro.Is B2G?
Send to Chorus Pro
Forward document to PPF
200 Déposée status to the PPF, exactly as for a B2B invoice.Setup
All of the following steps must be carried out from the Invopop Console. The PPF send document (public sector) template is the regular send workflow with the Is B2G? branch inserted after the record step. Use it in place of the regular one: it handles every customer, public or not, so you need only one send workflow.PPF send document (public sector)
- Workflow
- Code
What a public buyer needs
A B2G invoice is a regularfr-ctc-flow2-v1 invoice. Chorus Pro needs a few more things on it to find the public entity and route the invoice to the right department.
Rules checked at record
Chorus Pro adds its own management rules on top of the norm,BR-FR-CPRO-01 to 50, and they apply only to invoices bound for the public sphere. None of them is covered by the standard schematrons, so without a local check the first time you hear of a breach is Chorus Pro’s rejection, which names a rule but not the field.
Once an invoice is flagged b2g, the record step enforces the rules below and reports every breach at once, so a single round of fixes is enough.
FR76 3000 6000 0112 3456 7890 189 is 33 characters and is refused. Write it without spaces.
Rules that depend on data Invopop does not hold (whether the entity requires a service code or commitment number, 11 to 13), that the norm itself marks as unverifiable, or that turn on the S3 billing mode are not checked locally and remain enforced by Chorus Pro.
Following the invoice
Send to Chorus Pro deposits the invoice and then waits. Chorus Pro first acknowledges the deposit as a whole, then walks the invoice through its own lifecycle, which is richer than the PPF’s accepted or rejected pair. Invopop keeps the codes as Chorus Pro sends them, so the workflow and the France dashboard show the same vocabulary as the Chorus Pro portal.203) or any later code arrives. Later statuses keep updating the invoice after the job has finished, and each is visible on the invoice in the France dashboard. Chorus Pro does not always deliver statuses in the order it applied them, so the invoice keeps whichever carries the latest timestamp.
A 213 from Chorus Pro names the rule that failed. If it is one of the rules checked at record, the invoice was flagged b2g after the fact; otherwise fix the field the rule names and send a new invoice.
Receiving from a public entity (G2B)
G2B is the same exchange in reverse: a French public entity issues an invoice to your business. It is new with the 2026 reform. Public bodies previously had no route to invoice the private sector electronically. The path differs from a B2B invoice in where it comes from, not in what you do with it:- The public entity submits the invoice to Chorus Pro, in UBL or Factur-X.
- Chorus Pro delivers it to Invopop, addressed to the Annuaire line your party is registered under. That line decides which workspace receives it, so the party must be registered before any public entity can invoice it.
- Receive document from Chorus Pro converts it to GOBL and hands it to your receive workflow, which records it against your party with the same controls as an inbound Peppol invoice.
210 and its own motifs arrive as their AFNOR equivalents.
Testing in sandbox
A sandbox workspace delivers B2G invoices to Chorus Pro’s qualification environment, and the record step reads the qualification Annuaire to decide whether a customer is a public entity. Both are separate from production, so a public entity you find in the production Annuaire is unknown there, and the invoice routes to Peppol instead. To exercise the Chorus Pro branch in sandbox, use a customer registered as a public entity in the qualification Annuaire. Contact us for test buyer details if you don’t have any.Example invoices
PA B2G invoice (public buyer)
PA B2G invoice (public buyer)
fr-ctc-flow2-v1 add-on as a domestic B2B invoice, with the data Chorus Pro needs on top.Notice:- both parties give a
SIRETidentity, which the add-on tags withiso-scheme-id0009and from which it derives theSIREN, - the customer carries a
private-ididentity with the public entity’s service code, which the add-on tags with scheme0224, ordering.purchases[0].codeholds the numéro d’engagement juridique andordering.contracts[0].codethe contract reference, each 50 characters or fewer,- the invoice number is 20 characters or fewer and the IBAN is written as 27 characters without spaces, as Chorus Pro requires.
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.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.
🇫🇷 Invopop resources for France
🇫🇷 Invopop resources for France