API v4
Version 4 (V4) is now available. It introduces expanded credit memo functionality and bundles several deprecation cleanups and documentation fixes. The changes below apply to V4 only; V3 and earlier are unchanged.
Credit Memo Applications (new)
Credit memos can now be applied to invoices through dedicated endpoints, replacing the prior invoice_id-on-update model:
POST /credit-memos/{credit_memo_id}/applications- Reconcile a credit memo's applications. The request body (applicationsarray ofinvoice_id,amount,application_date) represents the complete desired set: missing applications are removed, new ones inserted, and existing ones updated when the amount or application date changes.DELETE /credit-memos/{credit_memo_id}/applications- Unapply all applications on a credit memo, reverting every invoice allocation.
Credit memo responses now include applied_amount, remaining_amount, and an applications array detailing each individual application.
Breaking: Credit Memo status values
The status enum on credit memos has changed:
UNPAIDhas been renamed toUNAPPLIEDPARTIALLY_APPLIEDis a new status for credit memos that are partly appliedAPPLIED_TO_BALANCEhas been removed
Update any logic that branches on these values.
Breaking: invoice_id removed from credit memo create and update
POST /credit-memos and PUT /credit-memos/{id} no longer accept invoice_id. Use POST /credit-memos/{credit_memo_id}/applications to apply a credit memo to one or more invoices.
Breaking: /pending-contracts removed
The legacy /pending-contracts endpoints have been removed. Use the /draft-contracts endpoints, which provide the same staging workflow with deduplication via external_references.
Breaking: legacy bill_id removed from bill payment body
The redundant bill_id field has been removed from the bill payment request body. The bill is identified solely by the bill_id path parameter on POST /bills/{bill_id}/payments.
Breaking: deprecated subsidiaryId parameter removed
GET /reports/arr-waterfall no longer accepts the camelCase subsidiaryId query parameter. Use the snake_case subsidiary_id parameter, consistent with the rest of the API.
Revenue recognition only invoices: exchange_rate
Revenue recognition only invoice creation now accepts an optional exchange_rate field for multi-currency scenarios, matching standard invoices.
Documentation: corrected permission scopes
The following endpoints now document their correct permission scope (scopes are documentation metadata and are not enforced at runtime):
- Retrieve a customer:
ar:products:view→ar:customers:view - Delete a bill payment:
ar:invoice-payments:delete→ap:expense-payments:delete - Update taxes for a credit memo:
ar:contracts:edit→ar:credit-memos:edit
