[3.0.0] - 2026-08-03
Breaking change, scoped to the crypto tools. Crypto was the last domain still calling LunchMoney's v1 API; this release moves it to v2, so the server no longer talks to dev.lunchmoney.app/v1 at all. get_all_crypto — present in every release since 1.0.0 — is removed, because v2 has no combined crypto endpoint to back it. Every other domain is untouched. Tool count grows from 50 to 59.
Breaking
get_all_cryptois removed. v2 splits crypto into separate manual and synced resources with different shapes, and offers nothing equivalent to v1's combinedGET /crypto. Useget_all_manual_cryptoandget_all_synced_cryptoinstead — together they cover everything the old tool returned, with more detail. The bundlednet_worth_snapshotprompt now calls both.update_manual_cryptochanged shape. It targetsPUT /crypto/manual/{id}on v2. All writable fields are now optional, but at least one ofname,display_name,institution_name, orbalancemust be supplied. Thecurrencyparameter is gone: a manual balance's symbol is fixed when the asset is created, and v2 ignores attempts to change it.
Added
- Ten new crypto tools covering v2's crypto-manual and crypto-synced endpoints:
get_supported_cryptocurrencies,add_supported_cryptocurrency,get_all_manual_crypto,get_single_manual_crypto,create_manual_crypto,delete_manual_crypto,get_all_synced_crypto,get_single_synced_crypto,get_synced_crypto_balance,refresh_synced_crypto.- Manual crypto balances now support full CRUD, where v1 only allowed updates — assets can be created and deleted through the API for the first time.
- Synced crypto accounts (Kraken, Coinbase, Ethereum) are readable as first-class accounts with their nested per-symbol balances, individually addressable by symbol. Connections themselves are still created only in the LunchMoney web app.
add_supported_cryptocurrencyextends the manual-crypto currency list from a CoinGecko coin-page URL, so tracking a coin LunchMoney doesn't know yet no longer requires the web app.refresh_synced_cryptotriggers a provider-side balance refresh and returns the refreshed account.
Changed
- Crypto balances are now forwarded to the API exactly as supplied, instead of being coerced to a JS number and re-stringified. v2 carries balances to 18 decimal places, which exceeds a double's precision, so a string like
0.852341920145782301no longer silently rounds on write. Numbers are still accepted — v2 takes either — and are passed through unconverted, since stringifying them would turn a satoshi (1e-8) into exponential notation that the decimal format rejects. - Removed the
apiV1export and thebaseUrlOverrideparameter it relied on. Nothing else used them. CryptoAssetreplaced byCryptocurrency,ManualCrypto,SyncedCryptoBalance, andSyncedCryptoAccount, matching the v2 response shapes.- Error hint fields extended so the model can recover from the new crypto failure modes without a round-trip (
crypto_manual_id,has_balance_history,required_parameter,allowed_values,coingecko_url,existing_coingecko_id,existing_symbol). TheDELETE /crypto/manual/{id}422 that demands an explicitkeep_historyis the main beneficiary.