Skip to main content
This page provides a complete, copy-paste ready workflow for AI agents to execute cross-chain transfers using just 5 API calls.

The Five Calls

1. GET /chains    → Discover available chains
2. GET /tokens    → Find tokens on those chains
3. GET /quote     → Get transfer quote with transaction data
4. [Execute]      → Sign and send the transaction
5. GET /status    → Poll until transfer completes

Call 1: Get Supported Chains

Discover which blockchains LI.FI supports.

Request

curl "https://li.quest/v1/chains"

Response

{
  "chains": [
    {
      "id": 1,
      "key": "eth",
      "chainType": "EVM",
      "name": "Ethereum",
      "coin": "ETH",
      "mainnet": true,
      "logoURI": "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/chains/ethereum.svg",
      "tokenlistUrl": "https://gateway.ipfs.io/ipns/tokens.uniswap.org",
      "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11",
      "metamask": {
        "chainId": "0x1",
        "blockExplorerUrls": ["https://etherscan.io/"],
        "chainName": "Ethereum Mainnet",
        "nativeCurrency": {
          "name": "ETH",
          "symbol": "ETH",
          "decimals": 18
        },
        "rpcUrls": ["https://mainnet.infura.io/v3/"]
      },
      "nativeToken": {
        "address": "0x0000000000000000000000000000000000000000",
        "chainId": 1,
        "symbol": "ETH",
        "decimals": 18,
        "name": "ETH",
        "coinKey": "ETH",
        "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png",
        "priceUSD": "2923.27"
      }
    },
    {
      "id": 42161,
      "key": "arb",
      "chainType": "EVM",
      "name": "Arbitrum",
      "coin": "ETH",
      "mainnet": true,
      "logoURI": "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/chains/arbitrum.svg",
      "tokenlistUrl": "https://bridge.arbitrum.io/token-list-42161.json",
      "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11",
      "metamask": {
        "chainId": "0xa4b1",
        "blockExplorerUrls": ["https://arbiscan.io/"],
        "chainName": "Arbitrum One",
        "nativeCurrency": {
          "name": "ETH",
          "symbol": "ETH",
          "decimals": 18
        },
        "rpcUrls": ["https://arb1.arbitrum.io/rpc"]
      },
      "nativeToken": {
        "address": "0x0000000000000000000000000000000000000000",
        "chainId": 42161,
        "symbol": "ETH",
        "decimals": 18,
        "name": "ETH",
        "coinKey": "ETH",
        "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png",
        "priceUSD": "2923.27"
      }
    }
    // ... 58 chains total (EVM, SVM, UTXO, MVM)
  ]
}

What to Extract

FieldPurpose
chains[].idChain ID for use in all other API calls
chains[].keyShort identifier (e.g., “eth”, “arb”, “pol”)
chains[].chainTypeFilter by EVM, SVM (Solana), UTXO (Bitcoin), MVM (Sui)
chains[].mainnettrue for mainnets, false for testnets
chains[].nativeTokenNative gas token details
chains[].metamaskChain config for wallet connection

Call 2: Get Tokens for Chains

Find which tokens are available on specific chains.

Request

curl "https://li.quest/v1/tokens?chains=1,42161"

Response

