Unstake a validator

A partial withdrawal pulls ETH from an active validator into the vault, leaving the validator running. Useful when you want to free liquid ETH (to mint stETH, repay liability, or move ETH out of the vault) without giving up the validator's slot in the beacon-chain validator set.

Both partial withdrawals and full exits use the same EIP-7002 endpoint: the amount you choose determines which you get. Setting the amount to the validator's full balance triggers a full exit; anything less is a partial withdrawal. This guide covers the partial case. For full exits, see Staking and the PDG flow → Withdrawals and full exits.

When to use this

  • You want to pull accumulated rewards (anything above the 32 ETH floor) without exiting the validator.
  • The vault needs liquid ETH for a withdraw, a burn, or a rebalance, and the easiest source is the rewards sitting on an active validator.
  • You want to keep the validator's effective balance close to the 32 ETH floor rather than letting it grow with rewards.

If you want the validator's principal back too: don't use this flow. Set the amount to the full balance for a full exit, or use the dedicated exit recipe.

Before you start

  • The validator's status is active. Validators in any other state can't be partially withdrawn from.
  • The signing wallet holds TRIGGER_VALIDATOR_WITHDRAWAL_ROLE on the vault Dashboard.
  • Have a refund recipient address ready (linked wallet). EIP-7002 requires a small fee per withdrawal request paid in the same transaction; any overpayment is refunded to this address.
  • You know how much ETH you want to pull. Stay above the 32 ETH floor: if the requested amount would drop the validator below it, the beacon chain treats the request as a full exit instead.

How to do it

🖱️

to unstake in the UI: from a vault page, click Unstake, pick the validator from the Validators table, enter the ETH amount to pull, select a refund-recipient linked wallet, review, and sign.

</> to unstake via the API: see triggerValidatorWithdrawals. Pass the validator's pubKeys (concatenated hex), amountsGwei (one entry per pubkey, in gwei), and a refundRecipient. Setting an amount equal to the validator's full balance triggers a full exit instead.

The endpoint returns a partial transaction; your wallet broadcasts it. The withdrawn ETH lands in the vault on the next beacon-chain sweep: not instantly.

Verify

  • The validator's status stays active: no transition to exited.
  • The validator's effective balance drops by approximately the unstake amount within one or two beacon-chain epochs.
  • Vault Total Value increases when the sweep lands. Health Factor goes up if there was minted stETH.
  • The refund recipient receives any excess EIP-7002 fee refund (typically a small amount of gwei).

Common pitfalls

  • Crossing the 32 ETH floor unintentionally. If your unstake amount + any near-term beacon penalties drops the validator's effective balance below 32 ETH, the beacon chain treats the request as a full exit. Leave a buffer.
  • Forgetting the refund recipient. The API will reject the request without it; the UI requires picking a linked wallet.
  • Expecting instant settlement. EIP-7002 requests are queued by the beacon chain. The ETH arrives in the vault after the next sweep, not when the transaction confirms.
  • Wrong amount unit. The API takes amountsGwei (gwei), not wei or ETH. The UI handles the conversion; if you call the API directly, convert yourself.

Related