Skip to main content
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.
Withdrawals are available for protocols that support the Withdraw action. Check the Supported Protocols reference for per-protocol capabilities.

How Withdrawals Work

ParameterRole in a withdrawal
fromTokenProtocol position token the user holds (vault token, aToken, LST, etc.)
toTokenToken the user wants to receive
fromChain / toChainSame 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.
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'

Cross-Chain Withdrawal

Withdraw on one chain and receive the output token on another chain in a single flow.
curl -X GET 'https://li.quest/v1/quote?\
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'
Cross-chain withdrawals require status polling via GET /status after the source-chain transaction confirms. See Cross-Chain Composer Patterns.

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

API Integration

Full walkthrough of the quote, allowance, execute, and status polling flow.

Protocols That Support Withdraw

The following protocols support withdrawals via Composer. Deposit-only protocols (Ethena, Kinetiq, Maple, Royco, USDai) must be withdrawn through their own interfaces.
ProtocolTypeWithdraw via Composer
Aave V3LendingYes
AvantYieldYes
AvonLendingYes
CapYieldYes
EulerLendingYes
Felix VanillaVaultsYes
FluidLendingYes
HyperLendLendingYes
HypurrFiLendingYes
KelpLiquid StakingYes
Morpho V1/V2Lending / VaultsYes
NeutrlYieldYes
NeverlandVaultsYes
SparkLendingYes
TokemakYieldYes

Supported Protocols

Full protocol reference including deposit-only vs deposit + withdraw support.

Error Handling

Common issues specific to withdrawals:
IssueResolution
No route returnedConfirm the protocol supports withdraw via Composer and the user holds the position token
Insufficient balanceVerify the user’s fromToken balance matches the requested fromAmount
Allowance errorSet approval for the position token to the approvalAddress returned in the quote
Cross-chain partial failureBridged tokens arrive on the destination chain but the final swap may need manual completion
For full status and substatus values, see Transaction Status Tracking.

Next Steps

Cross-Chain Patterns

Bridge-inclusive execution patterns and status handling

Deposit Recipes

End-to-end deposit recipes for multiple protocols

API Parameters

How Composer routes are activated and returned