How do I send dollars to a bank account from an AI agent?
Last reviewed: August 2026
Register the person or company once with createBankingRecipient and addBankingDestination, which returns a destination_id. Then call GET /send-bank-payment with an amount and that destination_id, and pay for the call in USDC over x402. The recipient gets dollars by ACH, normally in 1 to 2 business days.
Why this is usually hard
Most outbound payment APIs assume a business with a funded account at the provider. Your agent would need that account, API credentials, and a USD balance before it could send anything. If the agent holds USDC, you also need an off-ramp step to turn it into dollars. Laso collapses the funding and the conversion into the one paid call, so the agent only needs USDC and a registered recipient.
Step 1: open the banking profile (once)
Sending requires a banking profile on the paying account. Opening one needs identity verification by the human who owns the account, and an agent cannot complete it for them. createBankingProfile returns a kycUrl when verification is outstanding: hand that link to your human and retry once they finish. Check progress with getBankingProfileStatus. After that, everything below is agent-drivable.
Step 2: register who gets paid (free)
The banking calls are Firebase callables: the body is wrapped in {"data": ...} and the Bearer token is the id_token from /auth. The recipient needs the payee’s postal address before a U.S. bank account can be attached. Use only the details your human gave you.
# 1. The person or company being paid
curl "$CALLABLE_BASE_URL/createBankingRecipient" \
-H "Authorization: Bearer $LASO_ID_TOKEN" -H "Content-Type: application/json" \
-d '{"data":{"userId":"usr_...","name":"Jane Doe","address":{"street1":"1 Main St","city":"Austin","region":"TX","postal_code":"78701","country":"US"}}}'
# 2. Their bank account. The reply carries the destinationId.
curl "$CALLABLE_BASE_URL/addBankingDestination" \
-H "Authorization: Bearer $LASO_ID_TOKEN" -H "Content-Type: application/json" \
-d '{"data":{"userId":"usr_...","recipientId":"<recipient id from step 1>","nickname":"Rent account","destination":{"destination_type":"fiat_us","name":"Jane checking","aba_routing_number":"021000021","account_number":"123456789","account_type":"checking","account_holder_name":"Jane Doe","bank_name":"Chase"}}}'
To look up a destination_id you already registered, call GET /bank-recipients with your Bearer token. It is free, and account numbers come back masked to their last four digits.
Step 3: send the payment
The amount is the dollars the recipient receives, from 10 to 50,000. The USDC price is that amount plus a 0.25% fee with a $1.50 minimum. An x402 client library builds the payment header for you; without one, the first call returns a 402 with the exact price.
curl "https://laso.finance/send-bank-payment?amount=250&destination_id=dest_123" \
-H "X-Payment: <x402-payment-header>"
# {
# "success": true,
# "message": "Bank payment is being processed. It settles by ACH, ...",
# "bank_payment": {
# "payout_id": "abc123",
# "amount": 250,
# "fee_amount": 1.5,
# "charged_amount": 251.5,
# "destination_id": "dest_123",
# "state": "in-process",
# "destination": { "name": "Jane checking", "bank_name": "Chase", "account_number_last4": "6789" }
# }
# }
Check the destination block in the reply before you treat the send as done. A destination_id is an opaque string, and this is where a wrong one becomes visible.
Step 4: follow the money
Call getBankingTransaction with the payout_id as the transactionId, or listBankingTransactions for the whole account. A transaction reports a status of pending, then completed, failed, or cancelled. To stop polling, register a webhook with POST /register-webhook.
What it costs and how long it takes
| Item | Value |
|---|---|
| Amount | $10 to $50,000 |
| Fee | 0.25%, minimum $1.50, added on top of the amount |
| Paid in | USDC on Base or Solana over x402 |
| Settlement | ACH, normally 1 to 2 business days |
| Destinations | U.S. bank accounts by routing and account number |
If it fails
Nothing is stranded. The USDC you paid has already credited your Laso account balance, so a payout that cannot be fulfilled leaves the funds recoverable. Fix the cause (no approved banking profile, a destination that belongs to another account, an amount out of range) and retry, or send the credited USDC back to your wallet with POST /withdraw.
Pick the right route
ACH is the cheapest route here but the slowest, and it needs a one-time identity check by the account owner. If the recipient is on Venmo or PayPal, GET /send-payment is faster to set up but costs 4.9%. If they would rather enter their own debit card, use GET /get-push-to-card. Wire transfers are not part of this endpoint. A payments provider with a direct payout API gives you per-transfer control if you pay many recipients every day. For one-off and low-volume payments from an agent, registering a recipient and making one call is less to build.
Full reference: send a bank payment, bank accounts, and the API reference. Related guides: send money to a debit card and give an agent a bank account.
Frequently asked questions
Can an AI agent pay a bank account on its own?
Yes, after the account owner completes identity verification once to open the banking profile. From then on the agent registers recipients and sends payments with API calls alone.
How do I pay a contractor or landlord by ACH from code?
Register them with createBankingRecipient and addBankingDestination, then call GET /send-bank-payment with the amount and the returned destination_id. The payment is funded in USDC and delivered as dollars by ACH.
How long does an ACH payment from an agent take?
ACH normally settles in 1 to 2 business days. The payout shows as pending until then, and you can read it with getBankingTransaction.
What is the maximum I can send to a bank account?
The amount must be between $10 and $50,000 per call. The fee is 0.25% with a $1.50 minimum, included in the single USDC price.
What happens if a bank payment fails?
The USDC you paid has already credited your Laso account balance. Fix the problem and retry, or return the funds to your wallet with POST /withdraw.
More guides
- How to give your AI agent a credit card — An AI agent cannot pass credit underwriting, but it can issue itself a virtual prepaid card over an API in about a minute. The working pattern, with real requests: x402 payment in, card number out.
- x402 vs AP2 vs ACP vs MPP vs UCP: which should your agent use? — All five agent payment protocols compared honestly: x402 and MPP for machine-to-machine HTTP payments, ACP for ChatGPT checkout, UCP for Google surfaces, AP2 for authorization. Which layer each one is, when to use each, and a worked x402 example.
- x402 vs Stripe Issuing for AI agents — Two real ways to put a card in an AI agent’s hands: Stripe Issuing behind a business account, or x402 card issuance the agent drives itself. An honest comparison of onboarding, funding, controls, and when each wins.
- Issue a virtual card with one x402 call — A complete, runnable walkthrough: pay one x402 request in USDC and receive a virtual prepaid card with number, expiry, and CVV. Real endpoints, real response shapes, error handling included.
- How can an AI agent pay for an API call with USDC? — An AI agent pays for an API call with USDC by answering the API’s HTTP 402 challenge with a signed payment. Two ways to do it: your own wallet with an x402 client, or a managed wallet with a price cap and no private key.
- How do I give an AI agent a bank account? — Two real ways to give an AI agent bank details: a business checking account it can operate (Meow) or a U.S. bank account that converts incoming dollars to USDC in the agent’s wallet (Laso). What each one is, who approves what, and when to pick which.
- How do I cap how much my AI agent can spend? — Cap an AI agent’s spending with limits it cannot raise: a funded balance, a per-payment spend limit set by the account owner, a per-call price cap, and prepaid cards loaded with exactly the amount to spend.
- How do I send money to someone’s debit card from code? — Send USD, EUR, or GBP to a debit card with one API call paid in USDC. No payment processor account: you get a redemption link, the cardholder enters their own card details, and the funds are pushed to the card.
- What are the best ways to pay someone on Venmo or PayPal from an AI agent? — Four ways an AI agent can pay a person on Venmo or PayPal: the PayPal Payouts API, a USDC-paid payout through Laso, a bank or card payout instead, or a human approving each payment. Tradeoffs for each.
- How do I let my AI agent buy a gift card through an API? — An AI agent buys a gift card with two calls: search the catalog for a laso_server_id, then order it with a USDC payment. The redemption code comes back in the same response. Includes a runnable example and the currency gotcha.
- How do I let my AI agent buy something online? — Two working ways for an AI agent to buy something online: spend the account holder’s saved card with their approval on each order, or pay for a prepaid card in USDC and check out like any cardholder. How Laso and Crossmint each handle it, with runnable calls.
- All agent guides, or how Laso compares to the alternatives
Try it: connect a wallet at laso.finance and you'll have a card, gift card, or payout in minutes.
Building an agent? Point it at laso.finance/SKILL.md — it can set itself up.