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 anis_retryable
field indicating whether another retry is allowed, and also atarget_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.