Enviar facturas a Chorus Pro
En Francia, todas las facturas a clientes del sector público deben enviarse electrónicamente a través de Chorus Pro, el portal oficial de facturación electrónica B2G del gobierno (Decreto n.° 2016-1478). Desde abril de 2020, esto se aplica a toda administración central, regional y local, tanto si eres una empresa francesa como un proveedor internacional.
Esta guía te muestra cómo usar la API de B2Brouter para:
- Configurar tu cuenta de empresa (staging y producción).
- Buscar entidades públicas por SIRET en el Directorio de B2Brouter.
- Crear contacts de clientes y unidades organizativas.
- Generar, enviar y rastrear tus facturas a través de Chorus Pro.
- Descargar el archivo XML exacto enviado y confirmar la recepción.
Requisitos previos
Sección titulada «Requisitos previos»- Empresa francesa con un número de IVA/SIRET válido.
- Entorno de pruebas (staging)
- Regístrate en app-staging.b2brouter.net para probar la API.
- Una vez registrado, abre un ticket de soporte en staging para solicitar tu clave API y permisos.
- Integración en producción y suscripción eDocExchange
- Para pasar a producción, regístrate en app.b2brouter.net.
- Suscríbete a un producto eDocExchange o contacta con nuestro equipo de ventas en https://www.b2brouter.net/global/contact/ para hablar sobre los planes, firmar tu contrato y recibir soporte de integración dedicado.
Obtener credenciales de la API
Sección titulada «Obtener credenciales de la API»- Inicia sesión en tu cuenta de B2Brouter.
- Ve a la pestaña Developers.
- Selecciona API Keys.
- Haz clic en el icono del portapapeles para obtener tu token de API.
Recuperar o crear tu cuenta de empresa
Sección titulada «Recuperar o crear tu cuenta de empresa»1. Recuperar tu ID de empresa
Sección titulada «1. Recuperar tu ID de empresa»curl --request GET \ --url 'https://api-staging.b2brouter.net/accounts?offset=0&limit=25' \ --header 'X-B2B-API-Key: {YOUR_API_KEY}' \ --header 'X-B2B-API-Version: {YOUR_API_VERSION}' \ --header 'accept: application/json'2. Crear una cuenta de empresa (si es necesario)
Sección titulada «2. Crear una cuenta de empresa (si es necesario)»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 'accept: application/json' \ --header 'content-type: application/json' \ --data '{ "account": { "country": "fr", "rounding_method": "half_up", "tin_value": "FR46458880332", "tin_scheme": 9957, "name": "Exemplar SAS", "address": "10 Rue Imaginaire", "city": "Paris", "postalcode": "75001", "province": "Île-de-France", "email": "john.doe@example.com" } }'Verificar la información del destinatario
Sección titulada «Verificar la información del destinatario»Puedes comprobar si el destinatario existe en nuestro directorio público:
curl --request GET \ --url https://api-staging.b2brouter.net/directory/fr/0009/13001533200013 \ --header 'X-B2B-API-Key: {YOUR_API_KEY}' \ --header 'X-B2B-API-Version: {YOUR_API_VERSION}' \ --header 'Content-Type: application/json'Crear un contact
Sección titulada «Crear un contact»Al crear un cliente francés:
- Usa
cin_valuepara el número SIRET-CODE. - Usa
cin_schemepara identificar la lista de Schemes. SIRET-CODE es 0009. transport_type_codedebe serfr.chorus.document_type_codedebe serxml.ubl.invoice.chorus.
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 'accept: application/json' \ --header 'content-type: application/json' \ --data '{ "contact": { "language": "en", "is_client": true, "is_provider": true, "terms": "custom", "public_sector": true, "name": "UNIVERSITE D AIX MARSEILLE", "address": "58 BD CHARLES LIVON", "city": "MARSEILLE 7", "postalcode": "13007", "country": "fr", "currency": "EUR", "transport_type_code": "fr.chorus", "document_type_code": "xml.ubl.invoice.chorus", "cin_value": "13001533200013", "cin_scheme": "0009" } }'Crear un contact de unidad organizativa
Sección titulada «Crear un contact de unidad organizativa»Para facturar a un departamento o servicio específico, crea un sub-contact bajo la entidad principal usando parent_id e incluye el “código de servicio” de Chorus Pro (cin1_scheme / cin1_value).
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": { "parent_id": 1313228381, "name": "Factures marché FCM ROP cadre A2", "address": "58 BD CHARLES LIVON", "city": "MARSEILLE 7", "postalcode": "13007", "country": "fr", "cin1_scheme": "8017", "cin1_value": "ESR_MISSION_FACTURES_DEPLACEMENTS" } }'Crear y enviar una factura
Sección titulada «Crear y enviar una factura»Al facturar a un cliente francés, asegúrate de proporcionar todos los campos obligatorios, incluyendo:
number,dateydue_date- Al menos una
invoice_lines_attributescontaxes_attributes contact_ido un objetocontactcompletoponumberpara identificar la referencia del pedidobuyer_referencecon elcin1_value(Code Service) para identificar el departamento destinatario
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": 1313228399, "bank_account": { "type": "iban", "iban": "FR7630006000011234567890189" }, "terms": "custom", "invoice_lines_attributes": [ { "unit": 5, "quantity": 135, "price": 25, "description": "Cocktail Dinatoire", "taxes_attributes": [ { "name": "TVA", "category": "S", "percent": 10 } ], "article_code": "14", "position": 1 } ], "number": "00002", "date": "2025-06-18", "due_date": "2025-07-18", "currency": "EUR", "ponumber": "0123456", "buyer_reference": "ESR_MISSION_FACTURES_DEPLACEMENTS" } }'Comprobar el estado de la factura
Sección titulada «Comprobar el estado de la factura»Comprobar el estado de una única factura
Sección titulada «Comprobar el estado de una única factura»curl --request GET \ --url 'https://api-staging.b2brouter.net/invoices/{INVOICE_ID}?include=lines' \ --header 'X-B2B-API-Key: {YOUR_API_KEY}' \ --header 'X-B2B-API-Version: {YOUR_API_VERSION}' \ --header 'accept: application/json'Comprobar el estado de varias facturas
Sección titulada «Comprobar el estado de varias facturas»curl --request GET \ --url 'https://api-staging.b2brouter.net/accounts/{ACCOUNT_ID}/invoices?offset=0&limit=25&state_updated_at_from=2025-06-12' \ --header 'X-B2B-API-Key: {YOUR_API_KEY}' \ --header 'X-B2B-API-Version: {YOUR_API_VERSION}' \ --header 'accept: application/json'Actualizaciones de estado en tiempo real con webhooks
Sección titulada «Actualizaciones de estado en tiempo real con webhooks»En lugar de hacer polling, suscríbete a notificaciones push mediante webhooks. Cada vez que cambie el estado de una factura, B2Brouter enviará un HTTP POST a tu endpoint.
Webhooks de estado de factura - Referencia de la API
Descargar el XML original de la factura
Sección titulada «Descargar el XML original de la factura»Después del envío, la respuesta de GET /invoices/{id} incluye un campo download_legal_url. Úsalo para obtener el archivo XML exacto enviado a Chorus Pro:
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}' \ --header 'Accept: application/xml'Marcar la factura como confirmada
Sección titulada «Marcar la factura como confirmada»curl --request POST \ --url https://api-staging.b2brouter.net/invoices/{INVOICE_ID}/ack \ --header 'X-B2B-API-Key: {YOUR_API_KEY}' \ --header 'X-B2B-API-Version: {YOUR_API_VERSION}' \ --header 'accept: application/json'Para más ayuda: