Changelog - 2026-03-02

API Version 2026-03-02

Breaking Changes

This version implements breaking changes. Each breaking change is marked with the 🔴 BREAKING tag.


Changelog

Added

  • New field invoice_lines[].base_quantity (decimal, defaults to 1) to support Price Base Quantity (BT-149), where price represents the price per base_quantity units.
  • New fields tax_currency_code and tax_amount_in_tax_currency: tax_currency_code (ISO 4217 string) and tax_amount_in_tax_currency (decimal) for Tax Accounting Currency (BT-6 & BT-111) dual currency support.
  • New field bank_accounts[].is_default (boolean) to mark one bank account per company as the default.
  • New response header X-B2B-API-Request-Id returned on every logged API request for end-to-end tracing.
  • New read-only fields on tax reports: annulled_by_id and corrected_by_id (integer, nullable) to reference the tax report that annulled or corrected the current one.
  • New KSeF-specific fields on tax reports: payment_account_name (string), purchase_order_reference (string), sales_order_reference (string), and tax_inclusive_amount_before_allowances_and_charges (decimal).
  • New fields on tax report lines: tax_report_lines[].item_seller_identifier and tax_report_lines[].item_standard_identifier (string) on TicketBAI and KSeF tax report lines for seller-assigned and standard item identifiers.
  • New endpoint DELETE /attachments/:id to delete an attachment.
  • New unit codes for invoice_lines[].unit:
    • 37 — Tonnes (UN/ECE: TNE)
    • 38 — Megawatt-hour (UN/ECE: MWH)
    • 39 — Months (UN/ECE: MON)
    • 40 — Years (UN/ECE: ANN)
    • 41 — Unit/piece (UN/ECE: C62)
  • Tax report settings: endpoints PUT and DELETE /accounts/{account}/tax_report_settings/{code} now support DgfipTaxReportSetting as an additional response variant for French e-reporting configuration.

Changed

🔴 BREAKING

  • Scheme fields type change (number → string): tin_scheme, cin_scheme, pin_scheme changed from number to zero-padded 4-character string (e.g., 7"0007") across all endpoints (accounts, contacts, invoices, transports). When the scheme value is null, the field is also returned as null.
  • type_document renamed to type_code for document type codes across formats (Peppol, CII, KSeF, FatturaPA).
  • correction_method restricted to enum: previously accepted any string, now validates against allowed values: 01 (full replacement), 02 (differences), 03 (bulk deal in period), 04 (authorized by Tax Agency). Invoices with invalid values will receive a validation error.
  • POST endpoints return 201 Created: POST /accounts/{account}/invoices, POST /accounts/{account}/invoices/import, POST /accounts/{account}/tax_reports, POST /accounts/{account}/tax_reports/import, and POST /accounts/{account}/contacts now return 201 Created instead of 200 OK.
  • Directory lookup async response: now returns 202 Accepted with a polling URL when a participant is found in Peppol SML but not yet in the local directory.
  • Contact is_provider now defaults to true when creating contacts via API.
  • contact_id ignored for IssuedSimplifiedInvoice: simplified invoices always use inline contact fields.
  • Field payments_on_account is now visible in GET /invoices/{invoice}.

Deprecated

No features were marked as deprecated in this release.

Removed

🔴 BREAKING

  • taxcode query parameter: removed from GET /accounts/{account}/invoices. Use the query parameter with tin_value=<value> instead.

  • Deprecated invoice discount/charge fields removed: the following fields were deprecated in v2025-10-13 in favor of allowance_charges_attributes and have been removed. The API accepts these fields without error but silently discards them.

    Removed fieldMigration to allowance_charges_attributes
    discount_amount[{allowance_charge_indicator: "allowance", amount: X}]
    discount_percent[{allowance_charge_indicator: "allowance", percentage: X}]
    discount_text[{allowance_charge_indicator: "allowance", description: "..."}]
    charge_amount[{allowance_charge_indicator: "charge", amount: X}]
    charge_percent[{allowance_charge_indicator: "charge", percentage: X}]
    charge_reason[{allowance_charge_indicator: "charge", description: "..."}]
    charge_is_reimbursable_expense[{allowance_charge_indicator: "charge", is_reimbursable_expense: true}]
    apply_taxes_to_chargeUse apply_taxes within allowance_charges_attributes

Fixed

  • Received Facturae invoices with correction_method: "01" now return the original value instead of incorrectly returning "02".
  • Polish invoices in EUR with BT-6/BT-111 tax currency data now correctly derive the exchange rate for KSeF reporting.

Security

No security-specific changes were documented in this release.