France — Portail Public de Facturation (PPF)
TL;DR
- From 1 September 2026, every French business must be able to receive e-invoices.
- From 1 September 2027, every large & mid-sized business must send e-invoices. SMEs follow on 1 September 2027 as well.
- Flowie is a registered Plateforme Agréée (PA) — number
0040. The DGFiP renamed PDP → PA in 2025; most market actors and existing contracts still use "PDP" interchangeably. - You don't talk to PPF directly. Send via
POST /v1/documents/sendas usual; we route through the right PA and report status to PPF. - Lifecycle changes (
approved,rejected,paid) are auto-reported within ~2 minutes.
Deadlines
| Date | Who | What |
|---|---|---|
| 2026-09-01 | All FR businesses (any size) | Receive e-invoices in Factur-X, UBL, or CII. |
| 2027-09-01 | Large & mid-sized FR businesses | Send e-invoices. |
| 2027-09-01 | SMEs & micro-entrepreneurs | Send e-invoices. |
| Continuous | All | Lifecycle status reporting (e-reporting) within 24h. |
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
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
| Field | Value |
|---|---|
| PA / PDP number | 0040 |
| Legal entity | Flowie SAS |
| SIREN | 987 654 321 |
| Authorized formats | Factur-X 1.0.07, UBL 2.1 (Peppol BIS 3), UN/CEFACT CII D16B |
| Authorized flows | B2B, B2G, B2C-receipt |
| Audit certificate | PDP-0040-2026.pdf |
| DGFiP listing | impots.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:
-
document.buyerReferencestringrequired for B2G
"Service Exécutant" code given to you by the public buyer. Without it, PPF rejects with
00058. -
document.orderReferencestringrequired for B2G
"Engagement Juridique" — public-procurement commitment number.
-
seller.additionalIdentifiers[siret]14 digitsrequired
SIRET (the SIREN + 5-digit establishment code). Flowie populates this from the registry on company creation.
-
document.note (Cadre de facturation)enumrequired
A1 (basic), A2 (deposit), … A24 (auto-billing). Defaults to A1; pass another only if you know what you're doing.
-
document.payment.ibanFR-IBANoptional
Required for credit-transfer payments. PPF doesn't enforce, but most public buyers do.
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 reporting (e-reporting)
The B2B reform mandates both e-invoicing and e-reporting — periodic transmission of transaction status to DGFiP. Flowie handles this automatically when you call POST /documents/{id}/lifecycle:
| Lifecycle status | PPF status code | Reported within |
|---|---|---|
under_review | 302 — Approuvé partiellement | 2 min |
approved | 304 — Approuvé | 2 min |
rejected | 309 — Refusé (with reason code) | 2 min |
paid | 402 — Encaissée | 10 min (batched) |
partially_paid | 401 — Encaissée partiellement | 10 min |
disputed | 308 — Litige | 2 min |
Listen for compliance.reported webhooks to know when each report lands. compliance.reported.failed means PPF rejected — see codes below.
PPF error codes
| Code | Meaning | Fix |
|---|---|---|
00025 | Invoice number doesn't follow PPF pattern. | Use alphanumeric only; max 20 chars; no special characters except - and /. |
00043 | Duplicate invoice number for this seller. | Increment your numbering. PPF tracks (sellerSiret, number) tuples. |
00058 | Missing Service Exécutant for public buyer. | Set document.buyerReference. |
00104 | SIRET unknown in Annuaire. | Buyer hasn't registered yet — they must onboard before you can invoice them. |
00200 | Schema validation error. | Inspect error.details[] — usually a missing required field. |
00306 | Recipient PDP rejected. | Read the recipient PDP's reason; often Cadre de facturation mismatch. |
00500 | PPF 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 test | How |
|---|---|
| Happy-path PPF acceptance | Company VAT FR12345678901; simulateCompliance: "accept". |
| Service-Exécutant rejection | simulateCompliance: "reject_00058"; send without buyerReference. |
| Annuaire miss | Send to 0009:00000000000000 → PPF returns 00104. |
| PPF outage | simulateCompliance: "timeout_30s" — exercise circuit breaker. |
| 10-minute paid batching | Mark 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):
- impots.gouv.fr · Facturation électronique — DGFiP's official taxpayer portal; mandate scope, calendar, FAQ.
- impots.gouv.fr · Liste officielle des PDP — Authoritative list of registered Plateformes de Dématérialisation Partenaires.
- CEDEF (Bercy) · Facturation électronique — Ministry of Economy explainer; legal-text references.
- Ordonnance n° 2021-1190 du 15 septembre 2021 — Foundational legal text creating the e-invoicing obligation (Légifrance).
- Loi de finances 2024 · Article 91 — Article that re-set the calendar to September 2026 / 2027.
- EU Commission · eInvoicing in France — Pan-EU reference factsheet.
- OpenPeppol · France profile — Authoritative Peppol facts (FR is a Peppol Authority since 2025).
- Flowie · PDP authorization (number 0040) — Our DGFiP-issued PDP certificate.
Industry analyses (independent confirmation of the timeline):
- PwC France · Réforme de la facturation électronique — Big-4 implementation analysis.
- FNFE-MPE · Forum national de la facture électronique — Industry consortium tracking the reform.
