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¤cyCode=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¤cyCode=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.