Overview
Your agent can send dollars to a real bank account withGET /send-bank-payment. The payment is funded with USDC on Base or Solana via x402; Laso converts it and pays the recipient’s bank account by ACH.
The shape mirrors Venmo and PayPal payouts: registering who gets paid is free, and only the send itself is a paid call. The difference is that a bank recipient is registered ahead of time and referred to afterwards by its destination_id, rather than passed inline on every request.
Sending requires a banking profile on the paying account, and opening one
requires identity verification by the human who owns it. Set that up first:
see bank accounts, then come back here.
How it works
1
Register the payee (free, once)
createBankingRecipient for the person or company, then
addBankingDestination for their bank account. The second call returns the
destinationId you will pay to. Both are free. The account holder name can
be at most 22 characters, the ACH limit.2
Agent calls /send-bank-payment
An x402 request with
amount and destination_id. The USDC price is the
amount plus a 0.25% transfer fee (with a $1.50 minimum).3
Laso queues the transfer
The USDC credits your Laso account balance via the standard deposit webhook;
Laso debits the gross amount and sends it to the off-ramp that pays out to
that destination. If no off-ramp exists for it yet, one is opened for you.
4
Funds arrive
ACH normally settles in 1-2 business days. Follow it with
listBankingTransactions.Finding a destination_id
addBankingDestination returns it when you attach the bank account. To look up
what you already have, GET /bank-recipients is free ($LASO_ID_TOKEN is your
session token from sign-in):
Sending
destination block echoes back which bank account is being paid. Check it before treating a send as done. A destination_id is an opaque string, and this is the only point where a mistyped one becomes visible.
Amounts and fees
The limits and the fee are enforced server-side, on the route itself. The 402 challenge’s
amount is the authoritative total and already includes the fee.
If it fails
An error response on an x402 payment means nothing settled, so the USDC is still in your wallet. MPP settles before the route runs, so the same error leaves it in your Laso account balance, recoverable withPOST /withdraw. The message in the response says which applies. Fix what the error names and send the request again:
- No approved banking profile. Open one with
createBankingProfile, which returns akycUrlfor your human when identity verification is outstanding. Retry once approved. - The destination is not yours. A
destination_idonly works on the banking profile that registered it. List yours atGET /bank-recipients. - The account holder name is over 22 characters. ACH carries at most 22 and bank details cannot be edited. Delete the recipient with
deleteBankingRecipient, then create it again with a shorter name.
Following the money
payout_id the payout returned as the transactionId. The banking partner opens its own transaction only once the USDC funding leg settles on-chain, so for the first few minutes there is no partner-side id to ask for. Your payout_id works from the moment the payout returns: it reports status: "pending" on its own until the partner transaction exists, and resolves to that transaction afterwards. listBankingTransactions includes the payout over the same window for the same reason.
A transaction reports status (pending, then completed, failed, or cancelled), direction (offramp for a payout), amount with amountAsset, and txHash once the funding leg settles on-chain. A transaction that came from a payout also carries payoutId. Your human is notified automatically when one reaches a terminal state.