Aggregations
Aggregations summarise enriched customer transactions into structured data that supports affordability analysis, cashflow review, and financial behaviour assessment.
Prefer using the web app?
When you submit transaction data in the Walker Street Data sandbox application, and your API key has the transactions:aggregate scope, aggregations are automatically returned. This guide details the equivalent workflow using the API.
Prerequisites
- Valid
customerId— see Create a Customer - Enriched transactions available for that customer — see Extract Bank Statement Transactions or Classify Transactions
- API scope:
transactions:aggregate
Endpoints
Standard response
GET https://api.walkerstdata.com.au/v1/customer/{customerId}/aggregate
File download
GET https://api.walkerstdata.com.au/v1/customer/{customerId}/aggregate/download
Request Parameters
| Parameter | Location | Required | Description |
|---|---|---|---|
customerId | path | Yes | Unique customer identifier |
jobId | query | No | Filter aggregations to a specific enrichment job |
type | query | Yes (download only) | File format: json or csv |
Example Request
- cURL
- JavaScript
curl -X GET "https://api.walkerstdata.com.au/v1/customer/{customerId}/aggregate" \
-H "x-api-key: YOUR_API_KEY"
const customerId = 'your-customer-id';
const response = await fetch(
`https://api.walkerstdata.com.au/v1/customer/${customerId}/aggregate`,
{
method: 'GET',
headers: { 'x-api-key': 'YOUR_API_KEY' },
}
);
const result = await response.json();
console.log(result.data.tables);
Filtering by Job
If you enriched transactions via a specific job, pass jobId to scope the aggregation to that submission:
- cURL
- JavaScript
curl -X GET "https://api.walkerstdata.com.au/v1/customer/{customerId}/aggregate?jobId={jobId}" \
-H "x-api-key: YOUR_API_KEY"
const customerId = 'your-customer-id';
const jobId = 'your-job-id';
const response = await fetch(
`https://api.walkerstdata.com.au/v1/customer/${customerId}/aggregate?jobId=${jobId}`,
{
method: 'GET',
headers: { 'x-api-key': 'YOUR_API_KEY' },
}
);
const result = await response.json();
console.log(result.data.tables);
Download as File
- cURL
- JavaScript
curl -X GET "https://api.walkerstdata.com.au/v1/customer/{customerId}/aggregate/download?type=csv" \
-H "x-api-key: YOUR_API_KEY"
const customerId = 'your-customer-id';
const response = await fetch(
`https://api.walkerstdata.com.au/v1/customer/${customerId}/aggregate/download?type=json`,
{
method: 'GET',
headers: { 'x-api-key': 'YOUR_API_KEY' },
}
);
const result = await response.json();
console.log(result.data);
Response Fields
The response returns a tables array of aggregation nodes. Each node contains:
| Field | Description |
|---|---|
id | Unique identifier for the aggregation node |
name | Human-readable label for the aggregation category, when available |
hierarchy | Structural role of the node in the aggregation output, such as table, subtable, row, or total |
type | Data shape of the node's values field, such as objectArray, timeseries, or keyValue |
values | Aggregated values for the node. The structure depends on the node type |
Interpreting Results for Credit
- Use
hierarchyto understand where a node sits in the report structure: top-level sections, nested subtables, individual rows, and totals - Use
typeto determine how to parsevalues— for example as an array of child nodes, a time series object, or a key-value object - Compare income and expense node values across the assessed period to inform serviceability calculations
- Combine Aggregations with Completeness — low data coverage can distort aggregated totals and reduce confidence in the figures
Common Errors
| Status | Cause |
|---|---|
400 | Transactions list is empty or jobId is invalid |
403 | Missing API scope transactions:aggregate |
Next Steps
- Completeness — Validate data coverage before relying on aggregated totals
- Risk Score — Add a risk signal to complement affordability analysis
- API Reference — Full endpoint schema and parameter details