Skip to content
Log in

DGFiP facturation électronique et e-Reporting

À partir de septembre 2026, toutes les entreprises françaises devront acheminer leurs factures et leurs données de TVA via une plateforme certifiée. B2Brouter simplifie cela : vous envoyez vos données de facture via un appel API REST, et B2Brouter se charge de l’enregistrement auprès du PPF, de la génération du document (UBL/CII/Factur-X), du routage vers vos clients et du reporting fiscal à la DGFiP, le tout via une seule intégration.

B2Brouter est une Plateforme Agréée (PA) certifiée pour la réforme française de la facturation électronique de la DGFiP. Connectez-vous via l’API REST et B2Brouter prend en charge toute la couche de conformité pour vous :

Ce que B2Brouter fait pour vousDétails
Enregistrement au PPFPublie automatiquement votre SIREN/SIRET dans l’Annuaire lors de l’activation
Flux 1 — facturation électronique B2BGénère UBL/CII/Factur-X, transmet au PPF, achemine vers la plateforme de l’acheteur
Flux 6 — cycle de vie de la factureGère les messages de statut CDAR (Déposée, Reçue, Approuvée, Refusée, Encaissée)
Flux 10 — e-ReportingAgrège les transactions B2C et B2B transfrontalières (intra-UE et hors UE) dans des livres journaliers envoyés au PPF
Réception Peppol 0225Reçoit des factures depuis toute plateforme française ou connectée à Peppol
Génération de documentsVous envoyez les données de facture en JSON, B2Brouter génère le document UBL/CII/Factur-X conforme et le transmet au PPF. Aucune génération XML n’est nécessaire de votre côté
Formats d’entréeAPI REST JSON, Factur-X PDF/A-3 (avec XML CII embarqué), UBL 2.1 XML, CII XML
Archivage légalTous les documents transmis (factures, déclarations fiscales, messages CDAR) sont conservés par B2Brouter pendant la durée légale de 10 ans. Aucune infrastructure de stockage supplémentaire n’est nécessaire de votre côté

Pour intégrer, vous avez besoin de 4 étapes : créer votre compteactiver DGFiPcréer un contactenvoyer votre première facture.


Contexte réglementaire : la réforme française de la facturation électronique impose à toutes les entreprises françaises d’utiliser une Plateforme Agréée (PA) certifiée ou le PPF (Portail Public de Facturation) pour transmettre leurs factures et déclarer leurs données de TVA à la DGFiP à partir de septembre 2026. En tant que PA certifiée, B2Brouter gère entièrement la connexion au PPF pour vous : pas de SFTP, pas de certificats électroniques, aucune intégration directe au PPF nécessaire.

Il existe deux principaux cas d’usage pour s’intégrer avec B2Brouter pour la facturation électronique en France :

eDocExchange : pour les entreprises ou groupes d’entreprises qui intègrent leur logiciel de gestion (ERP, plateforme comptable) directement avec B2Brouter. Le processus d’onboarding (création du compte, configuration des Tax Report Settings) est généralement effectué une seule fois par entreprise via l’interface web. Les opérations quotidiennes (émission des factures, suivi de leur cycle de vie) se font via l’API. Pour ajouter d’autres comptes d’entreprise à votre groupe d’intégration, suivez le même assistant d’onboarding à partir du même compte utilisateur B2Brouter ; aucun appel API séparé n’est nécessaire.

eDocSync : pour les éditeurs de logiciels et fournisseurs ERP qui souhaitent proposer la conformité DGFiP à leurs propres clients depuis leur produit. Il s’agit du modèle white-label / embarqué / marque blanche de B2Brouter : B2Brouter fonctionne entièrement en arrière-plan, les clients finaux interagissent exclusivement avec l’interface de l’éditeur et n’ont pas connaissance de B2Brouter. L’éditeur est responsable du provisionnement des comptes, de la soumission des factures et du suivi du cycle de vie via l’API B2Brouter. Les clients finaux n’ont pas besoin d’un identifiant B2Brouter ni d’un abonnement.

Pour eDocSync, le volume de provisionnement des comptes détermine l’offre adaptée :

  • Peu d’entreprises (modèle revendeur) : ajoutez chaque société cliente comme compte dans votre groupe d’intégration B2Brouter via l’interface web, en suivant l’assistant standard d’onboarding. Cela fonctionne bien pour des dizaines d’entreprises et partage une seule clé API.
  • 100+ entreprises : contactez notre équipe commerciale ou ouvrez un ticket de support pour discuter d’une offre eDocSync dédiée avec provisionnement en masse (tarification au volume pour les éditeurs).

Dans les deux cas, toutes les fonctionnalités de conformité spécifiques à la France (enregistrement dans l’Annuaire, transmission Flux 1/6/10, cycle de vie CDAR) fonctionnent de façon identique.

B2Brouter est lui-même une Plateforme Agréée : vous vous intégrez à B2Brouter ; ce n’est pas un relais ou un connecteur vers une autre PA. Si votre SIREN/SIRET est actuellement enregistré auprès d’une autre PA, l’activation de B2Brouter (Étape 2) transfère automatiquement l’entrée de l’Annuaire. Vous ne pouvez pas utiliser B2Brouter comme simple passerelle pour soumettre des factures sous la certification d’une autre PA.

