# Create and fund accounts

[API Documentation](https://docs.catena.com/api/list-accounts.md)

An account holds your organization's money as stablecoins, on more than one
chain (USDC on Base and Arc, and OUSD on Base), and every account holds USDC
from the moment you open it. Once your organization is [verified](https://docs.catena.com/fiat-access.md),
an account can also receive USD and pay bank accounts by ACH and wires. Those
bank transfers convert between USD and USDC on Base, which you can read more
about in [On- and off-ramp stablecoins](https://docs.catena.com/on-and-off-ramps.md). Accounts are free to
open and have no minimum balance.

## Open an account

Only admins can open accounts. To open one in the console:

1. Click **Add account**.
2. Enter a name of up to 40 characters. Account names are unique within an
   organization, so each name can only be used once.
3. Click **Create account**.

Each account gets its own deposit address. Your organization's first account is
created when an admin sets up wallet security during onboarding, so you'll
already have one account when you start.

An organization can have up to 10 accounts.

## Networks and rails

Live and sandbox organizations hold different money on different networks. Below
is what each one supports:

|                       | Live organization                              | Sandbox                      |
| --------------------- | ---------------------------------------------- | ---------------------------- |
| Networks              | Base and Arc                                   | Base Sepolia and Arc testnet |
| Stablecoins           | USDC on Base and Arc, and OUSD on Base         | Test USDC on both (no OUSD)  |
| Fiat                  | USD over ACH and wires                         | Not available                |
| x402 and MPP payments | Base where enabled; Arc support is rolling out | Base Sepolia only            |

Bank deposits are turned on per account, and only an admin can turn them on. See
[Receive USD](https://docs.catena.com/on-and-off-ramps.md#receive-usd) for the steps.

## Deposit

To fund an account from the console, click **Deposit**, choose the account, and
choose **Stablecoin deposit** or **Bank transfer (ACH or wire)**. Then follow
the instructions on screen.

An account has one deposit address, and it receives on each of the account's
networks (USDC on Base and Arc, and OUSD on Base). Only send those stablecoins
on those networks, since assets sent on any other network may be lost.

Your agent can read an account's deposit address for a network (`base` or `arc`)
with the CLI:

```sh
catena accounts deposit-address acct_... --network base
```

## Balances

Your agent can check an account's balances with:

```sh
catena accounts balance acct_...
```

The response includes the following balance fields:

- **`.balances.total`:** Everything the account holds (in USD) on every network.
- **`.balances.available`:** The unreserved funds on the networks this agent may
  use. We recommend sizing a payment against this balance.
- **`.balances.byNetwork[]`:** The `total` and `available` balances for each
  network the agent may use.
- **`.balances.holdings[]`:** The same balances for each network and stablecoin
  (e.g., USDC and OUSD on Base). It's present when your organization holds a
  stablecoin besides USDC.

`available` is zero while the account is not active. In addition, the
per-network rows can add up to less than `total` when the account also holds
money on a network the agent may not use.

For example, let's say an account holds $300.00 on Base and $200.00 on Arc, and
the agent may only use Base. `total` is $500.00, but `byNetwork[]` will only
include a row for Base, so the per-network rows add up to $300.00.

## Send or transfer

There are two ways to move money out of an account. A send pays a
[counterparty's](https://docs.catena.com/counterparties.md) rail, and a transfer moves money between two
of your own accounts:

```sh
catena send --rail cpr_... --amount 125.00 --method on-chain
catena transfer --from acct_... --to acct_... --amount 125.00
```

Amounts are in USD, written as plain decimal strings (e.g., `100.50`). The
method must match the rail: `on-chain` needs a wallet rail, and `ach` and `wire`
need a bank rail. If they do not match, the send will fail with
`rail_method_mismatch`. The minimum on-chain send is $0.01. For bank payments,
see [Send wires and ACH](https://docs.catena.com/wires-and-ach.md).

### Automatic bridging

You don't need to keep track of which chain your balance is on. When a payment
goes out on a chain where the account doesn't hold enough, we'll bridge the
money over from your other chains automatically (and convert between USDC and
OUSD if needed), all under the same intent. You can follow the payment with
`catena intents get` and its `.movement` field. See
[Approval and execution](https://docs.catena.com/approvals.md#approval-and-execution) for details.

> [!NOTE] **Networks not yet available**
>
> If a network is not available for payments yet, the send will return
> `wallet_send_action_not_yet_enabled`. In that case, we recommend that your
> agent tell the user and not retry the send.

## Related

- [On- and off-ramp stablecoins](https://docs.catena.com/on-and-off-ramps.md): Receive USD by bank transfer as USDC, and pay bank accounts in USD from your account's USDC.
- [Get USD access](https://docs.catena.com/fiat-access.md): Verify your organization as a business or as an individual so that it can send and receive USD by ACH and wires.
- [Manage counterparties and vendors](https://docs.catena.com/counterparties.md): Add the people and businesses you pay, request their payment details, and find the rail ID your agent sends to.
- [Get a balance](https://docs.catena.com/api/get-balance.md): Get a policy-gated account balance.
