Guía para integrar la API de B2Brouter y cumplir con la RFE francesa desde tu propio sistema.
A partir de septiembre de 2026, todas las empresas francesas deberán enrutar sus facturas y datos de TVA a través de una plataforma certificada. B2Brouter lo simplifica: tú envías los datos de la factura mediante una llamada a la API REST, y B2Brouter se encarga del registro en el PPF, la generación del documento (UBL/CII/Factur-X), el enrutamiento hacia tus clientes y el reporte fiscal a la DGFiP — todo con una sola integración.
B2Brouter es una Plateforme Agréée (PA) certificada para la reforma de facturación electrónica de la DGFiP francesa. Conéctate mediante la API REST y B2Brouter gestiona toda la pila de cumplimiento normativo en tu nombre:
Lo que B2Brouter hace por ti
Detalles
Registro en el PPF
Publica tu SIREN/SIRET en el Annuaire automáticamente al activar
Flux 1: Facturación electrónica B2B
Genera UBL/CII/Factur-X, transmite al PPF, enruta hacia la plataforma del receptor
Flux 6: Ciclo de vida de la factura
Gestiona los mensajes de estado CDAR (Déposée, Reçue, Approuvée, Refusée, Encaissée)
Flux 10: e-Reporting
Agrupa las transacciones B2C y B2B transfronterizas (intra-UE y extra-UE) en Ledgers enviados al PPF con la periodicidad que determina el vat_regime de tu Tax Report Setting
Recepción Peppol 0225
Recibe facturas desde cualquier plataforma francesa o conectada a Peppol
Generación de documentos
Tú envías los datos de la factura en JSON — B2Brouter genera el documento UBL/CII/Factur-X conforme y lo transmite al PPF. No se requiere generación de XML en tu lado
Formatos de entrada
API REST JSON, Factur-X PDF/A-3 (con CII XML integrado), UBL 2.1 XML, CII XML
Archivo legal
Todos los documentos transmitidos (facturas, reportes fiscales, mensajes CDAR) son almacenados por B2Brouter durante el período de retención legal de 10 años. No se requiere configuración adicional de almacenamiento en tu lado
Contexto regulatorio: La reforma de facturación electrónica francesa obliga a todas las empresas francesas a utilizar una Plateforme Agréée (PA) certificada o el PPF (Portail Public de Facturation) del gobierno para transmitir facturas y reportar datos de TVA a la DGFiP, a partir de septiembre de 2026. Como PA certificada, B2Brouter gestiona la conexión con el PPF en tu nombre — sin SFTP, sin certificados electrónicos, sin integración directa con el PPF.
Hay dos casos de uso principales para integrar con B2Brouter para la facturación electrónica en Francia:
eDocExchange — Para empresas o grupos de empresas que integran su software de gestión (ERP, plataforma contable) directamente con B2Brouter. El proceso de incorporación (creación de cuenta, configuración del Tax Report Settings) se realiza normalmente una vez por empresa a través de la interfaz web. Las operaciones diarias (emisión de facturas, seguimiento de su ciclo de vida) se realizan a través de la API. Para añadir más cuentas de empresa a tu grupo de integración, sigue el mismo asistente de incorporación desde la misma cuenta de usuario de B2Brouter — no se requiere llamada API adicional.
eDocSync — Para proveedores de software y editores de ERP que quieren ofrecer el cumplimiento de la DGFiP a sus propios clientes desde dentro de su producto. Este es el modelo de marca blanca / integrado / marque blanche de B2Brouter: B2Brouter opera completamente en segundo plano, los clientes finales interactúan exclusivamente con la interfaz del proveedor y desconocen B2Brouter. El proveedor de software es responsable del aprovisionamiento de cuentas, la presentación de facturas y el seguimiento del ciclo de vida a través de la API de B2Brouter. Los clientes finales no necesitan un inicio de sesión ni una suscripción en B2Brouter.
Para eDocSync, el volumen de aprovisionamiento de cuentas determina el plan adecuado:
Pocas empresas (modelo revendedor): Añade cada empresa cliente como una cuenta en tu grupo de integración de B2Brouter a través de la interfaz web, siguiendo el asistente de incorporación estándar. Funciona bien para decenas de empresas y comparte una única clave API.
100+ empresas: Contacta con nuestro equipo de Ventas o abre un Ticket de Soporte para discutir un plan eDocSync dedicado con aprovisionamiento masivo (precios por volumen para editores).
En ambos casos, todas las funciones de cumplimiento específicas de Francia (registro en el Annuaire, transmisión Flux 1/6/10, ciclo de vida CDAR) funcionan de manera idéntica.
B2Brouter es en sí mismo una Plateforme Agréée: te integras con B2Brouter — no es un relé o conector a otra PA. Si tu SIREN está actualmente registrado con una PA diferente, activar el Tax Report Setting sobre la cuenta SIREN falla: necesitas un código de migración (ver Cambiar de PA). Para llevar solo un establecimiento y conservar ese registro existente, consulta el Escenario 2 en Estructura de la cuenta. No puedes usar B2Brouter como intermediario para enviar facturas bajo la certificación de otra PA.
Enrutamiento a destinatarios en otras PA: Cuando tu receptor está registrado en una PA diferente, B2Brouter enruta la factura a través del modelo de cuatro esquinas Peppol estándar (C2 → C3): el punto de acceso Peppol de B2Brouter (C2) busca la dirección Peppol del destinatario en el Annuaire y entrega el documento al punto de acceso del comprador (C3) — independientemente de qué PA utilicen. No se requiere ninguna configuración adicional en tu lado.
Entornos de prueba: Usa el sandbox para las pruebas iniciales de la API y la validación de payloads — las presentaciones a la DGFiP se simulan en sandbox, no se requiere SIRET ficticio. Para pruebas completas de extremo a extremo con el entorno QAS (calificación) de la DGFiP, usa el entorno de staging de B2Brouter como se describe a continuación.
No mezcles entornos. Producción usa números SIREN/SIRET reales y se conecta al Annuaire de producción de la DGFiP. Staging usa identificadores de prueba ficticios y se conecta al entorno QAS (calificación) de la DGFiP. Las claves API, cuentas y contactos no se comparten entre entornos.
Regístrate en app.b2brouter.net para comenzar una integración de producción. Cuando activas el Tax Report Setting de la DGFiP, el SIREN/SIRET de tu empresa se publica en el Annuaire real del PPF, haciéndolo descubrible por cualquier plataforma en el ecosistema de facturación electrónica francés.
Esta opción está diseñada para facturas B2B reales a partir de septiembre de 2026. Mientras tanto, la DGFiP borrará los registros del período QAS antes de que la reforma entre en vigor — por lo que cualquier factura que envíes durante tu piloto no creará obligaciones de cumplimiento. Este es el punto de partida adecuado si ya has elegido B2Brouter y quieres probar la integración completa con los datos reales de tu empresa.
Regístrate en app-staging.b2brouter.net para usar el entorno de pruebas de B2Brouter, que está conectado al entorno QAS (calificación) de la DGFiP.
Esta es la mejor opción si:
Estás evaluando múltiples plataformas antes de comprometerte
Tu SIREN/SIRET ya está publicado en el Annuaire con otra PA y todavía no quieres cambiar de PA
Prefieres no asociar el identificador de tu empresa con actividad de prueba
El entorno de staging es auto-aprovisionado: una vez que tienes identificadores de prueba (ver a continuación), puedes comenzar las pruebas de extremo a extremo en menos de 24 horas.
Validación del SIRET en staging: En el entorno de staging, cualquier número válido de 14 dígitos se acepta como SIRET sin validación de suma de comprobación. Los identificadores ficticios del CSV QAS de Chorus Pro están pre-registrados en el annuaire QAS de la DGFiP y funcionan de extremo a extremo. En producción, se validan el formato y la suma de comprobación del SIRET.
Importante: La DGFiP no permite números SIREN o SIRET reales en su entorno QAS. Debes usar identificadores de prueba ficticios. Puedes obtenerlos tú mismo a través del portal QAS de Chorus Pro (gratuito, proceso de 5 minutos) o solicitar un conjunto pre-asignado abriendo un Ticket de Soporte en la app de staging.
Una cuenta por SIREN: B2Brouter crea una cuenta por SIREN (la clave del número de TVA se deriva del SIREN). Si proporcionas un SIRET, el SIREN se extrae de él. Dos SIRETs diferentes de la misma empresa (mismo SIREN) se resolverán en la misma cuenta. Si tu empresa opera desde múltiples establecimientos (diferentes SIRETs), estos se modelan como unidades organizativas dentro de la misma cuenta de B2Brouter — no como cuentas separadas. Contacta con Soporte si necesitas configurar la facturación multi-establecimiento. Ten esto en cuenta al seleccionar filas del CSV: elige SIRETs con SIRENs distintos (primeros 9 dígitos) para cada empresa independiente que necesites probar.
Obtener identificadores de prueba a través del QAS de Chorus Pro
El portal QAS de Chorus Pro te permite generar un “Matelas de données” (conjunto de datos) — un archivo CSV con identificadores SIREN/SIRET ficticios pre-registrados en el entorno de pruebas de la DGFiP. Sigue estos pasos:
Puedes usar una dirección de correo electrónico temporal (p. ej. temp-mail.io).
Usa cualquier nombre; esta cuenta es puramente para obtener identificadores de prueba.
Revisa tu bandeja de entrada para el correo “Initialisation de mot de passe Chorus Pro” y establece tu contraseña (enlace válido 60 minutos).
Inicia sesión → ve a Domaines → Matelas de données → haz clic en Générer un matelas de données y confirma.
Ve a Consultation du matelas de données. Espera hasta que ambos estados muestren “Disponible”:
Statut pour Chorus Pro: Disponible
Statut pour l’annuaire de facturation PPF: Disponible
La generación suele tardar unos minutos. Recarga la página para verificar.
Haz clic en “Générer et télécharger le fichier CSV du matelas structures et utilisateurs” para descargar tus identificadores de prueba.
El CSV contiene múltiples números SIREN/SIRET ficticios en filas etiquetadas como “Privé” y “Public”. Usa solo las filas de la sección “Privé” (sector privado) para tus cuentas de prueba. Las entidades del sector público (SIREN 'Public') son rechazadas por el annuaire QAS de la DGFiP — intentar activar el e-Reporting en una cuenta del sector público devuelve HTTP 422 (“La création d’une ligne annuaire n’est pas possible pour une entité associée à un SIREN ‘Public’”). Este es el comportamiento correcto: las entidades públicas usan Chorus Pro directamente, no una PA.
Usa un SIREN del sector privado para tu cuenta emisora y otro para tu contacto de prueba.
⚠️ El registro de tu empresa en el Annuaire no es inmediato: la publicación va con el envío nocturno y queda activa a la mañana siguiente, tanto en staging como en producción. Es el funcionamiento de la infraestructura de la DGFiP, no un retraso de B2Brouter. Hasta entonces no podrás enviar facturas.
Al día siguiente: crea un contacto de prueba usando un segundo SIREN del CSV (ver Crear un contacto).
La autenticación usa una clave API estática que se pasa en la cabecera HTTP X-B2B-API-Key. No hay flujo OAuth2 — genera tu clave API en la interfaz de B2Brouter en Configuración → Claves API. Mantenla confidencial y nunca la incluyas en código del lado del cliente. También establece X-B2B-API-Version en cada solicitud.
URL base: Todos los ejemplos a continuación usan https://api-staging.b2brouter.net. Para producción, reemplaza con https://api.b2brouter.net.
Estructura de la cuenta: matriz y unidades organizativas
En Francia, cada empresa tiene un SIREN de 9 dígitos que la identifica como entidad legal, y cada establecimiento o servicio tiene un SIRET de 14 dígitos derivado de ese SIREN. B2Brouter sigue la misma jerarquía, con una cuenta matriz y, bajo ella, una unidad organizativa (UO) por cada establecimiento o servicio. Las facturas se emiten desde la cuenta matriz o desde una UO concreta, según el establecimiento emisor.
La cuenta matriz siempre es un SIREN. Cualquier SIRET, Code Routage o Suffix (ver Identificadores y esquemas) se modela siempre como UO bajo esa matriz, nunca como cuenta independiente: es lo que mantiene coherentes los identificadores publicados de la matriz y de sus UOs.
Si creas una cuenta con un SIRET, B2Brouter no la rechaza: deriva el SIREN de los 9 primeros dígitos, crea la cuenta matriz si todavía no existe y cuelga el SIRET como UO. Lo que te devuelve la llamada es la UO. Convertir una matriz existente a SIRET con un PUT sí devuelve 422 parameter_matriu_must_be_siren.
Cada UO tiene su propio Tax Report Setting. Una UO nunca declara a través de la cuenta matriz: si no tiene su propio Tax Report Setting activado, no declara. Ahora bien, al crear una UO bajo una matriz que ya tiene la DGFiP activa, B2Brouter le clona un Tax Report Setting propio para que empiece a declarar sin pasos adicionales. Si no quieres que declare, desactívalo (enabled: false) una vez creada. Ver Escenarios y casos para elegir tu configuración.
La regla de oro también vale para los contactos. Los contactos franceses (clientes y proveedores) siguen la misma jerarquía y los mismos cin_scheme: el contacto matriz es siempre el SIREN, y cualquier SIRET, Code Routage o Suffix es una UO. El sistema admite técnicamente un contacto matriz con un identificador distinto del SIREN, pero hacerlo rompe las UOs que añadas después para el mismo cliente. Para crearlos, ver Crear un contacto.
En B2Brouter, las cuentas, las unidades organizativas y los contactos franceses se definen con un identificador principal (cin_scheme + cin_value). Las UOs con SIRET que tienen varios servicios internos añaden un sub-identificador (routing_codes.cin1_scheme + routing_codes.cin1_value) para apuntar a un servicio concreto. Son dos cosas distintas: el Suffix es un cin_scheme principal, mientras que el Code Routage va siempre en el sub-identificador y nunca como cin_scheme principal.
Identificador principal de la cuenta, UO o contacto (cin_scheme + cin_value):
cin_scheme
cin_value
Qué representa
Ejemplo
0002 (2)
SIREN, 9 dígitos + Luhn
Entidad legal
123456789
0009 (9)
SIRET, 14 dígitos (SIREN + 5 dígitos) + Luhn
Establecimiento
12345678900012
8040
Suffix, alfanumérico [A-Za-z0-9_\-\/]+
UO sin SIRET propio
SUF01, ADMIN
Sub-identificador o routing code (routing_codes.cin1_scheme + routing_codes.cin1_value):
En la red Peppol, en cambio, el participante francés se identifica siempre con el esquema 0225 (FRCTC Electronic Address), el código reservado a las direcciones electrónicas francesas. Su valor es siempre una composición publicada en el Annuaire, nunca un identificador solo: un SIRET sin el SIREN delante no es publicable. Los schemes 0224 y 8040 no son esquemas Peppol: solo sirven para componer ese valor.
Identificador del participante Peppol (pin_scheme + pin_value):
B2Brouter cubre tres escenarios de configuración. Cuál te corresponde depende de qué quieras hacer desde B2Brouter. Si no sabes si tu SIREN ya está registrado con otra PA, consúltalo en el Annuaire con el Directory lookup.
¿Quieres que el SIREN declare desde B2Brouter?
Respuesta
Escenario
Qué tienes que hacer
Sí
Escenario 1. Declara toda la empresa
Activa el Tax Report Setting en la cuenta matriz SIREN. Los establecimientos, servicios y unidades internas se modelan con los casos 1, 2 y 3. Si el SIREN ya está registrado con otra PA, primero tienes que migrarlo a B2Brouter con un código de migración (ver Migrar desde otra PA o hacia otra).
No, quiero declarar un establecimiento concreto desde B2Brouter
Escenario 2. Declara solo un establecimiento
Crea el establecimiento como UO con el SIRET y activa el Tax Report Setting solo en esa UO, no en la cuenta matriz SIREN. El registro del SIREN con la otra PA no se modifica. Casos 4 y 5.
No, solo quiero emitir desde B2Brouter
Escenario 3. Emite desde B2Brouter, recibe en tu PA
⚠️ Solo disponible en una UO de Suffix: créala bajo el SIREN y activa en ella el Tax Report Setting con issue_only: true. La recepción se mantiene en la otra PA. Caso 6, ver Modos del Tax Report Setting.
Tienes establecimientos y todos declaran desde la empresa.
2. Service Escenario 1
SIRET + Code Routage
Matriz:ON UO:ON1
SIREN_SIRET_<CR>
Quieres direccionar un departamento concreto dentro de un establecimiento.
3. Suffix Escenario 1
Suffix
Matriz:ON UO:ON1
SIREN_<SUFFIX>
Tienes una unidad sin SIRET propio que debe recibir y declarar con dirección propia.
4. Établissement-only Escenario 2
SIRET
Matriz:OFF UO:ON
SIREN_SIRET
El SIREN ya está registrado con otra PA y solo llevas un establecimiento a B2Brouter.
5. Établissement-only + Service Escenario 2
SIRET + Code Routage
Matriz:OFF UO:ON
SIREN_SIRET_<CR>
Como el caso 4, pero direccionando un departamento dentro de ese establecimiento.
6. Issue-only Escenario 3
Suffix con issue_only2
Matriz:OFF UO:ON
SIREN_<SUFFIX>
Quieres emitir desde B2Brouter manteniendo la recepción en tu PA actual.
1 Al crear una UO bajo una matriz que ya tiene la DGFiP activa, B2Brouter le clona un Tax Report Setting propio. Ver La regla de oro.
2 Una UO de Suffix publica transporte 0225 y recibe facturas como cualquier otra dirección (caso 3). Lo que le quita la recepción es el flag issue_only de su Tax Report Setting, que solo se acepta en una UO de Suffix (ver Modos del Tax Report Setting).
Este apartado explica cómo crear la cuenta matriz con el SIREN y cómo añadirle las unidades organizativas. El modelo que hay detrás está en Estructura de la cuenta.
Si la estructura de tu empresa requiere UOs (ver la tabla de casos), crea cada UO con POST /accounts añadiendo parent_id (el ID de la cuenta matriz que has creado antes).
Si la cuenta matriz ya tiene el Tax Report Setting de la DGFiP activo, la UO nueva recibe una copia propia y empieza a declarar de inmediato. Si no quieres que declare, desactívale el Tax Report Setting (enabled: false) una vez creada (ver La regla de oro).
Cuelga la UO de la matriz SIREN: es lo que la convierte en UO
cin_scheme y cin_value
Según el tipo de UO
Identificador propio de la UO; ver Campos de creación y resultado en el Annuaire. Un SIRET empieza siempre por los 9 dígitos del SIREN matriz, por definición del INSEE: si la matriz es 123456789, los SIRET válidos tienen la forma 123456789XXXXX
country
"fr"
Activa las validaciones y el enrutamiento FR
email, address, city, postalcode, province
Datos de contacto y dirección de la UO
Obligatorios en cualquier cuenta, también en las UOs
Sin estos campos, la creación devuelve HTTP 422 ("Region/Province/Country can't be blank").
Los casos 4, 5 y 6: el payload no los distingue de sus equivalentes. Lo que cambia es dónde se activa el Tax Report Setting y, en el caso 6, el flag issue_only. Ver Escenarios y casos.
Caso 1 y 2: UO de tipo Établissement con Service opcional
El payload del caso 6 (Issue-only) es idéntico al del caso 3: lo que los diferencia no es el POST /accounts sino el Tax Report Setting que activas después, con issue_only: true. Este flag solo se acepta sobre una UO con cin_scheme="8040". Ver Modos del Tax Report Setting.
Este es el paso clave de incorporación. Cuando creas un Tax Report Setting con code: "dgfip", B2Brouter automáticamente:
Registra tu empresa en el Annuaire del PPF: tu identificador se vuelve descubrible por cualquier plataforma en el ecosistema de facturación electrónica francés.
Crea un transporte Peppol 0225 (FRCTC Electronic Address): tu empresa queda habilitada para recibir facturas electrónicas desde cualquier plataforma conectada a Peppol en Francia.
⚠️ Si la cuenta sobre la que activas ya tiene un transporte Peppol, será reemplazado por el nuevo transporte 0225 durante la activación.
Identificador ya registrado con otra PA:
Si el SIREN sobre el que activas estaba previamente registrado con otra PA, B2Brouter cerrará la entrada existente del Annuaire y abrirá una nueva. Si necesitas conservar ese registro existente, no actives sobre el SIREN; activa sobre una UO SIRET (ver “Dónde activar” más abajo). Actualiza cualquier integración existente que haga referencia al identificador de transporte anterior.
Dónde activar el Tax Report Setting: {ACCOUNT_ID} puede ser la matriz SIREN, una UO SIRET, o ambas. Cada cuenta (matriz o UO) que tiene Tax Report Setting propio se publica en el Annuaire con su propia dirección. Para cuentas del territorio de TVA francés (FR, y los DROM GP/MQ/RE) no hay herencia entre UO y matriz (ver La regla de oro): sin Tax Report Setting propio la UO no declara, y con un Tax Report Setting propio desactivado tampoco. Tres configuraciones:
Tax Report Setting solo en el SIREN: la empresa se publica como SIREN (caso estándar, Escenario 1). Las UOs nuevas bajo esa matriz reciben automáticamente un Tax Report Setting propio clonado al crearse (ver la nota siguiente), por lo que normalmente también declaran.
Tax Report Setting en el SIREN y en una o más UOs SIRET: la empresa se publica a la vez como SIREN y como cada SIREN_SIRET (una dirección de Annuaire por cuenta activada). Todos los Tax Report Settings DGFiP activos del mismo SIREN deben compartir el mismo vat_regime: si activas uno distinto, la solicitud devuelve 422 dgfip_vat_regime_taken_per_siren.
Tax Report Setting solo en una UO SIRET, no en el SIREN: solo se publica ese establecimiento (SIREN_SIRET); el SIREN no (Escenario 2). Úsalo cuando el SIREN ya está registrado con otra PA y quieres conservar ese registro.
Si creas una UO con la matriz ya activa: B2Brouter le crea automáticamente su propio Tax Report Setting DGFiP (con start_date de mañana), para que empiece a declarar sin pasos adicionales. Si la matriz no tiene la DGFiP activa en ese momento, la UO se crea sin ningún Tax Report Setting; cuando actives la matriz más adelante, la UO recibe uno propio. La UO nunca consulta el de la matriz para declarar.
El start_date determina cuándo comienza el reporte fiscal. A partir de esa fecha, las facturas que emitas generarán reportes fiscales y serán transmitidas al PPF.
Cuándo comienza el reporte fiscal. Debe ser hoy o una fecha futura. Por defecto mañana si se omite.
type_operation
string
Sí
Tipo de operación predeterminado para esta empresa: "services", "goods" o "mixed". Determina el código de proceso de la DGFiP (S1/B1, etc.) usado en los reportes fiscales. Elige "mixed" si tu empresa vende tanto bienes como servicios. En una factura mixta, el reporte fiscal del Flux 1 se emite con el código de proceso de servicios (S1/S2/S4/S7) y solo reporta los breakdowns de servicios; la DGFiP no tiene ningún cadre “M” propio para el Flux 1 (consulta Códigos de proceso). Esta configuración se puede actualizar tras la activación.
naf_code
string
Sí
El código NAF/APE de la empresa (Nomenclature d’Activités Française). Es el código de sección de 2 dígitos asignado por el INSEE que identifica la actividad económica principal de la empresa (p. ej. "62" para servicios de TI y software, "47" para comercio minorista, "86" para salud). La DGFiP usa este código para la clasificación de reportes fiscales. Puedes encontrar tu código NAF en el extracto Kbis de tu empresa o en sirene.fr.
enterprise_size
string
Sí
La categoría de tamaño de la empresa según define el INSEE. Valores permitidos: "micro" (Microentreprise — < 10 empleados, CA ≤ 2 M€), "pme" (PME — 10 a 249 empleados, CA ≤ 50 M€), "eti" (ETI — 250 a 4.999 empleados, CA ≤ 1,5 Md€), o "ge" (Grande Entreprise — 5.000+ empleados o CA > 1,5 Md€).
vat_regime
string
Sí, salvo annuaire_only=true
El régimen de TVA de la empresa. Determina la frecuencia de transmisión del Flux 10 (e-Reporting). Sin un vat_regime válido no se pueden transmitir facturas declarables: la solicitud devuelve HTTP 422. Ver la tabla de regímenes.
reason_vat_exempt
string
No
Código de motivo de exención de TVA predeterminado para esta empresa. Por defecto "VATEX-FR-FRANCHISE" (franchise en base de TVA). Establécelo si tu empresa opera bajo un régimen específico de exención de TVA.
email
string
No
Correo electrónico de contacto para notificaciones fiscales.
auto_generate
boolean
No
Siempre true para DGFiP (obligación legal). No se puede cambiar.
auto_send
boolean
No
Transmitir automáticamente los reportes fiscales al PPF. Por defecto true.
enabled
boolean
No
Si la configuración está activa. Por defecto true. El registro en el Annuaire solo ocurre cuando es true.
annuaire_only
boolean
No
Cuando es true, la cuenta solo se registra en el Annuaire del PPF para recepción. No se generan tax reports Flux 1 ni mensajes CDAR; enterprise_size y naf_code son opcionales. Por defecto false. Ver Modos del Tax Report Setting.
Transacciones cada diez días (días 1-10, 11-20, 21-fin de mes); pagos mensualmente.
reel_normal_trimestriel
Mensual.
simplifie
Mensual. Plazo de envío: día 26 del mes siguiente. Régimen abolido el 2027-01-01; a partir de esa fecha se trata como reel_normal_trimestriel.
franchise_en_base
Bimensual (bimestres naturales: Ene-Feb, Mar-Abr, May-Jun, Jul-Ago, Sep-Oct, Nov-Dic). Plazo de envío: día 26 del mes siguiente.
Si el registro en el Annuaire falla (SIREN/SIRET inválido, o una interrupción temporal del servicio de la DGFiP), la creación del Tax Report Setting se revierte y se devuelve un error. Corrige el problema y reintenta.
Si has seguido los pasos anteriores, ya tienes el modo completo y no necesitas leer nada más de este apartado. Los otros dos modos son desviaciones para situaciones concretas.
Cuándo lo necesitas: tu empresa todavía no está obligada a emitir, pero quieres estar en el Annuaire para que los proveedores puedan enviarte facturas.
Registra la empresa en el Annuaire y crea el transporte 0225 para la recepción, pero no genera tax reports ni envía mensajes CDAR. Los campos enterprise_size y naf_code dejan de ser obligatorios.
Cuándo lo necesitas: quieres emitir desde una UO de Suffix en B2Brouter manteniendo la recepción en la PA que ya tiene tu SIREN. Si lo que quieres es llevártelo, ver Cambiar de PA.
Este flag solo se acepta en una UO de Suffix (cin_scheme="8040") bajo la matriz SIREN. Activarlo sobre la matriz devuelve 422 dgfip_issue_only_suffix_uo_only.
Al activarlo, B2Brouter publica tu línea en el Annuaire del PPF (el directorio de la administración francesa que enruta el Flux 1) con el direccionamiento SIREN_<SUFFIX>, pero no crea ningún transporte Peppol. La línea que la otra PA tiene publicada para tu SIREN queda intacta: lo que publiques tú lo haces bajo SIREN_<SUFFIX>, que es un identificador distinto.
El transporte tienes que crearlo tú para la UO de Suffix, con el identificador compuesto y con cdar como único tipo de documento activado. Sin transporte, el primer envío falla con 422 "To use Peppol Network you need to configure this connection to your account".
Tres campos son críticos:
reception: true publica el Suffix en el SML. Hace falta, porque los CDAR llegan por Peppol y sin publicación no te encontrarían.
cdar: true, y ningún otro tipo de documento. Es lo que hace que el modo sea issue-only: recibes las respuestas de las facturas que emites, pero no facturas, que deben seguir llegando a tu PA actual.
pin_value debe ser la composición {SIREN de la matriz}_<SUFFIX> con pin_scheme: 225, el mismo direccionamiento que B2Brouter ya ha publicado en la línea del Annuaire.
Queda un transporte que emite y que solo recibe CDAR. El registro que la otra PA tiene para tu SIREN no se toca y sigue recibiendo las facturas de tus proveedores.
Si más adelante quieres recibir también por B2Brouter, desactiva issue_only.
El cambio implica dos registros separados que se comportan de manera diferente:
El Annuaire lo actualiza siempre la PA que entra, no la que sale.
El registro Peppol es el que puede bloquear el cambio: un identificador solo puede estar activo con un proveedor a la vez. Hasta que el registro no se mueva o se dé de baja, la activación de la PA que entra falla con 422.
Hay tres maneras de desbloquearlo:
Con código de migración, el camino automático y el recomendado, porque no corta el servicio. Lo emite siempre la PA que tiene el identificador publicado en ese momento, y lo usa la PA que entra al activar. En B2Brouter lo puedes solicitar al salir (ver Salir de B2Brouter) y aportarlo al llegar (ver Venir a B2Brouter).
Con baja de Peppol: la PA que sale despublica el identificador de Peppol. Esto lo libera y la PA que entra ya puede activar, pero te deja sin servicio hasta que lo vuelva a publicar. Ver Despublicar, dar de baja y migrar.
Manualmente, cuando la PA que sale no ofrece ninguna de las dos: contacta con la PA que entra, y es esta quien reclama el cambio a la que sale. Todas las PA francesas están obligadas a ofrecer este camino, así que no tener código no te deja bloqueado (ver Venir a B2Brouter).
Tres operaciones que a menudo se llaman igual y tienen efectos distintos:
Operación
Efecto
¿Sigue registrado en el SML?
Despublicar del directorio de Peppol
Quita la entrada del catálogo buscable
Sí: sigue enviando y recibiendo
Despublicar de Peppol
Elimina el registro del participante en el SML
No: es la baja que libera el identificador
Migrar con código
Transfiere el registro a la PA nueva sin darlo de baja
Sí, sin interrupción
Solo la segunda libera el identificador. Mientras el registro del SML exista, activar el Tax Report Setting sobre ese identificador seguirá fallando con 422, aunque la otra PA haya despublicado el directorio. Es la confusión más habitual: si te asegura que ya te ha despublicado y la activación sigue fallando, pídele que confirme que ha eliminado el registro del SML y no solo la entrada del directorio.
La comprobación que hace B2Brouter al activar es una consulta DNS en vivo contra el SML, no una consulta a una base de datos nuestra. Por tanto no hay ningún plazo garantizado tras una baja, porque la propagación depende del SML y del DNS, pero puedes reintentar la activación cuando quieras y obtendrás el estado real de ese momento. El código de migración evita todo esto, porque no pasa por ninguna baja.
Activar el Tax Report Setting sobre un identificador que publica otro proveedor falla con 422. Repite la misma llamada añadiendo el código que te haya dado ese proveedor:
POST /tax_report_settings con peppol_migration_code. Es la vía principal para Francia: mueve el identificador como parte de la misma activación.
POST /transports o PUT /transports/{code} con migration_code, si lo que creas es el transporte directamente.
Ambos campos son write-only y no aparecen en ningún GET. Si el código no sirve, la llamada falla con migration_code_malformed, migration_code_not_applicable o migration_code_rejected, este último con el motivo real del SML. No queda estado parcial: si la migración falla, el transporte no se crea.
Si la otra PA no te ofrece código ni te despublica, abre un ticket de soporte e iniciamos el procedimiento manual para reclamar tu portabilidad.
POST /accounts/{ACCOUNT_ID}/transports/peppol/migration_code devuelve el código que tienes que dar al proveedor nuevo. Es idempotente: repetir la llamada devuelve el mismo código hasta que lo canceles con DELETE en la misma ruta, y un POST posterior genera uno nuevo.
Devuelve 409 not_published_by_b2brouter si el transporte es solo de emisión, porque entonces el identificador no lo publicamos nosotros.
El campo de solo lectura migration_pending de los GET de transportes dice si hay un código emitido y todavía no cancelado. El código en sí no se expone nunca en ningún GET.
Un contacto B2B francés necesita identificadores de enrutamiento (cómo llega la factura al destinatario) e identificación fiscal (cómo aparece el destinatario en el XML UBL).
Campo
Valor
Propósito
cin_scheme
"0002" (SIREN, por defecto) o "0009" (SIRET, para un establecimiento concreto)
ID de organización: usado para buscar al destinatario en el Annuaire
cin_value
SIREN o SIRET
ID de organización: el identificador registrado en el Annuaire
tin_scheme
9957
ID fiscal: código ISO 6523 para identificador fiscal francés
tin_value
FR{kk}{siren} (p. ej. "FR78225214234")
ID fiscal: número de TVA francés en el XML UBL
pin_scheme
"0225"
EAS Peppol del participante FR (FRCTC Electronic Address), obligatorio para contactos franceses
pin_value
Composición Annuaire del destinatario
Identificador Peppol del contacto; sigue la misma composición que la matriz en el Annuaire (SIREN, SIREN_SIRET, SIREN_SIRET_<CR> o SIREN_<SUFFIX> — ver Niveles de identificador)
country
"fr"
Requerido para la lógica de enrutamiento de la DGFiP
currency
"EUR"
Moneda predeterminada para las facturas de este contacto
transport_type_code
"peppol"
Recomendado: garantiza la entrega a través de la red Peppol
document_type_code
"xml.ubl.invoice.frcius.v1"
Recomendado: formato de factura UBL France CIUS
Transporte y tipo de documento: Para contactos franceses registrados en el Annuaire, recomendamos establecer explícitamente transport_type_code: "peppol" y document_type_code: "xml.ubl.invoice.frcius.v1". Sin pin_value, la creación devuelve HTTP 422 (“Peppol Endpoint ID can’t be blank”). Puedes verificar que un contacto está registrado en el Annuaire antes de crearlo usando la búsqueda en el Directorio o el Directorio Peppol oficial.
Contactos en Bélgica, Alemania y otros países de la UE: Para facturas B2B a empresas no francesas, usa su esquema de identificador nacional (p. ej. "0208" para KBO/BCE belga, "0190" para Leitweg-ID alemán, "0184" para KVK neerlandés) y el código country apropiado. Si el destinatario tiene un punto de acceso Peppol activo, B2Brouter enruta la factura a través del estándar Peppol BIS 3.0 — no se necesita configuración. Para transacciones con cualquier contacto no "fr", se genera automáticamente el e-Reporting transfronterizo Flux 10.
Direccionar un establecimiento concreto: si el cliente tiene varios establecimientos y necesitas identificar uno en particular, usa cin_scheme: "0009" con el SIRET de 14 dígitos y pin_value con la composición SIREN_SIRET (p. ej. 987654321_98765432100011) en lugar del SIREN solo.
Contactos con estructura multinivel: si tu cliente tiene varios establecimientos o servicios que hay que identificar por separado, crea primero el contacto matriz a nivel SIREN y después añade UOs con parent_id. Ver Estructura de la cuenta para la regla de oro y las estructuras aplicables.
Alternativa: contacto inline en la factura (sin el módulo de contactos)
En lugar de crear un contacto por separado y referenciarlo con contact_id, puedes enviar un objeto contact inline directamente dentro de POST /accounts/{ACCOUNT_ID}/invoices, con todos los datos del receptor:
{
"invoice":{
"type":"IssuedInvoice",
"contact":{
"name":"Client Exemple SARL",
"country":"fr",
"currency":"EUR",
"language":"fr",
"cin_scheme":"0009",
"cin_value":"98765432100011",
"tin_scheme":9957,
"tin_value":"FR05987654321",
"pin_scheme":"0225",
"pin_value":"987654321_98765432100011",
"transport_type_code":"peppol",
"document_type_code":"xml.ubl.invoice.frcius.v1"
}
}
}
⚠️ Aviso clave: pasa siempre todos los identificadores correctos (tin / cin / pin) con la composición FR correcta (matriz SIREN + UO), para no romper la coherencia matriz↔UO (ver La regla de oro). Desde la versión de API 2026-04-20, el sistema rechaza (422) un contacto inline no simplificado que no informe tin_value ni cin_value. currency y language son obligatorios en cualquier contacto; sin ellos la creación falla igualmente. El contacto inline también acepta routing_codes.cin1_scheme / routing_codes.cin1_value para identificar un servicio dentro de un SIRET (Caso 2), con los mismos valores ("224" y el Code Routage) que en un contacto creado a través del módulo de contactos.
Opcional: Verificar el enrutamiento del destinatario (búsqueda en el Directorio)
B2Brouter enruta las facturas automáticamente. Para inspeccionar cómo se enrutará un destinatario antes de enviar — por ejemplo, para confirmar que están registrados en el Annuaire — usa la búsqueda en el Directorio (Flux 11):
Destinatario registrado y activo en el Annuaire del PPF
FR_ASSUJETTI_INACTIVE
Destinatario con registro fuera de vigencia o sin PA asignada
FR_ASSUJETTI_UNKNOWN
El PPF no tiene información concluyente (por ejemplo, 404)
source
array de "peppol", "annuaire"
Orígenes consultados. Si aparecen ambos, B2Brouter ha encontrado al destinatario en los dos directorios
Esta consulta es informativa: B2Brouter ya resuelve el enrutamiento automáticamente al crear la factura (ver Verificación del Annuaire y generación de reportes fiscales). Úsala para inspeccionar antes de enviar o para mostrar el estado del destinatario en tu UI.
B2Brouter verifica automáticamente si los contactos franceses (country: "fr") están registrados en el Annuaire de la DGFiP. Esta verificación determina el flujo de reporte fiscal:
Contacto registrado en el Annuaire (in_dgfip_annuaire: true o aún no verificado): la factura genera un reporte fiscal Flux 1 (facturación electrónica B2B nacional).
Contacto NO registrado en el Annuaire (in_dgfip_annuaire: false): la factura no genera un reporte fiscal. Esto evita envíos Flux 1 inválidos para destinatarios a los que el PPF no puede enrutar.
Contacto aún no verificado (in_dgfip_annuaire: nil): B2Brouter es permisivo — la factura procede y genera un reporte fiscal. La verificación ocurre de forma asíncrona en segundo plano.
Si creas un contacto francés e inmediatamente envías una factura, es posible que la verificación del Annuaire aún no se haya completado. Esto es por diseño — B2Brouter no bloquea la creación de facturas mientras la verificación está pendiente. Si el contacto resulta no estar registrado, las facturas futuras a ese contacto no generarán reportes fiscales Flux 1 hasta que el contacto se registre con una PA.
La verificación del Annuaire solo aplica a contactos nacionales franceses (country: "fr"). Los contactos no franceses siempre siguen la ruta de e-Reporting Flux 10, independientemente del estado del Annuaire.
Importante: ambas empresas en el Annuaire DGFiP: para un envío FR → FR con tax report Flux 1, tanto el emisor como el receptor deben estar registrados en el Annuaire de la DGFiP. Si una de las dos no está, el tax report no se puede completar y la factura se envía sin declaración fiscal.
⚠️ La web annuaire-entreprises.data.gouv.fr es para datos fiscales generales; no garantiza el registro en el Annuaire DGFiP — son bases diferentes.
A partir de septiembre de 2026 este comportamiento permisivo dejará de aplicarse: las declaraciones simplemente fallarán si el identificador no consta como activable en la DGFiP, aunque el SIREN/SIRET sea válido.
Una vez que tu empresa está incorporada y el Tax Report Setting de la DGFiP está habilitado, la creación de facturas funciona a través de la API de Facturas estándar, POST /accounts/{ACCOUNT_ID}/invoices. B2Brouter gestiona todos los requisitos específicos de Francia automáticamente: generación de reportes fiscales, formato UBL/CII/Factur-X y transmisión al PPF a través de Flux 1.
Usa send_after_import: true para crear y transmitir en un solo paso. Establécelo en false si quieres crear la factura primero y revisarla antes de enviarla — en ese caso, la factura permanece en estado new hasta que actives la transmisión mediante una llamada separada o a través de la interfaz de B2Brouter.
Fecha de la factura
Para cuentas con DGFiP Tax Report Setting activo, la date de la factura no puede ser una fecha futura. Si se pasa una fecha posterior a hoy, el envío devuelve HTTP 422 (“Only invoices with today’s date are allowed”). Los ejemplos de esta guía usan fechas ficticias; sustitúyelas por la fecha actual cuando hagas pruebas.
Número de factura
⚠️ Mantén el number en 20 caracteres o menos. La creación no lo valida y un número más largo se crea sin error, pero el PPF aplica un límite de 20 caracteres y rechaza el depósito a posteriori con REJ_SEMAN. En un ledger de Flux 10, el rechazo arrastra todo el lote del periodo.
Facturación secuencial
La API procesa una factura por solicitud. Para escenarios masivos o por lotes, itera a través de tu lista de facturas y llama al endpoint para cada documento. La API admite solicitudes concurrentes — puedes paralelizar múltiples POSTs sin esperar cada respuesta antes de iniciar el siguiente.
El array tax_report_ids en la respuesta contiene el ID del reporte fiscal generado. Úsalo para hacer seguimiento del ciclo de vida de la presentación (ver Verificar el estado de un reporte fiscal).
Tres campos de pago son obligatorios para las facturas electrónicas B2B francesas (IssuedInvoice). Proporciónalos como campos directos de la API:
Campo
Campo DGFiP
Descripción
Requerido
remittance_information
PMD
Referencia de pago y menciones legales (registro de empresa, capital social, RCS)
Sí: B2B nacional y transfronterizo
payment_method_text
PMT
Descripción textual del método de pago
Sí: B2B nacional y transfronterizo
payment_terms
AAB
Fecha de vencimiento, penalizaciones por pago tardío, condiciones de descuento
Sí: B2B nacional y transfronterizo
bank_account_id
—
Id de la cuenta bancaria asociada a tu cuenta de B2Brouter. Obligatorio cuando payment_method es transferencia bancaria (código 4)
Sí, si pago por transferencia
Si falta algún campo obligatorio, la solicitud devuelve HTTP 422 con mensajes de error explícitos para cada campo ausente. No son silenciosos — la factura nunca se crea. Corrige los campos faltantes y vuelve a enviar.
Cuenta bancaria: crea primero una cuenta bancaria asociada a tu empresa (desde la interfaz web o vía API) y referencia su id en la factura con bank_account_id. La cuenta bancaria contiene IBAN y BIC y es la fuente canónica — no los pases como texto libre dentro de payment_method_text.
Las facturas B2C (IssuedSimplifiedInvoice) no requieren estos campos.
Importación desde otros formatos (UBL, CII, Factur-X): Para estas integraciones, usa el campo extra_info con etiquetas estructuradas:
#PMD# FA-2026-0048 — Exemplar SAS, RCS Paris 123 456 789
Cuando una línea tiene category: "E" (exenta de TVA), también debes proporcionar un comment con el código de exención VATEX-FR-CGI261-* aplicable (DGFiP BT-121):
⚠️ Bloqueo silencioso: Si se omite comment en una línea de categoría E, la factura se crea (HTTP 200) pero nunca se transmite al PPF. La respuesta contendrá un array errors no vacío — compruébalo incluso en respuestas exitosas.
Códigos de exención de TVA de la DGFiP (BT-121)
Código
Referencia legal
Categoría fiscal
Descripción
VATEX-FR-FRANCHISE
Art. 293 B CGI
Z (tipo cero)
Franchise en base de TVA
VATEX-FR-CNWVAT
—
E (exento)
Avoir net de taxe — nota de crédito sin TVA (el proveedor renuncia al ajuste de TVA). Solo notas de crédito (261/381/396, regla G6.21)
VATEX-FR-AE
—
E (exento)
Autoliquidación (inversión del sujeto pasivo)
VATEX-FR-CGI261-1
Art. 261-1° CGI
E (exento)
Soins et services médicaux
VATEX-FR-CGI261-2
Art. 261-2° CGI
E (exento)
Services paramédicaux
VATEX-FR-CGI261-3
Art. 261-3° CGI
E (exento)
Enseignement scolaire, universitaire et formation professionnelle
VATEX-EU-F / -I / -J
—
E (exento)
Régimen del margen (régime de la marge)
Códigos de exención de nivel UE: además de los códigos nacionales VATEX-FR-* de arriba, la DGFiP también acepta la lista VATEX-EU-* (extensiones UNCL5305 / EN16931). El régimen del margen usa VATEX-EU-F, VATEX-EU-I o VATEX-EU-J en una línea de categoría E. Indica el código aplicable en el comment de la línea.
Las empresas que operan bajo el régimen de franchise en base de TVA operan a tipo cero (categoría fiscal Z), no exento (categoría E). Para facturas de franchise, establece percent: 0.0 y category: "E" con comment: "VATEX-FR-FRANCHISE" en cada línea de impuesto — B2Brouter transcodifica automáticamente la categoría a Z:
{
"taxes_attributes":[
{
"name":"TVA",
"percent":0.0,
"category":"E",
"comment":"VATEX-FR-FRANCHISE"
}
]
}
Operaciones fuera del ámbito de la TVA (categoría O)
Algunas operaciones quedan fuera del ámbito de aplicación de la TVA y deben llevar la categoría O con percent: 0.0, no la categoría E (exenta) ni Z (tipo cero). Dos casos habituales:
Détaxe (operaciones fuera del ámbito de la TVA): la línea no lleva TVA.
Débours (gastos reembolsables adelantados en nombre del cliente): se traspasan sin TVA.
{
"taxes_attributes":[
{"name":"TVA","percent":0.0,"category":"O"}
]
}
El reporte fiscal del Flux 1 sintetiza automáticamente el TaxSubtotal de categoría O correspondiente. La categoría NS también se acepta y se transcodifica a O.
Campos legacy: en versiones de API anteriores a 2026-04-20, la nota de crédito se expresaba con is_amend: true + amended_number + amended_date en lugar de invoice_references. Estos campos siguen siendo aceptados en esas versiones por compatibilidad, pero quedan como legacy: para integraciones nuevas, usa invoice_references.
El código de proceso determina el flux cadre del PPF. B2Brouter lo asigna automáticamente según type_operation en el Tax Report Setting y las características de la factura.
Código de proceso
Tipo de operación
Descripción
S1
Servicios
Factura estándar de servicios
B1
Bienes
Factura estándar de bienes
M1
Mixto
Factura estándar de operaciones mixtas
S2
Servicios
Factura pagada de servicios
B2
Bienes
Factura pagada de bienes
M2
Mixto
Factura pagada de operaciones mixtas
S4
Servicios
Factura con pagos a cuenta (servicios)
B4
Bienes
Factura con pagos a cuenta (bienes)
M4
Mixto
Factura con pagos a cuenta (mixto)
S7
Servicios
Corrección de una factura registrada (servicios)
B7
Bienes
Corrección de una factura registrada (bienes)
Ningún cadre “M” en el Flux 1: aunque type_operation acepta "mixed", el reporte fiscal del Flux 1 nunca lleva un código de proceso de la serie M. Una factura mixta se resuelve con el código de servicios correspondiente (S1/S2/S4/S7) y solo reporta sus breakdowns de servicios. Las filas M de arriba se listan como referencia, pero el Flux 1 no las produce.
Francia usa un modelo en Y (5 esquinas), no de clearance. La factura se transmite al receptor con independencia de que se registre un reporte fiscal Flux 1; el PPF no valida previamente las facturas antes de que lleguen al receptor. La Factura y el Reporte fiscal son ciclos de vida separados que solo coinciden en la entrega del Flux 1. Un error en el reporte fiscal no deshace una factura que ya ha llegado al receptor.
1 El CDV 206 fija el mismo estado que el 205: accepted. El estado de la factura no distingue una aprobación total de una parcial. El importe que ha aprobado el receptor queda registrado como metadato del evento correspondiente, no como campo de la factura. 2 El payload de la factura lleva refuse_reason_code con el motivo estructurado del rechazo.
Antes del envío:
Para que una factura se pueda enviar, tiene que pasar la validación del schematron. Si no la pasa, el envío devuelve HTTP 422, la factura queda en estado error y no se crea ningún tax report. El mensaje cita el código de la regla que ha fallado, por ejemplo G1.24 para un tipo de TVA no válido. El campo errors contiene el motivo del rechazo, edita la factura con un PATCH y vuelve a enviarla, o elimínala y crea una nueva. No hay ningún endpoint de reintento: el camino es corregir y reenviar.
Después del envío: DELETE y PATCH devuelven 422: la factura está dentro del ciclo de vida del receptor y la corrección se hace con una nota de crédito. La excepción es el depósito fallido: mientras todos sus tax reports estén en estado error o refused, la factura todavía se puede eliminar y rehacer.
Configura los endpoints de webhook en la interfaz de B2Brouter bajo Configuración → Webhooks. Una vez configurado, B2Brouter envía un HTTP POST a tu endpoint cada vez que la factura alcanza un nuevo estado.
Después de que una factura alcanza el estado sent, la respuesta de GET /invoices/{id} incluye un campo download_legal_url. Úsalo para descargar el documento de factura que fue transmitido:
Como alternativa en un solo paso, puedes llamar directamente a GET /invoices/{id}/as/legal, sin obtener antes download_legal_url del payload de la factura. Devuelve el documento legal archivado tal como está almacenado y no genera ninguna transacción facturable — consulta Descargar facturas y Transaction: View_as.
Encaissée es el último estado del ciclo CDV de una factura B2B francesa, justo después de la aprobación del receptor. Indica que el pago se ha confirmado (ver el mapping CDV completo en la tabla Estados de la factura).
B2Brouter propaga la confirmación de pago al PPF por una de dos vías, según la naturaleza de la factura:
Caso
Vía
Mecanismo
Nacional FR → FR (B2Brouter detecta company.country == "fr" y contact.country == "fr")
CDAR
Envía un mensaje CDV 212 (transición de estado) sin generar un tax report adicional
Transfronteriza (B2B intra-UE / extra-UE) o B2C (IssuedSimplifiedInvoice)
Los pagos parciales se registran con el endpoint POST /accounts/{ACCOUNT_ID}/payments, indicando amount e invoice_id. Repite la llamada por cada pago que recibas; cuando la suma de los importes registrados cubre el total de la factura, esta pasa automáticamente al estado paid.
Requiere X-B2B-API-Version: 2026-03-02 o posterior.
Para un pago completo en una sola operación, también puedes usar directamente mark_as con state: "paid" (ver Marcar una factura como pagada vía API); no es necesario pasar antes por POST /accounts/{ACCOUNT_ID}/payments.
Alternativamente, puedes gestionar los cobros desde la app de B2Brouter: abre la factura → Crear cobro → define el importe pagado.
Notas sobre pagos:
Puedes pasar full: true en lugar de amount para registrar el pago completo pendiente: B2Brouter calcula el importe pendiente en el momento de ejecutar la llamada y nunca supera el total de la factura. Si en cambio indicas un amount explícito, no hay ninguna protección contra el sobrepago: es tu responsabilidad no superar el total pendiente.
Eliminar un pago no reabre la factura: se queda en el estado paid.
Si el pago ha generado un tax report de Flux 10 (factura cross-border o B2C), el PUT/DELETE de ese pago devuelve HTTP 422 por el bloqueo de la declaración ya enviada. El caso doméstico FR-FR (CDV 212, sin tax report adicional) no tiene ese bloqueo.
Como empresa francesa registrada en el Annuaire con un transporte Peppol 0225, recibes automáticamente facturas electrónicas de otras plataformas francesas y conectadas a Peppol.
Cada transición de estado emite el CDV correspondiente hacia el emisor. Los rechazos automáticos (213) son la excepción: no piden ninguna llamada, porque B2Brouter deriva el código de motivo de la DGFiP de los errores de validación.
El reason es obligatorio en los casos 206 y 207: sin él, la llamada devuelve 422.
1 Los valores de amount_code son MAP, MAPTTC, MNA y MNATTC. 2 Sin dispute: true, el estado annotated solo contabiliza internamente y no envía ningún CDV. 3 El reason_code es opcional. Ver Códigos de rechazo.
Cuando rechazas una factura puedes añadir un reason_code con el motivo estructurado de la DGFiP: ADR_ERR, REF_CT_ABSENT, CMD_ERR, TX_TVA_ERR, MONTANTTOTAL_ERR, CALCUL_ERR, DOUBLON, NON_CONFORME, DEST_ERR, TRANSAC_INC, EMMET_INC, CONTRAT_TERM y DOUBLE_FACT.
La API también acepta AUTRE, pero la DGFiP no lo permite en un rechazo.
El reporte fiscal hace seguimiento del ciclo de vida técnico de la presentación al PPF. Tanto la generación XML como la transmisión al PPF son asíncronas.
Flux 1: Facturas B2B nacionales
Estado
Descripción
new
Reporte fiscal creado, en cola para transmisión
sent
Documento depositado en el PPF via SFTP
acknowledged
El PPF ha recibido y validado el archivo (condición CDV 500: Reçue)
registered
✅ Terminal: Factura aceptada y registrada por la DGFiP (condición CDV 300)
refused
❌ Terminal: Rechazada por la DGFiP (condición CDV 301)
error
❌ Terminal: Error de transmisión o procesamiento del PPF
Flux 10: Facturas B2B transfronterizas y B2C (e-Reporting)
Estado
Descripción
new
Reporte fiscal creado, acumulado para el lote diario del ledger
sent
Ledger depositado en el PPF via SFTP
acknowledged
El PPF ha recibido el ledger (condición CDV 500: Reçue)
registered
✅ Terminal: Ledger aceptado y registrado por la DGFiP (condición CDV 300)
refused
❌ Terminal: Rechazado por la DGFiP (condición CDV 301)
error
❌ Terminal: Error de transmisión o procesamiento del PPF
Flux 10 cubre las transacciones fuera del ámbito de la obligación de facturación electrónica B2B nacional que aún deben reportarse a la DGFiP. B2Brouter gestiona Flux 10 automáticamente.
Ventas a personas físicas no registradas como sujetos pasivos de TVA en Francia. Usa "type": "IssuedSimplifiedInvoice". El contact_id y los campos de pago no son requeridos para facturas B2C.
Transacciones transfronterizas (B2B intra-UE y extra-UE)
Las ventas a o compras de empresas establecidas fuera de Francia deben reportarse a través de Flux 10. Usa el tipo estándar IssuedInvoice o ReceivedInvoice y establece el country de la contraparte al valor no "fr" correspondiente. B2Brouter detecta automáticamente la naturaleza transfronteriza.
Territorios franceses de ultramar: los departamentos DROM Guadalupe (gp), Martinica (mq) y La Reunión (re) se tratan como Francia nacional. Las facturas a contactos de esos territorios generan un reporte fiscal del Flux 1 y llevan IdentificationCode FR, exactamente igual que la Francia metropolitana. El resto de territorios de ultramar (Guayana gf, Mayotte yt, Polinesia Francesa pf, Nueva Caledonia nc, TAAF tf, San Pedro y Miquelón pm) quedan fuera del territorio de la TVA francesa y siguen la vía de e-Reporting del Flux 10.
B2Brouter agrupa los reportes fiscales Flux 10 en Ledgers enviados al PPF. La frecuencia de envío no es siempre diaria: depende del vat_regime configurado en el Tax Report Setting (ver Campos del Tax Report Setting de la DGFiP), cada diez días o mensual según el régimen, o bimensual para franchise_en_base. En staging, los ledgers se depositan diariamente para facilitar las pruebas; en producción, siguen la periodicidad real del régimen. Puedes identificar los reportes fiscales Flux 10 por un ledger_id no nulo en la respuesta del reporte fiscal.
Cada ledger se identifica por dos dimensiones internas:
Rol DGFiP (SE o BY):
SE (Seller / émission): para las ventas que emites.
BY (Buyer / réception): para las compras intracomunitarias que tienes que declarar como comprador.
Modo (transactions o payments):
transactions: ledgers de facturas (códigos de proceso S1 / B1 / M1), document type xml.ledger.dgfip.transactions.
payments: ledgers de pagos (códigos de proceso S2 / B2 / M2, TVA sobre servicios devenga al cobro), document type xml.ledger.dgfip.payments.
La combinación de roles y modos da hasta 3 ledgers por cuenta y período de reporte:
Ledger
Rol
Modo
Contenido
A: Emisión
SE
transactions
Facturas emitidas (B2C y cross-border B2B)
B: Recepción
BY
transactions
Compras intracomunitarias / extra-UE declaradas como comprador
C: Pagos
SE
payments
Pagos confirmados de tus facturas emitidas (caso Encaissée cross-border / B2C)
El par (BY, payments) no existe: la información de pago de tus compras la genera el vendedor desde su lado; no la declaras tú.
Cada tax report se vincula a un único ledger_id (no pertenece a más de un ledger a la vez). La agrupación se hace por cuenta + período de reporte + (rol, modo) bajo lock para evitar duplicados.