Routage vers des destinataires sur d’autres PA : lorsque votre acheteur est enregistré auprès d’une autre PA, B2Brouter achemine la facture via le modèle standard Peppol à quatre coins (C2 → C3) : le point d’accès Peppol de B2Brouter (C2) recherche l’adresse Peppol du destinataire dans l’Annuaire et remet le document au point d’accès de l’acheteur (C3), quelle que soit la PA utilisée. Aucune configuration supplémentaire n’est nécessaire de votre côté.


Environnements de test : utilisez le sandbox pour les premiers tests API et la validation des payloads. Les soumissions DGFiP y sont simulées, sans SIRET fictif requis. Pour des tests complets de bout en bout avec l’environnement QAS (qualification) de la DGFiP, utilisez l’environnement staging de B2Brouter comme décrit ci-dessous.

Avant de commencer : choisissez votre environnement

Section titled “Avant de commencer : choisissez votre environnement”
EnvironnementApplication B2BrouterAPI B2BrouterPortail Chorus Pro
Productionapp.b2brouter.nethttps://api.b2brouter.netchorus-pro.gouv.fr
Staging (test)app-staging.b2brouter.nethttps://api-staging.b2brouter.netqualif.chorus-pro.gouv.fr

Ne mélangez pas les environnements. La production utilise de vrais numéros SIREN/SIRET et se connecte à l’Annuaire de production de la DGFiP. Le staging utilise des identifiants de test fictifs et se connecte à l’environnement QAS (qualification) de la DGFiP. Les clés API, comptes et contacts ne sont pas partagés entre environnements.

Inscrivez-vous sur app.b2brouter.net pour démarrer une intégration en production. Lorsque vous activez le Tax Report Setting DGFiP, le SIREN/SIRET de votre entreprise est publié dans l’Annuaire réel du PPF, ce qui le rend découvrable par toute plateforme de l’écosystème français de facturation électronique.

Cette option est conçue pour de vraies factures B2B à partir de septembre 2026. D’ici là, la DGFiP purgera les enregistrements de la période QAS avant l’entrée en vigueur de la réforme, de sorte que les factures envoyées pendant votre pilote ne créeront pas d’obligations de conformité. C’est le bon point de départ si vous avez déjà choisi B2Brouter et souhaitez tester l’intégration complète avec les données réelles de votre entreprise.

Option B — Staging (recommandé pour l’évaluation)

Section titled “Option B — Staging (recommandé pour l’évaluation)”

Inscrivez-vous sur app-staging.b2brouter.net pour utiliser l’environnement de test de B2Brouter, connecté à l’environnement QAS (qualification) de la DGFiP.

C’est la meilleure option si :

  • Vous évaluez plusieurs plateformes avant de vous engager
  • Votre SIREN/SIRET est déjà publié dans l’Annuaire avec une autre PA (l’activation de B2Brouter en production transférerait l’entrée)
  • Vous préférez ne pas associer l’identifiant de votre entreprise à une activité de test

L’environnement staging est auto-provisionné : une fois que vous avez des identifiants de test (voir ci-dessous), vous pouvez commencer les tests de bout en bout en moins de 24 heures.

Validation du SIRET en staging : dans l’environnement staging, tout nombre valide à 14 chiffres est accepté comme SIRET sans validation de checksum. Les identifiants fictifs du CSV QAS de Chorus Pro sont préenregistrés dans l’annuaire QAS de la DGFiP et fonctionnent de bout en bout. En production, le format et la clé de contrôle du SIRET sont validés.

Important : la DGFiP n’autorise pas les vrais numéros SIREN ou SIRET dans son environnement QAS. Vous devez utiliser des identifiants de test fictifs. Vous pouvez les obtenir vous-même via le portail QAS de Chorus Pro (gratuit, procédure de 5 minutes) ou demander un jeu préattribué en ouvrant un ticket de support dans l’application staging.

Un compte par SIREN : B2Brouter crée un compte par SIREN (la clé du numéro de TVA est dérivée du SIREN). Si vous fournissez un SIRET, le SIREN en est extrait. Deux SIRET différents appartenant à la même société (même SIREN) pointeront vers le même compte. Si votre entreprise opère depuis plusieurs établissements (SIRET différents), ceux-ci sont modélisés comme des unités organisationnelles au sein du même compte B2Brouter, et non comme des comptes séparés. Contactez le Support si vous devez configurer une facturation multi-établissements. Gardez cela à l’esprit lorsque vous sélectionnez des lignes du CSV : choisissez des SIRET ayant des SIREN distincts (les 9 premiers chiffres) pour chaque société indépendante que vous devez tester.

Obtenir des identifiants de test via Chorus Pro QAS

Section titled “Obtenir des identifiants de test via Chorus Pro QAS”

