Follow this step by step guide to add funds to a Moov wallet with our API, SDKs, or Moov.js.

This guide covers how to fund a Moov wallet with a transfer. If you're looking to use a bank-to-wallet transfer to fund wallets and haven't yet added a bank account for the Moov account, see our step by step guide on adding bank accounts. Once you've funded a Moov wallet, its balance can be spent by issued cards.

## Fund a wallet

You will be creating a funding transfer from a source (such as a bank account, card, or another wallet) to a Moov account's wallet.

### Get accountID

The first step is identifying 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](https://docs.moov.io/api/moov-accounts/accounts/list/) as shown below.

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

```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.

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

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

var accountID string

mc.ListPaymentMethods(ctx, accountID)
```

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

moov.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.

```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: v2024.01.00" \
  --data-raw '{
    "amount": {
      "value": 100,
      "currency": "USD"
    },
    "destination": {
      "paymentMethodID": "string"
    },
    "source": {
      "paymentMethodID": "string"
    },
    "description": "Optional transaction description."
  }'
```

```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

After you've successfully funded a wallet, you can spend these funds using issued cards. As funds flow in and out of Moov wallets, you'll also want to know how to manage a wallet balance.