{
  "tokens": {
    "1": [
      {
        "address": "0x0000000000000000000000000000000000000000",
        "chainId": 1,
        "symbol": "ETH",
        "decimals": 18,
        "name": "ETH",
        "coinKey": "ETH",
        "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png",
        "priceUSD": "2923.27"
      },
      {
        "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
        "chainId": 1,
        "symbol": "USDC",
        "decimals": 6,
        "name": "USD Coin",
        "coinKey": "USDC",
        "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
        "priceUSD": "0.999606",
        "tags": ["stablecoin"]
      },
      {
        "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
        "chainId": 1,
        "symbol": "USDT",
        "decimals": 6,
        "name": "Tether USD",
        "coinKey": "USDT",
        "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png",
        "priceUSD": "1.00",
        "tags": ["stablecoin"]
      }
      // ... 500+ more tokens on Ethereum
    ],
    "42161": [
      {
        "address": "0x0000000000000000000000000000000000000000",
        "chainId": 42161,
        "symbol": "ETH",
        "decimals": 18,
        "name": "ETH",
        "coinKey": "ETH",
        "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png",
        "priceUSD": "2923.27"
      },
      {
        "address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
        "chainId": 42161,
        "symbol": "USDC",
        "decimals": 6,
        "name": "USD Coin",
        "coinKey": "USDC",
        "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
        "priceUSD": "0.999606",
        "tags": ["stablecoin"]
      },
      {
        "address": "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
        "chainId": 42161,
        "symbol": "USDT",
        "decimals": 6,
        "name": "Tether USD",
        "coinKey": "USDT",
        "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png",
        "priceUSD": "1.00",
        "tags": ["stablecoin"]
      }
      // ... 200+ more tokens on Arbitrum
    ]
  }
}

What to Extract

FieldPurpose
tokens[chainId][].addressToken contract address (use in quote)
tokens[chainId][].symbolHuman-readable symbol
tokens[chainId][].decimalsFor converting human amounts to smallest units
tokens[chainId][].priceUSDCurrent USD price
tokens[chainId][].coinKeyCanonical token identifier across chains
tokens[chainId][].tagsToken categories (e.g., “stablecoin”)
You can use token symbols (e.g., USDC) instead of addresses in the quote request - the API resolves them automatically.

Call 3: Get a Quote

Request a quote for the transfer. This returns transaction data ready to execute.

Request

curl "https://li.quest/v1/quote?fromChain=1&toChain=42161&fromToken=USDC&toToken=USDC&fromAmount=10000000&fromAddress=0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0"

Parameters

ParameterRequiredDescription
fromChainYesSource chain ID (e.g., 1)
toChainYesDestination chain ID (e.g., 42161)
fromTokenYesSource token address or symbol
toTokenYesDestination token address or symbol
fromAmountYesAmount in smallest unit (e.g., 10000000 = 10 USDC)
fromAddressYesSender wallet address
toAddressNoRecipient address (defaults to fromAddress)
slippageNoMax slippage as decimal (default: 0.005 = 0.5%)

Response