Le portail Chorus Pro QAS vous permet de générer un “Matelas de données” : un fichier CSV contenant des identifiants SIREN/SIRET fictifs préenregistrés dans l’environnement de test de la DGFiP. Suivez ces étapes :

  1. Allez sur qualif.chorus-pro.gouv.fr → onglet EntrepriseCréer mon compte.
    • Vous pouvez utiliser une adresse e-mail temporaire (par exemple temp-mail.io).
    • Utilisez n’importe quel nom ; ce compte sert uniquement à obtenir des identifiants de test.
  2. Vérifiez votre boîte de réception pour l’e-mail “Initialisation de mot de passe Chorus Pro” et définissez votre mot de passe (lien valable 60 minutes).
  3. Connectez-vous → allez dans DomainesMatelas de données → cliquez sur Générer un matelas de données puis confirmez.
  4. Allez dans Consultation du matelas de données. Attendez que les deux statuts affichent “Disponible” :
    • Statut pour Chorus Pro : Disponible
    • Statut pour l’annuaire de facturation PPF : Disponible
    • La génération prend généralement quelques minutes. Rafraîchissez la page pour vérifier.
  5. Cliquez sur “Générer et télécharger le fichier CSV du matelas structures et utilisateurs” pour télécharger vos identifiants de test.

Le CSV contient plusieurs numéros SIREN/SIRET fictifs dans des lignes marquées “Privé” et “Public”. Utilisez uniquement les lignes de la section “Privé” (secteur privé) pour vos comptes de test. Les entités du secteur public (SIREN 'Public') sont rejetées par l’annuaire QAS de la DGFiP. Tenter d’activer l’e-Reporting sur un compte du secteur public renvoie HTTP 422 (“La création d’une ligne annuaire n’est pas possible pour une entité associée à un SIREN ‘Public’”). C’est le comportement attendu : les entités publiques utilisent directement Chorus Pro, et non une PA.

Utilisez un SIREN du secteur privé pour votre compte émetteur et un autre pour votre contact de test.

Une fois vos identifiants de test obtenus :

  1. Inscrivez-vous sur app-staging.b2brouter.net et activez votre compte.
  2. Créez le compte de votre entreprise à l’aide d’un SIREN du CSV (voir Étape 1).
  3. Souscrivez à une offre eDocExchange (les abonnements staging sont simulés, sans frais).
  4. Activez les Tax Report Settings DGFiP (voir Étape 2).
    • ⚠️ Après l’activation du Tax Report Setting DGFiP, l’enregistrement de votre entreprise dans l’Annuaire prend jusqu’à 24 heures à se propager, aussi bien en staging qu’en production. C’est une contrainte de l’infrastructure DGFiP, pas un délai B2Brouter. Vous ne pourrez pas envoyer de factures avant le lendemain.
  5. Le lendemain : créez un contact de test en utilisant un second SIREN du CSV (voir Étape 3).
  6. Envoyez votre première facture (voir Émission de factures).

L’authentification utilise une clé API statique transmise dans l’en-tête HTTP X-B2B-API-Key. Il n’y a pas de flux OAuth2 : générez votre clé API dans l’interface B2Brouter sous Paramètres → Clés API. Gardez-la confidentielle et ne l’incluez jamais dans du code côté client. Définissez également X-B2B-API-Version dans chaque requête.

Base URL : tous les exemples ci-dessous utilisent https://api-staging.b2brouter.net. En production, remplacez par https://api.b2brouter.net.


Étape 1 : Récupérer ou créer le compte de votre entreprise

Section titled “Étape 1 : Récupérer ou créer le compte de votre entreprise”

Si vous avez déjà un compte B2Brouter pour votre entreprise, récupérez son id avec l’endpoint List Accounts et passez l’étape de création.

Si vous n’en avez pas encore créé, utilisez l’endpoint Create Account (parcours eDocSync/API) ou l’assistant d’onboarding de l’interface web (parcours eDocExchange). Les deux produisent le même résultat.

Lors de la création d’un compte d’entreprise français :

  • cin_scheme : "0002" pour SIREN (9 chiffres) ou "0009" pour SIRET (14 chiffres). Utilisez le SIRET lorsque vous l’avez : il identifie un établissement précis et est préféré par le PPF.
  • cin_value : le SIREN ou SIRET de votre entreprise.
  • tin_value : numéro de TVA français au format FR{kk}{siren}, où kk est la clé à deux chiffres (par exemple FR32123456789). Ce champ est facultatif à la création du compte : s’il est omis, B2Brouter le dérive et le renseigne automatiquement à partir du SIREN lors de l’activation du Tax Report Setting DGFiP. Il est obligatoire pour la facturation DGFiP, mais vous n’avez pas besoin de le calculer vous-même.
  • country : "fr".

Exemple de requête :

Terminal window
curl --request POST \
--url https://api-staging.b2brouter.net/accounts \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'X-B2B-API-Version: {YOUR_API_VERSION}' \
--header 'Content-Type: application/json' \
--data '{
"account": {
"country": "fr",
"name": "Exemplar SAS",
"address": "10 Rue Imaginaire",
"city": "Paris",
"postalcode": "75001",
"province": "Île-de-France",
"email": "john.doe@example.com",
"tin_value": "FR32123456789",
"tin_scheme": 9957,
"cin_scheme": "0009",
"cin_value": "12345678900012",
"rounding_method": "half_up"
}
}'

