Cash out a wallet
Before you start
- The account has a
send-fundscapability for the rail you'll use (send-funds.achorsend-funds.instant-bank) - A linked bank account on the receiving account
- Enough
availableBalancein the wallet to cover the amount and any payout fee
Choose a speed
| Destination payment method | Funds arrive | Details |
|---|---|---|
instant-bank-credit |
Seconds, 24/7/365 (RTP or FedNow) | Instant payments |
ach-credit-same-day |
End of the same banking day, if created before the cutoff | ACH cutoff times |
ach-credit-standard |
Next banking day | ACH processing speed |
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.
Cash out with the API
To cash out from the Dashboard instead, 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 as shown below.
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
curl -X GET "https://api.moov.io/accounts/{accountID}/payment-methods" \
-H "Authorization: Bearer {token}" \
-H "x-moov-version: v2026.07.00"
List payment methods reference
mc, _ := moov.NewClient()
var accountID string
mc.ListPaymentMethods(ctx, accountID)
List payment methods reference
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.
Create transfer reference
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."
}'
Create transfer reference
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.
Retrieve a transfer reference
curl -X GET "https://api.moov.io/accounts/{accountID}/transfers/{transferID}" \
-H "Authorization: Bearer {token}" \
-H "x-moov-version: v2026.07.00"
Retrieve a transfer reference
mc, _ := moov.NewClient()
var accountID string
var transferID string
mc.GetTransfer(ctx, accountID, transferID)
Subscribe to the transfer.updated webhook event to get each status change. Until an ACH credit originates, you can cancel it. Instant payments are final once sent.