Acrossbridge quotes distinguish transfer fees from destination amounts
ยท last updated
Acrossbridge quotes report expected output and minimum output separately, while origin gas has its own fee line. Across Protocol's Swap API also states the input amount and maximum input amount. Read these fields with the selected trade type and token units, because a different destination token changes what the numbers mean.
Subtracting input and output identifies a transfer spread only when the amounts share a comparable asset and unit basis.
Expected output and minimum output
The expected output estimates the destination tokens that a route will deliver, while the minimum output states the quoted lower bound. The fields
expectedOutputAmount
and
minOutputAmount
therefore have different jobs: one helps compare expected outcomes, and the other specifies an execution requirement. When those figures differ, the gap allows for execution variation. It does not establish that the protocol charges the entire difference. The bound applies within the quote's trade type, slippage settings, and execution conditions; it does not promise that every deposited intent will fill.
A route that cannot meet an enforced output requirement may fail before delivering tokens.
The amount field follows the trade type
With
exactInput
,
amount
refers to the input token: the request fixes the quantity to spend. The API calculates destination output after fees. For
minOutput
and
exactOutput
,
amount
instead refers to the output token, and the API calculates the required input.
minOutput
targets at least the specified output and allows a larger delivered amount.
exactOutput
targets a precise amount, subject to the route satisfying that trade type. Enforcing
strictTradeType=true
prevents a fallback when the requested type cannot be met. In the response,
inputAmount
gives the quoted input and
maxInputAmount
gives its maximum. These are spending amounts, not separate charges to add together.
A same-asset spread calculation
All amounts in this example are hypothetical for an
exactInput
USDC transfer from Arbitrum to Base, without swaps or an app fee.
Input amount in USDC: 137.42. Quoted output in USDC: 137.08. The formula
input - output
gives a bridge spread of 0.34 USDC. This difference covers the quoted LP and relayer components for this transfer.
Both amounts represent USDC in ordinary token units, so the calculation uses a common denomination. It excludes origin-chain gas, which the quote lists separately and the wallet pays in the starting chain's gas token.
Keeping the input at 137.42 USDC and changing the quoted output to 137.01 USDC raises the spread to 0.41 USDC. The increase is 0.07 USDC. The lower output changes the combined deduction without identifying which fee component moved.
The calculation holds only while both sides represent the same asset on a comparable basis. Adding an app fee broadens the deduction beyond LP and relayer charges alone. An asset-changing swap requires a common value basis before subtraction can identify a cost.
Token decimals set the scale
The API expresses token quantities in the smallest unit for the relevant token. USDC uses six decimal places, so 1,000,000 units represent 1 USDC. Token decimals translate API quantities into readable amounts; they do not create an extra charge. Different tokens can use different scales, and matching decimal counts do not imply equal token values. Each amount needs its token identity, chain, and decimals for an accurate conversion.
Origin gas has its own cost line
Origin gas pays for the transaction submitted on the starting chain.
The Swap API response reports origin-chain gas separately under
fees.originGas
.
Its token metadata identifies the gas asset, so its raw amount may use a different denomination from the transfer fee.
The relayer's charge already includes compensation for submitting the destination-chain fill transaction. Adding that destination gas component again to the full bridge fee would count the same quoted cost twice. Conversely, omitting origin gas would understate the wallet's spending. A cost comparison in one currency needs consistent value conversions, rather than a sum of unrelated token quantities. The quote's gas estimate also remains an estimate until execution.
Bridge fees compensate different participants
The bridge fee combines a liquidity provider, or LP, component with the relayer's charge for filling the intent. LPs supply capital and bear utilization and rebalancing costs. Relayers advance destination funds, pay fill gas, and face capital costs while awaiting repayment.
A single fee percentage can therefore cover several cost drivers. Destination gas varies by network. Relayer pricing also reflects capital tied up before settlement and risks such as chain reorganizations or settlement delays. The breakdown identifies these components without assigning permanent proportions to them. Fast delivery to the recipient and later relayer repayment concern different time intervals; a fast fill does not eliminate the capital cost built into the quote.
LP pricing and the repayment-chain condition
LP pricing responds to pool utilization and the selected token and route. The utilization curve raises rates as available liquidity becomes more heavily used, with a steeper slope beyond a configured threshold. A reusable flat percentage can therefore misdescribe a later quote.
An annualized rate differs from a transfer charge. The model converts that rate to a weekly rate using
(1 + R_annual)^(1/52) - 1
and applies the weekly rate to the transaction size. The week is the fee's rate-conversion period, separate from the fill time.
The LP fee is zero when the relayer takes repayment on the deposit's origin chain. Repayment on another chain brings rebalancing into the LP calculation. The relevant condition concerns the relayer's repayment chain, not simply the destination selected by the user. Relayer charges and separately quoted origin gas can remain.
Swap impact and maximum quoted costs
Swap impact describes value changes introduced by trading within a route. It differs from the charge for bridging the intermediate asset. The response can include origin-swap and bridge details, with token metadata attached to each amount.
The total breakdown can report
swapImpact
beside bridge and app costs. A negative entry reduces the displayed total relative to its other components. The response also distinguishes
fees.total
from
fees.totalMax
, including a maximum-swap-impact breakdown. These represent estimated and maximum costs under the quote's execution constraints, not two bills to add together. Origin gas retains its separate line.
An origin swap can change the asset before the bridge step. The bridge component then describes the intermediate asset, while any app charge uses the destination token. Each fee amount's attached token metadata identifies its denomination. When the response supplies
amountUsd
, that field gives the quoted dollar valuation; it does not turn the original amount into a dollar quantity.
App fees in the destination token
An integration can add an optional
appFee
beyond the LP and relayer charges. It collects that fee in the output token on the destination chain through
appFeeRecipient
. The parameter uses a decimal fraction: 0.01 means 1%. A positive fee requires a recipient address valid for that destination. EVM destinations use an EVM address; Solana destinations use a base58 public key. This integration charge can coexist with a zero LP fee.
Slippage across the route's swap legs
Numeric slippage sets an allowance for execution variation, and the API expects a decimal fraction. A setting of 0.005 represents 0.5%. The automatic option lets the API select that allowance. A tolerance setting belongs to the quote's execution constraints, separate from the protocol's fee components.
For a route with swaps on both origin and destination, a numeric tolerance splits equally across those legs. The request's value is therefore not a full allowance duplicated at each end. The expected output, minimum output, and enforced trade type must be read together. Increasing tolerance changes the accepted execution range; it does not establish that the expected amount will arrive or that the entire allowance will become a fee.
Quote expiry and fill deadlines
Quote expiry ends the validity of pricing data, while the fill deadline limits when a relayer can complete a deposited intent. The response's
quoteExpiryTimestamp
and the intent's
fillDeadline
serve those separate purposes. Fees change with gas prices, market conditions, and utilization, so execution needs fresh pricing.
The quote also includes
expectedFillTime
, an estimate in seconds. If an unfilled deposit expires and qualifies for a refund, settlement must process it before funds return. Refund processing can take several hours after expiry, including bundle processing, the challenge period, and bridge delays. That period differs from the quoted fill estimate.
Fresh fixed-input quotes compare destination amounts for the same token input. Output-targeted quotes compare the input needed to meet a shared destination requirement, with each quote's origin gas counted separately.
Questions and answers about Acrossbridge
Why can a small Acrossbridge transfer produce an amount-too-low result?
A fixed-input request can fail when the input cannot cover the transaction fees. Route limits can also impose a minimum amount for the selected transfer. The legacy fee response includes isAmountTooLow to flag an amount below that route's minimum. Minimum, maximum, instant-fill, and short-delay limits describe different bounds, so the selected token and route determine which limit applies.
When do token approvals add a separate gas expense?
A token approval adds gas expense when the quote requires an approval transaction before the main swap. The response supplies those transactions in approvalTxns, and an empty list means the quote requests none. Approval authorizes the designated spender; it does not perform the bridge transfer. Include any approvals that the wallet actually submits when comparing origin-chain spending, alongside gas for the main transaction.
How are percentage values in legacy fee responses scaled?
The legacy fee format encodes 1% as 1e16 and 100% as 1e18. A pct field uses that scale, separate from the token decimals applied to total amounts. The appFee request parameter uses a decimal from 0 to 1, so the two representations differ.
Can a dynamic action argument exceed an exact-output target?
A dynamic action argument can exceed the intended exact amount when an exactOutput route returns excess tokens. Setting populateDynamically=true inserts the actual token balance at execution time. If the destination call requires an exact amount, static values preserve that instruction. Dynamic arguments remain useful when the action should consume the available balance, so the contract's amount requirement determines the appropriate setting.
Does a successful quote response mean the transfer fee has been paid?
A successful quote response supplies transaction data; it does not deposit funds or pay the quoted transfer fee. Required approvals authorize spending before the main swap. A quote identifier or approval hash therefore cannot establish a destination fill or the amount received.
Which token can return if a quoted swap needs a refund?
The quote reports the refund asset separately through refundToken. Its token address, chain, and decimals identify the denomination of the potential return. A swap route can designate a refund token that differs from the original input token, so a returned token quantity need not equal the original token quantity. The selected route and refund configuration also determine the refund chain.
Is the legacy suggested-fees endpoint appropriate for a new integration?
New integrations should read fees from the Swap API's approval response; the suggested-fees endpoint is legacy. The approval response keeps quote amounts and costs beside the route's approvals and transaction data. Production use requires an API key and a two-byte hexadecimal integrator ID. Quotes still expire, so migration does not remove the need to request fresh pricing. Requests without an integrator ID may be rate-limited or rejected.