Exemple de réponse :

{
"account": {
"id": 83428,
"name": "Exemplar SAS",
"tin_value": "FR32123456789",
"tin_scheme": 9957,
"cin_scheme": "0009",
"cin_value": "12345678900012",
"address": "10 Rue Imaginaire",
"city": "Paris",
"postalcode": "75001",
"province": "Île-de-France",
"country": "fr",
"currency": "EUR",
"email": "john.doe@example.com",
"rounding_method": "half_up",
"archived": false,
"created_at": "2026-06-10T09:54:38.000Z",
"updated_at": "2026-06-10T09:54:38.000Z"
}
}

POST Account - API Reference


Étape 2 : Activer les Tax Report Settings pour la DGFiP

Section titled “Étape 2 : Activer les Tax Report Settings pour la DGFiP”

Il s’agit de l’étape clé de l’onboarding. Lorsque vous créez un Tax Report Setting avec code: "dgfip", B2Brouter :

  1. Enregistre automatiquement votre entreprise dans l’Annuaire du PPF : votre SIREN/SIRET devient découvrable par toute plateforme de l’écosystème français de facturation électronique.
  2. Crée un transport Peppol 0225 : cela permet à votre entreprise de recevoir des factures électroniques depuis n’importe quelle plateforme connectée à Peppol en France.

⚠️ Remplacement du transport : Si votre compte dispose déjà d’un transport Peppol, il sera remplacé par le nouveau transport 0225 (FRCTC Electronic Address) lors de l’activation. Si votre SIREN/SIRET était auparavant enregistré auprès d’une autre PA, B2Brouter fermera l’entrée existante dans l’Annuaire et en ouvrira une nouvelle. Mettez à jour toute intégration existante qui référence l’ancien identifiant de transport.

La start_date détermine le début du reporting fiscal. À partir de cette date, les factures que vous émettez généreront des déclarations fiscales et seront transmises au PPF.

Exemple de requête :

Terminal window
curl --request POST \
--url https://api-staging.b2brouter.net/accounts/{ACCOUNT_ID}/tax_report_settings \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'X-B2B-API-Version: {YOUR_API_VERSION}' \
--header 'Content-Type: application/json' \
--data '{
"tax_report_setting": {
"code": "dgfip",
"start_date": "2026-09-01",
"type_operation": "services",
"naf_code": "62",
"enterprise_size": "eti",
"email": "jane.doe@example.com"
}
}'

Exemple de réponse :

{
"tax_report_setting": {
"code": "dgfip",
"start_date": "2026-09-01",
"auto_generate": true,
"auto_send": true,
"enabled": true,
"type_operation": "services",
"naf_code": "62",
"enterprise_size": "eti",
"email": "jane.doe@example.com",
"locked": false,
"created_at": "2026-06-10T10:15:22.000Z",
"updated_at": "2026-06-10T10:15:22.000Z"
}
}
ChampTypeObligatoireDescription
codestringOuiDoit être "dgfip".
start_datedateOuiDate de début du reporting fiscal. Doit être aujourd’hui ou une date future. Par défaut, c’est demain si omis.
type_operationstringOuiType d’opération par défaut pour cette entreprise : "services", "goods" ou "mixed". Détermine le code de processus DGFiP (S1/B1/M1, etc.) utilisé dans les déclarations fiscales. Choisissez "mixed" si votre entreprise vend à la fois des biens et des services. Ce paramètre peut être mis à jour après activation.
naf_codestringOuiLe code NAF/APE de l’entreprise (Nomenclature d’Activités Française). Il s’agit du code de section à 2 chiffres attribué par l’INSEE qui identifie l’activité économique principale de l’entreprise (par exemple "62" pour les services informatiques et logiciels, "47" pour le commerce de détail, "86" pour la santé). La DGFiP utilise ce code pour la classification du reporting fiscal. Vous pouvez trouver votre code NAF sur l’extrait Kbis de votre entreprise ou sur sirene.fr.
enterprise_sizestringOuiCatégorie de taille de l’entreprise telle que définie par l’INSEE. Valeurs autorisées : "micro" (microentreprise, < 10 salariés, CA ≤ 2 M€), "pme" (PME, 10 à 249 salariés, CA ≤ 50 M€), "eti" (ETI, 250 à 4 999 salariés, CA ≤ 1,5 Md€) ou "ge" (grande entreprise, 5 000+ salariés ou CA > 1,5 Md€).
reason_vat_exemptstringNonCode de motif d’exonération de TVA par défaut pour cette entreprise. Par défaut : "VATEX-FR-FRANCHISE" (franchise en base de TVA). Définissez-le si votre entreprise relève d’un régime spécifique d’exonération de TVA. Voir Lignes exonérées de TVA et Franchise en base de TVA pour la liste complète des codes acceptés.
emailstringNonAdresse e-mail de contact pour les notifications liées à la fiscalité.
auto_generatebooleanNonToujours true pour la DGFiP (obligation légale). Ne peut pas être modifié.
auto_sendbooleanNonTransmet automatiquement les déclarations fiscales au PPF. Valeur par défaut : true.
enabledbooleanNonIndique si le paramètre est actif. Valeur par défaut : true. L’enregistrement dans l’Annuaire n’a lieu que lorsque cette valeur est true.

