> ## Documentation Index
> Fetch the complete documentation index at: https://v3.docs.derive.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Winddowns

> Close a vault: settle final withdrawals, force-burn remaining holders, and understand the terminal closed state.

There is no close endpoint. A vault is automatically closed when a burn takes `total_shares` to
zero — a terminal state that rejects every subsequent vault operation with `vault_closed` (18010).
Winding down is therefore just getting every holder out, yourself last.

## Orderly winddown

<Steps>
  <Step title="Stop taking deposits">
    Reject anything queued with `rejectDepositRequest`, and keep rejecting new intents as they arrive. Optionally set
    `whitelistOnly: true` via `updateInfo` to discourage new ones.
  </Step>

  <Step title="Unwind positions">
    Redemptions pay out in the deposit asset, so [close out the vault's positions](/vaults/trade) until it holds only
    that asset.
  </Step>

  <Step title="Settle every withdrawal">
    Run the [settle loop](/vaults/deposits-withdrawals#the-settle-loop) until no shareholder requests remain, and
    force-burn any holder who never submits one (below).
  </Step>

  <Step title="Exit last">
    The curator stake floor rejects a withdrawal that would drop your skin-in-the-game below the minimum while others
    still hold shares (`vault_curator_stake_below_min`, 18013) — so your own full exit comes last. Your final burn takes
    `total_shares` to zero and closes the vault.
  </Step>
</Steps>

## Force-burning holders

`forceBurn` redeems a holder's **entire** share balance at the current mark-to-market
price — no request from them, no price quote from you. It is unsigned and gated to the
vault's curator; use it to eject holders who never submit their own withdrawal.

<CodeGroup>
  ```typescript TypeScript (SDK) theme={null}
  await client.vaults.curator.forceBurn(vaultId, '0xHOLDER…');
  ```

  ```python Python (SDK) theme={null}
  # Coming soon.
  ```

  ```rust Rust (SDK) theme={null}
  // Coming soon.
  ```

  ```bash cURL theme={null}
  # Unsigned (ownership-checked); X-Derive* headers: session auth (see /json-rpc).
  curl -X POST https://api.derive.xyz/v3/private/force_burn \
    -H "Content-Type: application/json" \
    -H "X-DeriveWallet: $WALLET_ADDRESS" \
    -H "X-DeriveTimestamp: $TS" \
    -H "X-DeriveSignature: $SIG" \
    -d '{ "subaccount_id": 42, "holder": "0xHOLDER…" }'
  ```
</CodeGroup>

## The curator's final exit

For your own shares you act as a shareholder of your own vault — request the
withdrawal, then settle it yourself:

<CodeGroup>
  ```typescript TypeScript (SDK) theme={null}
  // Your remaining share balance: your seed stake plus every fee mint.
  await client.vaults.shareholder.requestWithdraw({
    subaccountId: curatorSubaccountId, // where the redeemed funds land
    vaultSubaccountId: vaultId,
    sharesToBurn: myRemainingShares,
  });

  // Settle your own burn like any other (see Process Deposits & Withdrawals).
  // It is the vault's last: total_shares hits zero and the vault closes.

  const { protocol } = await client.vaults.getVault(vaultId);
  console.log(protocol.total_shares, protocol.closed); // '0', true
  ```

  ```python Python (SDK) theme={null}
  # Coming soon.
  ```

  ```rust Rust (SDK) theme={null}
  // Coming soon.
  ```

  ```bash cURL theme={null}
  # The curator's own exit is a normal withdraw intent, signed on their funding subaccount:
  curl -X POST https://api.derive.xyz/v3/private/request_vault_withdraw \
    -H "Content-Type: application/json" \
    -H "X-DeriveWallet: $WALLET_ADDRESS" \
    -H "X-DeriveTimestamp: $TS" \
    -H "X-DeriveSignature: $SIG" \
    -d '{
      "subaccount_id": 1234,
      "nonce": "1751558500000100000",
      "signature_expiry_sec": 1751559100,
      "signer": "0xCURATOR…",
      "signature": "0x…",
      "vault_subaccount_id": 42,
      "shares_to_burn": "15000"
    }'

  # After settling your own burn, confirm the terminal state:
  curl -X POST https://api.derive.xyz/v3/public/get_vault \
    -H "Content-Type: application/json" \
    -d '{ "subaccount_id": 42 }'
  ```
</CodeGroup>

<Note>
  Accrued fees settle inside these final burns like any other settlement — your last withdrawal includes them. See
  [Fees](/vaults/fees).
</Note>

## After closure

`closed: true` never reverts. Once set:

* New deposit and withdrawal requests are rejected with `vault_closed` (18010) — and so
  is settling any request that somehow remained queued.
* `mintShares`, `burnShares`, and `forceBurn` all reject the same way.
* The vault stays **readable**: `getVault`, `getActionHistory`, and
  `getPerformanceHistory` keep serving its history and track record.

To run a new strategy — or the same one with different economics —
[create a new vault](/vaults/create-a-vault).


## Related topics

- [Trade](/vaults/trade.md)
- [Fees](/vaults/fees.md)
- [Create a Vault](/vaults/create-a-vault.md)
