srcToken is the position you are leaving and destToken is the position you are entering. It runs on EVM and Solana, same-chain or cross-chain (EVM to Solana and back). Pick a chain below by the position you are leaving; the tabs stay in sync across Setup, Steps, and End-to-end.
positionDetails.nftId identifies the source position you are leaving (NFT-based LP positions like Uniswap V3); poolDetails pins the destination range for a concentrated-liquidity target. On EVM the source position authorizes through Permit2; on Solana there is no approval step, you sign and send the built transactions directly.Setup
- EVM
- Solana
Migrate from a position on Base into a USDC/WETH pool on Base.
Protocol IDs (
provider) come from getZapProviders, scoped per chain by getZapChains. Find target pool addresses with getZapPools.Steps
- EVM
- Solana
1
Find the source position
List the account’s open positions for a protocol, then pick the one to migrate out of. Each position carries its
address, chainId, amount, and optional nftDetails.2
Quote
Route from the source position into the target position.
srcToken is what you leave, destToken is what you enter. positionDetails.nftId identifies the source NFT to burn. Read-only.Migrating into a concentrated-liquidity pool? Add
poolDetails: { lowerTick, upperTick } to pin the new range, or omit it for the router default. To land on Solana instead, set destChainId: 7565164, destToken to the SPL position, and recipient to a base58 address; keep refundee as your EVM address.3
Approve
Authorize the source position through Permit2, approving once on-chain only if the allowance is short.
4
Build & execute
Sign the Permit2
PermitSingle, attach the returned permitData, build the route, and execute its steps in one zap() call.5
Status
Poll to a terminal state. Zap status is uppercase:
PENDING, COMPLETED, FAILED, or REFUNDED. status.steps shows the exit and entry legs.End-to-end
- EVM
- Solana
API usage
The zap API lives onhttps://zap.dzap.io/v1. List positions and check status with GET; quote and build are POST. srcToken is the old position, destToken is the new one; NFT sources add positionDetails.
Notes
- Cross-chain migrate:
srcChainIdanddestChainIdare independent, so any pair works (EVM to EVM, EVM to Solana, Solana to EVM).recipientis an address on the destination chain,refundeeon the source chain. Expect bridge latency. - NFT source: pass
positionDetails.nftIdfor the position you are leaving. Fungible LP/vault sources omit it. - CL destination: pass
poolDetails: { lowerTick, upperTick }to pin the new range, or omit for the router default. - Slippage: a two-sided move (exit + entry) has more surface for slippage; 1-2% is a safe default.