Si l’enregistrement dans l’Annuaire échoue (SIREN/SIRET invalide, ou indisponibilité temporaire d’un service DGFiP), la création du Tax Report Setting est annulée et une erreur est renvoyée. Corrigez le problème puis réessayez.

Tax Report Settings - API Reference


Un contact B2B français a besoin d’identifiants de routage (comment la facture atteint le destinataire) et d’identification fiscale (comment le destinataire apparaît dans l’UBL XML).

ChampValeurObjectif
cin_scheme"0009" (SIRET) ou "0002" (SIREN)ID organisation — utilisé pour rechercher le destinataire dans l’Annuaire
cin_valueSIRET ou SIRENID organisation — identifiant enregistré dans l’Annuaire
tin_scheme9957ID fiscal — code ISO 6523 pour l’identifiant fiscal français
tin_valueFR{kk}{siren} (par ex. "FR78225214234")ID fiscal — numéro de TVA français dans l’UBL XML
country"fr"Requis pour la logique de routage DGFiP
currency"EUR"Devise par défaut des factures pour ce contact
transport_type_code"peppol"Recommandé — assure la livraison via le réseau Peppol
document_type_code"xml.ubl.invoice.frcius.v1"Recommandé — format de facture UBL France CIUS

Transport et type de document : pour les contacts français enregistrés dans l’Annuaire, nous recommandons de définir explicitement transport_type_code: "peppol" et document_type_code: "xml.ubl.invoice.frcius.v1". Le schéma PIN (identifiant participant Peppol) des entreprises françaises enregistrées est 0225 (FRCTC Electronic Address). Vous pouvez vérifier qu’un contact est enregistré dans l’Annuaire avant de le créer en utilisant la recherche dans l’annuaire ou le répertoire officiel Peppol. B2Brouter gère la bonne structuration pour les contacts nationaux comme internationaux, mais définir explicitement le transport assure un routage cohérent.

Contacts en Belgique, en Allemagne et dans d’autres pays de l’UE : pour les factures B2B destinées à des sociétés non françaises, utilisez leur schéma d’identifiant national (par ex. "0208" pour le KBO/BCE belge, "0190" pour le Leitweg-ID allemand, "0184" pour le KVK néerlandais) ainsi que le code country approprié. Si le destinataire dispose d’un point d’accès Peppol actif, B2Brouter achemine la facture via le standard Peppol BIS 3.0, sans configuration supplémentaire. Pour les transactions avec tout contact dont le country n’est pas "fr", l’e-Reporting transfrontalier Flux 10 est généré automatiquement.

Exemple de requête :

Terminal window
curl --request POST \
--url https://api-staging.b2brouter.net/accounts/{ACCOUNT_ID}/contacts \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'X-B2B-API-Version: {YOUR_API_VERSION}' \
--header 'Content-Type: application/json' \
--data '{
"contact": {
"name": "Client Exemple SARL",
"address": "25 Avenue de la République",
"city": "Lyon",
"postalcode": "69001",
"country": "fr",
"currency": "EUR",
"language": "fr",
"is_client": true,
"cin_scheme": "0009",
"cin_value": "98765432100011",
"tin_scheme": 9957,
"tin_value": "FR05987654321",
"transport_type_code": "peppol",
"document_type_code": "xml.ubl.invoice.frcius.v1"
}
}'

POST Contact - API Reference

Optionnel : vérifier le routage du destinataire (Directory lookup)

Section titled “Optionnel : vérifier le routage du destinataire (Directory lookup)”

B2Brouter achemine les factures automatiquement. Pour inspecter la manière dont un destinataire sera routé avant envoi, par exemple pour confirmer qu’il est enregistré dans l’Annuaire, utilisez la recherche dans l’annuaire :

Terminal window
curl --request GET \
--url https://api-staging.b2brouter.net/directory/fr/0009/98765432100011 \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'X-B2B-API-Version: {YOUR_API_VERSION}'

GET Lookup Directory - API Reference

Vérification Annuaire et génération des déclarations fiscales

Section titled “Vérification Annuaire et génération des déclarations fiscales”

B2Brouter vérifie automatiquement si les contacts français (country: "fr") sont enregistrés dans l’Annuaire DGFiP. Cette vérification détermine le flux de reporting fiscal :

  • Contact enregistré dans l’Annuaire (in_dgfip_annuaire: true ou pas encore vérifié) : la facture génère une déclaration fiscale Flux 1 (facturation électronique domestique B2B).
  • Contact NON enregistré dans l’Annuaire (in_dgfip_annuaire: false) : la facture ne génère pas de déclaration fiscale. Cela évite les soumissions Flux 1 invalides pour des destinataires que le PPF ne peut pas router.
  • Contact pas encore vérifié (in_dgfip_annuaire: nil) : B2Brouter est permissif ; la facture est traitée et génère une déclaration fiscale. La vérification s’effectue de façon asynchrone en arrière-plan.

