Ir al contenido
Log in

Facturación electrónica y e-Reporting DGFiP

A partir de septiembre de 2026, todas las empresas francesas deberán enrutar sus facturas y datos de IVA 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 tiDetalles
Registro en el PPFPublica tu SIREN/SIRET en el Annuaire automáticamente al activar
Flux 1 — Facturación electrónica B2BGenera UBL/CII/Factur-X, transmite al PPF, enruta hacia la plataforma del comprador
Flux 6 — Ciclo de vida de la facturaGestiona los mensajes de estado CDAR (Déposée, Reçue, Approuvée, Refusée, Encaissée)
Flux 10 — e-ReportingAgrupa las transacciones B2C y B2B transfronterizas (intra-UE y extra-UE) en Ledgers diarios enviados al PPF
Recepción Peppol 0225Recibe facturas desde cualquier plataforma francesa o conectada a Peppol
Generación de documentosTú 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 entradaAPI REST JSON, Factur-X PDF/A-3 (con CII XML integrado), UBL 2.1 XML, CII XML
Archivo legalTodos los documentos transmitidos (facturas, informes 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

Para integrar, necesitas 4 pasos: crear tu cuentaactivar DGFiPcrear un contactoenviar tu primera factura.


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 IVA 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/SIRET está actualmente registrado con una PA diferente, al activar B2Brouter (Paso 2) se transfiere automáticamente la entrada del Annuaire. No puedes usar B2Brouter como intermediario para enviar facturas bajo la certificación de otra PA.

Enrutamiento a destinatarios en otras PA: Cuando tu comprador 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.

EntornoApp B2BrouterAPI B2BrouterPortal Chorus Pro
Producciónapp.b2brouter.nethttps://api.b2brouter.netchorus-pro.gouv.fr
Staging (test)app-staging.b2brouter.nethttps://api-staging.b2brouter.netqualif.chorus-pro.gouv.fr

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.

Opción B — Staging (recomendado para evaluación)

Sección titulada «Opción B — Staging (recomendado para evaluación)»

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 (activar B2Brouter en producción transferiría la entrada)
  • 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 IVA 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

Sección titulada «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:

  1. Ve a qualif.chorus-pro.gouv.fr → pestaña EntrepriseCréer mon compte.
    • 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.
  2. 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).
  3. Inicia sesión → ve a DomainesMatelas de données → haz clic en Générer un matelas de données y confirma.
  4. 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.
  5. 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.

Una vez que tengas tus identificadores de prueba:

  1. Regístrate en app-staging.b2brouter.net y activa tu cuenta.
  2. Crea tu cuenta de empresa usando un SIREN del CSV (ver Paso 1).
  3. Suscríbete a un plan eDocExchange (las suscripciones de staging son simuladas — sin cargo).
  4. Activa el Tax Report Setting de la DGFiP (ver Paso 2).
    • ⚠️ Tras activar el Tax Report Setting de la DGFiP, el registro del Annuaire de tu empresa tarda hasta 24 horas en propagarse — tanto en staging como en producción. Esta es una restricción de la infraestructura de la DGFiP, no un retraso de B2Brouter. No podrás enviar facturas hasta el día siguiente.
  5. Al día siguiente: crea un contacto de prueba usando un segundo SIREN del CSV (ver Paso 3).
  6. Envía tu primera factura (ver Emisión de Facturas).

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.


Paso 1: Recuperar o crear tu cuenta de empresa

Sección titulada «Paso 1: Recuperar o crear tu cuenta de empresa»

Si ya tienes una cuenta de B2Brouter para tu empresa, recupera su id con el endpoint List Accounts y omite el paso de creación.

Si aún no has creado una, usa el endpoint Create Account (ruta eDocSync/API) o el asistente de incorporación de la interfaz web (ruta eDocExchange). Ambos producen el mismo resultado.

Al crear una cuenta de empresa francesa:

  • cin_scheme: "0002" para SIREN (9 dígitos) o "0009" para SIRET (14 dígitos). Usa SIRET cuando esté disponible — identifica un establecimiento específico y es preferido por el PPF.
  • cin_value: El SIREN o SIRET de tu empresa.
  • tin_value: Número de IVA francés en el formato FR{kk}{siren}, donde kk es la suma de comprobación de dos dígitos (p. ej. FR32123456789). Este campo es opcional al crear la cuenta: si se omite, B2Brouter lo deriva y establece automáticamente a partir del SIREN cuando activas el Tax Report Setting de la DGFiP. Es obligatorio para la facturación DGFiP pero no necesitas calcularlo tú mismo.
  • country: "fr".

Ejemplo de solicitud:

Ventana de terminal
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"
}
}'

Respuesta de ejemplo:

