# Fund a wallet

> Step-by-step guide to adding funds to a Moov wallet with a transfer from a bank account, card, or another wallet using the API, SDKs, or Moov.js.

> AI agents: search and read all Moov docs with the docs MCP server at https://docs.moov.io/mcp (no API key). Setup: https://docs.moov.io/guides/developer-tools/mcp-ai/docs-mcp/index.md

Fund a Moov wallet by creating a transfer with the wallet as the destination. Pre-funding a wallet lets you send payouts and spend on issued cards without waiting on a bank debit.

**Before you start**

- The account has the `wallet.balance` [capability](/guides/accounts/capabilities/reference/index.md)
- To fund from a bank account: a [verified bank account](/guides/sources/bank-accounts/verification/index.md), which gives you the `ach-debit-fund` payment method
- To fund from a card: the destination account has `collect-funds.card-payments` and a [linked card](/guides/accept-payments/cards/online/index.md)

## When funds are available

| Source         | Source payment method | Funds available in the wallet                                                                                                                       |
|----------------|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| Bank account   | `ach-debit-fund`      | 2-3 banking days with standard processing; same day with [faster ACH](/guides/money-movement/ach/ach-processing-speeds/index.md#faster-same-day-processing) |
| Another wallet | `moov-wallet`         | Immediately                                                                                                                                         |
| Card           | `card-payment`        | Next banking day (see [card settlement timing](/guides/accept-payments/cards/timing/index.md))                                                              |

![Card to wallet transfer timing diagram](./images/card-to-wallet-light.png)

> **Note:** Moov may temporarily hold funds for review to protect against fraud and chargebacks, for example on a new account with limited history, on unusually high volume compared to typical activity, or for higher-risk business types. [Contact Moov](https://support.moov.io/) with questions about a hold.

## Fund a wallet

### Get accountID

Identify the `accountID` for the Moov account with the wallet you would like to fund. If you don't already have it, you can use the list accounts `GET` [endpoint](/api/moov-accounts/accounts/list/index.md) as shown below.

**cURL**

List account [reference](/api/moov-accounts/accounts/list/index.md)

```zsh
curl -X GET "https://api.moov.io/accounts" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2026.07.00"
```

**Go SDK**

List account [reference](/api/moov-accounts/accounts/list/index.md)

```go
mc, _ := moov.NewClient()

mc.ListAccounts(ctx)
```

### Select the payment methods for the transfer

Get the `paymentMethodIDs` to use as the source and destination when creating a transfer in the next step.

**cURL**

List payment methods [reference](/api/sources/payment-methods/list/index.md)

```zsh
curl -X GET "https://api.moov.io/accounts/{accountID}/payment-methods" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2026.07.00"
```

**Go SDK**

List payment methods [reference](/api/sources/payment-methods/list/index.md)

```go
mc, _ := moov.NewClient()

var accountID string

mc.ListPaymentMethods(ctx, accountID)
```

**Moov.js**

List payment methods [reference](/api/sources/payment-methods/list/index.md)

```javascript
const moov = Moov(token);

moov.accounts.paymentMethods.list({accountID});
```

A successful response will return an array of payment methods of different types. For the transfer source, you'll select the payment method ID associated with the payment method type you'd like to use (such as `ach-debit-fund`).

For the transfer destination, choose the payment method ID associated with the `moov-wallet` payment method type.

### Create the transfer

Using the payment method IDs you got from step 2, you can now initiate a transfer. Once the transfer has completed, the funds will settle in the destination wallet.

**cURL**

Create transfer [reference](/api/money-movement/transfers/create/index.md)

```zsh
curl -X POST "https://api.moov.io/accounts/{accountID}/transfers" \
  -H "Authorization: Bearer {token}" \
  -H "x-idempotency-key: UUID" \
  -H "X-Wait-For: rail-response" \
  -H "x-moov-version: v2026.07.00" \
  --data-raw '{
    "amount": {
      "value": 100,
      "currency": "USD"
    },
    "destination": {
      "paymentMethodID": "string"
    },
    "source": {
      "paymentMethodID": "string"
    },
    "description": "Optional transaction description."
  }'
```

**Go SDK**

Create transfer [reference](/api/money-movement/transfers/create/index.md)

```go
mc, _ := moov.NewClient()

var accountID string // Partner account

mc.CreateTransfer(ctx, accountID, moov.CreateTransfer{
  Amount: moov.Amount{
    Currency: "USD",
    Value:    100, // $1.00
  },
  Destination: moov.CreateTransfer_Destination{
    PaymentMethodID: "string",
  },
  Source: moov.CreateTransfer_Source{
    PaymentMethodID: "string",
  },
  Description: "Optional transaction description.",
})
```

## Next steps

- [Send payouts](/guides/send-payments/send-funds/index.md)
- [Issue cards](/guides/issue-cards/index.md)
- [Automate settlement with sweeps](/guides/wallets/sweeps/index.md)
- [Manage wallet balance](/guides/wallets/balance/index.md)

