My balances
get_my_balancesThe user's CURRENT holdings in their Solana agent wallet, with balances and USD values. USDC is your cash (flagged is_cash: true). SOL and every other token are positions; sell with quick_sell to raise USDC. What each part contains:
tokens— EVERYTHING held in the wallet, and the authoritative answer to 'what do I own'. It INCLUDES the native coin (SOL, flaggedis_native: true) and the USD funding asset (USDC, flaggedis_quote: true) whenever their balance is above zero; every other row has both flags false. An emptytokensmeans the wallet really is empty.native_token/usd_token— the same native-coin and funding-asset balances again, as fixed slots that are present even at zero. Use them for the affordability check; never add them to thetokenstotal, they are already in it.Native SOL is read from the CHAIN at call time:
balance_source: "chain". If that read failed it is Moby's stored snapshot instead (balance_source: "ledger") — say the SOL figure may be stale.ledger_disagrees: trueonly means the stored snapshot was wrong; the quantity shown is the chain's.swap_user_tokens— the swap LEDGER: cost basis and PnL per position. Its quantities are NOT the amounts held; where it disagrees withtokens,tokensis right. HOW MUCH THE USER HOLDS comes from the CHAIN and is reported byget_my_balances,get_my_token_balanceandget_my_position(balance_source: "chain"). WHAT IT COST — cost basis, average entry, realised PnL, trade history — comes from Moby's swap ledger, which only sees swaps Moby executed. Never quote a ledger quantity as the amount held: on live accounts it runs several times high AND several times low against the chain, and a sell sized from it fails on-chain. IMPORTANT:get_my_closed_positionsreturns ONLY positions the user has already exited. Positions the user still holds come fromget_my_balances. Never tell a user they hold nothing based onget_my_closed_positionsbeing empty.asset_class: tokenized_stockmarks tokenized equities (treat as stock proxies, not memecoins). ⚠ ONE WALLET. For the agent's equity as a single total, callget_my_portfolioinstead; this tool is the right one for the per-token detail and for the affordability check before a trade.
Balances other than native SOL come from a cached snapshot that lags a deposit made outside Moby. If the user says they just funded the wallet and the balance does not show it, call this ONCE more with refresh=true before telling them anything is wrong — their money is on chain either way. Do not pass refresh routinely: it is much slower.
USDC split (ENG-1803): available_usdc is the USDC spendable NOW — size buys from it. reserved_usdc is USDC already committed to the user's resting DCAs and limit / trigger buy orders; it comes back only by cancelling them (cancel_order). reserved_breakdown lists each one (kind dca|order, schedule_id / order_id, token, reserved_usd, remaining_slices, next_order_at); in_wallet: true means that USDC still sits in the wallet balance until the order pulls it, so do not spend it twice. This is NOT the daily-volume daily_volume_reserved_usd in get_my_guardrails — that is spend-cap accounting over a rolling 24h. All three are null when Moby could not read the orders: then check get_my_orders before spending. app_links.deposit is where the user adds funds; app_links.settings is their limits. app_links are Moby app deep links to hand to the user; they open the Moby app on their phone. interview_due: true (the first read each hour also carries onboarding_hint) means the user was never onboarded: go back to onboarding FIRST — get_my_trading_profile, the capabilities brief, the 6-question interview or skip — before you act on these numbers. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | solana | |
| refresh | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||