- Workflows: sending and receiving workflows for French documents (payments, statuses and invoices).
- Sending: recording the invoice, generating the format, transmitting over Peppol, and forwarding the F1 copy to the PPF.
- Receiving: detecting the inbound format, importing it into GOBL, and recording it against your registered party.
- Invoice formats: UBL, CII, and Factur-X and how to choose between them.
- Self-billing: how autofacturation maps onto the same send and receive workflows using the
self-billedtag. - Example invoices: minimal GOBL documents and their built versions, ready to paste into the GOBL builder.
Workflows
These workflows are shared between invoice and status documents. The same workflow processes the different schemas and will perform different actions depending on the document type.Sending
The send workflow records the invoice for compliance, generates the chosen format, transmits it to the receiver’s PA over Peppol, and forwards the F1 copy to the PPF as the fifth corner. The PPF record document step validates SIRENs and checks both parties against the Annuaire. Documents where either side is missing are rejected and should branch into the reporting flow for non-regulated transactions.PPF send invoice
- Image
- JSON

Receiving
The receive workflow detects the inbound format, imports it into a GOBL document, and records it against your registered party. The same workflow handles UBL, CII, and Factur-X — the format-detection branch routes each payload to the correct importer.PPF receive invoice
- Image
- JSON

Invoice formats
The PA specification accepts five formats. In practice the three base formats below cover essentially all real-world traffic, and Invopop supports both sending and receiving on all three.Billing mode
Mandatory on every flux 2 and flux 10 B2B invoice and set in GOBL undertax.ext.fr-ctc-billing-mode. The prefix carries the nature of the operation: B goods (biens), S services, M mixed, plus a suffix for the payment context.
fr-ctc-flow2-v1 addon reference.
Suffix 7 covers invoices issued after the sale was already cashed in and reported through e-reporting. For example, a company requesting a B2B invoice after paying a restaurant bill. Marking it S7/B7 tells the PPF not to count the VAT a second time.
Suffix 1 is the ordinary case — a plain invoice submitted for payment. Left unset, the add-on defaults the mode to M1 (M2 when fully paid) — pin the prefix that matches the nature of the operation, as the example invoices do.
VAT tax keys → UNTDID 5305
GOBL sets theuntdid-tax-category (and cef-vatex exemption reason where one applies) from the tax key on each line — you pick the key, the add-on derives the codes:
Self-billing
In self-billing (also called autofacturation), the customer, rather than the supplier, creates and issues the invoice on the supplier’s behalf. The buyer’s platform acts as the sending PA and triggers the flow 1 reporting to the PPF, while the supplier’s platform receives the invoice. Invopop covers self-billing with the same send and receive workflows described above. The only difference is on the document, which carries theself-billed tag.
untdid-document-type extension set to 389. The fr-ctc-flow2-v1 add-on derives that code from the self-billed tag automatically, so you never set it yourself.supplier, and the buyer the customer. When Invopop detects the tag, it acts on behalf of the customer and adjusts the flow automatically:
- The customer, rather than the supplier, is validated as the registered party.
- The invoice is delivered over Peppol to the supplier’s PA.
- The invoice is recorded and forwarded to the PPF as a self-billed invoice.
legal note, as shown in the example below.
Step by step
How each step of the self-billing use case maps to an action in Invopop, on both the buyer (sending) and supplier (receiving) side. Statuses are built and exchanged as described in the status guide.Example invoices
Each example below pairs a hand-authored minimal GOBL invoice with the built version produced bygobl build. Paste either into the GOBL builder to preview the document, or use the minimal version as a starting point for your own integration.
PA B2B invoice (domestic)
PA B2B invoice (domestic)
fr-ctc-flow2-v1 add-on drives validation for the PA e-invoicing flow.Notice:- both parties carry a
SIRENidentity withiso-scheme-id0002and apeppolinbox under scheme0225so the workflow can route via Peppol, fr-ctc-billing-modeS1marks the standard submission (dépôt) of a services invoice;untdid-document-type380confirms the commercial invoice type,- the
payment,payment-method, andpayment-termnotes carry the French legal-mention text (penalty clauses, late-payment terms, early-payment discount), each tagged with the appropriate UNTDID 4451 subject code, ordering.coderecords the customer’s purchase order reference.
PA B2B invoice (building subcontracting, autoliquidation)
PA B2B invoice (building subcontracting, autoliquidation)
fr-ctc-flow2-v1) even though it carries no VAT — it is not e-reporting.Notice:- the VAT combo uses the
reverse-chargekey, which setsuntdid-tax-categoryAEand produces a0.00VAT total, with no tax rate or amount on the line, - the
reverse-chargenote text is set explicitly to cite article 283-2 nonies (subcontracting); left to the regime default it would cite the generic article 283-1, fr-ctc-billing-modeisS1— a plain services submission: the reverse charge is carried entirely by the VAT key and note.S5(subcontractor invoice) applies only to subcontracting with payment delegation (paiement direct), which is not the case here,- the reverse charge only applies where the customer is a taxable person — invoicing a non-taxable property owner would carry standard VAT instead.
PA B2B credit note
PA B2B credit note
preceding array references the original invoice by series, code, and issue date.Notice:typeiscredit-noteanduntdid-document-typeis381(commercial credit note),- the
precedingblock makes the link to the original invoice explicit — required for PA matching at the PPF.
PA B2B advance payment invoice
PA B2B advance payment invoice
- the
prepaymenttag setsuntdid-document-typeto386(advance payment invoice), - no billing mode is set explicitly: the add-on defaults
fr-ctc-billing-modetoM1(submission of a mixed invoice — here a service plus a good); the advance nature is carried by the document type, not the billing mode, - the final invoice issued at delivery normally references this advance to net it off the total.
PA B2B final invoice (after down payment)
PA B2B final invoice (after down payment)
FAC 2024-AV-001) is netted off the total.Notice:fr-ctc-billing-modeis pinned toM4(mixed, final invoice after down payment); left unset it would default back toM1,- flow 2 forbids advance-payment document types (386, 500, 503) on final invoices, so
untdid-document-typestays380(BR-FR-CO-08), payment.advancesrecords the 8,400.00 already paid, referencing the advance invoice —totals.duecomes out to the remaining 12,000.00,- the due-date payment terms cover only the outstanding balance.
PA B2B invoice after a B2C sale (VAT already collected)
PA B2B invoice after a B2C sale (VAT already collected)
fr-ctc-billing-modeis pinned toS7(services, VAT already collected): the VAT was already reported with the B2C sale, so this invoice must not re-declare it. Left unset, the add-on would default to an already-paid mode and the VAT would be counted twice,B7is the goods counterpart — e.g. retail goods sold over the counter and invoiced to a business afterwards,- the 100% advance records the on-site card payment, leaving
totals.dueat0.00, - restaurant meals carry the intermediate 10% VAT rate.
PA B2B self-billed invoice (autofacturation)
PA B2B self-billed invoice (autofacturation)
fr-ctc-flow2-v1).Notice:- the
self-billedtag setsuntdid-document-typeto389(self-billed invoice) — supplier and customer keep their real commercial roles, the tag records that the customer produced the document, - the PA validation flips the routing check on self-billed types: it is the customer, as issuer, that must carry the
0225inbox matching its SIREN, - the
legalnote carries the mandatory Autofacturation mention, auto-tagged withuntdid-text-subjectABL; the standard French payment mentions (PMT, PMD, AAB) are filled with regime defaults at build time, - the reduced 5.5% VAT rate applies to the foodstuffs being supplied.
Factur-X B2B invoice
Factur-X B2B invoice
fr-facturx-v1 add-on for the Factur-X format with fr-ctc-flow2-v1, so the same document is also valid for the PA e-invoicing flow.Notice:- the two add-ons compose:
fr-facturx-v1drives the Factur-X output whilefr-ctc-flow2-v1applies the PA validation; theeu-en16931-v2017profile they share is added automatically as a dependency, - each party declares only a
SIRETidentity — at build time the regime derives the legalSIRENidentity (iso-scheme-id0002) from it, next to the0225Peppol inboxes required for PA routing, fr-ctc-billing-modeisS2(services, already paid) because the 100% advance settles the invoice at issue; that mode requires payment terms whose due dates cover the total, leavingtotals.dueat0.00,- the French payment mentions (PMT, PMD, AAB) are filled with regime defaults at build time.
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.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.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