• Fix: Custom external references on products were silently dropped. They are now persisted correctly.
  • Fix: Custom field values on invoice and credit memo items are now included in GET responses.

A new endpoint to retrieve an executive profit and loss report:

  • GET /reports/executive-pl - Returns an executive P&L report with margins for a specified date range

Supports optional subsidiary_id, breakdown_by, consolidated, and currency parameters.

Full bank transaction lifecycle management:

  • POST /bank-transactions - Create a bank transaction
  • GET /bank-transactions - List all bank transactions
  • GET /bank-transactions/{bank_transaction_id} - Retrieve a bank transaction
  • PUT /bank-transactions/{bank_transaction_id} - Update a bank transaction
  • DELETE /bank-transactions/{bank_transaction_id} - Delete a bank transaction

Filter reporting journal entries by their posting date:

  • GET /reports/journal-entries?date.gte=2023-12-01&date.lte=2023-12-31 - All reporting JEs posted in December 2023

Supports date.gte and date.lte parameters, which can be combined to define a date window.

New endpoints to create and delete bank accounts:

  • POST /bank-accounts - Create a new bank account
  • DELETE /bank-accounts/{bank_account_id} - Delete a bank account

Added account mask and name fields to bank account responses.

A new endpoint to retrieve a cash flow statement report for a specified date range:

  • GET /reports/cash-flow-statement - Returns a cash flow statement report

Supports optional subsidiary_id and breakdown_by parameters.

A new endpoint to retrieve an income statement report for a specified date range:

  • GET /reports/income-statement - Returns an income statement report

Supports optional subsidiary_id and breakdown_by parameters.

Improved error handling for invalid input on Products and Contracts endpoints:

  • Invalid account codes on product creation/update now return 400 Bad Request instead of 500 Internal Server Error
  • Invalid contract status filter values now return 400 Bad Request instead of 500 Internal Server Error

Contract usage billing configuration has been restructured into a single usage_configuration object:

  • Breaking Change: The usage_overage_invoicing and usage_commitment top-level fields on the Contract response have been replaced by usage_configuration
  • The new usage_configuration object contains:
    • usage_invoicing - Usage invoicing frequency, payment terms, invoice date, and cycle
    • minimum_commitment_invoicing - Commitment invoicing frequency and payment terms (only present when a minimum commitment is configured)
    • minimum_commitment_cycle - How often the minimum commitment resets (MONTHLY or CONTRACT)
    • contract_level_minimum_commitment - Shared minimum commitment across all usage items
  • Item-level minimum commitments: Contract items with usage pricing now support usage_minimum_commitment for per-item commitments
  • The interval field has been removed from UsageCommitment; use minimum_commitment_cycle instead