Flowie
Compliance · 🇫🇷 France

France — Portail Public de Facturation (PPF)

TL;DR

Deadlines

DateWhoWhat
2026-09-01All FR businesses (any size)Receive e-invoices in Factur-X, UBL, or CII.
2026-09-01Large & mid-sized (GE / ETI) businessesSend e-invoices; e-reporting starts.
2027-09-01SMEs & micro-entrepreneursSend e-invoices.
ContinuousAllLifecycle status reporting (e-reporting) within 24h.
DGFiP can — and does — shift these dates
The reform was already postponed once (from 2024 to 2026). Watch the changelog; we update this page within 24h of any official communication.

Background — Y- and 4-corner models

France adopted the Y-model (also called the "5-corner model"): every invoice flows through a registered platform — the public PPF or a private PA (Plateforme Agréée, formerly PDP) — which forwards it to the recipient's platform and sends a copy of the headers to PPF for tax-administration.

Sender → PA / PDP (Flowie) → [PPF receives extract for e-reporting]
                           → Recipient PA / PDP → Recipient ERP
PA vs PDP — what changed in 2025
The original 2024 ordonnance used the term PDP (Plateforme de Dématérialisation Partenaire). A 2025 DGFiP rename to PA (Plateforme Agréée) modernised the label, but the legal regime, accreditation process, and our number (0040) are unchanged. Most existing contracts, market communication, and even the official DGFiP list URL still say "PDP". This page leads with PA but keeps PDP visible — both refer to the same thing.

The "4-corner" model (used by Italy, Belgium, and the rest of Peppol) is corner1→corner2→corner3→corner4 without the central tax-administration leg. France's 5th corner is the leg to PPF.

Flowie's PA (Plateforme Agréée) status

FieldValue
PA / PDP number0040
Legal entityFlowie SAS
SIREN987 654 321
Authorized formatsFactur-X 1.0.07, UBL 2.1 (Peppol BIS 3), UN/CEFACT CII D16B
Authorized flowsB2B, B2G, B2C-receipt
Audit certificatePDP-0040-2026.pdf
DGFiP listingimpots.gouv.fr/pdp

Required fields for French invoices

The Peppol BIS 3.0 schema is mandatory; PPF adds a CIUS-FR profile on top. The most common gotchas:

Routing & the Annuaire

PPF maintains the Annuaire — the official directory of every French business and which PDP it uses. Flowie syncs nightly. To look up a French recipient's preferred PDP:

curl …/afnor/directory-service/v1/siret/code-insee:12345678900012 \
  -H "Authorization: Bearer $KEY"

The response includes the recipient's PDP code. We use this automatically on every send to a French Peppol ID — you never need to look it up yourself.

Lifecycle statuses (statuts du cycle de vie)

New — the interactive lifecycle reference
This section is the summary. The full referential — animated state diagram, mandatory / recommended / libre filters, per-status API code, CDAR field guide — lives on the Lifecycle explorer; the end-to-end implementation path (webhook handler, responsibility matrix, go-live checklist) is the Integration playbook.

The B2B reform mandates both e-invoicing and e-reporting — transmission of each invoice's lifecycle status to the DGFiP via your PA (Plateforme Agréée). The status set is fixed by AFNOR XP Z12-012 (CDAR field MDT-105): 14 codes, 200–213, in three tiers — 4 obligatoires (200, 210, 212, 213 — always produced, always reach the DGFiP concentrator), 5 recommandés (203, 204, 205, 206, 211) and 5 libres coded statuses (201, 202, 207, 208, 209 — optional between platforms). Anything outside 200–213 is a custom status that carries no official code and is not transmitted to the PPF.

Flowie emits these automatically when you call POST /documents/{id}/lifecycle. The 4 mandatory statuses (the ones the PPF/DGFiP require):

CodeStatut (FR)MeaningFlowie lifecycle
200DéposéeThe sending platform attests the invoice is received, checked & compliant — start of the lifecycle.submitted
210RefuséeThe buyer refuses the invoice in full — a deliberate business / commercial refusal (see below). Auto-cancels the invoice.rejected (buyer)
212EncaisséeThe supplier confirms payment received (partial or full). Feeds the VAT (CA3) pre-fill.paid
213RejetéeA functional control at the sending or receiving platform detected an anomaly — a technical / format rejection (see below). Auto-cancels the invoice.failed

