Metrics
The data slices behind net worth, cash flow and every report in Walletguide, and why you should ask them instead of summing transactions.
Every number the app shows comes from a slice: a named computation that runs on the server over the full history. There are seventeen of them, and they are the same code the dashboard and the reports use, so an answer from the API is the answer in the app.
curl -s -X POST -H "Authorization: Bearer $WALLETGUIDE_API_KEY" \
-H 'content-type: application/json' -d '{"period":"ytd"}' \
"https://api.walletguide.com/wallets/$W/data/netWorthTimeSeries"Why not add the rows up yourself
Because you would get a different number, and nothing would tell you.
A list route is paginated, so you would be summing a page. Beyond that, several rules live in the engine rather than on the row. A split transaction has a parent that must not be counted alongside its children. A transfer between two of your own accounts is two rows and zero net change. Offset and balance categories exist to correct a total rather than contribute to it. A holding in another currency converts at the rate for its date, not today's.
The slices apply all of that. Raw rows are for showing transactions, not for totalling them.
What there is
| Slice | Answers |
|---|---|
netWorthTimeSeries | What it was worth, bucketed by month or day |
networthAtDate | What it was worth on one date |
netWorthByAsset | Which assets make it up |
netWorthByAssetAccess | The same, grouped by how liquid it is |
assetPerformance | What each asset did over a window |
cashFlowTimeSeries | In and out, over time |
cashFlowByCategory | In and out, by category |
categoryBreakdown | Where the money went |
categoryAverages | What a category usually costs |
expensesByMerchant | Who it went to |
topExpenses | The largest of them |
profitLoss | Income against expenses |
planVsActual | The plan against what happened |
periodDetails | One period, in full |
transfers | Movement between your own accounts |
cryptoHoldingsValue | Crypto positions and their value |
securityHoldingsValue | Securities positions and their value |
Each is a route under /wallets/{walletId}/data/, with its own parameters. See the reference for the exact shapes, or walletguide data --help.
Periods
Most slices take a period, either a named window or an explicit one:
{ "period": "ytd" }
{ "period": { "startDate": "2026-01-01", "endDate": "2026-03-31" } }Named windows: today, yesterday, 7days, 30days, 3months, 6months, 1year, mtd, ytd, lastWeek, lastMonth, lastYear, thisYear, thisAndNextYear, allTime. Omitting it altogether means the whole history, from the earliest transaction to today.
Asking for several at once
A dashboard wants six numbers, and six round trips is five too many. data/batch takes them together and shares the loaded engine between them:
curl -s -X POST -H "Authorization: Bearer $WALLETGUIDE_API_KEY" \
-H 'content-type: application/json' \
-d '{"slices":[
{"type":"netWorthTimeSeries","period":"1year"},
{"type":"categoryBreakdown","period":"30days"}
]}' \
"https://api.walletguide.com/wallets/$W/data/batch"The results come back in the order you asked. This is what the app itself does on every page load.