{
  "type": "lifi",
  "id": "9f32864e-d704-46c1-874e-20f492c0ce77:0",
  "tool": "across",
  "toolDetails": {
    "key": "across",
    "name": "AcrossV4",
    "logoURI": "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/bridges/across.svg"
  },
  "action": {
    "fromToken": {
      "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "chainId": 1,
      "symbol": "USDC",
      "decimals": 6,
      "name": "USD Coin",
      "coinKey": "USDC",
      "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
      "priceUSD": "0.999606",
      "tags": ["stablecoin"]
    },
    "fromAmount": "10000000",
    "toToken": {
      "address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
      "chainId": 42161,
      "symbol": "USDC",
      "decimals": 6,
      "name": "USD Coin",
      "coinKey": "USDC",
      "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
      "priceUSD": "0.999606",
      "tags": ["stablecoin"]
    },
    "fromChainId": 1,
    "toChainId": 42161,
    "slippage": 0.001,
    "fromAddress": "0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0",
    "toAddress": "0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0"
  },
  "estimate": {
    "tool": "across",
    "approvalAddress": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE",
    "toAmountMin": "9965731",
    "toAmount": "9965731",
    "fromAmount": "10000000",
    "feeCosts": [
      {
        "name": "LIFI Fixed Fee",
        "description": "Fixed LIFI fee, independent of any other fee",
        "token": {
          "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
          "chainId": 1,
          "symbol": "USDC",
          "decimals": 6,
          "name": "USD Coin",
          "coinKey": "USDC",
          "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
          "priceUSD": "0.999606",
          "tags": ["stablecoin"]
        },
        "amount": "25000",
        "amountUSD": "0.0250",
        "percentage": "0.0025",
        "included": true,
        "feeSplit": {
          "integratorFee": "0",
          "lifiFee": "25000"
        }
      },
      {
        "name": "Relayer fee",
        "description": "The fee taken by the relayer",
        "token": {
          "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
          "chainId": 1,
          "symbol": "USDC",
          "decimals": 6,
          "name": "USD Coin",
          "coinKey": "USDC",
          "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
          "priceUSD": "0.999606",
          "tags": ["stablecoin"]
        },
        "amount": "997",
        "amountUSD": "0.0010",
        "percentage": "0.000100",
        "included": true
      },
      {
        "name": "Relayer gas fee",
        "description": "The gas fee taken by the relayer",
        "token": {
          "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
          "chainId": 1,
          "symbol": "USDC",
          "decimals": 6,
          "name": "USD Coin",
          "coinKey": "USDC",
          "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
          "priceUSD": "0.999606",
          "tags": ["stablecoin"]
        },
        "amount": "8272",
        "amountUSD": "0.0083",
        "percentage": "0.000829",
        "included": true
      }
    ],
    "gasCosts": [
      {
        "type": "SEND",
        "price": "65729222",
        "estimate": "220266",
        "limit": "286346",
        "amount": "14477912813052",
        "amountUSD": "0.0423",
        "token": {
          "address": "0x0000000000000000000000000000000000000000",
          "chainId": 1,
          "symbol": "ETH",
          "decimals": 18,
          "name": "ETH",
          "coinKey": "ETH",
          "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png",
          "priceUSD": "2923.27",
          "tags": ["major_asset"]
        }
      }
    ],
    "executionDuration": 4,
    "fromAmountUSD": "9.9961",
    "toAmountUSD": "9.9618"
  },
  "includedSteps": [
    {
      "id": "e1c87be5-80be-4e2d-8c96-a6492566a739",
      "type": "protocol",
      "action": {
        "fromChainId": 1,
        "fromAmount": "10000000",
        "fromToken": {
          "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
          "chainId": 1,
          "symbol": "USDC",
          "decimals": 6,
          "name": "USD Coin",
          "coinKey": "USDC",
          "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
          "priceUSD": "0.999606",
          "tags": ["stablecoin"]
        },
        "toChainId": 1,
        "toToken": {
          "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
          "chainId": 1,
          "symbol": "USDC",
          "decimals": 6,
          "name": "USD Coin",
          "coinKey": "USDC",
          "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
          "priceUSD": "0.999606",
          "tags": ["stablecoin"]
        },
        "slippage": 0.001,
        "fromAddress": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE",
        "toAddress": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE"
      },
      "estimate": {
        "fromAmount": "10000000",
        "toAmount": "9975000",
        "toAmountMin": "9975000",
        "tool": "feeCollection",
        "approvalAddress": "0x3Ef238c36035880EfbDfa239d218186b79Ad1d6F",
        "gasCosts": [
          {
            "type": "SEND",
            "price": "65729222",
            "estimate": "130000",
            "limit": "169000",
            "amount": "8544798860000",
            "amountUSD": "0.0250",
            "token": {
              "address": "0x0000000000000000000000000000000000000000",
              "chainId": 1,
              "symbol": "ETH",
              "decimals": 18,
              "name": "ETH",
              "coinKey": "ETH",
              "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png",
              "priceUSD": "2923.27",
              "tags": ["major_asset"]
            }
          }
        ],
        "feeCosts": [
          {
            "name": "LIFI Fixed Fee",
            "description": "Fixed LIFI fee, independent of any other fee",
            "token": {
              "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
              "chainId": 1,
              "symbol": "USDC",
              "decimals": 6,
              "name": "USD Coin",
              "coinKey": "USDC",
              "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
              "priceUSD": "0.999606",
              "tags": ["stablecoin"]
            },
            "amount": "25000",
            "amountUSD": "0.0250",
            "percentage": "0.0025",
            "included": true,
            "feeSplit": {
              "integratorFee": "0",
              "lifiFee": "25000"
            }
          }
        ],
        "executionDuration": 0
      },
      "tool": "feeCollection",
      "toolDetails": {
        "key": "feeCollection",
        "name": "Integrator Fee",
        "logoURI": "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/protocols/feeCollection.svg"
      }
    },
    {
      "id": "529839e7-a048-4abe-99ad-d650a0fe469e",
      "type": "cross",
      "action": {
        "fromChainId": 1,
        "fromAmount": "9975000",
        "fromToken": {
          "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
          "chainId": 1,
          "symbol": "USDC",
          "decimals": 6,
          "name": "USD Coin",
          "coinKey": "USDC",
          "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
          "priceUSD": "0.999606",
          "tags": ["stablecoin"]
        },
        "toChainId": 42161,
        "toToken": {
          "address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
          "chainId": 42161,
          "symbol": "USDC",
          "decimals": 6,
          "name": "USD Coin",
          "coinKey": "USDC",
          "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
          "priceUSD": "0.999606",
          "tags": ["stablecoin"]
        },
        "slippage": 0.001,
        "fromAddress": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE",
        "toAddress": "0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0",
        "destinationGasConsumption": "0"
      },
      "estimate": {
        "fromAmount": "9975000",
        "toAmount": "9965731",
        "toAmountMin": "9965731",
        "approvalAddress": "0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5",
        "executionDuration": 4,
        "feeCosts": [
          {
            "name": "Relayer fee",
            "description": "The fee taken by the relayer",
            "token": {
              "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
              "chainId": 1,
              "symbol": "USDC",
              "decimals": 6,
              "name": "USD Coin",
              "coinKey": "USDC",
              "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
              "priceUSD": "0.999606",
              "tags": ["stablecoin"]
            },
            "amount": "997",
            "amountUSD": "0.0010",
            "percentage": "0.000100",
            "included": true
          },
          {
            "name": "Relayer gas fee",
            "description": "The gas fee taken by the relayer",
            "token": {
              "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
              "chainId": 1,
              "symbol": "USDC",
              "decimals": 6,
              "name": "USD Coin",
              "coinKey": "USDC",
              "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
              "priceUSD": "0.999606",
              "tags": ["stablecoin"]
            },
            "amount": "8272",
            "amountUSD": "0.0083",
            "percentage": "0.000829",
            "included": true
          }
        ],
        "gasCosts": [
          {
            "type": "SEND",
            "price": "65729222",
            "estimate": "86000",
            "limit": "111800",
            "amount": "5652713092000",
            "amountUSD": "0.0165",
            "token": {
              "address": "0x0000000000000000000000000000000000000000",
              "chainId": 1,
              "symbol": "ETH",
              "decimals": 18,
              "name": "ETH",
              "coinKey": "ETH",
              "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png",
              "priceUSD": "2923.27",
              "tags": ["major_asset"]
            }
          }
        ],
        "tool": "across"
      },
      "tool": "across",
      "toolDetails": {
        "key": "across",
        "name": "AcrossV4",
        "logoURI": "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/bridges/across.svg"
      }
    }
  ],
  "integrator": "lifi-api",
  "transactionRequest": {
    "value": "0x0",
    "to": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE",
    "data": "0x1794958f0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000004001695bded7c1634dce4a200bdec72be0ed6cc5f7153ec2dc832b271d790eb00c8000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000552008c0f6870c2f77e5cc1d2eb9bdff03e30ea000000000000000000000000000000000000000000000000000000000009834d8000000000000000000000000000000000000000000000000000000000000a4b10000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066163726f7373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086c6966692d617069000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000003ef238c36035880efbdfa239d218186b79ad1d6f0000000000000000000000003ef238c36035880efbdfa239d218186b79ad1d6f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000098968000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000084eedd56e1000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a8000000000000000000000000b9c0de368bece5e76b52545a8e377a4c118f597b00000000000000000000000000000000000000000000000000000000000000000000000000000000552008c0f6870c2f77e5cc1d2eb9bdff03e30ea0000000000000000000000000552008c0f6870c2f77e5cc1d2eb9bdff03e30ea0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e583100000000000000000000000000000000000000000000000000000000009810a30000000000000000000000000000000000000000000000000ddd69940d1f65b200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069734fab00000000000000000000000000000000000000000000000000000000697373ed000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000000",
    "from": "0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0",
    "chainId": 1,
    "gasPrice": "0x3eaf2c6",
    "gasLimit": "0x45e8a"
  },
  "transactionId": "0x1695bded7c1634dce4a200bdec72be0ed6cc5f7153ec2dc832b271d790eb00c8"
}

