Features6 min

Read the aging balance

Analyse net outstanding amounts by age bucket, currency, and customer account.

The aging balance spreads the amounts still to be received across five buckets. It is net of unallocated credit notes, which are applied first to the oldest amounts of the same account in the same currency.

Accounts written off are excluded. The balance converts no currency: every amount stays in the one it was issued in.

Authorization

Both endpoints accept the OAuth scope accounts:read or accounts:all.

Read the totals

GET [baseURL]/api/public/v1/aging-balance?organizationId=ORGANIZATION_ID
Authorization: Bearer YOUR_ACCESS_TOKEN

The response carries one entry per currency. Each bucket reports its net amount along with the number of accounts and invoices that still hold a positive amount in it.

{
  "byCurrency": [
    {
      "currencyCode": "EUR",
      "notDue": 12500,
      "notDueAccountCount": 4,
      "notDueInvoiceCount": 7,
      "d0_30": 8200,
      "d0_30AccountCount": 3,
      "d0_30InvoiceCount": 5,
      "d31_60": 4100,
      "d31_60AccountCount": 2,
      "d31_60InvoiceCount": 2,
      "d61_90": 1800,
      "d61_90AccountCount": 1,
      "d61_90InvoiceCount": 1,
      "d90Plus": 900,
      "d90PlusAccountCount": 1,
      "d90PlusInvoiceCount": 1
    }
  ]
}

Break it down by account

currencyCode is required. The list uses first and after, like every other paginated endpoint.

GET [baseURL]/api/public/v1/aging-balance/accounts?organizationId=ORGANIZATION_ID&currencyCode=EUR&first=20&sortBy=d90Plus&sortOrder=desc
Authorization: Bearer YOUR_ACCESS_TOKEN

Each row carries the five buckets, plus totalOutstanding, overdueOutstanding and overdueRate. A rate of 100 means the whole outstanding amount of that account is past due.

Sortable fields: fullName, notDue, d0_30, d31_60, d61_90, d90Plus, totalOutstanding, overdueOutstanding and overdueRate.

Available filters:

Field Operators
accountName contains, startsWith, equals
tags containsAny, containsAll, containsNone, isEmpty, isNotEmpty
dunningPaused isTrue, isFalse
paymentMethod, source is, isNot, isAnyOf, isEmpty, isNotEmpty
collectiveProceeding is, isNot, isAnyOf
Amounts and rates equals, greaterThan, lessThan, between

For example, customers with more than 60 % of their outstanding amount past due:

GET [baseURL]/api/public/v1/aging-balance/accounts?organizationId=ORGANIZATION_ID&currencyCode=EUR&filters=overdueRate%3AgreaterThan%3A60
Authorization: Bearer YOUR_ACCESS_TOKEN

The pageInfo.endCursor cursor is bound to the currency, the filters, the sort and the page size. Drop it as soon as any of those changes.

MCP

The get-aging-balance and list-aging-balance-by-account tools return the same data with the mcp:read scope. The list accepts first, after, filters, sortBy and sortOrder.