Skip to content
Log in

Manage DGFiP electronic invoicing in B2Brouter

The French e-invoicing reform requires all French VAT-registered companies to transmit B2B invoices and VAT data through a Plateforme Agréée (PA) certified by the DGFiP. B2Brouter is a certified PA: you connect to us and we take care of PPF registration, document transmission, VAT reports, and the full status lifecycle.

Free pilot until September 2026 — Before the mandatory start date, any company that joins the pilot gets free access to the platform to run real tests. Invoices and reports sent during the pilot do not count towards later accounting resets. On top of that, you’ll have full access to B2Brouter during the pilot: you can manage integrations and automations through our connectors and our API.

B2B ≠ B2G — DGFiP handles B2B over the Peppol network with scheme 0225 (FRCTC). Chorus Pro is the B2G channel for invoicing French public administrations. These are two independent channels: a company can invoice B2B via DGFiP and B2G via Chorus Pro in parallel.

PA and PDP mean the same thing — In official DGFiP documents, in the Portail Public de Facturation and in other industry software, you’ll see the terms PA (Plateforme Agréée) and PDP (Plateforme de Dématérialisation Partenaire) used interchangeably. They refer to the same role. The official and current term is PA.


When you activate DGFiP you pick one of two modes. You can switch between them at any time.

Reception only (Annuaire only) — the default mode when activating. You want to receive invoices from your suppliers but you’re not yet issuing through DGFiP. B2Brouter registers your SIREN in the PPF Annuaire with a Peppol 0225 transport. It does not generate VAT reports or CDAR messages. It does not force you to issue via Peppol.

Full e-Reporting — pilot (opt-in) until 2026-09-01; mandatory from that date onwards. You want to issue B2B invoices through DGFiP and automatically generate the VAT reports. Everything above plus generation and submission to the PPF of Flux 1 reports (domestic B2B) and Flux 10 reports (B2C, cross-border).


  • A B2Brouter account.
  • The SIREN (9 digits) or SIRET (14 digits) of your company. If you have several establishments (different SIRETs sharing the same SIREN), they are modelled as organisational units inside the same account — not as separate accounts. One SIREN = one account.
  1. Account settingsTaxese-Reporting France.
  2. AddDGFiP.
  3. Fill in the form:
    • Start date — when VAT reporting begins. Today or later.
    • ModeReception only (default) or Full e-Reporting. You can change it later.
    • If you pick Full e-Reporting, also fill in:
      • Operation typeServices, Goods or Mixed (if in doubt: Mixed).
      • NAF code — INSEE activity code (e.g. 62 for IT services). It appears on your Kbis extract.
      • Enterprise sizeMicro, PME, ETI or Grande Entreprise, based on headcount and turnover.
    • Declarant email — will receive tax notifications.
  4. Save.

Annuaire registration — Publishing your SIREN to the PPF Annuaire can take up to 24 hours, in production and in staging alike. This is a DGFiP infrastructure constraint, not a B2Brouter delay. You won’t be able to issue or receive DGFiP invoices until it has propagated.

Existing Peppol transport — If your account already had a Peppol transport (for instance from another PA or for another use case), it is replaced by the new 0225 transport. If your SIREN was registered with another PA, B2Brouter closes the previous Annuaire entry and opens the new one automatically.

If registration fails — An invalid SIREN (Luhn checksum) or a temporary DGFiP outage rolls back the setup and returns an error. Fix the data and save again.

Verifying that the registration is published

Section titled “Verifying that the registration is published”

Once the setting is saved, go to Account settingsTransportsPeppol. You’ll see three publication statuses, each taking the values not_published, processing or published:

  • SML — the global Peppol SML registration.
  • SMP — the metadata service (at B2Brouter, it mirrors the SML).
  • Peppol Directory — the listing on the public Peppol Directory.

Once all three read published, any other platform can locate you and send you invoices.


