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

This guide covers how to cash out funds from a Moov wallet. If you're looking to cash out funds but haven't yet linked and verified a bank account, see our step by step guide on [linking bank accounts](https://docs.moov.io/guides/sources/bank-accounts/link-bank-accounts/link-bank-accounts/).

There are other things you can do with wallet funds, such as:

- Spend on an issued card
- Transfer funds to another Moov wallet

For the purposes of this guide, we'll cover cashing out funds through a wallet-to-bank transfer.

## [Get accountID](https://docs.moov.io/guides/money-movement/wallets/cash-out/#get-accountid)

The first step is identifying the `accountID` for the Moov account with the wallet you would like to cash out. 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.

Ask

List account [reference](https://docs.moov.io/api/moov-accounts/accounts/list/)

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

Ask

List account [reference](https://docs.moov.io/api/moov-accounts/accounts/list/)

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

mc.ListAccounts(ctx)
```

## [Select the payment methods for the transfer](https://docs.moov.io/guides/money-movement/wallets/cash-out/#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.

Ask

List payment methods [reference](https://docs.moov.io/api/sources/payment-methods/list/)

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

Ask

List payment methods [reference](https://docs.moov.io/api/sources/payment-methods/list/)

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

var accountID string

mc.ListPaymentMethods(ctx, accountID)
```

Ask

List payment methods [reference](https://docs.moov.io/api/sources/payment-methods/list/)

```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 `moov-wallet` payment method type.

For the transfer destination, you can choose the payment method ID associated with one of the following payment method types surfaced in the response:

- `ach-credit-standard`
- `ach-credit-same-day`
- `instant-bank-credit`
- `rtp-credit`

While `instant-bank-credit` and `rtp-credit` both provide instant payments on the RTP rail, Moov strongly suggests using `instant-bank-credit`, which supports the RTP and FedNow rails.

To learn more about the timing associated with these payment methods, read our guides on ACH and instant processing:

[ACH processing speed](https://docs.moov.io/guides/money-movement/accept-payments/ach/ach-processing-speeds/) [Instant payments](https://docs.moov.io/guides/money-movement/send-payments/instant-payments/)

## [Create the transfer](https://docs.moov.io/guides/money-movement/wallets/cash-out/#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 bank account.

Ask

Create transfer [reference](https://docs.moov.io/api/money-movement/transfers/create/)

```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."
  }'
```

Ask

Create transfer [reference](https://docs.moov.io/api/money-movement/transfers/create/)

```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.",
})
```

## [Track the status of the transfer](https://docs.moov.io/guides/money-movement/wallets/cash-out/#track-the-status-of-the-transfer)

After you've created the bank-to-wallet transfer, you can track the status of the transfer by retrieving the transfer or using webhooks.

Ask

Retrieve a transfer [reference](https://docs.moov.io/api/money-movement/transfers/get/)

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

Ask

Retrieve a transfer [reference](https://docs.moov.io/api/money-movement/transfers/get/)

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

var accountID string
var transferID string

mc.GetTransfer(ctx, accountID, transferID)
```

To use webhooks to track the transfer's status, you can subscribe to the `transfer.updated` event. Read our [webhooks guide](https://docs.moov.io/guides/webhooks/webhook-events/#transfers) to learn more.

## [Next steps](https://docs.moov.io/guides/money-movement/wallets/cash-out/#next-steps)

Beyond cashing out a wallet, you may also want to know how to use wallet funds to send payouts, or generally keep track of your wallet balance.

[Send payouts](https://docs.moov.io/guides/money-movement/send-payments/send-payouts) [Manage wallet balance](https://docs.moov.io/guides/sources/wallets/balance)