{
"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 - Referencia API


Paso 2: Activar la configuración de informe fiscal para DGFiP

Sección titulada «Paso 2: Activar la configuración de informe fiscal para DGFiP»

Este es el paso clave de incorporación. Cuando creas un Tax Report Setting con code: "dgfip", B2Brouter automáticamente:

  1. Registra tu empresa en el Annuaire del PPF — tu SIREN/SIRET se vuelve descubrible por cualquier plataforma en el ecosistema de facturación electrónica francés.
  2. Crea un transporte Peppol 0225 — habilitando a tu empresa para recibir facturas electrónicas desde cualquier plataforma conectada a Peppol en Francia.

⚠️ Reemplazo de transporte: Si tu cuenta ya tiene un transporte Peppol, será reemplazado por el nuevo transporte 0225 (FRCTC Electronic Address) durante la activación. Si tu SIREN/SIRET estaba previamente registrado con otra PA, B2Brouter cerrará la entrada existente del Annuaire y abrirá una nueva. Actualiza cualquier integración existente que haga referencia al identificador de transporte anterior.

El start_date determina cuándo comienza el reporte fiscal. A partir de esa fecha, las facturas que emitas generarán informes fiscales y serán transmitidas al PPF.

Ejemplo de solicitud:

Ventana de terminal
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"
}
}'

Respuesta de ejemplo:

{
"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"
}
}
CampoTipoRequeridoDescripción
codestringDebe ser "dgfip".
start_datedateCuándo comienza el reporte fiscal. Debe ser hoy o una fecha futura. Por defecto mañana si se omite.
type_operationstringTipo de operación predeterminado para esta empresa: "services", "goods" o "mixed". Determina el código de proceso de la DGFiP (S1/B1/M1, etc.) usado en los informes fiscales. Elige "mixed" si tu empresa vende tanto bienes como servicios. Esta configuración se puede actualizar tras la activación.
naf_codestringEl 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 informes fiscales. Puedes encontrar tu código NAF en el extracto Kbis de tu empresa o en sirene.fr.
enterprise_sizestringLa 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€).
reason_vat_exemptstringNoCódigo de motivo de exención de IVA 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 IVA.
emailstringNoCorreo electrónico de contacto para notificaciones fiscales.
auto_generatebooleanNoSiempre true para DGFiP (obligación legal). No se puede cambiar.
auto_sendbooleanNoTransmitir automáticamente los informes fiscales al PPF. Por defecto true.
enabledbooleanNoSi la configuración está activa. Por defecto true. El registro en el Annuaire solo ocurre cuando es true.

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.

Tax Report Settings - Referencia API


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

CampoValorPropósito
cin_scheme"0009" (SIRET) o "0002" (SIREN)ID de organización — usado para buscar al destinatario en el Annuaire
cin_valueSIRET o SIRENID de organización — el identificador registrado en el Annuaire
tin_scheme9957ID fiscal — código ISO 6523 para identificador fiscal francés
tin_valueFR{kk}{siren} (p. ej. "FR78225214234")ID fiscal — número de IVA francés en el XML UBL
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". El esquema PIN (identificador de participante Peppol) para las empresas francesas registradas es 0225 (FRCTC Electronic Address). 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.

Ejemplo de solicitud:

Ventana de terminal
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 - Referencia API

Opcional: Verificar el enrutamiento del destinatario (búsqueda en el Directorio)

Sección titulada «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:

Ventana de terminal
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 - Referencia API

Verificación del Annuaire y generación de informes fiscales

Sección titulada «Verificación del Annuaire y generación de informes fiscales»

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 informe fiscal Flux 1 (facturación electrónica B2B nacional).
  • Contacto NO registrado en el Annuaire (in_dgfip_annuaire: false): la factura no genera un informe 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 informe 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 informes 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.


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. B2Brouter gestiona todos los requisitos específicos de Francia automáticamente: generación de informes 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.

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 caso más común: una factura B2B francesa nacional con TVA estándar (20%).

Ventana de terminal
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" }
]
}
]
}
}'

El array tax_report_ids en la respuesta contiene el ID del informe fiscal generado. Úsalo para hacer seguimiento del ciclo de vida de la presentación (ver Verificar el estado de un informe fiscal).

POST Invoice - Referencia API

Información de pago (campos nativos requeridos)

Sección titulada «Información de pago (campos nativos requeridos)»

Tres campos de pago son obligatorios para las facturas electrónicas B2B francesas (IssuedInvoice). Proporciónalos como campos directos de la API:

CampoCampo DGFiPDescripciónRequerido
remittance_informationPMDReferencia de pago y menciones legales (registro de empresa, capital social, RCS)Sí — B2B nacional y transfronterizo
payment_method_textPMTCódigo de método de pago + datos IBAN/BICSí — B2B nacional y transfronterizo
payment_termsAABFecha de vencimiento, penalizaciones por pago tardío, condiciones de descuentoSí — B2B nacional y transfronterizo

Si falta alguno de los tres campos, 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.

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
#PMT# Credit Transfer, IBAN FR00 0000 0000 0000 0000 0000 000, BIC XXXXFRPP
#AAB# Net 30 jours. Pénalité de retard : 12% annuel.

B2Brouter extrae estas etiquetas y las mapea automáticamente a los campos nativos correspondientes.

Cuando una línea tiene category: "E" (exenta de IVA), 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 IVA de la DGFiP (BT-121)

