Skip to main content
A deposit (Zap In) takes a plain token and lands you in a DeFi position: an LP pool, a lending market, or a vault. The router swaps, bridges, and enters the position in a single build. The destination is the position address (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

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

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

API usage

The zap API lives on https://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 destChainId to 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: destToken must be a real pool or position address, not just a token.
Read more in Fuse execution flow.
Last modified on September 21, 2026