Skip to main content

Introduction

In this guide, you’ll learn how to issue invoices to French public institutions using Chorus Pro. It will walk you through:
  1. Understanding Chorus Pro and its format requirements
  2. Setting up the invoice submission workflow
  3. 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
In GOBL, these formats are handled via addons that you must add to each invoice. You’ll see examples of this further below.

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.
These instructions apply to both the sandbox and live environments. The UN/CEFACT CII and Chorus Pro apps must already be connected and the supplier registered — this is covered in the supplier registration guide.
1

Configure invoice workflow

Add a new workflow to your workspace for issuing invoices. You can start with the template below.

Chorus Pro invoice workflow

Add to my workspace →
Keep the workflow ID at hand as you’ll need it later.

Send an invoice

Once a supplier is registered, you can send invoices to French public institutions through Chorus Pro.
1

Create an Invoice

Use the Create an entry endpoint to create a new invoice. Include an invoice object in the data field.
In this example, we’re issuing a Chorus Pro invoice for business-to-government transactions in France. Chorus Pro is the mandatory platform for submitting invoices to French public sector entities.Notice:
  • the minimal version in the first tab contains only the essential fields required to create the B2G invoice,
  • the fr-choruspro-v1 addon 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.
A non-French supplier invoicing a French public sector entity through Chorus Pro. Chorus Pro accepts foreign suppliers — the customer’s SIRET is what anchors the document to the right administration.Notice:
  • the supplier carries a DE tax ID and address, while the customer keeps its SIRET identity,
  • the fr-choruspro-v1 add-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.
A credit note (avoir) reversing part of a previously submitted Chorus Pro invoice.Notice:
  • the type is set to credit-note, so the document is rendered with the UNTDID document type 381,
  • the preceding array references the original invoice by series, code, and issue_date, with a reason for the correction — Chorus Pro links the avoir to the original submission through this reference,
  • both parties keep their SIRET identities, exactly as on the original invoice, and,
  • the lines describe only the amounts being credited; totals are calculated automatically when running gobl build.
Review the example above. Notice that you need both the eu-en16931-v2017 and the fr-choruspro-v1 addon. These addons enable all the necessary validations in your GOBL invoice.
2

Send to Chorus Pro

Send the invoice to Chorus Pro using the Create a job endpoint. Use:
  • The invoice’s silo entry UUID from the previous step
  • The Chorus Pro Invoice workflow ID from the Setup section
The system generates a CII XML file with Chorus Pro extensions and submits it to the platform.
Invoice sent to Chorus Pro
3

Track Invoice Status

After submission, track your invoice in Chorus Pro using the invoice identifier (series plus code).
Chorus Pro allows document modifications after submission. If a document is rejected or contains errors, update the GOBL details and resubmit to the same workflow until the document is accepted. Once accepted, do not modify the invoice.
The invoice identifier in Chorus Pro corresponds to your GOBL invoice series and code combined. This identifier helps you locate and track invoices across both systems.

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.
Chorus Pro primarily supports CII format based on EN16931. Invopop currently focuses on CII with plans to add additional formats in the future.
French businesses need a SIRET number. Foreign businesses can use their local tax identifier, but should verify acceptance with the receiving French institution.
Yes, you can modify and resubmit invoices until the receiving institution accepts them. Once accepted, invoices become locked and cannot be modified.
Use your GOBL invoice series and code combined as the invoice identifier in the Chorus Pro portal to locate your submitted invoices.
Chorus Pro has specific file size and format requirements. Invopop handles these automatically when generating CII XML files from your GOBL invoices.
The recipient’s SIRET (or equivalent identifier) plus a Chorus Pro service code where applicable. Invopop generates EN 16931 CII XML by default — UBL is also accepted by Chorus Pro.
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

Participate in our community

Ask and answer questions about invoicing in France →