Si vous créez un contact français puis envoyez immédiatement une facture, la vérification dans l’Annuaire peut ne pas être terminée. C’est volontaire : B2Brouter ne bloque pas la création de facture tant que la vérification est en attente. Si le contact s’avère non enregistré, les futures factures à ce contact ne généreront pas de déclarations Flux 1 tant que le contact ne s’enregistrera pas auprès d’une PA.

La vérification de l’Annuaire ne s’applique qu’aux contacts domestiques français (country: "fr"). Les contacts non français suivent toujours le parcours d’e-Reporting Flux 10, quel que soit leur statut dans l’Annuaire.


Une fois votre entreprise onboardée et le Tax Report Setting DGFiP activé, la création de factures se fait via l’API standard Invoice. B2Brouter gère automatiquement toutes les exigences spécifiques à la France : génération de la déclaration fiscale, formatage UBL/CII/Factur-X et transmission au PPF via Flux 1.

Utilisez send_after_import: true pour créer et transmettre en une seule étape. Définissez false si vous souhaitez d’abord créer la facture et la relire avant envoi ; dans ce cas, la facture reste à l’état new jusqu’à ce que vous déclenchiez la transmission via un appel séparé ou depuis l’interface B2Brouter.

Facturation séquentielle : l’API traite une facture par requête. Pour les scénarios de masse ou de batch, parcourez votre liste de factures et appelez l’endpoint pour chaque document. L’API supporte les requêtes concurrentes ; vous pouvez paralléliser plusieurs POST sans attendre la réponse de chacune avant de lancer la suivante.

Cas le plus courant : une facture B2B domestique française avec TVA standard (20 %).

Terminal window
curl --request POST \
--url https://api-staging.b2brouter.net/accounts/{ACCOUNT_ID}/invoices \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'X-B2B-API-Version: {YOUR_API_VERSION}' \
--header 'Content-Type: application/json' \
--data '{
"send_after_import": true,
"invoice": {
"type": "IssuedInvoice",
"contact_id": 1313228381,
"number": "FA-2026-0048",
"date": "2026-09-15",
"due_date": "2026-10-15",
"currency": "EUR",
"payment_method": 4,
"remittance_information": "FA-2026-0048 — Exemplar SAS, SAS au capital de 50 000 EUR, RCS Paris 123 456 789",
"payment_method_text": "Virement bancaire, IBAN FR00 0000 0000 0000 0000 0000 000, BIC XXXXFRPP",
"payment_terms": "Net 30 jours à compter de la date de facture. Pénalité de retard : 12% annuel.",
"invoice_lines_attributes": [
{
"quantity": 10.0,
"description": "Consulting services — architecture review",
"price": 150.0,
"unit": 9,
"taxes_attributes": [
{ "name": "TVA", "percent": 20.0, "category": "S" }
]
},
{
"quantity": 5.0,
"description": "Training sessions — API integration",
"price": 200.0,
"unit": 9,
"taxes_attributes": [
{ "name": "TVA", "percent": 20.0, "category": "S" }
]
}
]
}
}'

Le tableau tax_report_ids dans la réponse contient l’ID de la déclaration fiscale générée. Utilisez-le pour suivre le cycle de vie de la soumission (voir Vérifier l’état d’une déclaration fiscale).

POST Invoice - API Reference

Champs de facture spécifiques à la France

Section titled “Champs de facture spécifiques à la France”

Informations de paiement (champs natifs obligatoires)

Section titled “Informations de paiement (champs natifs obligatoires)”

Trois champs de paiement sont obligatoires pour les factures électroniques B2B françaises (IssuedInvoice). Fournissez-les comme champs directs de l’API :

ChampChamp DGFiPDescriptionObligatoire
remittance_informationPMDRéférence de paiement et mentions légales (immatriculation de l’entreprise, capital social, RCS)Oui — B2B domestique et transfrontalier
payment_method_textPMTCode du moyen de paiement + détails IBAN/BICOui — B2B domestique et transfrontalier
payment_termsAABDate d’échéance, pénalités de retard, conditions d’escompteOui — B2B domestique et transfrontalier

Si l’un de ces trois champs est manquant, la requête renvoie HTTP 422 avec des messages d’erreur explicites pour chaque champ absent. Ces erreurs ne sont pas silencieuses : la facture n’est jamais créée. Corrigez les champs manquants puis renvoyez la requête.

Les factures B2C (IssuedSimplifiedInvoice) n’exigent pas ces champs.

Import depuis d’autres formats (UBL, CII, Factur-X) : pour ces intégrations, utilisez le champ extra_info avec des balises structurées :

#PMD# FA-2026-0048 — Exemplar SAS, RCS Paris 123 456 789
#PMT# Credit Transfer, IBAN FR00 0000 0000 0000 0000 0000 000, BIC XXXXFRPP
#AAB# Net 30 jours. Pénalité de retard : 12% annuel.

B2Brouter extrait ces balises et les mappe automatiquement aux champs natifs correspondants.