Before issuing an invoice, the customer must exist in your contacts. B2Brouter auto-fills the identifiers from whatever you enter.

  1. ContactsNew contact.
  2. Pick France as the country.
  3. Choose the identifier type and enter the value:
    • SIREN — 9 digits (e.g. 123456789).
    • SIRET — 14 digits (e.g. 12345678900012).
    • VAT numberFR{kk}{siren} with kk two check digits (e.g. FR32123456789).
  4. Validate identifier and continue.
  5. Fill in the legal name, address, postcode and city.
  6. Under Delivery method, B2Brouter automatically selects Peppol Network and the format France UBL Invoice CIUS. Confirm that the Peppol identifier is correct.
  7. ContinueSave.

Three different identifiers — The contact record holds three distinct codes, each with its own role:

  • Company identifier (cin_scheme): 0002 for SIREN (9 digits) or 0009 for SIRET (14 digits).
  • Tax identifier / VAT (tin_scheme): 9957; value FR{kk}{siren}.
  • Peppol identifier (pin_scheme): 0225; value SIREN or SIREN_SIRET.

If you see 0002 in the UI, that’s the company identifier (not the Peppol one). The Peppol scheme for DGFiP is always 0225.

Auto-fill — For DGFiP accounts activated from 2026-03-31 onwards, B2Brouter derives the three identifiers from each other: enter the SIREN and it generates the VAT number and the Peppol identifier; enter the VAT number and it generates the SIREN and the Peppol identifier.

Legacy contacts — Contacts created before DGFiP was activated may not have a VAT number. When you issue an invoice to such a contact, the error “The customer VAT number is required for DGFiP reporting” appears. Edit the contact, add the VAT number, and re-issue.

When you create a French contact, B2Brouter automatically verifies its presence in the Annuaire:

  • Registered in the Annuaire → invoices are transmitted via Peppol UBL and produce a Flux 1 report.
  • Not registered → invoices are created but do not produce a Flux 1 report (the submission would be invalid). The recipient must register with a PA.
  • Verification pending — creation is not blocked: the invoice proceeds and a report is generated. The verification arrives asynchronously.

Non-French contacts — Any invoice with a contact from another country automatically generates a Flux 10 report (cross-border e-Reporting). Use the Peppol scheme for the contact’s country in the identifier field.


  1. InvoicesCreate invoice.
  2. Pick the contact and Continue.

Check that Transport reads Peppol Network and Format reads France UBL Invoice CIUS. If so, the invoice will travel over the DGFiP network.

  • Invoice number — unique sequential number. Maximum 20 characters. Allowed: A-Z 0-9 -+_/. No leading, trailing, or consecutive spaces.
  • Invoice date and Due date — both mandatory.
  • CurrencyEUR for domestic invoices. For foreign currencies, fill in the exchange rate against EUR on the invoice date.

For each line: description, quantity, unit price excluding VAT, and VAT rate.

French VAT rates:

  • 20 % — standard rate.
  • 10 % — catering, construction, transport.
  • 5.5 % — food, books, energy.
  • 2.1 % — press, reimbursable medicines.
  • 0 % — Exempt — CGI exemptions (requires a VATEX-FR-CGI… code).
  • 0 % — Zero-rate — franchise en base de TVA (VATEX-FR-FRANCHISE).
  • 0 % — Reverse charge — autoliquidation (VATEX-FR-AE).

VAT exemption — mandatory code — If you apply 0 % under exemption, you must enter the corresponding VATEX-FR-… code in the line comment. Without the code the invoice is created but not transmitted to the PPF: it gets stuck and you need to delete it and re-create it with the correct code.

Most common VATEX codes:

  • VATEX-FR-FRANCHISE — franchise en base de TVA (micro-enterprises). B2Brouter maps it to category Z (zero-rate) in the XML.
  • VATEX-FR-AE — autoliquidation (reverse charge).
  • VATEX-FR-CGI261-1 — medical services.
  • VATEX-FR-CGI261-3 — education and professional training.
  • VATEX-FR-CGI261-5 — non-profit organisations.
  • VATEX-FR-CGI261C-1 — banking and financial operations.
  • VATEX-FR-CGI261C-2 — insurance and reinsurance.
  • VATEX-FR-CNWVAT — not established in France.

For the full list (more than 20 codes), see the technical developer guide: https://developer.b2brouter.net/docs/dgfip.

Payment information — mandatory fields (B2B)

Section titled “Payment information — mandatory fields (B2B)”

