The Lunch Money API uses four properties — amount, balance, currency, and to_base — consistently across all objects that deal with money. Understanding how they work will help you build accurate, multi-currency-aware integrations.
amountamount is a string representation of a monetary value, precise to up to four decimal places. It appears on transactions, child transactions, recurring items, budget objects, and rollover pool adjustments.
"amount": "12.5000"
amount is always expressed in the currency specified by the companion currency property on the same object. Amounts are never rounded or converted.
balancebalance is a string representation of an account's running balance, also precise to up to four decimal places. It appears on manual accounts, Plaid accounts, crypto accounts, and balance history entries.
"balance": "1500.0000"
Like amount, balance is always in the currency of the same object and follows the same sign convention.
currencycurrency is an ISO 4217 currency code (e.g., "usd", "eur", "gbp"). It is present on every object that carries an amount or balance and tells you what currency those values are in. See the Supported Currencies guide for the full list.
to_baseto_base is a floating-point number that represents the amount or balance converted to the user's primary currency. It is present on transactions, account objects, balance history entries, budget objects, and summary responses.
"amount": "12.5000",
"currency": "eur",
"to_base": 13.62
to_base is calculated by the API at response time and is read-only — it is never accepted on POST or PUT requests.
to_base is the recommended property to use when you need to:
For amount and to_base on transaction objects, the API uses standard accounting convention (the bank ledger perspective):
| Value | Meaning |
|---|---|
| Positive | Money going out — debits, expenses |
| Negative | Money coming in — credits, income |
For example:
"amount": "5.0000""amount": "-1200.0000"For balance on account objects (manual accounts, Plaid accounts, crypto), the sign reflects the account's current standing from the institution's perspective. Positive is the normal direction for both asset and liability accounts:
"balance": "5000.0000" — positive, you hold that amount"balance": "800.0000" — positive, you owe that amountA negative balance indicates the reversed state for that account type:
balancebalancedebits_as_negative on the User object. It has no effect on the API. The API always returns positive values for debits and negative values for credits regardless of this setting. Apps may read debits_as_negative to match the user's preferred display format when showing amounts in their own UI.Budget objects and summary response objects don't use the transaction sign convention. Direction is conveyed by the structure of the response rather than the sign of the value — amounts are always positive magnitudes, and the object type or category flag tells you whether that activity is income or expense.
amount is the positive budgeted value for a category. Whether that represents an income or expense budget is determined by the linked category's is_income flag.other_activity and recurring_activity are always positive. The associated category's is_income flag tells you which direction the activity flows.inflow and outflow objects, each containing positive magnitudes — so direction is explicit in the structure.is_income flag or the parent object (inflow vs outflow) to determine the direction of the activity.