> ## Documentation Index
> Fetch the complete documentation index at: https://docs.capital.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Funding Overview

There are three ways to put money in:

| Method | Start it from | Best for |
| - | - | - |
| **ACH pull** from your linked bank | App or API | Regular deposits from your own US bank. |
| **Wire or ACH push** from another bank | That bank | Larger amounts, or banks you haven't linked. |
| **Stablecoin** (USDC) | Your wallet | Funds already on chain. |

## ACH pull from a linked bank

### 1. Link your bank (app)

In the app, click **Deposit → Domestic Bank → Connect** and sign in to your bank. You only do this once per bank. [Step by step](https://docs.capital.ai/app/deposit.md#first-time-only-connect-your-bank).

Then read it with the API. You'll need its `id`:

```bash REST theme={null}
curl "$CAPITALAI_API_URL/api/v1/linked-accounts" \
  -H "Authorization: Bearer $CAPITALAI_API_KEY"
```

```ts TypeScript theme={null}
const res = await fetch(`${process.env.CAPITALAI_API_URL}/api/v1/linked-accounts`, {
  headers: { Authorization: `Bearer ${process.env.CAPITALAI_API_KEY}` },
});
console.log(await res.json());
```

```json theme={null}
[{ "id": "lba_123", "name": "Checking", "mask": "6789", "institutionName": "Chase" }]
```

### 2. Deposit

```bash REST theme={null}
curl -X POST "$CAPITALAI_API_URL/api/v1/deposits" \
  -H "Authorization: Bearer $CAPITALAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"linkedAccountId": "lba_123", "amountUsd": 250, "idempotencyKey": "rent-2026-10"}'
```

```ts TypeScript theme={null}
const res = await fetch(`${process.env.CAPITALAI_API_URL}/api/v1/deposits`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.CAPITALAI_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"linkedAccountId": "lba_123", "amountUsd": 250, "idempotencyKey": "rent-2026-10"}),
});
console.log(await res.json());
```

```json theme={null}
{ "transactionId": "txn_456", "status": "in_progress" }
```

Use a new `idempotencyKey` for each deposit. If your request times out, send it again with the same key: you'll get the same deposit back, not a second one.

### 3. Follow it

```bash REST theme={null}
curl "$CAPITALAI_API_URL/api/v1/transactions?limit=20" \
  -H "Authorization: Bearer $CAPITALAI_API_KEY"
```

```ts TypeScript theme={null}
const res = await fetch(`${process.env.CAPITALAI_API_URL}/api/v1/transactions?limit=20`, {
  headers: { Authorization: `Bearer ${process.env.CAPITALAI_API_KEY}` },
});
console.log(await res.json());
```

The deposit shows up as a `deposit` with `rail` `bank` and `method` `ach`. Its `status` moves:

| `status` | Meaning |
| - | - |
| `in_progress` | The ACH is on its way. This usually takes a few business days. |
| `completed` | The money is in your balance. |
| `failed` | The bank returned it, for example for insufficient funds. Nothing was taken. |
| `canceled` | Stopped before it moved. |

## Wire or ACH push

Get your account and routing numbers, then send from your other bank as you would to any US account:

```bash REST theme={null}
curl "$CAPITALAI_API_URL/api/v1/deposit-instructions?method=wire" \
  -H "Authorization: Bearer $CAPITALAI_API_KEY"
```

```ts TypeScript theme={null}
const res = await fetch(`${process.env.CAPITALAI_API_URL}/api/v1/deposit-instructions?method=wire`, {
  headers: { Authorization: `Bearer ${process.env.CAPITALAI_API_KEY}` },
});
console.log(await res.json());
```

## Stablecoin

Get your deposit address for a network and asset:

```bash REST theme={null}
curl "$CAPITALAI_API_URL/api/v1/deposit-instructions?method=blockchain&network=Solana&asset=USDC" \
  -H "Authorization: Bearer $CAPITALAI_API_KEY"
```

```ts TypeScript theme={null}
const res = await fetch(`${process.env.CAPITALAI_API_URL}/api/v1/deposit-instructions?method=blockchain&network=Solana&asset=USDC`, {
  headers: { Authorization: `Bearer ${process.env.CAPITALAI_API_KEY}` },
});
console.log(await res.json());
```

Read the `warning` in the response before you send. Funds sent on the wrong network or in the wrong asset may be lost.

## Check your balance

```bash REST theme={null}
curl "$CAPITALAI_API_URL/api/v1/accounts" \
  -H "Authorization: Bearer $CAPITALAI_API_KEY"
```

```ts TypeScript theme={null}
const res = await fetch(`${process.env.CAPITALAI_API_URL}/api/v1/accounts`, {
  headers: { Authorization: `Bearer ${process.env.CAPITALAI_API_KEY}` },
});
console.log(await res.json());
```

See [Balances and deposit details](https://docs.capital.ai/funding/balances.md) for every field.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.