> For the complete documentation index, see [llms.txt](https://csm-docs.cozy.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://csm-docs.cozy.finance/developer-guides/stake-into-a-rewards-manager/unstake.md).

# Unstake

Stakers can exchange their stake receipt tokens for the underlying asset they staked in the Rewards Manager (typically a Safety Module deposit receipt token). There is no delay to unstake - stakers can immediately unstake from a Rewards Manager.

### Using CozyRouter to unstake assets

The recommended way to programmatically unstake assets is to call `CozyRouter.unstake` (see CozyRouter):

```solidity
function unstake(
    IRewardsManager rewardsManager_,
    uint16 stakePoolId_,
    uint256 stakeReceiptTokenAmount,
    address receiver_
) public payable;
```

This method will internally call`RewardsManager.unstake`.

Prior to calling this function, the user must have approved `CozyRouter` to a spend sufficient amount of their `StakePool.stakeReceiptToken` balance.

### Unstake mechanics

On `RewardsManager.unstake`, we follow the following steps:

* Claim rewards on behalf of the `owner_`, transferring the reward assets to `receiver_`.
* Decrement `StakePool.amount`.
* Burn the `owner_`'s stake receipt tokens.
* Transfer the `receiver_` the relevant amount of stake assets.
* Emit a `Unstaked` event.
