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

# Withdrawals

> Withdraw from Composer-supported protocol positions via the LI.FI API with same-chain and cross-chain patterns.

Withdrawals follow the same integration pattern as deposits. Use `GET /quote` or `POST /advanced/routes` with the user's position token as `fromToken` and the desired output token as `toToken`.

<Note>
  Withdrawals are available for protocols that support the **Withdraw** action.
  Check the [Supported Protocols](/composer/protocols-and-chains)
  reference for per-protocol capabilities.
</Note>

***

## How Withdrawals Work

| Parameter               | Role in a withdrawal                                                    |
| ----------------------- | ----------------------------------------------------------------------- |
| `fromToken`             | Protocol position token the user holds (vault token, aToken, LST, etc.) |
| `toToken`               | Token the user wants to receive                                         |
| `fromChain` / `toChain` | Same chain for local withdrawals; different chains for cross-chain      |

If the protocol and market support withdraw via Composer, LI.FI returns a Composer-capable route.

***

## Same-Chain Withdrawal

Withdraw from a protocol position into an underlying token on the same chain.

<CodeGroup>
  ```bash curl theme={"system"}
  curl -X GET 'https://li.quest/v1/quote?\
  fromChain=CHAIN_ID&\
  toChain=CHAIN_ID&\
  fromToken=PROTOCOL_POSITION_TOKEN_ADDRESS&\
  toToken=DESIRED_OUTPUT_TOKEN_ADDRESS&\
  fromAddress=0xYOUR_WALLET_ADDRESS&\
  toAddress=0xYOUR_WALLET_ADDRESS&\
  fromAmount=POSITION_AMOUNT_IN_SMALLEST_UNIT'
  ```

  ```ts TypeScript theme={"system"}
  const quote = await axios.get("https://li.quest/v1/quote", {
    params: {
      fromChain: CHAIN_ID,
      toChain: CHAIN_ID,
      fromToken: "PROTOCOL_POSITION_TOKEN_ADDRESS",
      toToken: "DESIRED_OUTPUT_TOKEN_ADDRESS",
      fromAddress: "0xYOUR_WALLET_ADDRESS",
      toAddress: "0xYOUR_WALLET_ADDRESS",
      fromAmount: "POSITION_AMOUNT_IN_SMALLEST_UNIT",
    },
  });
  ```
</CodeGroup>

***

## Cross-Chain Withdrawal

Withdraw on one chain and receive the output token on another chain in a single flow.

<CodeGroup>
  ```bash curl curl -X GET 'https://li.quest/v1/quote?\ theme={"system"}
  fromChain=SOURCE_CHAIN_ID&\ toChain=DESTINATION_CHAIN_ID&\
  fromToken=PROTOCOL_POSITION_TOKEN_ADDRESS&\
  toToken=DESTINATION_OUTPUT_TOKEN_ADDRESS&\ fromAddress=0xYOUR_WALLET_ADDRESS&\
  toAddress=0xYOUR_WALLET_ADDRESS&\ fromAmount=POSITION_AMOUNT_IN_SMALLEST_UNIT'
  ```
</CodeGroup>

<Note>
  Cross-chain withdrawals require status polling via `GET /status` after the
  source-chain transaction confirms. See [Cross-Chain Composer
  Patterns](/composer/lifi-api/guides/cross-chain-compose).
</Note>

***

## Execution Flow

The execution steps are identical to Composer deposits.

1. Request a quote via `/quote` or `/advanced/routes`
2. Set token allowance if `approvalAddress` is present and `fromToken` is an ERC-20
3. Submit the `transactionRequest`
4. Poll `/status` for cross-chain transfers

<Card title="API Integration" icon="code" href="/composer/lifi-api/guides/api-integration">
  Full walkthrough of the quote, allowance, execute, and status polling flow.
</Card>

***

## Protocols That Support Withdraw

The following protocols support withdrawals via Composer. Deposit-only protocols (Ethena, Kinetiq, Maple, Royco) must be withdrawn through their own interfaces.

| Protocol      | Type             | Withdraw via Composer |
| ------------- | ---------------- | --------------------- |
| Aave V3       | Lending          | Yes                   |
| Avant         | Yield            | Yes                   |
| Avon          | Lending          | Yes                   |
| Cap           | Yield            | Yes                   |
| Euler         | Lending          | Yes                   |
| Felix Vanilla | Vaults           | Yes                   |
| Fluid         | Lending          | Yes                   |
| HyperLend     | Lending          | Yes                   |
| HypurrFi      | Lending          | Yes                   |
| Kelp          | Liquid Staking   | Yes                   |
| Morpho V1/V2  | Lending / Vaults | Yes                   |
| Neutrl        | Yield            | Yes                   |
| Neverland     | Vaults           | Yes                   |
| Spark         | Lending          | Yes                   |
| Tokemak       | Yield            | Yes                   |

<Card title="Supported Protocols" icon="list" href="/composer/protocols-and-chains">
  Full protocol reference including deposit-only vs deposit + withdraw support.
</Card>

***

## Error Handling

Common issues specific to withdrawals:

| Issue                       | Resolution                                                                                   |
| --------------------------- | -------------------------------------------------------------------------------------------- |
| No route returned           | Confirm the protocol supports withdraw via Composer and the user holds the position token    |
| Insufficient balance        | Verify the user's `fromToken` balance matches the requested `fromAmount`                     |
| Allowance error             | Set approval for the position token to the `approvalAddress` returned in the quote           |
| Cross-chain partial failure | Bridged tokens arrive on the destination chain but the final swap may need manual completion |

For full status and substatus values, see [Transaction Status Tracking](/introduction/user-flows-and-examples/status-tracking).

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Cross-Chain Patterns" icon="bridge" href="/composer/lifi-api/guides/cross-chain-compose">
    Bridge-inclusive execution patterns and status handling
  </Card>

  <Card title="Deposit Recipes" icon="book" href="/composer/lifi-api/recipes/vault-deposits">
    End-to-end deposit recipes for multiple protocols
  </Card>

  <Card title="API Parameters" icon="sliders" href="/composer/lifi-api/reference/api-parameters">
    How Composer routes are activated and returned
  </Card>
</CardGroup>
