FlowieExchange
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.
2027-09-01Large & mid-sized FR businessesSend e-invoices.
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 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 statusPPF status codeReported within
under_review302 — Approuvé partiellement2 min
approved304 — Approuvé2 min
rejected309 — Refusé (with reason code)2 min
paid402 — Encaissée10 min (batched)
partially_paid401 — Encaissée partiellement10 min
disputed308 — Litige2 min

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

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):