Lorsqu’une ligne a category: "E" (exonérée de TVA), vous devez également fournir un comment avec le code d’exonération VATEX-FR-CGI261-* applicable (DGFiP BT-121) :

⚠️ Blocage silencieux : si comment est omis sur une ligne de catégorie E, la facture est créée (HTTP 200) mais jamais transmise au PPF. La réponse contiendra un tableau errors non vide. Vérifiez-le même sur des réponses réussies.

Codes DGFiP d’exonération de TVA (BT-121)

CodeRéférence légaleCatégorie fiscaleDescription
VATEX-FR-FRANCHISEArt. 293 B CGIZ (taux zéro)Franchise en base de TVA
VATEX-FR-CNWVATE (exonéré)Non établi en France
VATEX-FR-AEE (exonéré)Autoliquidation
VATEX-FR-CGI261-1Art. 261-1° CGIE (exonéré)Soins et services médicaux
VATEX-FR-CGI261-2Art. 261-2° CGIE (exonéré)Services paramédicaux
VATEX-FR-CGI261-3Art. 261-3° CGIE (exonéré)Enseignement scolaire, universitaire et formation professionnelle

Franchise en base de TVA (VATEX-FR-FRANCHISE)

Section titled “Franchise en base de TVA (VATEX-FR-FRANCHISE)”

Les entreprises relevant du régime de la franchise en base de TVA opèrent en taux zéro (catégorie fiscale Z), et non en exonéré (catégorie E). Pour les factures en franchise, définissez percent: 0.0 et category: "E" avec comment: "VATEX-FR-FRANCHISE" sur chaque ligne de taxe ; B2Brouter transcode automatiquement la catégorie en Z :

{
"taxes_attributes": [
{
"name": "TVA",
"percent": 0.0,
"category": "E",
"comment": "VATEX-FR-FRANCHISE"
}
]
}

Pour émettre un avoir, définissez is_amend: true et référencez la facture d’origine à l’aide de amended_number et amended_date. B2Brouter génère un UBL CreditNote avec le code de type 381 et inclut la référence de facturation.

Terminal window
curl --request POST \
--url https://api-staging.b2brouter.net/accounts/{ACCOUNT_ID}/invoices \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'X-B2B-API-Version: {YOUR_API_VERSION}' \
--header 'Content-Type: application/json' \
--data '{
"send_after_import": true,
"invoice": {
"type": "IssuedInvoice",
"contact_id": 1313228381,
"number": "NC-2026-001",
"date": "2026-09-25",
"due_date": "2026-10-25",
"is_credit_note": true,
"is_amend": true,
"amended_number": "FA-2026-0048",
"amended_date": "2026-09-15",
"currency": "EUR",
"payment_method": 4,
"remittance_information": "NC-2026-001 — annule et remplace FA-2026-0048. Exemplar SAS",
"payment_method_text": "Virement bancaire, IBAN FR00 0000 0000 0000 0000 0000 000, BIC XXXXFRPP",
"payment_terms": "Remboursement sous 30 jours.",
"invoice_lines_attributes": [
{
"quantity": -1.0,
"description": "Annulation partielle — Consulting services",
"price": 500.0,
"unit": 9,
"taxes_attributes": [
{ "name": "TVA", "percent": 20.0, "category": "S" }
]
}
]
}
}'

Le code de processus détermine le cadre de flux PPF. B2Brouter l’assigne automatiquement en fonction de type_operation dans le Tax Report Setting et des caractéristiques de la facture.

Code de processusType d’opérationDescription
S1ServicesFacture standard pour des services
B1GoodsFacture standard pour des biens
M1MixedFacture standard pour des opérations mixtes
S2ServicesFacture réglée pour des services
B2GoodsFacture réglée pour des biens
M2MixedFacture réglée pour des opérations mixtes
S4ServicesFacture avec acomptes (services)
B4GoodsFacture avec acomptes (biens)
M4MixedFacture avec acomptes (mixte)
S7ServicesCorrection d’une facture enregistrée (services)
B7GoodsCorrection d’une facture enregistrée (biens)
Document Type CodeFormatDescription
xml.ubl.invoice.frcius.v1UBL XMLFacture France CIUS Peppol (Flux 1 / Annuaire)
xml.cii.cross_industry_invoice.frcius.v1CII XMLFacture France CIUS CII
pdf.a.invoice.with.xml.cii.cross_industry_invoice.facturx.fr.all_profiles.v1Factur-XPDF/A avec XML CII embarqué

Si votre système génère déjà des factures Factur-X ou UBL XML, soumettez-les directement via l’endpoint d’import de document :

POST /accounts/{id}/invoices/import

Définissez Content-Type sur :

  • application/pdf pour Factur-X (PDF/A-3 avec XML CII embarqué)
  • application/xml pour UBL 2.1 ou CII XML autonome