Three fields are mandatory for French B2B invoices. If any of them is missing the invoice is not created: an explicit error is returned per field.

  • Payment information (DGFiP code PMD) — reference and legal mentions (legal form, share capital, RCS).
  • Payment method text (DGFiP code PMT) — method + IBAN/BIC.
  • Payment terms (DGFiP code AAB) — due date, late-payment penalties, early-payment discount.

Examples (kept in French — these are legal mentions printed on the final invoice):

Payment information (PMD):
FA-2026-0048 — Exemplar SAS, SAS au capital de 50 000 EUR, RCS Paris 123 456 789
Payment method text (PMT):
Virement bancaire, IBAN FR00 0000 0000 0000 0000 0000 000, BIC XXXXFRPP
Payment terms (AAB):
Net 30 jours à compter de la date de facture.
Pénalité de retard : 12% annuel (Art. L441-10 C. com.).
Indemnité forfaitaire de recouvrement : 40,00 EUR (Art. D441-5 C. com.).
Pas d'escompte pour paiement anticipé.

These fields are not mandatory for B2C invoices (simplified receipts to individuals).

Payment method (common codes): 4 Bank transfer, 58 SEPA Credit Transfer, 2 Direct Debit, 59 SEPA Direct Debit, 19 Card, 11 Cheque, 13 Other (use the text field to describe it).

  1. Save and preview — review the invoice.
  2. Issue and send — B2Brouter generates the document (UBL, CII or Factur-X depending on the contact), deposits it to the PPF via Peppol and automatically produces the associated VAT report.

The invoice page shows the current state and, when something goes wrong, the exact reason.

Sending → Sent → Registered → Accepted → Paid
↘ Refused
↘ Error
  • Sending — the invoice has been created and is queued for PPF transmission.
  • Sent — B2Brouter has deposited the document to the PPF.
  • Registered ✅ — the DGFiP has validated and accepted the invoice. This is the compliance state.
  • Accepted — the buyer has approved the invoice.
  • Refused — the buyer has rejected the invoice.
  • Paid — the buyer has reported the invoice as paid. Feature under development.
  • Error — transmission error or PPF rejection. The reason appears on the invoice page.

Two PPF response moments — PPF responses arrive in two phases:

  1. Technical acknowledgement (fast) — the PPF confirms that it has received and technically validated the document. At this point the invoice becomes Sent.
  2. Final registration (once a day) — the DGFiP processes the received documents in a batch, once a day, and this is when it decides whether the invoice becomes Registered or Refused. It can take up to 24 hours from submission.

Configure webhooks in Settings → Webhooks if you want an instant notification when the registration arrives.

«Paid» — This state cannot currently be set from the UI or the API. CDAR 212 (Encaissée) is planned for a future release.

An invoice in Error cannot be retransmitted. You must delete it, fix the data, and create a new one.

  1. Open the invoice and read the error reason.
  2. Delete the invoice.
  3. Fix the data (contact, VAT, missing fields…).
  4. Create and send a fresh invoice.
  • “Remittance information is required for DGFiP reporting” — PMD field is empty. Fill in Payment information.
  • “Payment information is required for DGFiP reporting” — PMT field is empty. Fill in Payment method text.
  • “Payment terms are required for DGFiP reporting” — AAB field is empty. Fill in Payment terms.
  • “The customer VAT number is required for DGFiP reporting” — the contact has no VAT number. Edit the contact and add the TIN.
  • “Invoice number too long / invalid chars” — number has more than 20 characters or contains forbidden characters. Adjust it.
  • REJ_COH BT-47 — the buyer’s SIREN is not in the PPF Annuaire. In production, the customer must register with a PA. In staging, this is expected (the QAS environment doesn’t hold every SIREN).
  • Exempt line without VATEX code (silent block) — delete the invoice and re-create it with the correct VATEX code in the line comment.
  • parameter_invalid (SIREN) — the SIREN fails the Luhn check. Verify it.
  • parameter_taken (SIREN) — the SIREN is already linked to another account. Contact support.

