Create and fund accounts
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, 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. Accounts are free to open and have no minimum balance.
Open an account
Only admins can open accounts. To open one in the console:
- Click Add account.
- Enter a name of up to 40 characters. Account names are unique within an organization, so each name can only be used once.
- 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 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:
catena accounts deposit-address acct_... --network baseBalances
Your agent can check an account's balances with:
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[]: Thetotalandavailablebalances 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 rail, and a transfer moves money between two of your own accounts:
catena send --rail cpr_... --amount 125.00 --method on-chain
catena transfer --from acct_... --to acct_... --amount 125.00Amounts 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.
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 for details.
NoteNetworks 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.