Exit & Validator Withdrawal
This guide will walk you through the process of exiting and withdrawing validators using the stakefish API.
Important:This exit process is exclusively for Client staking. All validator exits must be confirmed by customers (wallet signing).
Verify Wallet Ownership
Your customer must confirm control over their wallet and sign confirmation message with their wallet.
Generate Message
To generate the message for your customer to sign, send the following GET request to stakefish API:
curl -X GET "https://api.hoodi.stake.fish/v1/eth/stake/v1/exit-challenge?type=IMMEDIATE&indices=VALIDATOR_INDICES&address=WALLET_ADDRESS" \
-H "Content-Type: application/json" \
-H "Authorization: YOUR_PUBLIC_API_KEY"
ImportantThis API requires Public API Key.
Explanation of Parameters:
type: SpecifyIMMEDIATEorDEFERRED.VALIDATOR_INDICES: List of validator indices to be exited.WALLET_ADDRESS: The address of the wallet from which Ether will be withdrawn.
Example Response:
You will receive a response like this:
{
"challenge": "I confirm I request to voluntarily exit validator(s) with indexes: 1754303 and my request is valid for 5 min (2024-09-06 13:50:06 UTC)."
}This message must be signed by your customer before proceeding with the exit. Note that the message expires in 5 minutes.
Customer Signs Message
Your customer needs to sign the generated message with their wallet. Here's how they can do it using the viem library:
import { createWalletClient, custom } from 'viem'
import { hoodi } from 'viem/chains'
const walletClient = createWalletClient({
chain: hoodi,
transport: custom(window.ethereum!),
})
const [account] = await walletClient.getAddresses()
const signature = await walletClient.signMessage({
account,
message: "I confirm I request to voluntarily exit validator(s) with indexes: 1754303 and my request is valid for 5 min (2024-09-06 13:50:06 UTC).",
})
// Example output: "0x01b819c23d7e4414e611b15f7b611e95076f2bce726b31bcab68bbc66e2ffa0933b7df6bab0ddcb13039e5bbe076caa9672cdf18a2d4fc58d6b97089aaea06c71b"If your customer uses MetaMask browser extension, they will see a popup asking to sign the message. They need to click the "Sign" button.
Exit Validator
To initiate the exit of a validator, use the following API request:
curl -X POST "https://api.hoodi.stake.fish/v1/eth/stake/v1/exit-validators" \
-H "Content-Type: application/json" \
-H "Authorization: YOUR_PUBLIC_API_KEY" \
--data '{
"indices": [1754303],
"message": "I confirm I request to voluntarily exit validator(s) with indexes: 1754303 and my request is valid for 5 min (2024-09-06 13:50:06 UTC).",
"signature": "0x01b819c23d7e4414e611b15f7b611e95076f2bce726b31bcab68bbc66e2ffa0933b7df6bab0ddcb13039e5bbe076caa9672cdf18a2d4fc58d6b97089aaea06c71b"
}'
ImportantThis API requires Public API Key.
Explanation of Parameters
indices: Array of validator indices you want to exit. Validators must be active for at least 256 epochs (approximately 1 day) before they can be exited.message: The message signed by your customer's wallet.signature: The signature generated in the previous step.
Example Response:
After sending the POST request, you'll receive a response like this:
[
{
"pubkey": "0x11111111111111111111111111111111111111111111111111111111111111111111111111111111",
"validatorIndex": "10487",
"successful": true
},
{
"pubkey": "0x22222222222222222222222222222222222222222222222222222222222222222222222222222222",
"validatorIndex": "20250",
"successful": true
},
{
"pubkey": "0x33333333333333333333333333333333333333333333333333333333333333333333333333333333",
"validatorIndex": "50423",
"successful": false,
"reason": "Validator #50423 is already exiting"
}
]Exit times vary depending on network conditions and exit queue length — from minutes when the queue is empty to several days during congested periods.
Validator Withdrawal
Validator withdrawals are automated. Once a validator has exited, staked funds are typically returned to your wallet within 1 to 5 days, depending on the exit queue and withdrawal sweep cycle. You can monitor progress on beaconcha.in.
To check your withdrawal progress, refer to the Monitoring Your Validator guide or visit the beaconcha.in:
Alternative: Generate Exit Messages
You can use the /v1/generate-exit-messages endpoint to generate signed voluntary exit messages for your validators, allowing you to broadcast them independently.

Updated 21 days ago