What to Extract

FieldPurpose
toolBridge/DEX used (needed for status check)
estimate.toAmountExpected output amount
estimate.toAmountMinMinimum guaranteed (slippage protected)
estimate.approvalAddressSpender address for token approval (if ERC20)
estimate.executionDurationEstimated time in seconds
estimate.feeCostsArray of protocol fees
estimate.gasCostsArray of gas costs
includedStepsDetailed breakdown of each step in the transfer
transactionRequestReady-to-sign transaction object
transactionIdUnique identifier for tracking this transfer

Call 4: Execute the Transaction

Before executing, ensure the user has approved the token transfer if using an ERC20 token. Check if fromToken is native (ETH) or ERC20, and verify allowance.

Approval Check (if ERC20)

If fromToken.address is NOT 0x0000000000000000000000000000000000000000:
  1. Call allowance(fromAddress, approvalAddress) on the token contract
  2. If allowance < fromAmount, send an approve(approvalAddress, amount) transaction first

Execute Transaction

Sign and send the transactionRequest object from the quote response:
// The transactionRequest is ready to use
const tx = {
  to: quote.transactionRequest.to,
  data: quote.transactionRequest.data,
  value: quote.transactionRequest.value,
  gasLimit: quote.transactionRequest.gasLimit,
  chainId: quote.transactionRequest.chainId
};

