Collect Fees

Integrators can pass in a collectFees object to the SDK or API to collect a fee on each transaction.
Example route request with `collectFees`
const params = {
fromChain: 5, // Goerli testnet
fromToken: "0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6", // WETH on Goerli
fromAmount: "50000000000000000", // 0.05 WETH
toChain: 43113, // Avalanche Fuji Testnet
toToken: "0x57f1c63497aee0be305b8852b354cec793da43bb", // aUSDC on Avalanche Fuji Testnet
fromAddress: "0xAD3A87a43489C44f0a8A33113B2745338ae71A9D", // ethers.signer.address; transaction sender address
toAddress: "0xAD3A87a43489C44f0a8A33113B2745338ae71A9D", // the recipient of the trade
slippage: 1.00, // 1.00 = 1% max slippage across the entire route
enableForecall: true, // instant execution service, defaults to true
quoteOnly: false // optional, defaults to false,
collectFees: {
integratorAddress: "0x",
fee: 50
}
};
Property
Description
integratorAddress
The EVM address of the integrator that will receive the fee
fee
The amount in "basis points" for the fee. 50 = 0.05%. there is currently soft limit of 1% fee allowed for each tx.
New objects in route response
feeCosts": [
{
"name": "Integrator Fee",
"description": "Integrator Fee",
"percentage": "0.9%",
"token": {
"chainId": 43113,
"address": "0x57f1c63497aee0be305b8852b354cec793da43bb",
"name": "Axelar USDC",
"symbol": "aUSDC",
"decimals": 6,
"logoURI": "https://raw.githubusercontent.com/axelarnetwork/axelar-docs/main/public/images/assets/usdc.svg",
"coingeckoId": "axlusdc",
"commonKey": "uausdc"
},
"amount": "14190",
"amountUSD": "0.0142"
},
]
Fee collection token Fees are collected in the bridge token, most of the time this will be axlUSDC as this is the primary bridging token, if the source or destination token is an Axelar wrapped token the fee could be taken in that token, to unwrap Axelar token see here
The API route response will tell whether it is the source or destination chain that has the fee taken
You can see the "collectFees" object returned by the api in the "params" section of the response. This specific route will take fees on destination.
"params": {
"collectFees": {
"integratorAddress": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174",
"fee": 90,
"feeLocation": "DESTINATION"
},
....
}
Fee logic
Fees are are currently only supported on EVM chains, although fees will eventually be supported on Cosmos chains. The fee is generally taken on the chain where swaps happen. The following table outlines where the fee is taken based on the route.
swaps = some swap to or from a token to the bridge token (eg axlUSDC)
send only = no swaps
Cosmos = not supported
Source
Destination
Fee taken
EVM (with swaps)
EVM (with swaps)
Source
EVM (no swaps)
EVM (with swaps)
Destination
EVM (no swaps)
EVM (no swaps)
Destination
EVM (with swaps)
EVM (no swaps)
Source
EVM (with swaps)
Cosmos
Source
EVM (no swaps)
Cosmos
None
How to check fee balances
You can check the Squid fee collector smart contracts for the balance of each token for the integrator address. The feeCollector contract addresses are documented in the next section. You can read balances by putting in the "token address" and "integratorAddress" into the getBalance function https://testnet.snowtrace.io/address/0xf80De6D6CF6846Ae7c3243F4b6486EF662C59d29#readProxyContract
Fee Collector contract address
Network
Address
Testnet
0xf80De6D6CF6846Ae7c3243F4b6486EF662C59d29
Mainnet
0x19cd4F3820E7BBed45762a30BFA37dFC6c9C145b