Skip to main content
A managed agent wallet is a Solana wallet Laso custodies for your account. The agent makes ordinary authenticated HTTP calls, and Laso settles the x402 payment on its behalf. It pays endpoints that settle in USDC on Solana or on Base from one balance. It is an alternative to the self-custody wallets in the agent quickstart. Pick one, not both.
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 at https://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.
Nothing enforces this step, so skipping it fails silently: the agent works but the human never sees it connect. Treat it as part of signing in.
3

Read the wallet and fund it

Send USDC on Solana to 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.
wallet_address and base_wallet_address are the only places to send funds, each on its own network. user_id is an account id, not an address. USDC sent to it is lost.

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 moveAgentWalletFunds with from (solana or base) and an amount. 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 with sentUsdc and receivedUsdc. 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.