// Sign and send with user's wallet
const txResponse = await wallet.sendTransaction(tx);
const txHash = txResponse.hash;

What to Save

  • txHash - Transaction hash for status polling (required)
  • fromChain - Source chain ID (optional, speeds up status check)
  • toChain - Destination chain ID (optional)
  • tool - From the quote response (optional)

Call 5: Poll Transfer Status

Check the status of the cross-chain transfer until it completes.

Request

curl "https://li.quest/v1/status?txHash=0xabc123...&bridge=stargate&fromChain=1&toChain=42161"

Parameters

ParameterRequiredDescription
txHashYesTransaction hash from step 4
fromChainNoSource chain ID (recommended for faster response)
toChainNoDestination chain ID
bridgeNoThe tool value from the quote
Only txHash is required. The other parameters are optional but providing fromChain speeds up the request.

Response

{
  "transactionId": "0x1695bded7c1634dce4a200bdec72be0ed6cc5f7153ec2dc832b271d790eb00c8",
  "sending": {
    "txHash": "0x1695bded7c1634dce4a200bdec72be0ed6cc5f7153ec2dc832b271d790eb00c8",
    "txLink": "https://etherscan.io/tx/0x1695bded7c1634dce4a200bdec72be0ed6cc5f7153ec2dc832b271d790eb00c8",
    "chainId": 1,
    "amount": "10000000",
    "token": {
      "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "chainId": 1,
      "symbol": "USDC",
      "decimals": 6,
      "name": "USD Coin",
      "coinKey": "USDC",
      "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
      "priceUSD": "0.999606"
    },
    "amountUSD": "9.9961",
    "gasPrice": "65729222",
    "gasUsed": "220266",
    "gasToken": {
      "address": "0x0000000000000000000000000000000000000000",
      "chainId": 1,
      "symbol": "ETH",
      "decimals": 18,
      "name": "ETH",
      "coinKey": "ETH",
      "priceUSD": "2923.27"
    },
    "gasAmount": "14477912813052",
    "gasAmountUSD": "0.0423",
    "timestamp": 1737625200
  },
  "receiving": {
    "txHash": "0xdef456789abc...",
    "txLink": "https://arbiscan.io/tx/0xdef456789abc...",
    "chainId": 42161,
    "amount": "9965731",
    "token": {
      "address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
      "chainId": 42161,
      "symbol": "USDC",
      "decimals": 6,
      "name": "USD Coin",
      "coinKey": "USDC",
      "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
      "priceUSD": "0.999606"
    },
    "amountUSD": "9.9618",
    "timestamp": 1737625204
  },
  "lifiExplorerLink": "https://explorer.li.fi/tx/0x1695bded7c1634dce4a200bdec72be0ed6cc5f7153ec2dc832b271d790eb00c8",
  "fromAddress": "0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0",
  "toAddress": "0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0",
  "tool": "across",
  "status": "DONE",
  "substatus": "COMPLETED"
}