ÉtatDescription
sendingLa facture a été créée et est en file d’attente pour transmission au PPF.
sentLe XML de la facture a été correctement téléversé au PPF (dépôt Flux 1 confirmé).
registeredLe PPF a validé et accepté la facture (CDV Flux 1 positif).
acceptedL’acheteur a approuvé la facture.
refusedL’acheteur a rejeté la facture.
allegedly_paidL’acheteur a signalé la facture comme payée (correspond au CDAR 212 — Encaissée).
errorUne erreur s’est produite lors de la transmission ou de la validation PPF. Le champ errors dans la réponse de facture contient le motif du rejet PPF. Supprimez la facture, corrigez le problème et soumettez-en une nouvelle ; les factures en erreur ne peuvent pas être retransmises directement.

Configurez des endpoints webhook dans l’interface B2Brouter sous Settings → Webhooks. Une fois configuré, B2Brouter enverra un HTTP POST à votre endpoint chaque fois que la facture atteindra un nouvel état.

Invoice Status WebHooks - API Reference

Terminal window
curl --request GET \
--url https://api-staging.b2brouter.net/invoices/{INVOICE_ID} \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'X-B2B-API-Version: {YOUR_API_VERSION}' \
--header 'Accept: application/json'

GET Invoice - API Reference

Télécharger le document original de la facture

Section titled “Télécharger le document original de la facture”

Après qu’une facture ait atteint l’état sent, la réponse de GET /invoices/{id} inclut un champ download_legal_url. Utilisez-le pour télécharger le document de facture qui a été transmis :

Terminal window
curl --request GET \
--url https://api-staging.b2brouter.net{download_legal_url} \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'X-B2B-API-Version: {YOUR_API_VERSION}'

Vérifier l’état d’une déclaration fiscale

Section titled “Vérifier l’état d’une déclaration fiscale”

La déclaration fiscale suit le cycle de vie technique de la soumission au PPF. La génération du XML comme la transmission au PPF sont asynchrones.

Flux 1 — factures domestiques B2B :

ÉtatDescription
newDéclaration fiscale créée, en attente de transmission
sentDocument déposé au PPF via SFTP
acknowledgedLe PPF a reçu et validé le fichier (condition CDV 500 — Reçue)
registeredTerminal — Facture acceptée et enregistrée par la DGFiP (condition CDV 300)
refusedTerminal — Rejetée par la DGFiP (condition CDV 301)
errorTerminal — Erreur de transmission ou de traitement par le PPF
annulledLa facture a été annulée après enregistrement

Flux 10 — factures B2B transfrontalières et B2C (e-Reporting) :

ÉtatDescription
newDéclaration fiscale créée, accumulée pour le lot quotidien de livre
sentLivre déposé au PPF via SFTP
acknowledgedLe PPF a reçu le livre (condition CDV 500 — Reçue)
registeredTerminal — Livre accepté et enregistré par la DGFiP (condition CDV 300)
refusedTerminal — Rejeté par la DGFiP (condition CDV 301)
errorTerminal — Erreur de transmission ou de traitement par le PPF

Interrogez l’état à l’aide de l’ID de déclaration fiscale issu de tax_report_ids dans la réponse de facture :

Terminal window
curl --request GET \
--url https://api-staging.b2brouter.net/tax_reports/{TAX_REPORT_ID} \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'X-B2B-API-Version: {YOUR_API_VERSION}'

GET Tax Report - API Reference


Le Flux 10 couvre les transactions hors du champ de l’obligation de facturation électronique B2B domestique qui doivent malgré tout être déclarées à la DGFiP. B2Brouter gère le Flux 10 automatiquement.

Ventes à des particuliers non assujettis à la TVA en France. Utilisez "type": "IssuedSimplifiedInvoice". Les champs contact_id et les champs de paiement ne sont pas requis pour les factures B2C.

Transactions transfrontalières (B2B intra-UE et hors UE)

Section titled “Transactions transfrontalières (B2B intra-UE et hors UE)”

Les ventes à ou achats auprès de sociétés établies hors de France doivent être déclarés via le Flux 10. Utilisez le type standard IssuedInvoice ou ReceivedInvoice et définissez le country de la contrepartie sur une valeur autre que "fr". B2Brouter détecte automatiquement le caractère transfrontalier.

B2Brouter regroupe toutes les déclarations fiscales Flux 10 d’une journée calendaire dans des Ledgers envoyés au PPF une fois par jour (planifié à 02:00, heure serveur). Vous pouvez identifier les déclarations fiscales Flux 10 via un ledger_id non nul dans la réponse de la déclaration fiscale.


En tant qu’entreprise française enregistrée dans l’Annuaire avec un transport Peppol 0225, vous recevez automatiquement des factures électroniques d’autres plateformes françaises et connectées à Peppol.

Mettre à jour l’état d’une facture reçue

Section titled “Mettre à jour l’état d’une facture reçue”

Lorsque vous recevez une facture, signalez son statut au PPF en mettant à jour l’état de la facture :

Terminal window
curl --request POST \
--url https://api-staging.b2brouter.net/invoices/{INVOICE_ID}/mark_as \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'X-B2B-API-Version: {YOUR_API_VERSION}' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '{"state":"accepted"}'

États cibles valides pour les factures reçues : accepted (205 Approuvée), refused (210 Refusée).

Switch invoice state - API Reference