# Cash out a wallet

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](/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

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](/api/moov-accounts/accounts/list/) as shown below.

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

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

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

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

List payment methods [reference](/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" \
```

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

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

var accountID string

mc.ListPaymentMethods(ctx, accountID)
```

List payment methods [reference](/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](/guides/money-movement/accept-payments/ach/ach-processing-speeds/) [Instant payments](/guides/money-movement/send-payments/instant-payments/)

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

Create transfer [reference](/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 '{\n    "amount": {\n      "value": 100,\n      "currency": "USD"\n    },\n    "destination": {\n      "paymentMethodID": "string"\n    },\n    "source": {\n      "paymentMethodID": "string"\n    },\n    "description": "Optional transaction description."\n  }'\
```

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

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

var accountID string // Partner account

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

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

Retrieve a transfer [reference](/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" \
```

Retrieve a transfer [reference](/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](/guides/webhooks/webhook-events/#transfers) to learn more.

## 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](/guides/money-movement/send-payments/send-payouts)  
[Manage wallet balance](/guides/sources/wallets/balance)
