0x Protocol DEX aggregator. Swap tokens at the best rates across 9+ liquidity sources on Ethereum, Polygon, BSC, and more.
52
59%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Medium
Suggest reviewing before use
Fix and improve this skill with Tessl
tessl review fix ./public/skills/0xterrybit/0x-swap/SKILL.mdProfessional-grade DEX aggregation. Best execution across 9+ liquidity sources with MEV protection.
| Variable | Description | Required |
|---|---|---|
ZEROX_API_KEY | 0x API Key (get free at 0x.org) | Yes |
This skill includes a small swap fee (0.3%) to support development. The fee is transparently disclosed to users before each swap.
| Variable | Value | Description |
|---|---|---|
SWAP_FEE_BPS | 30 | 0.3% swap fee (30 basis points) |
SWAP_FEE_RECIPIENT | 0x890CACd9dEC1E1409C6598Da18DC3d634e600b45 | EVM wallet to receive fees |
SWAP_FEE_TOKEN | outputToken | Collect fee in output token |
Fee Breakdown:
| Chain | URL |
|---|---|
| Ethereum | https://api.0x.org |
| Polygon | https://polygon.api.0x.org |
| BSC | https://bsc.api.0x.org |
| Arbitrum | https://arbitrum.api.0x.org |
| Optimism | https://optimism.api.0x.org |
| Base | https://base.api.0x.org |
API_KEY="${ZEROX_API_KEY}"
CHAIN_ID="1" # Ethereum
# Token addresses
SELL_TOKEN="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" # WETH
BUY_TOKEN="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" # USDC
SELL_AMOUNT="1000000000000000000" # 1 ETH in wei
TAKER="<YOUR_WALLET>"
# Swap fee configuration
SWAP_FEE_BPS="30" # 0.3%
SWAP_FEE_RECIPIENT="0x890CACd9dEC1E1409C6598Da18DC3d634e600b45"
SWAP_FEE_TOKEN="${BUY_TOKEN}" # Collect fee in output token
curl -s "https://api.0x.org/swap/permit2/quote" \
-H "0x-api-key: ${API_KEY}" \
-H "0x-version: v2" \
-G \
--data-urlencode "chainId=${CHAIN_ID}" \
--data-urlencode "sellToken=${SELL_TOKEN}" \
--data-urlencode "buyToken=${BUY_TOKEN}" \
--data-urlencode "sellAmount=${SELL_AMOUNT}" \
--data-urlencode "taker=${TAKER}" \
--data-urlencode "swapFeeBps=${SWAP_FEE_BPS}" \
--data-urlencode "swapFeeRecipient=${SWAP_FEE_RECIPIENT}" \
--data-urlencode "swapFeeToken=${SWAP_FEE_TOKEN}" | jq '{
buyAmount: .buyAmount,
sellAmount: .sellAmount,
price: .price,
estimatedGas: .gas,
route: .route,
swapFee: {
bps: .swapFeeBps,
recipient: .swapFeeRecipient,
amount: .swapFeeAmount
}
}'curl -s "https://api.0x.org/swap/permit2/price" \
-H "0x-api-key: ${API_KEY}" \
-H "0x-version: v2" \
-G \
--data-urlencode "chainId=1" \
--data-urlencode "sellToken=0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" \
--data-urlencode "buyToken=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" \
--data-urlencode "sellAmount=1000000000000000000" | jq '{
price: .price,
buyAmount: .buyAmount,
sources: .sources
}'# 1. Get quote with transaction data
QUOTE=$(curl -s "https://api.0x.org/swap/permit2/quote" \
-H "0x-api-key: ${API_KEY}" \
-H "0x-version: v2" \
-G \
--data-urlencode "chainId=1" \
--data-urlencode "sellToken=${SELL_TOKEN}" \
--data-urlencode "buyToken=${BUY_TOKEN}" \
--data-urlencode "sellAmount=${SELL_AMOUNT}" \
--data-urlencode "taker=${TAKER}" \
--data-urlencode "swapFeeBps=${SWAP_FEE_BPS}" \
--data-urlencode "swapFeeRecipient=${SWAP_FEE_RECIPIENT}" \
--data-urlencode "swapFeeToken=${SWAP_FEE_TOKEN}")
# 2. Extract transaction data
TX_TO=$(echo "$QUOTE" | jq -r '.transaction.to')
TX_DATA=$(echo "$QUOTE" | jq -r '.transaction.data')
TX_VALUE=$(echo "$QUOTE" | jq -r '.transaction.value')
TX_GAS=$(echo "$QUOTE" | jq -r '.transaction.gas')
# 3. Sign and send transaction using your wallet
# (requires web3 library or wallet integration)# Request gasless quote
curl -s "https://api.0x.org/swap/permit2/quote" \
-H "0x-api-key: ${API_KEY}" \
-H "0x-version: v2" \
-G \
--data-urlencode "chainId=1" \
--data-urlencode "sellToken=${SELL_TOKEN}" \
--data-urlencode "buyToken=${BUY_TOKEN}" \
--data-urlencode "sellAmount=${SELL_AMOUNT}" \
--data-urlencode "taker=${TAKER}" \
--data-urlencode "swapFeeBps=${SWAP_FEE_BPS}" \
--data-urlencode "swapFeeRecipient=${SWAP_FEE_RECIPIENT}" \
--data-urlencode "swapFeeToken=${SWAP_FEE_TOKEN}" \
--data-urlencode "gasless=true" | jq '.'| Chain | ID | Native Token |
|---|---|---|
| Ethereum | 1 | ETH |
| Polygon | 137 | MATIC |
| BSC | 56 | BNB |
| Arbitrum | 42161 | ETH |
| Optimism | 10 | ETH |
| Base | 8453 | ETH |
| Avalanche | 43114 | AVAX |
| Fantom | 250 | FTM |
| Celo | 42220 | CELO |
| Token | Address |
|---|---|
| WETH | 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 |
| USDC | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 |
| USDT | 0xdAC17F958D2ee523a2206206994597C13D831ec7 |
| DAI | 0x6B175474E89094C44Da98b954EesdeAC495271d0F |
| WBTC | 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 |
| Error | Cause | Solution |
|---|---|---|
INSUFFICIENT_ASSET_LIQUIDITY | Low liquidity | Reduce amount |
VALIDATION_FAILED | Invalid parameters | Check token addresses |
RATE_LIMIT_EXCEEDED | Too many requests | Wait and retry |
f45fcb5
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.