Status Values

StatusAction
NOT_FOUNDTransaction not indexed yet, keep polling
PENDINGTransfer in progress, keep polling
DONETransfer complete, check substatus
FAILEDTransfer failed, check error

Substatus Values (when DONE)

SubstatusMeaning
COMPLETEDSuccess - user received exact requested tokens
PARTIALSuccess - user received different token (full value)
REFUNDEDFailed - tokens returned to sender

Polling Strategy

const pollStatus = async (txHash, bridge, fromChain, toChain) => {
  const maxAttempts = 60;
  let attempt = 0;
  
  while (attempt < maxAttempts) {
    const response = await fetch(
      `https://li.quest/v1/status?txHash=${txHash}&bridge=${bridge}&fromChain=${fromChain}&toChain=${toChain}`
    );
    const status = await response.json();
    
    if (status.status === 'DONE' || status.status === 'FAILED') {
      return status;
    }
    
    // Wait 10 seconds before next poll
    await new Promise(resolve => setTimeout(resolve, 10000));
    attempt++;
  }
  
  throw new Error('Status polling timeout');
};

Complete Flow Diagram

┌─────────────────────────────────────────────────────────────────┐
│                        AGENT WORKFLOW                           │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  1. GET /chains ──────────────────────► List of chain IDs      │
│                                                                 │
│  2. GET /tokens?chains=X,Y ───────────► Token addresses        │
│                                                                 │
│  3. GET /quote?fromChain=X&... ───────► transactionRequest     │
│           │                                                     │
│           ▼                                                     │
│  4. [Check if ERC20]                                           │
│           │                                                     │
│           ├── Native token ──► Skip approval                   │
│           │                                                     │
│           └── ERC20 ──► Check allowance                        │
│                   │                                             │
│                   └── If insufficient ──► Send approve() tx    │
│                                                                 │
│  5. Sign & send transactionRequest ───► txHash                 │
│                                                                 │
│  6. GET /status?txHash=X&... ─────────► Poll until DONE        │
│           │                                                     │
│           ├── PENDING ──► Keep polling                         │
│           │                                                     │
│           ├── DONE + COMPLETED ──► Success!                    │
│           │                                                     │
│           ├── DONE + PARTIAL ──► Success (different token)     │
│           │                                                     │
│           └── FAILED ──► Handle error                          │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Quick Reference

# 1. Get chains
curl "https://li.quest/v1/chains"

# 2. Get tokens for Ethereum and Arbitrum
curl "https://li.quest/v1/tokens?chains=1,42161"

# 3. Get quote for 10 USDC from Ethereum to Arbitrum (replace address with your own)
curl "https://li.quest/v1/quote?fromChain=1&toChain=42161&fromToken=USDC&toToken=USDC&fromAmount=10000000&fromAddress=0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0"

# 4. Execute transactionRequest with user's wallet

# 5. Check status
curl "https://li.quest/v1/status?txHash=TX_HASH&bridge=TOOL&fromChain=1&toChain=42161"