Introduction
In this guide, you’ll learn how to issue invoices to French public institutions using Chorus Pro. It will walk you through:- Understanding Chorus Pro and its format requirements
- Setting up the invoice submission workflow
- Submitting your first invoice to a French public institution
What is Chorus Pro?
Chorus Pro is a mandatory service provided by the French government for invoicing French public institutions. The platform allows businesses to upload invoices in multiple e-invoicing formats and track them throughout the French public administration process. All invoices to French public sector entities must be submitted through Chorus Pro. The platform supports various e-invoicing formats including Cross Industry Invoice (CII), and implements the European Norm 16931 (EN16931) European standard for electronic invoicing with additional French-specific requirements.Understanding Chorus Pro format requirements
Chorus Pro accepts invoices in CII format based on the EN16931 European standard. However, it adds specific French extensions and validation requirements: EN16931 Standard The EN16931 defines the semantic data model for electronic invoices. The standard ensures interoperability across European Union (EU) member states while allowing for country-specific extensions. Chorus Pro Extensions Chorus Pro extends the base EN16931 standard with additional French requirements:- SIRET number validation for French entities
- Specific invoice types for different purposes
- Service codes for government departments
Prerequisites
To issue invoices through Chorus Pro, you will need:- A registered supplier: follow the Chorus Pro supplier registration guide to connect the required apps, create the Chorus Pro credentials, and register the supplier before issuing.
- Customer details, including the SIRET number of the public institution being invoiced.
Setup
Configure your Invopop Workspace for Chorus Pro invoicing.Configure invoice workflow
Chorus Pro invoice workflow
- Workflow
- Code
Send an invoice
Once a supplier is registered, you can send invoices to French public institutions through Chorus Pro.Create an Invoice
Chorus Pro B2G Invoice
Chorus Pro B2G Invoice
- the minimal version in the first tab contains only the essential fields required to create the B2G invoice,
- the
fr-choruspro-v1addon ensures the document will be validated using the Chorus Pro rules built into the GOBL library, - the customer must be a French public sector entity with a valid SIRET number,
- specific Chorus Pro extensions and identifiers are required for public procurement (such as service codes and commitment numbers),
- there are no totals or calculations in the minimal version; all these will be calculated automatically when running
gobl build, - the built version in the second tab shows the normalized document with calculated totals, line item sums, TVA breakdowns, and automatically generated fields,
- the invoice will be formatted according to Chorus Pro requirements and submitted through the platform, and,
- all invoices to French public entities must be submitted through Chorus Pro.
Chorus Pro cross-border invoice (DE → FR)
Chorus Pro cross-border invoice (DE → FR)
- the supplier carries a DE tax ID and address, while the customer keeps its
SIRETidentity, - the
fr-choruspro-v1add-on still applies — Chorus Pro routing rules are driven by the receiver, not the issuer, - VAT is reported as standard French VAT because the place of supply is France; cross-border reverse-charge cases would set the line tax accordingly.
Chorus Pro Credit Note
Chorus Pro Credit Note
- the
typeis set tocredit-note, so the document is rendered with the UNTDID document type381, - the
precedingarray references the original invoice byseries,code, andissue_date, with areasonfor the correction — Chorus Pro links the avoir to the original submission through this reference, - both parties keep their
SIRETidentities, exactly as on the original invoice, and, - the lines describe only the amounts being credited; totals are calculated automatically when running
gobl build.
eu-en16931-v2017 and the fr-choruspro-v1 addon. These addons enable all the necessary validations in your GOBL invoice.Send to Chorus Pro
- The invoice’s silo entry UUID from the previous step
- The Chorus Pro Invoice workflow ID from the Setup section

Track Invoice Status
FAQ
How 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.What invoice formats does Chorus Pro support?
What invoice formats does Chorus Pro support?
Do I need a SIRET number to use Chorus Pro?
Do I need a SIRET number to use Chorus Pro?
Can I modify invoices after sending to Chorus Pro?
Can I modify invoices after sending to Chorus Pro?
How do I find my invoice in Chorus Pro?
How do I find my invoice in Chorus Pro?
Are there file size limits for Chorus Pro invoices?
Are there file size limits for Chorus Pro invoices?
What GOBL fields are required for Chorus Pro?
What GOBL fields are required for Chorus Pro?
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?
oasis-ubl-v2 addon and the Peppol app reference for required fields, supported document types, and Participant ID schemes.🇫🇷 Invopop resources for France
🇫🇷 Invopop resources for France