Withdrawals

Overview

To withdraw from a wallet to a bank account, you must go through the withdrawal intent flow. A withdrawal intent represents a request to withdraw, and each intent typically takes about 24 hours to be fulfilled. This guide explains the withdrawal intent process and how to handle its different outcomes.

Withdrawal Intent Flow

Initiate Withdrawal Intent - This action starts the withdrawal intent process. To create a withdrawal intent, you provide the withdrawal amount and the destination bank account. Once the intent is initiated, a 24-hour countdown begins before the transfer is attempted, and the specified amount is immediately deducted from the account’s wallet.

Cancel Withdrawal Intent - A withdrawal intent can be cancelled at any time during the 24-hour waiting period. When cancelled, the withdrawal amount is reversed and credited back to the account’s wallet.

Retry Withdrawal Intent - After the 24-hour wait period, the withdrawal is attempted to the specified bank account. If the transfer fails, you will be notified. At that point, you may either retry the withdrawal or cancel it. You can choose to retry with the same bank account or select a different bank account linked to the user’s account. Retrying a failed withdrawal intent triggers the transfer immediately, without another waiting period.

Note
Withdrawals can only be retried a limited number of times. Each response or webhook payload includes an is_retryable field indicating whether another retry is allowed, and also a target_fulfillment_timestamp field specifying when the withdrawal intent will be fulfilled.

Webhooks

We send webhook events whenever a state change occurs in the withdrawal intent lifecycle. You may receive one of the following events:

Event Description
withdrawal.intent.initiated Sent when a withdrawal intent is created.
withdrawal.intent.processing Sent when the withdrawal intent moves into processing after the wait period.
withdrawal.intent.fulfilled Sent when the withdrawal has been successfully completed and the amount transferred to the specified bank account.
withdrawal.intent.failed Sent when the withdrawal could not be completed.
withdrawal.intent.retried Sent when a failed withdrawal intent is retried.
withdrawal.intent.cancelled Sent when the withdrawal intent is cancelled and the amount is reversed to the wallet.

For sample payloads of each event, see the Webhook Payload Examples.