Fees in the System

How LP fees, relayer fees, gas fees, and capital fees are calculated in Across.

Every crosschain transfer through Across incurs fees that compensate the actors making the system work — liquidity providers and relayers. All fees are derived from the spread between the inputAmount (what the user deposits on the origin chain) and the outputAmount (what the user receives on the destination chain).

Fee Breakdown

The total fee a user pays is the difference between their deposit and what they receive:

totalFee = inputAmount - outputAmount

This total fee is split between two components:

Fee TypeRecipientPurpose
LP FeeLiquidity providersCompensates LPs for capital utilization and rebalancing risk
Relayer FeeRelayer who fills the intentCovers gas costs, capital opportunity cost, and risk

Use the /suggested-fees endpoint to get a fee quote before executing a transfer. The response breaks down each component.

LP Fees

Across uses a utilization-based pricing model adapted from lending protocols like Aave. LP fees depend on how much of the available liquidity pool is being used.

How It Works

  • When utilization is low, LP fees are minimal — plenty of capital is available
  • As utilization increases, fees rise along a curve to incentivize more LP deposits
  • Above a "kink" threshold, fees increase steeply to discourage draining the pool

Key Variables

VariableDescription
UCurrent pool utilization (0 to 1)
U-barKink utilization — threshold where the fee curve steepens
R0Base interest rate
R1Slope below kink
R2Slope above kink (steep)

The annualized rate formula follows an Aave-style two-slope model:

R(U) = R0 + (min(U-bar, U) / U-bar) * R1 + (max(0, U - U-bar) / (1 - U-bar)) * R2

Weekly rates are derived as (1 + R_annual)^(1/52) - 1, and the final LP fee is the weekly rate multiplied by the transaction size.

When are LP fees zero? If the relayer takes repayment on the origin chain (same chain as the deposit), no crosschain rebalancing is needed, so LP fees are zero. Non-zero fees apply when repayment occurs on a different chain.

Per-Route Parameters

The rate parameters (R0, R1, R2, U-bar) vary by token and route. This means the LP fee for bridging USDC from Arbitrum to Base may differ from USDC from Ethereum to Optimism, reflecting different pool utilization levels.

Relayer Fees

Relayers are compensated for three costs they incur when filling an intent:

1. Gas Fees

The cost of submitting the fill transaction on the destination chain. This varies by chain — filling on Ethereum L1 costs more gas than filling on Arbitrum or Base.

2. Capital Opportunity Cost

Relayers lock their own capital to fill intents immediately, then wait for reimbursement through the bundle settlement process (~1.5 hours). The fee compensates for the time value of that locked capital.

3. Capital at Risk

Relayers bear risk from:

  • Software bugs — implementation errors in relayer software
  • Chain reorganizations — finality risk where a filled transaction could be reverted
  • Settlement delays — longer-than-expected reimbursement periods

Querying Fees

Use the /suggested-fees endpoint to get a full fee breakdown before executing a swap:

query-fees.ts
const params = new URLSearchParams({
  inputToken: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",   // USDC on Arbitrum
  outputToken: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",  // USDC on Base
  originChainId: "42161",
  destinationChainId: "8453",
  amount: "1000000000",  // 1000 USDC
});

const res = await fetch(
  `https://app.across.to/api/suggested-fees?${params}`
);
const fees = await res.json();

console.log("Total relay fee:", fees.totalRelayFee.total);
console.log("LP fee pct:", fees.lpFee.pct);              // 1e16 = 1%, 1e18 = 100%
console.log("Relayer capital fee:", fees.relayerCapitalFee.total);
console.log("Relayer gas fee:", fees.relayerGasFee.total);
console.log("Expected fill time:", fees.expectedFillTimeSec, "seconds");
console.log("Is amount too low?", fees.isAmountTooLow);

Fee Response Fields

FieldDescription
totalRelayFeeCombined LP + relayer fee
lpFeeLP fee component (pct format: 1e16 = 1%)
relayerCapitalFeeRelayer capital opportunity cost
relayerGasFeeRelayer destination gas cost
isAmountTooLowtrue if the amount is below the minimum for this route
expectedFillTimeSecEstimated time for a relayer to fill
limitsMin/max deposit amounts for instant and short-delay fills

Do not cache fee responses. Fees change with market conditions, pool utilization, and gas prices. Always fetch fresh fees before presenting a quote to users.

On this page