destToken = pool.address); set destChainId to a different chain and the same call becomes a cross-chain deposit. Pick a chain below; the tabs stay in sync across Setup, Steps, and End-to-end.
EVM deposits use Permit2 for token allowance (no EIP-2612). Solana deposits carry no approval step, you sign and send the built transactions directly.
Setup
- EVM
- Solana
A same-chain deposit on Base: 500 USDC into a USDC/WETH pool.
Find pool and position addresses to use as
destToken with getZapPools and the protocols that back them with getZapProviders.Steps
- EVM
- Solana
1
Quote
Ask for a route into the position. Read-only: no approvals or signatures. The response carries the expected
output and the resolved path.For concentrated-liquidity pools, pass
poolDetails: { lowerTick, upperTick } to pin the range. Omit it and the router picks a range. Derive the current tick from getZapPoolDetails.2
Approve
Zaps authorize the source token through Permit2.
PermitSingle approves once on-chain if the allowance is short; native sources (ETH) skip this entirely.3
Build & execute
Sign the Permit2
PermitSingle, attach the returned permitData to the request, build the route, and execute its steps in one zap() call.zap() will build from the request itself if you omit steps. Passing the pre-built route.steps lets you show the user the resolved output and fees before they commit.4
Status
Poll to a terminal state. Zap status is uppercase:
PENDING, COMPLETED, FAILED, or REFUNDED.status.steps breaks the zap down leg by leg (swap, bridge, deposit) so you can render per-step progress. See Track zap status.End-to-end
- EVM
- Solana
API usage
The zap API lives onhttps://zap.dzap.io/v1. Quote and build are POST; status is GET.
Notes
- Native source (ETH, SOL): skip the approve and permit steps, there is nothing to authorize.
- Cross-chain deposit: set
destChainIdto a different chain. Settlement runs bridge-then-deposit and takes longer; give slippage room (1-2%). - Concentrated liquidity: pass
poolDetails: { lowerTick, upperTick }; omit for the router default. - Confirm the destination:
destTokenmust be a real pool or position address, not just a token.