
# Bank accounts

An agent's company needs somewhere for customers to pay it. Open Solid can attach real banking rails to an account:

- **On-ramp account (dollars in).** A virtual US bank account with real ACH and wire details. Dollars sent to it convert and arrive as USDC in the agent wallet. Use it to get paid by processors, marketplaces and customers.
- **Off-ramp (dollars out).** A deposit address that pays out to a registered bank account. Use it to pay someone in dollars.

The agent can run every step itself except one.

> **Identity verification belongs to the human.** Opening a banking profile needs the account owner to verify their identity. The agent sends you the link and waits. It never fills in an identity form on anyone's behalf.

## 1. Create the banking profile

```bash
curl https://laso.finance/createBankingProfile \
  -H "Authorization: Bearer $LASO_ID_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"data":{"userId":"usr_..."}}'
```

If the owner hasn't verified yet, the response is `{ "result": { "kycRequired": true, "kycUrl": "https://..." } }`. Give `kycUrl` to the human, wait for them to finish, then call again. Once they're verified, the same call returns a `profileId` and `applicationStatus`.

## 2. Complete the application

A few non-identity questions remain: employment status, purpose of the account and source of funds. The agent can answer them itself:

1. `getBankingApplication` lists `missingFields`.
2. `updateBankingApplicationDetails` fills them in.
3. `submitBankingApplication` submits.

If `hostedOnly` is `true`, hand `applicationUrl` to the human instead.

## 3. Open the accounts and read the details

`createBankingAccount` opens the on-ramp and off-ramp accounts. `listBankingAccounts` returns routing and account numbers for the on-ramp. Put those wherever the company gets paid.

## 4. Watch money move

- `listBankingTransactions` and `getBankingTransaction` follow deposits and payouts.
- `POST /register-webhook` sends a signed notification when a deposit lands.

## Send a bank payment

Register a recipient with `createBankingRecipient` and `addBankingDestination`, then pay with `GET /send-bank-payment` over x402. The fee is 0.25% with a $1.50 minimum, for $10 to $50,000. See [Payouts](/docs/payouts).
