AI assistants
Tool reference
Every tool an AI assistant can use in Budget Smugglers: 129 in all, 61 that only read and 68 that make changes.
These are the tools your assistant gets when you connect it. With read-only access it only sees the ones marked read. Full access adds thewrite ones. None of them can delete anything.
You don't call these yourself. Ask in plain English and the assistant picks the tools it needs. See things to ask for ideas.
What your assistant is told when it connects
Budget Smugglers is a personal budgeting app. These tools read and change one person's budgeting data: accounts, transactions, categories and rules, budgets, savings goals, bills and income, loans, savings accounts and term deposits (interest and bonus conditions), super and retirement funds (contribution caps, employer contributions, projections), assets like a home or car (valuations, equity), share and crypto portfolios (holdings, trades, delayed prices, capital gains by financial year), notifications, forecasts and reports.
- Pools: data belongs to a pool. If the person is in more than one, call list_pools and pass poolId to every other tool; with only one it can be left out.
- Money: amounts are decimal strings in the currency shown alongside them, e.g. "-113.89". Transactions are negative for money out; report spending totals are positive. Pass amounts back as decimal strings too.
- Businesses: accounts can belong to a business. Reports, budgets and forecasts take a scope ("personal", "all", "business" or a business id); left out, the pool's default applies, which is usually personal. Ask for "all" when the person wants everything.
- Pooled: someone with a household pool and a business pool can see both together with pooled_summary and pooled_net_worth. Money moved between the pools (like owner's drawings) is left out there.
- Dates are calendar dates (YYYY-MM-DD) in the pool's timezone, and months are YYYY-MM.
- Ids are UUIDs: look them up with the list and search tools rather than guessing.
- Changes are recorded in the pool's audit log under the person's name. Nothing can be deleted here; deleting is done in the app.No tools match that.
Pools, accounts and businesses#
list_poolsreadThe pools (budgets) you belong to, with your role and permissions in each. Pass a pool's id as poolId to the other tools when you belong to more than one.
list_accountsreadBank accounts, cards, loans and other accounts, with current balances. businessId says which business an account belongs to (null for personal).
1 input
poolId | uuidWhich pool; optional if you only have one |
create_accountwriteAdd an account. openingBalance is a decimal string in the account currency, e.g. "1250.00". For an account that is already closed (an old loan, say), pass openedOn and closedOn.
13 inputs
namerequired | string |
type | one of: transaction, savings, offset, credit_card, loan, mortgage, investment, term_deposit, retirement, cash, other, asset |
institution | string |
currencyrequired | string |
openingBalance | string |
externalRef | string |
bankLabel | string |
accountNumber | string |
openedOn | string |
closedOn | string |
notes | string |
businessId | uuid |
poolId | uuidWhich pool; optional if you only have one |
update_accountwriteRename an account, change its type or notes, set its bank account number (used to match transfers that mention it), move it into a business (businessId, or null for personal), or archive it. Set closedOn (YYYY-MM-DD) when an account was closed: it is archived and drops out of net worth after that month. openedOn limits net worth history the same way at the start.
14 inputs
name | string |
type | one of: transaction, savings, offset, credit_card, loan, mortgage, investment, term_deposit, retirement, cash, other, asset |
institution | string |
openingBalance | string |
externalRef | string |
bankLabel | string |
accountNumber | string |
openedOn | string |
closedOn | string |
notes | string |
businessId | uuid |
archived | boolean |
accountIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
set_account_ownerswriteSay who holds an account and when (people from list_people). Replaces the account's periods; from/to are inclusive YYYY-MM-DD, null for open-ended, and periods can't overlap. Transactions in a period become that person's unless a rule or a hand-set split says otherwise. Pass an empty list to clear.
3 inputs
periodsrequired | list of object |
accountIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
list_businessesreadBusinesses in the pool. Their accounts are kept out of personal reports, budgets and forecasts unless you ask for them with a report's scope.
1 input
poolId | uuidWhich pool; optional if you only have one |
create_businesswriteAdd a business (a company, partnership or sole trader). Then move its accounts in with update_account.
3 inputs
namerequired | string |
notes | string |
poolId | uuidWhich pool; optional if you only have one |
update_businesswriteRename a business, change its notes, or archive it.
5 inputs
name | string |
notes | string |
archived | boolean |
businessIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
Transactions#
search_transactionsreadTransactions newest first, filtered by account, dates, text, category or person. Amounts are negative for money out; people shows who each one belongs to. Returns a page; pass nextCursor back to get more.
10 inputs
accountId | uuid |
from | stringFirst date to include, YYYY-MM-DD |
to | stringLast date to include, YYYY-MM-DD |
search | stringText in the description, payee or notes |
categoryId | uuidAlso matches its subcategories |
personId | uuid or "none"Only transactions with a share for this person (from list_people), or "none" for nobody's |
uncategorised | booleanOnly transactions without a category (transfers excluded) |
limit | whole number |
cursor | stringnextCursor from the previous page |
poolId | uuidWhich pool; optional if you only have one |
get_transactionreadOne transaction in full.
2 inputs
transactionIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
create_transactionwriteRecord a transaction by hand, e.g. a cash purchase. amount is a decimal string, negative for money out ("-42.50").
7 inputs
accountIdrequired | uuid |
daterequired | string |
amountrequired | string |
descriptionrequired | string |
payee | string |
notes | string |
poolId | uuidWhich pool; optional if you only have one |
update_transactionwriteChange a transaction's category, payee or notes (or, for transactions added by hand, its date, amount and description). Set applyToSimilar to also recategorise other uncategorised transactions from the same merchant and remember the choice.
10 inputs
categoryId | uuid |
applyToSimilar | boolean |
payee | string |
notes | string |
description | string |
date | string |
amount | string |
location | object or "none" or "auto" |
transactionIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
uncategorised_merchantsreadUncategorised transactions grouped by merchant, most transactions first, with each group's total, date range and transaction ids. Use it to categorise a backlog: pick a category per merchant, then categorise_transactions with its ids (or create_rule for merchants that will keep turning up). Transfers are left out.
5 inputs
accountId | uuid |
from | stringFirst date to include, YYYY-MM-DD |
to | stringLast date to include, YYYY-MM-DD |
limit | whole numberHow many merchants to return |
poolId | uuidWhich pool; optional if you only have one |
categorise_transactionswriteSet (or clear, with categoryId null) the category of several transactions at once.
3 inputs
idsrequired | list of uuid |
categoryIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
unlink_transferwriteStop treating a transaction as one side of a transfer between your own accounts.
2 inputs
transactionIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
auto_categorisewriteRun rules, remembered merchants and transfer detection over uncategorised transactions, the same as the Categorise button. Rules with people also split transactions not split by hand.
1 input
poolId | uuidWhich pool; optional if you only have one |
Categories and rules#
list_categoriesreadSpending, income and transfer categories, with subcategories under their parents.
1 input
poolId | uuidWhich pool; optional if you only have one |
create_categorywriteAdd a category, or a subcategory by giving a parentId.
4 inputs
namerequired | string |
parentId | uuid |
kind | one of: expense, income, transfer |
poolId | uuidWhich pool; optional if you only have one |
update_categorywriteRename, move, reorder or archive a category, or set whether its spending counts as essential or lifestyle (spendGroup; null follows the default).
8 inputs
name | string |
parentId | uuid |
kind | one of: expense, income, transfer |
archived | boolean |
sortOrder | whole number |
spendGroup | one of: essential, lifestyle |
categoryIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
list_rulesreadCategorisation rules, in the order they are tried (lowest priority number first).
1 input
poolId | uuidWhich pool; optional if you only have one |
preview_rulereadWhich existing transactions a rule would match, without saving it. Amount conditions compare the absolute value; add {"field":"direction","op":"equals","value":"out"} (or "in") to match only money out (or in).
3 inputs
match | one of: all, any |
conditionsrequired | list of object |
poolId | uuidWhich pool; optional if you only have one |
create_rulewriteAdd a rule that categorises matching transactions, links them to a loan (loanId: money out is a repayment, money in a redraw), splits them between people (people), or any mix. It applies to new imports; call apply_rule to run it over existing transactions. Amounts match regardless of sign; a direction condition (value "in" or "out") limits it to money in or out. Lines of {personId, kind, value}: kind "amount" takes a fixed amount off the top (value "1000.00"), kind "percent" a percentage of what's left after the amounts (value "50"). A person can have one of each. Anything left over is shared (nobody's in particular).
11 inputs
namerequired | string |
priority | whole number |
enabled | boolean |
match | one of: all, any |
conditionsrequired | list of object |
categoryId | uuid |
setPayee | string |
loanId | uuid |
people | list of object |
setLocation | object or "none" |
poolId | uuidWhich pool; optional if you only have one |
update_rulewriteChange a rule's conditions, category, loan, people, priority, or switch it off.
12 inputs
name | string |
priority | whole number |
enabled | boolean |
match | one of: all, any |
conditions | list of object |
categoryId | uuid |
setPayee | string |
loanId | uuid |
people | list of object |
setLocation | object or "none" |
ruleIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
apply_rulewriteRun a rule over existing transactions: recategorise the ones it matches, link them to its loan and split them between its people, if it has them.
2 inputs
ruleIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
People#
list_peoplereadThe people in the pool (with or without a login), for splitting income and spending between them. Super members are people too.
1 input
poolId | uuidWhich pool; optional if you only have one |
create_personwriteAdd someone to the pool, like a partner or a kid. userId links a pool member with a login.
6 inputs
namerequired | string |
userId | string |
dateOfBirth | string |
showAge | boolean |
notes | string |
poolId | uuidWhich pool; optional if you only have one |
update_personwriteRename someone, link their login, set their date of birth, keep their age off charts (showAge false), or archive them.
8 inputs
name | string |
userId | string |
dateOfBirth | string |
showAge | boolean |
notes | string |
archived | boolean |
personIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
set_transaction_peoplewriteSay whose transactions these are. Lines of {personId, kind, value}: kind "amount" takes a fixed amount off the top (value "1000.00"), kind "percent" a percentage of what's left after the amounts (value "50"). A person can have one of each. Anything left over is shared (nobody's in particular). Pass lines [] to make them nobody's, or null to hand them back to the rules. Splits set here stick: rules leave them alone.
3 inputs
linesrequired | list of object |
idsrequired | list of uuid |
poolId | uuidWhich pool; optional if you only have one |
Milestones#
list_milestonesreadDated events the pool marks on its charts, earliest first. One with an endDate is a span; it counts if any of it falls in the range. kind is "life" (a new job, a baby, moving house), "financial" (bought the car, paid off a loan), "world" (a lockdown, rate rises) or "other". Ones kept off charts and reports are left out unless includeHidden.
4 inputs
from | stringFirst date, YYYY-MM-DD |
to | stringLast date, YYYY-MM-DD |
includeHidden | boolean |
poolId | uuidWhich pool; optional if you only have one |
create_milestonewriteMark an event on the pool's charts. kind is "life" (a new job, a baby, moving house), "financial" (bought the car, paid off a loan), "world" (a lockdown, rate rises) or "other". Give endDate for something that lasted a while. personId (from list_people) says whose it is. showInReports false keeps it off charts and reports.
8 inputs
titlerequired | string |
daterequired | string |
endDate | string |
kind | one of: life, financial, world, other |
personId | uuid |
notes | string |
showInReports | boolean |
poolId | uuidWhich pool; optional if you only have one |
update_milestonewriteChange a milestone, or keep it off charts and reports with showInReports false.
9 inputs
title | string |
date | string |
endDate | string |
kind | one of: life, financial, world, other |
personId | uuid |
notes | string |
showInReports | boolean |
milestoneIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
Places#
find_placesreadTowns, suburbs and cities by name (from the built-in place list), for setting where transactions happened or for a rule. Places in the pool’s own country come first.
3 inputs
qrequired | string |
limit | whole number |
poolId | uuidWhich pool; optional if you only have one |
set_transaction_locationwriteSay where transactions happened: {placeId} from find_places, "none" for nowhere in particular (like a subscription), or "auto" to have it worked out from the bank’s description again. Places set here stick: rules and automation leave them alone.
3 inputs
idsrequired | list of uuid |
locationrequired | object or "none" or "auto" |
poolId | uuidWhich pool; optional if you only have one |
spending_by_placereadWhere money was spent (or, with direction "in", came from) between two dates: totals by town and by country, with coordinates, plus how much has no location. Amounts are positive.
5 inputs
fromrequired | stringFirst date, YYYY-MM-DD |
torequired | stringLast date, YYYY-MM-DD |
scope | one of: personal, all, business or uuidWhich accounts: "personal" (accounts not in a business), "all", "business" (every business account) or a business id from list_businesses. Leave it out for the pool's default. |
direction | one of: out, in |
poolId | uuidWhich pool; optional if you only have one |
Budgets and goals#
get_budget_monthreadBudgets for a month: each category with its budget, spending, rollover and what is left, plus month totals. Spending is positive.
3 inputs
monthrequired | stringYYYY-MM |
scope | one of: personal, all, business or uuidWhich accounts: "personal" (accounts not in a business), "all", "business" (every business account) or a business id from list_businesses. Leave it out for the pool's default. |
poolId | uuidWhich pool; optional if you only have one |
set_budgetwriteSet a category's monthly budget from fromMonth onwards (earlier months keep their old amount). amount is a positive decimal string. rollover carries unspent money into the next month.
5 inputs
categoryIdrequired | uuid |
amountrequired | string |
rollover | boolean |
fromMonthrequired | string |
poolId | uuidWhich pool; optional if you only have one |
list_goalsreadSavings goals with progress, status and the monthly amount needed to reach each by its date. Pass personId for one person’s goals.
2 inputs
personId | uuid |
poolId | uuidWhich pool; optional if you only have one |
get_goalreadOne savings goal with its contributions.
2 inputs
goalIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
create_goalwriteAdd a savings goal, shared or for one person (personId, from list_people). Link an accountId to track that account’s growth, set netWorth to aim for a net worth (includeSuper to count super), or record contributions by hand with add_goal_contribution.
10 inputs
namerequired | string |
targetAmountrequired | string |
targetDate | string |
personId | uuid |
accountId | uuid |
netWorth | boolean |
includeSuper | boolean |
currency | string |
notes | string |
poolId | uuidWhich pool; optional if you only have one |
update_goalwriteChange a goal's name, whose it is, target, date or notes (or whether a net worth goal counts super), or archive it.
9 inputs
name | string |
targetAmount | string |
targetDate | string |
personId | uuid |
includeSuper | boolean |
notes | string |
archived | boolean |
goalIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
add_goal_contributionwriteRecord money put towards a goal (negative to take some back out).
5 inputs
daterequired | string |
amountrequired | string |
note | string |
goalIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
Bills and forecast#
list_billsreadRecurring bills and income (pay, rent, subscriptions) with their schedule and next due date.
1 input
poolId | uuidWhich pool; optional if you only have one |
upcoming_billsreadDue dates of bills and income between two dates, and whether each was paid, skipped, late or is still expected. Defaults to recent and upcoming weeks.
3 inputs
from | string |
to | string |
poolId | uuidWhich pool; optional if you only have one |
bill_suggestionsreadRecurring payments found in the transactions that aren't tracked as bills or income yet.
1 input
poolId | uuidWhich pool; optional if you only have one |
create_billwriteTrack a recurring bill or income. amount is positive either way; kind says which direction. matchText is text that the matching transactions contain, so payments are ticked off automatically.
15 inputs
namerequired | string |
kindrequired | one of: bill, income |
accountIdrequired | uuid |
categoryId | uuid |
amountrequired | string |
tolerancePercent | whole number |
frequencyrequired | one of: once, weekly, fortnightly, monthly, quarterly, yearly |
interval | whole number |
startDaterequired | string |
endDate | string |
lastDayOfMonth | boolean |
weekend | one of: none, before, after |
matchText | string |
notes | string |
poolId | uuidWhich pool; optional if you only have one |
update_billwriteChange a bill or income: amount, schedule, account, category, or switch it off with active false.
17 inputs
name | string |
kind | one of: bill, income |
accountId | uuid |
categoryId | uuid |
amount | string |
tolerancePercent | whole number |
frequency | one of: once, weekly, fortnightly, monthly, quarterly, yearly |
interval | whole number |
startDate | string |
endDate | string |
lastDayOfMonth | boolean |
weekend | one of: none, before, after |
matchText | string |
notes | string |
active | boolean |
itemIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
mark_bill_occurrencewriteMark one due date of a bill or income as paid (optionally linking the transaction), skipped, or back to expected.
5 inputs
dueDaterequired | string |
statusrequired | one of: paid, skipped, expected |
transactionId | uuid |
itemIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
get_forecastreadProjected balances day by day from bills, income, loan repayments and (optionally) typical day-to-day spending, with warnings where an account would go below zero. exclude takes bill or loan ids to try a what-if without them.
5 inputs
days | whole number |
exclude | list of uuid |
variable | booleanInclude typical day-to-day spending |
scope | one of: personal, all, business or uuidWhich accounts: "personal" (accounts not in a business), "all", "business" (every business account) or a business id from list_businesses. Leave it out for the pool's default. |
poolId | uuidWhich pool; optional if you only have one |
Reports#
spending_summaryreadIncome, spending and savings rate between two dates, by month and by category, plus the top merchants and income by person. Spending amounts are positive. Transfers between your own accounts are left out, except money moving across the scope (e.g. drawings from a business count as personal income).
6 inputs
fromrequired | stringFirst date, YYYY-MM-DD |
torequired | stringLast date, YYYY-MM-DD |
accounts | list of uuidOnly these accounts (overrides scope) |
scope | one of: personal, all, business or uuidWhich accounts: "personal" (accounts not in a business), "all", "business" (every business account) or a business id from list_businesses. Leave it out for the pool's default. |
person | uuid or "none"Only this person's share of each transaction (from list_people), or "none" for the share nobody has |
poolId | uuidWhich pool; optional if you only have one |
spending_trendsreadMonthly spending per category between two dates. Defaults to the top 5 categories.
7 inputs
fromrequired | stringFirst date, YYYY-MM-DD |
torequired | stringLast date, YYYY-MM-DD |
accounts | list of uuidOnly these accounts (overrides scope) |
scope | one of: personal, all, business or uuidWhich accounts: "personal" (accounts not in a business), "all", "business" (every business account) or a business id from list_businesses. Leave it out for the pool's default. |
person | uuid or "none"Only this person's share of each transaction (from list_people), or "none" for the share nobody has |
categories | list of uuid |
poolId | uuidWhich pool; optional if you only have one |
net_worthreadTotal of account balances at the end of each month, overall and per account. months "all" reaches back to the first transaction. With personId (someone with a date of birth, from list_people), byAge also gives net worth at each of their birthdays and the change over each year of age.
4 inputs
months | "all" or whole number |
scope | one of: personal, all, business or uuidWhich accounts: "personal" (accounts not in a business), "all", "business" (every business account) or a business id from list_businesses. Leave it out for the pool's default. |
personId | uuidAlso give net worth by this person’s age |
poolId | uuidWhich pool; optional if you only have one |
pooled_summaryreadIncome and spending across several of your pools at once (e.g. your household and your business), by month, category and pool. Money moved between the pools, like owner's drawings, is left out. Pools in another currency are skipped.
3 inputs
fromrequired | stringFirst date, YYYY-MM-DD |
torequired | stringLast date, YYYY-MM-DD |
poolIds | list of uuidPools to combine (from list_pools). Leave it out for your saved choice, or every pool you can. |
pooled_net_worthreadNet worth across several of your pools at once, month by month, overall and per pool.
2 inputs
months | whole number |
poolIds | list of uuidPools to combine (from list_pools). Leave it out for your saved choice, or every pool you can. |
year_by_yearreadWhere each financial year’s income went: essential spending, lifestyle spending (uncategorised included), paying off debt (transfers into loan accounts and spending filed as loan repayments) and what was saved. Whether a category is essential is set per category (update_category spendGroup).
3 inputs
years | whole number |
scope | one of: personal, all, business or uuidWhich accounts: "personal" (accounts not in a business), "all", "business" (every business account) or a business id from list_businesses. Leave it out for the pool's default. |
poolId | uuidWhich pool; optional if you only have one |
spending_by_dayreadTotal spending on each day between two dates (days with none are left out). Amounts are positive.
4 inputs
fromrequired | stringFirst date, YYYY-MM-DD |
torequired | stringLast date, YYYY-MM-DD |
scope | one of: personal, all, business or uuidWhich accounts: "personal" (accounts not in a business), "all", "business" (every business account) or a business id from list_businesses. Leave it out for the pool's default. |
poolId | uuidWhich pool; optional if you only have one |
balance_rangereadAn account’s lowest, highest and closing end-of-day balance each week, and the buffer to stay above: set by hand, or worked out as the lesser of a typical week’s spending and the level the balance stayed above three weeks in four.
3 inputs
accountIdrequired | uuid |
weeks | whole number |
poolId | uuidWhich pool; optional if you only have one |
money_healthreadSix measures for the last 12 months and the 12 before: emergency fund (months of essential spending covered by cash), savings rate, essentials as a share of income, debt to income, budgets kept and bills on time. Each has a target, set in the app or worked out to be a third of the way from last year to the usual rule of thumb, and a 0-1 score against it.
2 inputs
scope | one of: personal, all, business or uuidWhich accounts: "personal" (accounts not in a business), "all", "business" (every business account) or a business id from list_businesses. Leave it out for the pool's default. |
poolId | uuidWhich pool; optional if you only have one |
Loans#
list_loansreadLoans with balance, rate, repayment, offset and payoff date: home, car and personal loans, and money lent to others (direction 'lent' = owed to you). A loan shared with another pool shows sharedWith.
1 input
poolId | uuidWhich pool; optional if you only have one |
get_loanreadOne loan in full: terms, offsets, phases (interest-only, fixed periods) and current figures.
2 inputs
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
loan_ratesreadInterest rate history, including suggested changes inferred from statements awaiting confirmation.
2 inputs
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
loan_transactionsreadTransactions linked to a loan and their role (repayment, interest, fee, redraw…).
2 inputs
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
loan_historyreadMonth by month: balance owed, offset, interest actually charged and the interest expected.
2 inputs
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
loan_projectionreadPayoff projection as things are, under a what-if scenario (extra repayments for a stretch, lump sums, offset changes, a rate change or a rate path over time), and with no offset. Shows payoff dates, total interest and each date the repayment changes (repaymentSteps) so scenarios can be compared.
12 inputs
loanIdrequired | uuid |
offset | one of: current, trend, nonecurrent = offset stays where it is; trend = keeps changing like the last 6 months; none = no offset |
offsetMonthly | stringAdded to the offset each month |
extra | stringExtra on top of each repayment |
extraFrom | stringWhen the extra starts (default today) |
extraTo | stringWhen the extra stops (default never) |
lumpSums | list of object |
rateChange | stringChange in interest rate, in percentage points, e.g. "0.25". Moves fixed rates too. |
rateChangeFrom | string |
ratePath | list of objectRates over time instead of rateChange: the change from today's rate by each date, ramped monthly in between and held after. Fixed periods hold until they end. |
keepRepayment | booleanKeep paying today's repayment even if the minimum drops |
poolId | uuidWhich pool; optional if you only have one |
loan_draftreadGuess a loan's terms from a loan account's transaction history, to fill in create_loan.
2 inputs
accountIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
create_loanwriteSet up a loan on a loan account. Amounts are decimal strings and rates are percentages like "5.84". Use loan_draft first to get sensible values. For money lent to someone, set direction 'lent' and ledgerMode 'modelled': give the account a positive opening balance (what's owed to you); repayments are money coming in.
24 inputs
kind | one of: home, investment, car, personal, other |
originalPrincipalrequired | string |
startDaterequired | string |
termMonthsrequired | whole number |
repaymentFrequency | one of: weekly, fortnightly, monthly |
firstRepaymentDaterequired | string |
firstInterestDaterequired | string |
repaymentPolicy | one of: recalculate, fixed_amount |
recalcNoticeDays | whole number |
dayBasis | 365 or 360 |
balloon | string |
monthlyFee | string |
annualFee | string |
annualFeeDate | string |
fundingAccountId | uuid |
scheduledItemId | uuid |
ledgerMode | one of: imported, modelled |
revertRate | string |
notes | string |
accountIdrequired | uuid |
direction | one of: borrowed, lent |
initialRate | string |
offsets | list of object |
poolId | uuidWhich pool; optional if you only have one |
update_loanwriteChange a loan's name, terms, fees, funding account or notes. On a shared loan the name is this pool's own.
22 inputs
kind | one of: home, investment, car, personal, other |
originalPrincipal | string |
startDate | string |
termMonths | whole number |
repaymentFrequency | one of: weekly, fortnightly, monthly |
firstRepaymentDate | string |
firstInterestDate | string |
repaymentPolicy | one of: recalculate, fixed_amount |
recalcNoticeDays | whole number |
dayBasis | 365 or 360 |
balloon | string |
monthlyFee | string |
annualFee | string |
annualFeeDate | string |
fundingAccountId | uuid |
scheduledItemId | uuid |
ledgerMode | one of: imported, modelled |
revertRate | string |
notes | string |
name | string |
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
set_loan_offsetswriteReplace the accounts that offset this loan (and how much of each balance counts).
3 inputs
offsetsrequired | list of object |
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
add_loan_phasewriteAdd a period such as interest-only, with an optional repayment override.
6 inputs
typerequired | one of: interest_only, principal_and_interest |
startDaterequired | string |
endDate | string |
repaymentOverride | string |
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
update_loan_phasewriteChange a loan phase's dates, type or repayment override.
7 inputs
type | one of: interest_only, principal_and_interest |
startDate | string |
endDate | string |
repaymentOverride | string |
loanIdrequired | uuid |
phaseIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
add_loan_ratewriteRecord an interest rate change from a date, e.g. "6.09" from 2026-11-01.
6 inputs
effectiveDaterequired | string |
raterequired | string |
rateType | one of: variable, fixed |
fixedUntil | string |
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
update_loan_ratewriteCorrect a rate, or confirm or dismiss a suggested rate change.
8 inputs
effectiveDate | string |
rate | string |
rateType | one of: variable, fixed |
fixedUntil | string |
status | one of: confirmed, dismissed, suggested |
loanIdrequired | uuid |
rateIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
infer_loan_rateswriteLook through the statements again for interest rate changes, and suggest any found.
2 inputs
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
classify_loan_transactionswriteWork out each of the loan account's transactions' role (repayment, interest, fee…) again.
2 inputs
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
link_loan_transactionwriteLink a transaction to a loan with a role, e.g. a repayment made from another account for a loan whose statements aren't imported.
4 inputs
rolerequired | one of: drawdown, interest, repayment, extra_repayment, redraw, fee, adjustment, payout |
loanIdrequired | uuid |
transactionIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
unlink_loan_transactionwriteRemove a manually linked transaction from a loan.
3 inputs
loanIdrequired | uuid |
transactionIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
close_loanwriteRecord that a loan was paid out (discharged) on a date. payoutAmount is everything it took, fees included; payoutFees is the discharge and break costs within it. The loan and its account close: no projections after that date. For a loan whose statements are not imported (modelled), the estimated balance is tied to the payout figure, and a rate that fits it is suggested if none is confirmed. To record moving to a new loan, use refinance_loans instead.
5 inputs
closedOnrequired | string |
payoutAmountrequired | string |
payoutFees | string |
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
reopen_loanwriteUndo a payout recorded with close_loan.
2 inputs
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
refinance_loanswriteRecord old loans being paid out by new ones on a settlement date (e.g. a split NAB loan refinanced to one Macquarie loan). Set up every loan first (create_loan; an old loan without statements can be ledgerMode 'modelled'). The old loans close with their payout figures; offsets, the funding account and the repayment bill move to the first new loan unless it has its own. The payouts and the new loans' drawdowns are filed as Transfers.
5 inputs
settledOnrequired | string |
fromrequired | list of object |
torequired | list of uuid |
notes | string |
poolId | uuidWhich pool; optional if you only have one |
get_loan_refinancereadOne refinance: what each old loan was paid out at, what the new loans drew, and the difference.
2 inputs
refinanceIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
undo_loan_refinancewriteUndo a refinance: the old loans reopen and what moved to the new loan moves back.
2 inputs
refinanceIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
share_loanwritePut the other side of this loan into another pool: the lender sees it as owed to them, the borrower as a debt. It's one loan; either side can change it and link their own payments. With toPoolId (another pool you belong to) it's shared straight away. Without it, you get a link for someone else's pool; it lasts 7 days and a new one replaces the last. Only modelled loans without offsets can be shared.
4 inputs
loanIdrequired | uuid |
toPoolId | uuidAnother pool you belong to: shares straight into it, no link needed (see list_pools) |
accountName | stringWith toPoolId: name for the account there |
poolId | uuidWhich pool; optional if you only have one |
accept_loan_sharewriteAccept a share link (from share_loan) into this pool. A new loan account is created here that mirrors the loan, so payments in this pool can be linked to it.
3 inputs
tokenrequired | stringThe share link, or just its token |
accountName | string |
poolId | uuidWhich pool; optional if you only have one |
unshare_loanwriteStop sharing a loan, from either side. The other pool's copy of the loan account goes, and its payments come unlinked.
2 inputs
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
loan_chainreadEvery loan linked to this one by refinances as one history: owed and interest each month, rates per loan, each refinance, and what refinancing has saved compared with staying put.
2 inputs
loanIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
Savings, term deposits and notifications#
list_savingsreadSavings accounts and term deposits with interest tracking: balance, base/bonus/intro rate, bonus cap, projected interest over the next 12 months, maturity, and this period’s bonus-condition status.
1 input
poolId | uuidWhich pool; optional if you only have one |
get_savingsreadOne savings account or term deposit in full: terms, rate history (including suggestions), bonus conditions and the current tracker.
2 inputs
savingsIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
savings_statusreadWhether each bonus condition is met, on track, at risk or missed this period (or another period with savingsId + period "YYYY-MM" / "YYYY-Qn"), from what has happened so far plus scheduled bills and income. At-risk conditions come with what to do: transfer an amount by a date, hold off a withdrawal, or make more card purchases. topUps combine deposit shortfalls into one transfer per account. Without savingsId, covers every tracked account.
3 inputs
savingsId | uuid |
period | string |
poolId | uuidWhich pool; optional if you only have one |
savings_historyreadPeriod by period: whether the bonus conditions held, interest actually credited against what the base and base+bonus rates would pay, the effective rate, and bonus interest lost in missed periods.
2 inputs
savingsIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
savings_projectionreadCompounding growth projection: the expected path (scheduled deposits, this period’s bonus as tracked, later bonuses met), a what-if scenario, and the scenario with every bonus met vs on the base rate alone, so the value of keeping the conditions is clear. Term deposits project to maturity.
10 inputs
savingsIdrequired | uuid |
contribution | stringExtra regular deposit on top of scheduled ones |
frequency | one of: weekly, fortnightly, monthly |
lumpSums | list of object |
rateChange | stringChange in rate, in percentage points, e.g. "-0.25" |
rateChangeFrom | string |
months | whole number |
target | stringReport when the balance reaches this |
bonus | one of: expected, always, never |
poolId | uuidWhich pool; optional if you only have one |
savings_draftreadGuess a savings account’s rate and interest day from its interest credits, to fill in create_savings.
2 inputs
accountIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
savings_transactionsreadThe account’s transactions with how each is tagged (interest, bonus interest, excluded from conditions…).
2 inputs
savingsIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
create_savingswriteSet up interest tracking on a savings, term deposit or other account that holds money. Rates are percentages like "5.50" with a component of "base", "bonus" (only paid when the conditions hold; maxBalance caps it) or "intro" (replaces both until endDate). For a term deposit set kind "term_deposit", interestFrequency "at_maturity" (or how it's paid), startDate, maturityDate and maturityInstruction. When reading a product's terms, turn its bonus requirements into conditions: Each condition is one object, and the bonus is paid only in periods where every enabled condition holds. Money is a decimal string in the account's currency. "accountId" is optional and defaults to the savings account itself; set it to watch a linked account instead (e.g. card purchases on the everyday account, or deposits into a linked transaction account). - {"type":"min_deposits","amount":"1000","minEach":null,"source":"any"}: deposit at least this much each period. source: "any" (own transfers count), "external" (only money from outside the pool, e.g. salary), "exclude_same_institution" (transfers from the same bank don't count). minEach: each deposit must be at least this. - {"type":"balance_growth","minIncrease":"0.01","excludeInterest":true}: end the period higher than it started ("0.01" = any growth). excludeInterest: interest paid doesn't count towards it (most banks). - {"type":"max_withdrawals","count":0,"maxTotal":null}: at most this many withdrawals (0 = none), optionally capped in total. - {"type":"min_card_purchases","count":5,"descriptionPattern":null,"accountId":"<everyday account>"}: at least this many settled card purchases (spending that isn't a transfer), optionally only rows matching a regex. - {"type":"min_balance","amount":"5000","basis":"period_end"}: keep at least this much, checked "daily" or at "period_end". Rules that aren't about the period's activity (age limits, one account per person, needing a linked account at all) aren't conditions; put them in the account's notes. A bonus that only applies up to a balance is a rate cap, not a condition: use add_savings_rate with component "bonus" and maxBalance.
18 inputs
kind | one of: savings, term_deposit |
dayBasis | 365 or 360 |
interestFrequency | one of: monthly, quarterly, annually, at_maturity |
interestDay | whole number |
interestMonth | whole number |
conditionPeriod | one of: month, quarter |
clearingDays | whole number |
payoutAccountId | uuid |
principal | string |
startDate | string |
maturityDate | string |
maturityReminderDays | whole number |
maturityInstruction | one of: rollover_all, rollover_principal, payout |
notes | string |
accountIdrequired | uuid |
rates | list of object |
conditions | list of object |
poolId | uuidWhich pool; optional if you only have one |
update_savingswriteChange how interest is paid, the transfer clearing time, term deposit details or notes.
16 inputs
kind | one of: savings, term_deposit |
dayBasis | 365 or 360 |
interestFrequency | one of: monthly, quarterly, annually, at_maturity |
interestDay | whole number |
interestMonth | whole number |
conditionPeriod | one of: month, quarter |
clearingDays | whole number |
payoutAccountId | uuid |
principal | string |
startDate | string |
maturityDate | string |
maturityReminderDays | whole number |
maturityInstruction | one of: rollover_all, rollover_principal, payout |
notes | string |
savingsIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
set_savings_conditionswriteReplace a savings account's bonus conditions with this list (send them all; an empty list removes them). Each condition is one object, and the bonus is paid only in periods where every enabled condition holds. Money is a decimal string in the account's currency. "accountId" is optional and defaults to the savings account itself; set it to watch a linked account instead (e.g. card purchases on the everyday account, or deposits into a linked transaction account). - {"type":"min_deposits","amount":"1000","minEach":null,"source":"any"}: deposit at least this much each period. source: "any" (own transfers count), "external" (only money from outside the pool, e.g. salary), "exclude_same_institution" (transfers from the same bank don't count). minEach: each deposit must be at least this. - {"type":"balance_growth","minIncrease":"0.01","excludeInterest":true}: end the period higher than it started ("0.01" = any growth). excludeInterest: interest paid doesn't count towards it (most banks). - {"type":"max_withdrawals","count":0,"maxTotal":null}: at most this many withdrawals (0 = none), optionally capped in total. - {"type":"min_card_purchases","count":5,"descriptionPattern":null,"accountId":"<everyday account>"}: at least this many settled card purchases (spending that isn't a transfer), optionally only rows matching a regex. - {"type":"min_balance","amount":"5000","basis":"period_end"}: keep at least this much, checked "daily" or at "period_end". Rules that aren't about the period's activity (age limits, one account per person, needing a linked account at all) aren't conditions; put them in the account's notes. A bonus that only applies up to a balance is a rate cap, not a condition: use add_savings_rate with component "bonus" and maxBalance.
3 inputs
conditionsrequired | list of object |
savingsIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
add_savings_ratewriteRecord a rate from a date: component "base", "bonus" or "intro" (with endDate). minBalance/maxBalance make it apply to that slice of the balance only (tiers, bonus caps).
8 inputs
component | one of: base, bonus, intro |
effectiveDaterequired | string |
endDate | string |
raterequired | string |
minBalance | string |
maxBalance | string |
savingsIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
update_savings_ratewriteCorrect a rate, or confirm or dismiss a rate suggested from the interest credits.
10 inputs
component | one of: base, bonus, intro |
effectiveDate | string |
endDate | string |
rate | string |
minBalance | string |
maxBalance | string |
status | one of: confirmed, dismissed, suggested |
savingsIdrequired | uuid |
rateIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
infer_savings_rateswriteWork out the rate from the interest credits again and suggest any change found.
2 inputs
savingsIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
tag_savings_transactionwriteTag a transaction in the savings account: "interest" or "bonus_interest" (counted as interest, so it can be left out of balance growth), "excluded" (ignored by the conditions, e.g. a bank correction), "deposit" or "withdrawal".
4 inputs
rolerequired | one of: interest, bonus_interest, deposit, withdrawal, excluded |
savingsIdrequired | uuid |
transactionIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
plan_savings_transferwriteBook a transfer the person intends to make into the savings account (as a pair of one-off scheduled items), so the forecast and the bonus tracker count it until the real transfer imports. It doesn’t move any money; say so.
5 inputs
fromAccountIdrequired | uuid |
amountrequired | string |
daterequired | string |
savingsIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
list_notificationsreadThe person’s in-app notifications for this pool: savings bonuses at risk or missed, term deposits maturing, money over a bonus cap, late bills and accounts forecast to dip below zero. Current items first; resolved ones have resolvedAt set.
3 inputs
current | booleanOnly items that are still true |
limit | whole number |
poolId | uuidWhich pool; optional if you only have one |
mark_notifications_readwriteMark notifications read, by id or {"all": true}.
3 inputs
ids | list of uuid |
all | true |
poolId | uuidWhich pool; optional if you only have one |
Super#
list_retirementreadEveryone with a super (retirement) fund in the pool: date of birth, salary, funds and balances, this financial year’s concessional contributions against the cap, whether employer contributions are arriving on time, and each fund’s fees and insurance as charged (feesFromHistory).
1 input
poolId | uuidWhich pool; optional if you only have one |
get_retirement_memberreadOne person’s super details and funds.
2 inputs
memberIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
retirement_capsreadConcessional (employer, salary sacrifice, deducted personal) and non-concessional contributions for a financial year (e.g. "2026-27", default this one) against the caps, with carry-forward of unused cap, bring-forward, what’s expected by 30 June, and a Division 293 flag. Years before the history starts need totals entered (update_retirement_member priorConcessional).
3 inputs
fy | string |
memberIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
retirement_sg_checkreadDid the employer’s super contributions arrive, and on time? Each payday since 1 July 2026 (payday super: due 7 business days after payday) or each quarter before then, with what was owed, what arrived and when. Needs a salary and a linked pay on the member.
4 inputs
from | string |
to | string |
memberIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
retirement_projectionreadProjects a member’s super to retirement (never before preservation age), by financial year, in future and today’s dollars. What-ifs: extraConcessional and extraNonConcessional (per year), returnRate (percent, after fees and tax), inflation, wageGrowth, retirementAge. Also the actual month-end balances so far.
8 inputs
extraConcessional | string |
extraNonConcessional | string |
returnRate | string |
inflation | string |
wageGrowth | string |
retirementAge | whole number |
memberIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
retirement_returnsreadInvestment returns (after fees) per financial year across a member’s funds, worked out from balances and contributions, with a suggested return to assume in projections.
2 inputs
memberIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
retirement_transactionsreadA fund’s transactions with what each one is (employer, salary_sacrifice, personal_concessional, personal_non_concessional, contributions_tax, fees, insurance, earnings, rollover_in…), newest first. Balance updates show as adjustments.
2 inputs
fundIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
create_retirement_memberwriteAdds a person whose super is tracked: name, dateOfBirth, retirementAge, ruleset ("au" for Australian super, "none" for a plain retirement fund), salaryAnnual (before salary sacrifice), salarySacrificeAnnual, employerRate (only if above the legal minimum), payScheduleId (their pay in Bills & income).
14 inputs
personId | uuid |
name | string |
userId | string |
dateOfBirth | string |
retirementAge | whole number |
ruleset | one of: au, none |
salaryAnnual | string |
salarySacrificeAnnual | string |
employerRate | string |
payScheduleId | uuid |
priorConcessional | object |
tsbOverride | object |
notes | string |
poolId | uuidWhich pool; optional if you only have one |
update_retirement_memberwriteChanges a member’s details. priorConcessional {"2024-25":"27500"} enters concessional totals for years before the history starts, so carry-forward counts them; tsbOverride does the same for total balances on 30 June.
14 inputs
name | string |
userId | string |
dateOfBirth | string |
retirementAge | whole number |
ruleset | one of: au, none |
salaryAnnual | string |
salarySacrificeAnnual | string |
employerRate | string |
payScheduleId | uuid |
priorConcessional | object |
tsbOverride | object |
notes | string |
memberIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
create_retirement_fundwriteTracks an account as a super fund for a member (memberId, or member to add one at the same time). Optional starting balance {date, amount}, fees (adminFeeAnnual, feePercent, insuranceAnnual) and assumedReturn for projections; with no fees set, projections use what the fund has been charging. The account becomes a retirement account.
12 inputs
fundName | string |
primary | boolean |
adminFeeAnnual | string |
feePercent | string |
insuranceAnnual | string |
assumedReturn | string |
notes | string |
accountIdrequired | uuid |
memberId | uuid |
member | object |
balance | object |
poolId | uuidWhich pool; optional if you only have one |
update_retirement_fundwriteChanges a fund’s fees, assumed return, name, member or whether it’s the primary fund.
10 inputs
fundName | string |
primary | boolean |
adminFeeAnnual | string |
feePercent | string |
insuranceAnnual | string |
assumedReturn | string |
notes | string |
memberId | uuid |
fundIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
record_retirement_balancewriteRecords a fund balance on a date (from a statement or the fund’s website). The first sets the starting balance; later ones book whatever the transactions don’t explain as returns.
4 inputs
daterequired | string |
balancerequired | string |
fundIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
tag_retirement_transactionwriteSays what a fund transaction is. Use personal_concessional for a personal contribution once a notice of intent to claim a deduction has gone to the fund.
4 inputs
rolerequired | one of: employer, salary_sacrifice, personal_concessional, personal_non_concessional, spouse, government, contributions_tax, fees, insurance, earnings, rollover_in, rollover_out, withdrawal, other |
fundIdrequired | uuid |
transactionIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
Assets#
list_assetsreadThings owned that count in net worth but aren’t money in a bank: homes, cars, other valuables. Each has today’s value (currentValue; estimated is true when it’s projected from the yearly rate after the latest valuation), its value a year ago, linked loans with what’s owed, equity and LVR.
1 input
poolId | uuidWhich pool; optional if you only have one |
get_assetreadOne asset with its valuations and month-end history of value and debt since it was bought (up to ten years).
2 inputs
assetIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
asset_forecastreadMonth by month from now: the asset’s value (at its yearly rate, or growth to try another) against what its linked loans will owe on their current projections, with equity and LVR. crossings gives the month it first drops to 80% and 60% LVR, and to its targetLvr if set.
4 inputs
growth | string |
years | whole number |
assetIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
asset_costsreadWhat an asset costs to own, month by month over the last `months` full months and estimated for the next 12: interest and fees on its linked loans, costs and income from the categories picked for it, and how its value moved. net = interest + fees + costs − income − valueChange; below zero it earned more than it cost. For a rental (income categories or an investment loan), yield gives gross, net and cash-on-cash percentages.
3 inputs
months | whole number |
assetIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
set_asset_categorieswriteReplace which categories count toward an asset: role cost for rates, insurance, strata, upkeep; role income for rent. A parent category includes its subcategories. accountId limits a pick to one account, to keep a rental’s costs apart from the home’s when they share a category. Returns the asset_costs result.
3 inputs
categoriesrequired | list of object |
assetIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
create_assetwriteAdd a home, car or other valuable. kind is property, vehicle or other. Give purchasedOn and purchasePrice, or value { date, amount } for what it’s worth now, or both. rate is the yearly change used after the latest valuation, as a signed percent ("4" for a home growing 4%, "-15" for a car losing 15%); ask the person rather than assuming. loanIds links mortgages or car loans for equity. Net worth includes it from the purchase date.
16 inputs
namerequired | string |
kind | one of: property, vehicle, other |
description | string |
rate | string |
floor | string |
purchasedOn | string |
purchasePrice | string |
notes | string |
targetLvr | string |
cashInvested | string |
businessId | uuid |
accountId | uuid |
currency | string |
value | object |
loanIds | list of uuid |
poolId | uuidWhich pool; optional if you only have one |
update_assetwriteChange an asset’s details or rate, or set targetLvr (percent) to see when it gets there in asset_forecast. To record a sale, pass soldOn and salePrice: it drops out of net worth from that day.
15 inputs
name | string |
kind | one of: property, vehicle, other |
description | string |
rate | string |
floor | string |
purchasedOn | string |
purchasePrice | string |
notes | string |
targetLvr | string |
cashInvested | string |
businessId | uuid |
soldOn | string |
salePrice | string |
assetIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
record_asset_valuationwriteWhat an asset was worth on a date (an appraisal, a bank or website estimate). Values between valuations move smoothly from one to the next; a valuation on the same date replaces the old one.
5 inputs
daterequired | string |
amountrequired | string |
note | string |
assetIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
link_asset_loanswriteSet the loans secured against an asset (replaces the list), for equity and LVR. Net worth already counts the loans, so this doesn’t change it.
3 inputs
loanIdsrequired | list of uuid |
assetIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
Shares and crypto#
list_portfoliosreadShare and crypto portfolios (kind) with their market value, cost base, gain and today’s move. Prices are delayed about 15 minutes; pricesAsOf says when. Units and prices are decimal strings in the instrument’s currency; money totals are in the account’s currency.
1 input
poolId | uuidWhich pool; optional if you only have one |
get_portfolioreadOne portfolio: each holding (units, price, value, cost, gain, weight), month-end value against cost, every trade (and which bank transaction paid for it), and gains locked in by sales (realised).
2 inputs
portfolioIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
search_instrumentsreadSearches the pool’s price feed by name or code, e.g. "vanguard australian" or "VAS". kind "crypto" searches the crypto feed ("bitcoin", "SUI").
3 inputs
qrequired | string |
kind | one of: shares, crypto |
poolId | uuidWhich pool; optional if you only have one |
add_tradewriteRecords a buy, sell or split in a portfolio, or units received or sent without a trade (side receive/give: an airdrop, staking reward, or a deposit or withdrawal). symbol is the code without a suffix ("VAS", "BTC"); exchange defaults to ASX (also NASDAQ, NYSE, LSE, NZX, TSX, CRYPTO for coins, CASH for money held at an exchange, symbol = its currency). units, price and fees are decimal strings in the instrument’s currency, up to 8 decimal places; for a split, units is new per old ("2" for 2-for-1); for receive, price is the cost per unit (0 for an airdrop). externalRef is the broker’s confirmation number, so the trade is never added twice.
14 inputs
symbolrequired | string |
exchange | string |
name | string |
currency | string |
kind | one of: share, etf, fund, crypto, cash, other |
daterequired | string |
side | one of: buy, sell, split, receive, give |
unitsrequired | string |
price | string |
fees | string |
externalRef | string |
note | string |
portfolioIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
record_holdingswriteWhat a broker says is held on a date: [{ symbol, exchange, units, costPrice? }]. Trades are reconciled to it (units they don’t explain become "held before" or adjustment lines). With complete true (the default), anything not listed counts as sold by that date.
5 inputs
daterequired | string |
holdingsrequired | list of object |
complete | boolean |
portfolioIdrequired | uuid |
poolId | uuidWhich pool; optional if you only have one |
portfolio_tax_reportreadA financial year of one portfolio, or every portfolio in the pool’s currency without portfolioId: holdings at each end, the year’s trades, and each sale matched to the parcels it used up (first in, first out) with cost base, proceeds, gain and days held. fy is the calendar year the financial year ends in (2025 is July 2024 to June 2025 in Australia). Totals take losses off short-term gains first, then the 50% discount off long-term gains for Australian pools. Losses carried in from earlier years aren’t known. Money is minor units.
3 inputs
fyrequired | whole number |
portfolioId | uuid |
poolId | uuidWhich pool; optional if you only have one |