A credit note cancels or rectifies a previous invoice. B2Brouter generates a UBL CreditNote with type code 381 and a reference to the original invoice.

  1. Open the original invoice.
  2. Create credit note.
  3. Fill in:
    • The number of the original invoice (and the date it was issued).
    • The lines and amounts you want to rectify. You can enter them with either a positive or a negative sign — tax-wise they are always treated as amounts that subtract from the original declaration, regardless of the sign you use.
    • The same mandatory payment fields (PMD / PMT / AAB).
  4. Save and send — it is transmitted to the PPF as any other invoice (Flux 1).

Always use the real number and date of the original invoice, not an internal reference.


Once your account is active (in either mode), you are registered in the Annuaire and can receive invoices from your suppliers over Peppol 0225.

  • Expenses → see incoming invoices.
  • Click on an invoice to open its details.
  • Approve — tell the supplier and the DGFiP that you accept the invoice (CDAR 205, Approuvée).
  • Refuse — tell the supplier and the DGFiP that you reject the invoice (CDAR 210, Refusée). A reason is required.
  • Mark as paid — CDAR 212, Encaissée. Feature under development, not yet available.

When you update the state, B2Brouter automatically sends the matching CDAR message to the PPF and to the supplier.

Flux 10 for received invoices — A report is only generated if the received invoice comes from a non-French supplier. Invoices from a French supplier need no declaration on your side (the supplier’s PA handles it).


7 · VAT reports (Full e-Reporting mode only)

Section titled “7 · VAT reports (Full e-Reporting mode only)”

In Full e-Reporting mode, B2Brouter generates and transmits VAT reports automatically, with no manual action. In Reception only mode no reports are generated.

One report per invoice. B2Brouter deposits it to the PPF and updates the state as the response comes back.

Every B2C invoice and every invoice with a non-French recipient is grouped into daily Ledgers. The Ledger is sent to the PPF once a day (cron at 02:00 server time).

A single day can produce several Ledgers depending on the role and the type:

  • Transactions ledger — sales (role SE): cross-border and B2C issued invoices.
  • Transactions ledger — purchases (role BY): invoices received from foreign suppliers.
  • Payments ledger (role SE): paid issued invoices.

Account settingsTaxese-Reporting France → list of submitted reports.

  • New — created and queued (Flux 1) or accumulating in the daily Ledger (Flux 10).
  • Sent — B2Brouter has deposited it to the PPF.
  • Received — the PPF confirms receipt (CDV 500, Recevable).
  • Registered ✅ — the DGFiP has accepted it (CDV 300). Positive final state.
  • Refused ❌ — the DGFiP has rejected it (CDV 301).
  • Error ❌ — transmission or processing error.
  • Annulled — invoice annulled after registration (Flux 1 only).

CDVCompte-Rendu de Validation: the asynchronous PPF response. There are two kinds:

  • CDV 500 (Recevable) — arrives shortly after submission and confirms that the PPF received and technically validated the document. This corresponds to the Received state.
  • CDV 300 / 301 (Registered / Refused) — the DGFiP issues them in a daily batch: this is when it decides whether the declaration is accepted or rejected. It can take up to 24 hours after submission.

Most errors originate from the source invoice. Fix the invoice (delete + new invoice) and a fresh report is generated automatically. If the message isn’t clear, contact support.


B2Brouter picks the format automatically based on the contact configuration:

  • UBL Peppol France CIUS — default, if the recipient is registered in the Annuaire/Peppol.
  • CII France CIUS — alternative XML variant, if the recipient requires it.
  • Factur-X — fallback for recipients not registered in Peppol FR. It is a PDF/A-3 with embedded CII XML; a scanned or printed PDF is not a Factur-X.

Once the invoice is Sent, an option appears on the invoice page to download the transmitted document. The format will be UBL or Factur-X depending on the case.


This manual covers the UI. If you integrate with B2Brouter over the API, the official reference is the DGFiP developer guide — it covers the Tax Report Settings endpoint, the Invoices and Contacts APIs, the state-change webhooks, and the Directory lookup used to check whether a contact is registered in the Annuaire.

Authentication uses a static API key (header X-B2B-API-Key) plus the API version (X-B2B-API-Version). DGFiP-specific features require version 2026-04-20 or later.

You can import existing UBL, CII or Factur-X invoices — if the source format doesn’t carry native payment fields (PMD / PMT / AAB), pass them in the extra_info field using the #PMD#, #PMT# and #AAB# tags.