# Cash out a wallet

> Step-by-step guide to cashing out funds from a Moov wallet to a linked, verified bank account with a wallet-to-bank transfer through the API or SDKs.

> 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

Cash out a Moov wallet by creating a transfer from the wallet to a linked bank account. To cash out automatically every day, set up [sweeps](/guides/wallets/sweeps/index.md) instead.

**Before you start**

- The account has a `send-funds` [capability](/guides/accounts/capabilities/reference/index.md) for the rail you'll use (`send-funds.ach` or `send-funds.instant-bank`)
- A [linked bank account](/guides/sources/bank-accounts/link-bank-accounts/index.md) on the receiving account
- Enough `availableBalance` in the wallet to cover the amount and any [payout fee](/guides/send-payments/payout-fees/index.md)

## Choose a speed

| Destination payment method | Funds arrive                                              | Details                                                                            |
|----------------------------|-----------------------------------------------------------|------------------------------------------------------------------------------------|
| `instant-bank-credit`      | Seconds, 24/7/365 (RTP or FedNow)                         | [Instant payments](/guides/send-payments/instant-payments/index.md)                        |
| `ach-credit-same-day`      | End of the same banking day, if created before the cutoff | [ACH cutoff times](/guides/money-movement/ach/ach-processing-speeds/index.md#cutoff-times) |
| `ach-credit-standard`      | Next banking day                                          | [ACH processing speed](/guides/money-movement/ach/ach-processing-speeds/index.md)          |

`rtp-credit` also appears on eligible bank accounts, but use `instant-bank-credit` instead (`rtp-credit` will be deprecated). Per-transfer limits are in [transfer limits](/guides/money-movement/payment-methods/index.md#transfer-limits).

**Same-day ACH**

![Wallet to bank same-day ACH timing diagram](./images/wallet-to-bank-ach-sameday-light.png)

**Standard ACH**

![Wallet to bank standard ACH timing diagram](./images/wallet-to-bank-ach-standard-light.png)

**Instant**

![Wallet to bank instant payment timing diagram](./images/wallet-to-bank-rtp-light.png)

## Cash out with the API

To cash out from the Dashboard instead, [create a transfer](/guides/money-movement/overview/index.md#create-a-transfer) with the wallet as the source.

### Get accountID

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

For the transfer destination, choose the bank account payment method for the speed you picked: `instant-bank-credit`, `ach-credit-same-day`, or `ach-credit-standard`.

### Create the transfer

Create the transfer with the payment method IDs from step 2. When it completes, funds settle in the destination bank account.

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

### Track the status of the transfer

Track the status of the wallet-to-bank transfer by retrieving it or with webhooks. The transfer status is `completed` when the bank account has been credited.

**cURL**

Retrieve a transfer [reference](/api/money-movement/transfers/get/index.md)

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

**Go SDK**

Retrieve a transfer [reference](/api/money-movement/transfers/get/index.md)

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

var accountID string
var transferID string

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

Subscribe to the `transfer.updated` [webhook event](/guides/webhooks/webhook-events/index.md#transfers) to get each status change. Until an ACH credit originates, you can [cancel it](/guides/money-movement/ach/cancellations/index.md). Instant payments are final once sent.

## Next steps

- [Automate cash outs with sweeps](/guides/wallets/sweeps/index.md)
- [Send payouts](/guides/send-payments/send-funds/index.md)
- [Manage wallet balance](/guides/wallets/balance/index.md)