CódigoReferencia legalCategoría fiscalDescripción
VATEX-FR-FRANCHISEArt. 293 B CGIZ (tipo cero)Franchise en base de TVA
VATEX-FR-CNWVATE (exento)No establecido en Francia
VATEX-FR-AEE (exento)Autoliquidación (inversión del sujeto pasivo)
VATEX-FR-CGI261-1Art. 261-1° CGIE (exento)Soins et services médicaux
VATEX-FR-CGI261-2Art. 261-2° CGIE (exento)Services paramédicaux
VATEX-FR-CGI261-3Art. 261-3° CGIE (exento)Enseignement scolaire, universitaire et formation professionnelle

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

Sección titulada «Franchise en base de TVA (VATEX-FR-FRANCHISE)»

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"
}
]
}

Para emitir una nota de crédito, establece is_amend: true y referencia la factura original usando amended_number y amended_date. B2Brouter genera un CreditNote UBL con código de tipo 381 e incluye la referencia de facturación.

Ventana de terminal
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" }
]
}
]
}
}'

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 procesoTipo de operaciónDescripción
S1ServiciosFactura estándar de servicios
B1BienesFactura estándar de bienes
M1MixtoFactura estándar de operaciones mixtas
S2ServiciosFactura pagada de servicios
B2BienesFactura pagada de bienes
M2MixtoFactura pagada de operaciones mixtas
S4ServiciosFactura con pagos a cuenta (servicios)
B4BienesFactura con pagos a cuenta (bienes)
M4MixtoFactura con pagos a cuenta (mixto)
S7ServiciosCorrección de una factura registrada (servicios)
B7BienesCorrección de una factura registrada (bienes)
Código de tipo de documentoFormatoDescripción
xml.ubl.invoice.frcius.v1UBL XMLFactura Peppol France CIUS (Flux 1 / Annuaire)
xml.cii.cross_industry_invoice.frcius.v1CII XMLFactura CII France CIUS
pdf.a.invoice.with.xml.cii.cross_industry_invoice.facturx.fr.all_profiles.v1Factur-XPDF/A con CII XML integrado

Si tu sistema ya genera facturas Factur-X o UBL XML, envíalas directamente usando el endpoint de importación de documentos:

POST /accounts/{id}/invoices/import

Establece Content-Type como:

  • application/pdf — para Factur-X (PDF/A-3 con CII XML integrado)
  • application/xml — para UBL 2.1 o CII XML independientes

EstadoDescripción
sendingLa factura ha sido creada y está en cola para transmisión al PPF.
sentEl XML de la factura se ha cargado correctamente en el PPF (depósito Flux 1 confirmado).
registeredEl PPF ha validado y aceptado la factura (CDV Flux 1 positivo).
acceptedEl comprador ha aprobado la factura.
refusedEl comprador ha rechazado la factura.
allegedly_paidEl comprador ha reportado la factura como pagada (corresponde a CDAR 212 — Encaissée).
errorSe produjo un error durante la transmisión o la validación del PPF. El campo errors en la respuesta de la factura contiene el motivo de rechazo del PPF. Elimina la factura, corrige el problema y envía una nueva — las facturas con error no pueden retransmitirse directamente.

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.

Invoice Status WebHooks - Referencia API

Ventana de terminal
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 - Referencia API

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:

Ventana de terminal
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}'

El informe 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:

EstadoDescripción
newInforme fiscal creado, en cola para transmisión
sentDocumento depositado en el PPF via SFTP
acknowledgedEl PPF ha recibido y validado el archivo (condición CDV 500 — Reçue)
registeredTerminal — Factura aceptada y registrada por la DGFiP (condición CDV 300)
refusedTerminal — Rechazada por la DGFiP (condición CDV 301)
errorTerminal — Error de transmisión o procesamiento del PPF
annulledLa factura ha sido anulada tras el registro

Flux 10 — Facturas B2B transfronterizas y B2C (e-Reporting):

EstadoDescripción
newInforme fiscal creado, acumulado para el lote diario del ledger
sentLedger depositado en el PPF via SFTP
acknowledgedEl PPF ha recibido el ledger (condición CDV 500 — Reçue)
registeredTerminal — Ledger aceptado y registrado por la DGFiP (condición CDV 300)
refusedTerminal — Rechazado por la DGFiP (condición CDV 301)
errorTerminal — Error de transmisión o procesamiento del PPF

Consulta el estado usando el ID del informe fiscal de tax_report_ids en la respuesta de la factura:

Ventana de terminal
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 - Referencia API


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

Sección titulada «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.

B2Brouter agrupa todos los informes fiscales Flux 10 de un día natural en Ledgers enviados al PPF una vez al día (programados a las 02:00 AM hora del servidor). Puedes identificar los informes fiscales Flux 10 por un ledger_id no nulo en la respuesta del informe fiscal.


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.

Actualización del estado de las facturas recibidas

Sección titulada «Actualización del estado de las facturas recibidas»

Cuando recibes una factura, reporta su estado al PPF actualizando el estado de la factura:

Ventana de terminal
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"}'

Estados destino válidos para facturas recibidas: accepted (205 Approuvée), refused (210 Refusée).

Switch invoice state - Referencia API