A managed wallet can pay any x402 endpoint, not just Laso’s. See Pay an
endpoint.
When to use one
Good fit
Your agent runs somewhere you would rather not put a private key. You want
spending visible in a dashboard and one funding source for Laso and
third-party x402 services.
Poor fit
You need self-custody or a spending-policy engine richer than a per-payment
cap. Use Locus, Sponge, or Ampersend instead.
The calls
All six are Firebase callables athttps://laso.finance/<name>, authorized with Authorization: Bearer <id_token>. Arguments go in a data object; responses come back in a result object.
Setup
1
Sign in
Call
GET /auth as in the authentication guide
and save the id_token, refresh_token, and user_id. The examples
reference the token as $LASO_ID_TOKEN.2
Announce the connection
Call this right after sign-in, before anything else.It flips the dashboard’s “waiting for your agent” screen to “connected” and
returns the wallet’s funding state.
3
Read the wallet and fund it
wallet_address, or USDC on Base to
base_wallet_address. Both land in the same balance. Full steps are in
How do I fund my AI agent with USDC?. If needs_funding is true,
ask your human for a deposit. If has_wallet is false, setup finishes at
laso.finance/agent/dashboard.The wallet balance is not the account balance
getAgentWallet reports USDC held on-chain by the agent wallet. GET /get-account-balance reports a different number: the Laso account balance, a ledger held by Laso. Both are correct, and they rarely match.
Paying a route moves USDC from the wallet to Laso. That arrival is recorded on the account balance as a deposit, and the purchase then debits it. After a purchase the account balance usually reads balance: 0, and total_deposits has grown by the purchase amount. Nothing is missing.
POST /withdraw never draws on the agent wallet. If it reports an insufficient account balance while the wallet holds funds, the error names both figures and points to agentWalletTransfer. The full set of withdrawal calls is in How do I get USDC back out of my AI agent’s account?.
One balance on Solana and Base
The wallet is two on-chain wallets underneath, one on Solana and one on Base, and either can be funded.balance_usdc is what they hold together, and every payment and transfer draws on that whole amount:
- Paying an endpoint that settles on Base moves the USDC it needs from Solana to Base just before signing, usually within 10 seconds. Laso tops Base up by at least $1 at a time, so a run of small Base payments moves funds about once per dollar.
- A transfer, or a payment to a Laso route, that needs more than the Solana side holds pulls the difference back from Base first, usually within 15 seconds.
- Each move costs 0.075% of the amount moved. Laso pays the gas on both chains.
- To move funds yourself, call
moveAgentWalletFundswithfrom(solanaorbase) and anamount. It is optional, and useful for funding Base ahead of a run of Base payments so none of them waits on a move. The fee comes out of the amount, and the call returns once the USDC has arrived withsentUsdcandreceivedUsdc. The human can do the same from “By network” on the dashboard.
getAgentWallet reports the split as solana_balance_usdc and base_balance_usdc, and the Base address as base_wallet_address. base_balance_usdc is null when its live chain read fails. Laso’s own routes are paid from the Solana side, topped up from Base when needed.
Next steps
Pay an endpoint
Use
agentX402Pay for Laso routes and external x402 services.Guardrails
Pin the price, asset, network, and receiver before paying a third party.
Spend limit and activity
The human’s per-payment cap, and where every payment is recorded.
Bank accounts
Fund this wallet by bank transfer instead of on-chain.
Example: a self-funding agent
An agent paid into its own wallet, holding the capital it spends.