# The withdrawal flow

<figure><img src="https://3437812349-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzLrVMuCawk9OpwBGSbAw%2Fuploads%2FwOdndCcZHQWvs7ixt5x0%2Fimage%20(7).png?alt=media&#x26;token=3be65994-cffb-4bfb-b56d-699b520e5d9a" alt=""><figcaption><p>Withdrawal flow architecture</p></figcaption></figure>

Before withdrawal can occur, Starkware requires transferring the funds from your tanX User vault to another off-chain vault that is identified with the same user’s Ethereum address instead of their Stark key.

The `add_transaction` API with the `TransferRequest` transaction type registers the Ethereum address.

You can enable registration in your off-chain application’s logic in one of the following ways:

* Your user enters a request to transfer the funds from the vault with their Stark key to a vault that they identify with their Ethereum address.
* When your application prompts the user for the information required to send a `WithdrawalRequest` transaction to the Starkware gateway, it also prompts them to enter the parameters necessary to execute a `TransferRequest` transaction, and your application executes the transfer as a seamless step in the withdrawal process.

The basic withdrawal flow takes place as detailed here, as tanX transfers the funds to the user in a trust-less way.
