v2025-10-13
Changelog
This is the first major release of B2Brouter API. It includes significant improvements and changes to make the API consistent, RESTful, and easier to work with.
Now there’s an option to select the API Version to use in each request. The X-B2B-API-Version header parameter allows specifying the desired version for the request. If the API Version is not specified in the request, it will be defined by the group configuration related to the API Key used in the request.
This version implements breaking changes. Each breaking change is marked with the tag Breaking.
Key Changes Summary
Section titled “Key Changes Summary”API Infrastructure
Section titled “API Infrastructure”- New Domain: API access moved from
app.b2brouter.nettoapi.b2brouter.net - Version Header: New
X-B2B-API-Versionheader for explicit version control - JSON Only: XML format support removed; all responses now JSON by default
- Response Language: All API responses now default to English regardless of account configuration
Path Structure Modernization
Section titled “Path Structure Modernization”- Resource Naming:
/projectsrenamed to/accounts,/clientsrenamed to/contacts - Clean URLs: Removed
.{format}extensions from all endpoints - Simplified Hierarchy: Removed
/usersprefix from code lists,/api/v1prefix from directory and tax report endpoints - Standardized Pagination: All list responses now use consistent
metaobject for pagination data
Schema Standardization
Section titled “Schema Standardization”- Terminology Consistency: Unified
client→contactthroughout the API - Structured Identifiers: Tax codes split into
tin_schemeandtin_valuefor better structure - English Naming: Spanish, Catalan, and Italian field names standardized to English equivalents
- Nested Structures: Bank account fields moved to nested objects for better organization
- Deprecated Fields Removed: Cleaned up legacy attributes in favor of standardized alternatives
Response Improvements
Section titled “Response Improvements”- Full Representations: PUT, DELETE, and POST operations now return complete resource representations instead of
204 No Content - Consistent Errors: Standardized error responses with
409 Conflictfor business rule violations - Simplified References: Removed nested
projectobjects from invoice responses
Tax Reports API Overhaul
Section titled “Tax Reports API Overhaul”The deprecated Tax Reports API has been removed in order to promote the use of a new, more generic and RESTful Tax Reports API suitable for most use cases.
All endpoints that were marked as [Deprecated] in version 2025-01-01 (Legacy) have been removed. The endpoints that were marked as [New Tax Report API] in version 2025-01-01 now become the only way to manage Tax Reporting via API. The /api/v1 prefix has been removed from the path of those endpoints.
New API Version Header
Added X-B2B-API-Version header parameter to specify the API version per request. If not specified, defaults to the version configured in the group’s API Key settings.
New Tax Reports Endpoints
POST /accounts/{account}/tax_reports- Create a Tax ReportPOST /accounts/{account}/tax_reports/import- Import a Tax Report from XML fileGET /tax_reports/{id}- Get a tax reportPATCH /tax_reports/{id}- Correct or Modify a Tax ReportDELETE /tax_reports/{id}- Annulate a tax reportGET /tax_reports/{id}/download- Download a tax report in Tax Authority format
New Ledgers Endpoints
GET /ledgers/{id}/download- Download a Ledger XML documentGET /ledgers/{id}/download_response- Download the Tax Authority response for a LedgerPOST /accounts/{account}/ledgers/import- Import a ledger from XML payload
New Validation Endpoint
POST /documents/validate- Validates electronic documents (UBL, CII, Peppol BIS, PINT, ZUGFeRD, XRechnung, Factur-X, FacturaE, Svefaktura, Fattura PA, eSPap, and any EN16931 CIUS-compliant format)
New Transport Endpoint
DELETE /accounts/{account}/transports/{code}- Delete a transport configuration
Standardized Pagination
All listing endpoints now return pagination metadata in a consistent meta object containing total_count, offset, and limit.
Consolidated Invoice Listing
Added type query parameter to /accounts/{account}/invoices endpoint to filter by invoice type (IssuedInvoice, ReceivedInvoice, IssuedSelfInvoice, IssuedSimplifiedInvoice).
Full Resource Responses
Changed PUT, POST, and DELETE operations to return complete resource representations:
PUT /accounts/{account}- Now returns full account representationDELETE /accounts/{account}- Now returns full account representation with deletion statusPOST /accounts/{account}/unarchive- Now returns full account representationPOST /accounts/{account}/logo- Now returns full account representationDELETE /accounts/{account}/logo- Now returns full account representationPUT /bank_accounts/{id}- Now returns full bank account representationDELETE /bank_accounts/{id}- Now returns full bank account representationPUT /contacts/{id}- Now returns full contact representationDELETE /contacts/{id}- Now returns full contact representationPUT /invoices/{id}- Now returns full invoice representationDELETE /invoices/{id}- Now returns full invoice representationPOST /invoices/{id}/mark_as- Now returns full invoice representationPOST /invoices/{id}/ack- Now returns full invoice representation
Changed
Section titled “Changed”🚨 Breaking
Response Language
All API responses now default to English regardless of account configuration.
Previous behavior:
- API responses inherited the language from the account’s default language setting
New behavior:
- All API responses default to English
API Domain Change
API base URL changed from app.b2brouter.net to api.b2brouter.net
- Old:
https://app.b2brouter.net/api/... - New:
https://api.b2brouter.net/...
Resource Path Renaming
All endpoints that contained /projects/{account} have been renamed to /accounts/{account}:
GET /projects/{account}/contacts→GET /accounts/{account}/contactsPOST /projects/{account}/contacts→POST /accounts/{account}/contactsGET /projects/{account}/events→GET /accounts/{account}/eventsGET /projects/{account}/invoices→GET /accounts/{account}/invoicesPOST /projects/{account}/invoices→POST /accounts/{account}/invoicesGET /projects/{account}/orders→GET /accounts/{account}/ordersPOST /projects/{account}/orders→POST /accounts/{account}/ordersPOST /projects/{account}/despatch_advices→POST /accounts/{account}/despatch_advices- And all other project-scoped endpoints
All endpoints referencing /clients have been renamed to /contacts:
GET /clients/{id}→GET /contacts/{id}PUT /clients/{id}→PUT /contacts/{id}DELETE /clients/{id}→DELETE /contacts/{id}
Format Extension Removal
Removed .{format} path extensions from all endpoints. JSON is now the only supported format and is set as default:
GET /invoices/{id}.{format}→GET /invoices/{id}PUT /invoices/{id}.{format}→PUT /invoices/{id}DELETE /invoices/{id}.{format}→DELETE /invoices/{id}POST /invoices/{id}/mark_as.{format}→POST /invoices/{id}/mark_asPOST /invoices/{id}/add_attachment.{format}→POST /invoices/{id}/add_attachmentPOST /invoices/{id}/add_attachments.{format}→POST /invoices/{id}/add_attachmentsPOST /invoices/{id}/generate_tax_report.{format}→POST /invoices/{id}/generate_tax_reportPOST /invoices/{id}/ack.{format}→POST /invoices/{id}/ackGET /orders/{id}.{format}→GET /orders/{id}POST /orders/{id}/mark_as.{format}→POST /orders/{id}/mark_asGET /clients/{id}.{format}→GET /contacts/{id}PUT /clients/{id}.{format}→PUT /contacts/{id}DELETE /clients/{id}.{format}→DELETE /contacts/{id}- And all code list endpoints
Code Lists Path Simplification
Removed /users prefix from all code list endpoints:
GET /users/countries→GET /countriesGET /users/currencies→GET /currenciesGET /users/languages→GET /languagesGET /users/schemes→GET /schemesGET /users/invoice_states→GET /invoice_states- And all other code list endpoints
Contact Schema Standardization
Contact (formerly Client) resource now uses standardized field names:
Tax Identifiers:
taxcode→ split intotin_scheme(e.g., “VAT”, “TAX”) andtin_value(the actual number)company_identifier→cin_valuewith accompanyingcin_scheme
Routing Codes:
cin1_value,cin1_scheme,cin2_value,cin2_scheme, …cin5_value,cin5_scheme→ nested underrouting_codesobject- In responses, routing codes are always returned inside a
routing_codesobject - In requests, routing codes must be sent inside a
routing_codeswrapper
Transport:
channel→transport_type_code
Italian Fields:
posta_elettronica_certificata→certified_emailcodice_destinatario→recipient_code
Bank Details:
iban,bic,bank_name→ nested underbank_accountobject
Contact Person:
contact→contact_person
Invoice Schema Improvements
Reference Fields:
projectnested object removed; use flataccount_idfieldaccounting_cost→buyer_accounting_referencecontact_person→customer_contact_person
Bank Details:
ibanandbic→ nested underbank_account.ibanandbank_account.bic
Public Administration Fields (English names):
num_contracte→contract_numberorgan_gestor→managing_unitoficina_comptable→accounting_unitorgan_proponent→proponent_unitunidad_contratacion→contract_unitunitat_tramitadora→processing_unit
Event Resource Updates
ClientEventrenamed toContactEventfor consistency
Deprecated
Section titled “Deprecated”No features were marked as deprecated in this release.
Removed
Section titled “Removed”🚨 Breaking
XML Format Support
Support for XML format response has been removed. JSON format only is now supported and has been set as default.
Deprecated Company/Project Endpoints
GET /projects.{format}- Removed. UseGET /accountsinstead.GET /projects/{account}/my_company.{format}- Removed. UseGET /accounts/{account}instead.
Deprecated Tax Reports Endpoints
POST /tax_reports/send_tax_report/{id}.{format}- Removed. UsePOST /accounts/{account}/tax_reportsinstead.GET /tax_reports/{id}/as/{document_type_code}- Removed. UseGET /tax_reports/{id}/downloadinstead.
Channels Endpoint
GET /users/channels.{format}- Removed. UseGET /transport_typesinstead.
Event Field
Removed description field from event responses in GET /accounts/{account}/events endpoint.
Schema Attributes Removed
Account Schema:
prefer_xslt_pdf- Removed
Invoice Schema:
contact_person- Removed. Usecustomer_contact_personinsteadstate(write-only) - Removed. UsePOST /invoices/{id}/mark_asendpoint insteadcustomer_party_identification- Removed. Usecontact.party_identificationinsteadaccounting_cost- Removed. Usebuyer_accounting_referenceinsteadiban- Removed. Use nestedbank_account.ibanstructure insteadbic- Removed. Use nestedbank_account.bicstructure insteadnum_contracte- Removed. Usecontract_numberinsteadorgan_gestor- Removed. Usemanaging_unitinsteadoficina_comptable- Removed. Useaccounting_unitinsteadorgan_proponent- Removed. Useproponent_unitinsteadunidad_contratacion- Removed. Usecontract_unitinsteadunitat_tramitadora- Removed. Useprocessing_unitinsteadunitat_tramitadora_name- Removed. Useprocessing_unitinstead
Contact Schema:
old_channel- Removed. Usetransport_type_codeinsteadcontact- Removed. Usecontact_personinsteadbank_account- Removed. Usebank_account_numberinsteadcompany_identifier- Removed. Usecin_valueinsteadtransport_type- Removed. Usetransport_type_codeinsteaddocument_type- Removed. Usedocument_type_codeinsteadsepa_type- Removedposta_elettronica_certificata- Removed. Usecertified_emailinsteadcodice_destinatario- Removed. Userecipient_codeinstead
Parameter Schemas:
Deprecated status filter parameters:
discarded- Marked as deprecated and will be removedreceived_invoice_discarded- Marked as deprecatedreceived_invoice_new- Removedreceived_invoice_error- Removedreceived_invoice_refused- Removedreceived_invoice_annotated- Removedreceived_invoice_invalid- Removed
No bug fixes were specifically documented in this release.
Security
Section titled “Security”No security-specific changes were documented in this release.