The 10 optional statuses — 5 recommandés and 5 libres — emit them when the corresponding business event happens; they give your counterparty visibility but are not strictly required (and a platform must never fail an invoice because one didn't arrive):

CodeStatut (FR)TierMeaning
201Émise par la plateformeLibreThe sender's PA confirms it transmitted the invoice to the recipient's PA.
202Reçue par la plateformeLibreThe recipient's PA confirms receipt from the sender's PA.
203Mise à dispositionRecommandéThe recipient's PA has made the invoice available to the recipient.
204Prise en chargeRecommandéThe recipient acknowledges receipt of the invoice.
205ApprouvéeRecommandéThe recipient accepts the invoice in full.
206Approuvée partiellementRecommandéThe recipient accepts the invoice only partially.
207En litigeLibre*The recipient disputes all or part of the invoice without a full refusal.
208SuspendueLibreThe recipient requests supporting documents; processing is suspended.
209ComplétéeLibreThe supplier has supplied the awaited documents (resolves 208).
211Paiement transmisRecommandéThe recipient confirms the invoice was paid (or the supplier confirms a refund).

* 207 En litige reads libre in the v2.3 transmission table; some industry readings class it recommandé. Optional either way — see the tier guide.

Chorus Pro statuses are not B2B codes. "Mise en paiement" and "Mandatée" belong to the legacy Chorus Pro (B2G public-sector) flow, not the B2B 200–213 set. Their closest B2B equivalent is 211 Paiement transmis; in a PPF/B2B context treat them as libre. Likewise the code ranges 250/251/282 (données réglementaires), 300/301/303/304 (e-reporting), 400/401 (annuaire) and 500/501 (flux) are not invoice business statuses — don't map a lifecycle to them.

Listen for compliance.reported webhooks to know when each report lands. compliance.reported.failed means the PPF rejected the submission itself — see codes below.

Refus (210) vs rejet (213) — and their motifs

Dedicated reference: for the full treatment of the negative statuses — 210 Refusée, 213 Rejetée and 208 Suspendue (on hold), with the global-process diagram, per-status API calls and the cross-country mapping — see Refusal, rejection & on-hold. The summary below covers refus vs rejet.

Both statuses are mandatory and both auto-cancel the invoice (VAT cancelled; the supplier must issue a corrected invoice, and an avoir/credit note if the original was already accepted). They differ in who says no and why:

213 — Rejetée (rejet)210 — Refusée (refus)
WhoA platform (sending PA, receiving PA, or the PPF) — automatic.The buyer / recipient — a human, deliberate decision.
WhyNon-conformity: technical / syntactic / semantic / regulatory.A business disagreement about a valid, well-formed invoice.
WhenBefore the buyer validly processes the invoice. The norm splits it into « Rejetée à l'émission » (sender-side — never validly issued) and « Rejetée en réception » (caught receiving-side).After a valid invoice has been delivered to and seen by the buyer.

Typical rejet (213) triggers

Typical refus (210) reasons

The motif is coded — and the codes circulating online are fake. For both 210 and 213 (and « Rejetée à l'émission »/« en réception ») the CDAR status message carries the reason in two fields: MDT-113 (ReasonCode, a coded value drawn from a restricted controlled vocabulary — rule BR-FR-CDV-CL-09) plus an optional free-text MDT-114 (Reason). The literal motif strings widely circulated by vendor blogs and AI summaries — TX_TVA_ERR, REJ_UNI, REJ_COH, REJ_ADR, CMD_ERR, DOUBLE_FACT, ROUTAGE_ERR, CALCUL_ERR ("~45 codes / 6 families") — do not appear anywhere in the official AFNOR XP Z12-012; they are fabricated. The authoritative Code motif → Libellé list lives only in the « Tableau des motifs de STATUTS » sheet of the XP Z12-012 Excel annex inside the Spécifications externes B2B ZIP (current v3.2). Flowie surfaces whatever MDT-113/MDT-114 the platform returned verbatim on the document.lifecycle webhook and on GET /v1/documents/{id} — we do not invent a code. (International mapping note: BR-FR-CDV-CL-05 maps refus to UNTDID-1373 status 50 — Rejected, distinct from the French 210/213.)

French use cases & frameworks

Two different vocabularies get conflated here. The B2B reform uses the cas d'usage of AFNOR XP Z12-014. The older cadres de facturation (A1, A2…) are a legacy Chorus Pro (B2G public-sector) construct that the B2B reform does not reuse. And A / B1 / B2 / C are the circuits of the schéma en Y (which party uses the PPF vs a PA) — not invoice types.

B2B vs e-reporting — the big split

Cas d'usage B2B (AFNOR XP Z12-014)

XP Z12-014 enumerates the B2B business scenarios in three families (data-implementation, third-party, lifecycle-impacting). The count grows by version: v1.2 = 42 cas (Oct 2025), v1.3 = 44 cas (Feb 2026, adds case 43 international B2B e-reporting + case 44 DROM/COM/TAAF), and v1.4 = 45 cas (30 June 2026, adds case 45 auto-facture bidirectionnelle). This is the summary; the full referential — all 45 numbered, a deep dive on every theme, and how to model each with Flowie — is on the dedicated Use cases (XP Z12-014) page. The scenarios most relevant to an integration:

ThemeCas d'usageSummary
Acompte (advance / deposit)20–21, 32, 24, 34A deposit invoice (facture d'acompte), then a final invoice referencing it. 32 = monthly payments; 24 = arrhes; 34 = partial collection / cancellation.
Avoir / facture rectificative (credit note)no standalone caseA credit note is a first-class document type that must reference the original invoice and travel the same circuit — it is not its own numbered case. (18 = notes de débit; 22a/22b = escompte.)
Autofacturation (self-billing)19b, 23, 19a, 17bThe buyer or a third party issues the invoice for the seller (e.g. a marketplace). 19a = tiers facturant sous mandat; 23 = particulier ↔ pro.
Autoliquidation (reverse charge)no dedicated caseHandled as a VAT mention / attribute on the invoice, not a numbered case. (13 = sous-traitance paiement direct; 14 = co-traitance B2B.)
Tiers payeur / mandats / débours2–12, 15, 16, 17a, 39Third-party payers, payment intermediaries, transparent intermediaries (débours), subrogation.
TVA — régimes particuliers25, 29, 33, 42, 30Gift vouchers/cards (25); assujetti unique / VAT group (29); TVA sur marge (33); détaxe (42); TVA déjà collectée B2C↔B2B bridge (30).
B2C → e-reporting27, 28, 30Toll (27), restaurant receipts (28), B2C e-reporting bridge (30) — these are e-reporting, not invoice exchange.
International / intracommunautaire → e-reporting43 (43a/43b), 44Foreign-party and intra-community operations reported as data; 44 = DROM/COM/TAAF.
Edge cases1, 31, 35, 36, 37, 40, 41Multi-order/multi-delivery (1), mixed (31), notes d'auteur (35), secret professionnel (36), SEP (37), netting/compensation (40), barter (41).

Cadres de facturation (legacy Chorus Pro / B2G)

If you see A1A25 in a Flowie flow, that is the Chorus Pro (public-sector) mapping — what document is deposited and by whom — carried over for B2G, not part of the new B2B reform. The most common:

CadreMeaning
A1Dépôt par un fournisseur d'une facture (à régler ou avoir) — the standard case, the vast majority.
A2Dépôt d'une facture déjà payée (e.g. carte d'achat).
A3Dépôt d'un mémoire de frais de justice.
A4 / A5 / A7 / A8Works contracts: projet de décompte mensuel (A4), état d'acompte (A5), projet de décompte final (A7), décompte général & définitif signé (A8).
A9 / A10Demande de paiement d'un sous-traitant (A10 = marchés de travaux).
A12Facture / demande de paiement d'un cotraitant, validée par le mandataire.
A13A25Further works décomptes by cotraitant, MOE (maîtrise d'œuvre) or MOA (maîtrise d'ouvrage). (No A11 or A21 exist in the transmission table.)

PPF error codes

CodeMeaningFix
00025Invoice number doesn't follow PPF pattern.Use alphanumeric only; max 20 chars; no special characters except - and /.
00043Duplicate invoice number for this seller.Increment your numbering. PPF tracks (sellerSiret, number) tuples.
00058Missing Service Exécutant for public buyer.Set document.buyerReference.
00104SIRET unknown in Annuaire.Buyer hasn't registered yet — they must onboard before you can invoice them.
00200Schema validation error.Inspect error.details[] — usually a missing required field.
00306Recipient PDP rejected.Read the recipient PDP's reason; often Cadre de facturation mismatch.
00500PPF temporarily unavailable.We retry automatically; you'll see compliance.reported when it recovers.

Testing your French integration

Use these sandbox primitives:

What you want to testHow
Happy-path PPF acceptanceCompany VAT FR12345678901; simulateCompliance: "accept".
Service-Exécutant rejectionsimulateCompliance: "reject_00058"; send without buyerReference.
Annuaire missSend to 0009:00000000000000 → PPF returns 00104.
PPF outagesimulateCompliance: "timeout_30s" — exercise circuit breaker.
10-minute paid batchingMark as paid; use time-travel to skip 10 min and watch the report fire.

FAQ

Why does this page mix "PA" and "PDP"?

PDP (Plateforme de Dématérialisation Partenaire) was the original name used by the 2021 ordonnance and the 2024 reform documentation. The DGFiP renamed it to PA (Plateforme Agréée) in 2025. The legal regime, the accreditation criteria, and our number (0040) are unchanged — only the label moved. Both terms appear in market communication; we lead with PA but keep PDP visible because every existing contract, every backup of the DGFiP list, and most ERP integrations still use PDP.

Do I need a separate contract with the DGFiP?

No. Your contract with Flowie covers PA / PDP services. We handle the DGFiP relationship.

What happens if Flowie loses PA / PDP status?

PA authorization is renewed every 3 years. If for any reason ours lapses, we have a contractual fallback to route through PPF directly — your integration doesn't change. Discounted period guaranteed for any disruption.

Can I use my own PA / PDP for some invoices?

Yes — set settings.preferredPDP on the company. We fall back to your choice when the recipient's PA allows it.

Does Factur-X count as e-invoice or PDF?

Both. Factur-X is a hybrid — a human-readable PDF/A with a structured XML embedded. PPF accepts it as e-invoice; recipients can render the PDF if they don't process the XML. Flowie generates Factur-X by default for FR domestic invoices.

References

Primary sources (French government & EU regulator):

Industry analyses (independent confirmation of the timeline):