Skip to main content

Cross-chain swap (bridge aggregation)

GET 

/v1/actions/swap/x-chain

Quote a cross-chain swap across all supported bridge aggregators (Across, LI.FI, Squid, Stargate, Symbiosis, XY Finance, DZap, …) and build the winning transactions. Omit account for quote-only. Include account to build full transaction calldata. Each build quote carries approvalTarget/approvalRequired, and actions.permissions holds one ERC-20 approve per unique spender (composed routes share the 1delta composer; plain bridges use their own deposit contract) with a spender field — execute only the permission whose spender equals your chosen quote's approvalTarget. When fromChainId equals toChainId the request falls back to the spot meta-aggregator (same response shape with aggregator instead of bridge per quote, marked fallback: 'spot').

Plain-text reference — GET /v1/actions/swap/x-chain

Parameters

ParameterInTypeRequiredDescription
fromChainIdquerystringyesSource chain ID
toChainIdquerystringyesDestination chain ID
tokenInquerystringyesInput token address on the source chain (zero address for native)
tokenOutquerystringyesOutput token address on the destination chain (zero address for native)
amountquerystringyesInput amount in wei
slippagequerynumberyesSlippage tolerance (basis points)
accountquerystringnoAccount address on the source chain. Include to build transactions, omit for quote-only.
receiverquerystringnoReceiver address on the destination chain (defaults to account)
orderqueryCHEAPEST, FASTESTnoRoute preference
bridgesquerystringnoComma-separated bridge filter (e.g. Across,LI.FI). Defaults to all supported bridges.

Response 200

FieldTypeDescription
successTrue
dataobjectInformational data (quotes, simulation results, etc.)
data.currencyInobjectInput currency info (source chain)
data.currencyOutobjectOutput currency info (destination chain)
data.quotesobject[]Candidate routes, best output first. Execute exactly one.
data.quotes[].bridgestring
data.quotes[].tradeInputnumber
data.quotes[].tradeOutputnumber
data.quotes[].estimatedDurationnumberEstimated bridging duration in seconds
data.currencyInobjectInput currency info (source chain)
data.currencyOutobjectOutput currency info (destination chain)
data.quotesobject[]Candidate routes, best output first. Execute exactly one.
data.quotes[].bridgestring
data.quotes[].tradeInputnumber
data.quotes[].tradeOutputnumber
data.quotes[].estimatedDurationnumberEstimated bridging duration in seconds
data.quotes[].approvalTargetstringThis bridge's deposit contract — the ERC-20 approve spender
data.quotes[].approvalRequiredbooleanFalse when the existing on-chain allowance already covers the input amount
data.quotes[].txobjectAn EVM transaction ready to sign and broadcast. Send to, data and value as-is; do not re-encode them.
data.quotes[].tx.tostringTarget contract address
data.quotes[].tx.datastringEncoded calldata
data.quotes[].tx.valuestringETH value to send with the transaction
data.quotes[].tx.descriptionstringHuman-readable label. For alternatives, this is the aggregator name (e.g. "Paraswap"). For transactions, describes the setup action (e.g. "Switch e-mode to 1").
data.permissionTxnsobject[]ERC-20 approves per bridge deposit contract; each is labeled with the bridge name — execute only the one matching the chosen quote
data.permissionTxns[].tostringTarget contract address
data.permissionTxns[].datastringEncoded calldata
data.permissionTxns[].valuestringETH value
data.permissionTxns[].descriptionstringHuman-readable description of the approval (e.g. "Approve borrow for AAVE_V3", "Approve ERC20")
data.permissionTxns[].spenderstringERC-20 approve spender (x-chain permissions). Match it against the selected quote's approvalTarget — several bridges can share one spender, so do not match by description.
actionsobjectTransaction calldata and approvals. Null for quote-only responses (no account provided).
actions.transactionsobject[]Pre-trade setup transactions (e.g. e-mode switch, collateral enable). Execute these before the main swap. Empty when no setup is needed.
actions.transactions[].tostringTarget contract address
actions.transactions[].datastringEncoded calldata
actions.transactions[].valuestringETH value to send with the transaction
actions.transactions[].descriptionstringHuman-readable label. For alternatives, this is the aggregator name (e.g. "Paraswap"). For transactions, describes the setup action (e.g. "Switch e-mode to 1").
actions.alternativesobject[]DEX aggregator swap transactions sorted by best output (descending). Each entry's description is the aggregator name. The client should pick one to execute. Present on loop action endpoints.
actions.alternatives[].tostringTarget contract address
actions.alternatives[].datastringEncoded calldata
actions.alternatives[].valuestringETH value to send with the transaction
actions.alternatives[].descriptionstringHuman-readable label. For alternatives, this is the aggregator name (e.g. "Paraswap"). For transactions, describes the setup action (e.g. "Switch e-mode to 1").

Example response

{
"success": true,
"data": {
"currencyIn": {},
"currencyOut": {},
"quotes": [
{
"bridge": "string",
"tradeInput": 1.0,
"tradeOutput": 1.0,
"estimatedDuration": 1.0
}
]
},
"actions": {
"transactions": [
{
"to": "0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2",
"data": "0x617ba037000000000000000000000000c02aaa39b2",
"value": "0",
"description": "string"
}
],
"alternatives": [
{
"to": "0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2",
"data": "0x617ba037000000000000000000000000c02aaa39b2",
"value": "0",
"description": "string"
}
],
"permissions": [
{
"to": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"data": "0x617ba037000000000000000000000000c02aaa39b2",
"value": "0",
"description": "string",
"spender": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
}
]
}
}

Request

Responses

Cross-chain swap quote or full build