Building a B2B Electronic Invoicing API for French PDP Compliance in 2026

Sascha

Команда форума
Администратор
Ofline
https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz5lqaqv39tp6dvwa9zu9.png

The French e-Invoicing Mandate: A Developer Perspective​


France is implementing one of the most ambitious B2B e-invoicing mandates in Europe. By September 2026, all businesses registered for VAT in France will be required to both receive electronic invoices and progressively transmit them through certified platforms known as PDPs (Plateformes de Dématérialisation Partenaires).

Architecture Overview​


The French e-invoicing ecosystem has three key components:

1. PPF (Portail Public de Facturation) — the government-operated central hub managed by the DGFIP. All invoice flows pass through or are registered here.

2. PDPs (Plateformes de Dématérialisation Partenaires) — private certified operators that handle invoice transmission, validation and archiving. Companies can choose to use PDPs for full lifecycle management.

3. ODs (Opérateurs de Dématérialisation) — intermediaries that convert invoice data but route through either a PDP or the PPF.

Key Technical Requirements​


Invoices must comply with one of three accepted structured formats:

  • Factur-X (hybrid PDF/XML, cross-border compatible)
  • UBL 2.1 (XML, widely used in European public procurement)
  • CII (UN/CEFACT Cross Industry Invoice, XML)

The mandatory data fields extend beyond standard invoice elements to include SIREN numbers, VAT identification, payment terms, and specific buyer routing codes.

Notification and Status Events​


A critical difference from traditional invoicing: the e-invoicing platform must emit lifecycle status events (deposited, received, rejected, paid) that are registered with the PPF. Implementing an event listener and status update mechanism is therefore as important as the invoice generation itself.


Код:
# Example: listening to PDP webhook events
@app.route("/pdp-webhook", methods=["POST"])
def handle_invoice_status():
    event = request.json
    invoice_id = event["invoiceId"]
    status = event["lifecycleStatus"]  # DEPOSITED, RECEIVED, REJECTED, PAID
    update_invoice_status(invoice_id, status)
    return jsonify({"received": True}), 200


Testing Environment​


The PPF provides a dedicated testing sandbox. Developers should validate:

  1. Schema conformance for all three accepted formats
  2. SIREN/SIRET validation against INSEE data
  3. Status event round-trips in the sandbox
  4. Archiving compliance (10-year retention required by French tax law)

Resources​


For non-technical stakeholders and SMEs navigating the mandate, mafacturation-electronique.fr provides clear guides on platform selection, implementation timelines and frequently asked questions in French.

The September 2026 deadline is firm — organizations that have not yet begun their integration work should prioritize this now.

 
Назад
Сверху Снизу