Base URL
https://li.quest/v1
x-lifi-api-key header is optional but recommended for higher rate limits.
GET /chains
Action: Retrieve all supported blockchain networks.Request
curl "https://li.quest/v1/chains"
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
chainTypes | string | No | Filter by type: EVM, SVM, UTXO, MVM (comma-separated) |
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"
}
}
// ... 58 chains total
]
}
Key Fields
| Field | Use |
|---|---|
id | Chain ID for all other API calls |
key | Short identifier (e.g., “eth”, “arb”, “pol”) |
chainType | EVM, SVM (Solana), UTXO (Bitcoin), MVM (Sui) |
mainnet | true for production chains |
nativeToken | Gas token with price |
metamask | Chain config for wallet connection |
GET /tokens
Action: Retrieve tokens available on specified chains.Request
curl "https://li.quest/v1/tokens?chains=1,42161"
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
chains | string | Yes | Comma-separated chain IDs |
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"]
}
// ... hundreds more tokens per chain
],
"42161": [
// ... tokens for Arbitrum
]
}
}
Key Fields
| Field | Use |
|---|---|
address | Token contract address (use in quote) |
decimals | For converting human amounts to smallest units |
priceUSD | Current USD price |
coinKey | Canonical identifier across chains |
tags | Categories like “stablecoin” |
Native Token Address
Native tokens (ETH, MATIC, etc.) use:0x0000000000000000000000000000000000000000
GET /quote
Action: Get a transfer quote with ready-to-execute transaction data.Request
curl "https://li.quest/v1/quote?fromChain=1&toChain=42161&fromToken=USDC&toToken=USDC&fromAmount=10000000&fromAddress=0x..."
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
fromChain | number | Yes | Source chain ID |
toChain | number | Yes | Destination chain ID |
fromToken | string | Yes | Source token address or symbol |
toToken | string | Yes | Destination token address or symbol |
fromAmount | string | Yes | Amount in smallest unit |
fromAddress | string | Yes | Sender wallet address |
toAddress | string | No | Recipient (defaults to fromAddress) |
slippage | number | No | Max slippage (default: 0.005 = 0.5%) |
order | string | No | FASTEST, CHEAPEST |
allowBridges | string | No | Allowed bridges (comma-separated) |
preferBridges | string | No | Preferred bridges (comma-separated) |
denyBridges | string | No | Excluded bridges (comma-separated) |
allowExchanges | string | No | Allowed DEXs (comma-separated) |
preferExchanges | string | No | Preferred DEXs (comma-separated) |
denyExchanges | string | No | Excluded DEXs (comma-separated) |
maxPriceImpact | number | No | Max price impact (e.g., 0.05 = 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://...",
"priceUSD": "0.999606",
"tags": ["stablecoin"]
},
"fromAmount": "10000000",
"toToken": {
"address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"chainId": 42161,
"symbol": "USDC",
"decimals": 6,
"name": "USD Coin",
"coinKey": "USDC",
"logoURI": "https://...",
"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": { /* full token object */ },
"amount": "25000",
"amountUSD": "0.0250",
"percentage": "0.0025",
"included": true,
"feeSplit": { "integratorFee": "0", "lifiFee": "25000" }
}
// ... additional fee items
],
"gasCosts": [
{
"type": "SEND",
"price": "65729222",
"estimate": "220266",
"limit": "286346",
"amount": "14477912813052",
"amountUSD": "0.0423",
"token": { /* native token object */ }
}
],
"executionDuration": 4,
"fromAmountUSD": "9.9961",
"toAmountUSD": "9.9618"
},
"includedSteps": [
{
"id": "e1c87be5-80be-4e2d-8c96-a6492566a739",
"type": "protocol",
"action": { /* step action */ },
"estimate": { /* step estimate */ },
"tool": "feeCollection",
"toolDetails": { /* tool info */ }
},
{
"id": "529839e7-a048-4abe-99ad-d650a0fe469e",
"type": "cross",
"action": { /* step action */ },
"estimate": { /* step estimate */ },
"tool": "across",
"toolDetails": { /* tool info */ }
}
],
"integrator": "lifi-api",
"transactionRequest": {
"value": "0x0",
"to": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE",
"data": "0x1794958f...",
"from": "0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0",
"chainId": 1,
"gasPrice": "0x3eaf2c6",
"gasLimit": "0x45e8a"
},
"transactionId": "0x1695bded7c1634dce4a200bdec72be0ed6cc5f7153ec2dc832b271d790eb00c8"
}
See the Five-Call Recipe for the complete untruncated response.
Key Fields
| Field | Use |
|---|---|
tool | Bridge/DEX used (optional for status check, speeds up response) |
estimate.toAmount | Expected output amount |
estimate.toAmountMin | Minimum guaranteed (slippage-protected) |
estimate.approvalAddress | Spender address for ERC20 approval |
estimate.feeCosts | Detailed fee breakdown |
estimate.gasCosts | Gas cost estimates |
includedSteps | Each step in multi-step transfers |
transactionRequest | Ready-to-sign transaction object |
transactionId | Unique ID for tracking |
Constraints
fromAmountmust be in smallest unit (e.g., 6 decimals for USDC)slippageis a decimal (0.005 = 0.5%, not 0.5)- Quote expires after ~60 seconds
GET /status
Action: Check the status of a cross-chain transfer.Request
curl "https://li.quest/v1/status?txHash=0x..."
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
txHash | string | Yes | Source chain transaction hash |
fromChain | number | No | Source chain ID (recommended for speed) |
toChain | number | No | Destination chain ID |
bridge | string | No | Bridge tool from quote |
Only
txHash is required. Providing fromChain significantly speeds up the response.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://...",
"priceUSD": "0.999606"
},
"amountUSD": "9.9961",
"gasPrice": "65729222",
"gasUsed": "220266",
"gasToken": { /* native token */ },
"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://...",
"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"
}
Key Fields
| Field | Use |
|---|---|
status | Main status (see table below) |
substatus | Detailed outcome |
sending.txHash | Source chain transaction |
receiving.txHash | Destination chain transaction |
lifiExplorerLink | Link to LI.FI explorer |
receiving.amount | Actual received amount |
Status Values
| Status | Substatus | Meaning |
|---|---|---|
NOT_FOUND or HTTP 404 (code: 1003) | - | Outcome unknown; bounded polling then source-chain reconciliation, never automatic resubmission |
PENDING | - | Transfer in progress |
DONE | COMPLETED | Success - received requested token |
DONE | PARTIAL | Success - received different token |
DONE | REFUNDED | Failed - tokens returned to sender |
FAILED | various | Permanent failure (see substatus) |
POST /advanced/routes
Action: Get multiple route options for a transfer.Request
curl -X POST "https://li.quest/v1/advanced/routes" \
-H "Content-Type: application/json" \
-d '{
"fromChainId": 1,
"toChainId": 42161,
"fromTokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"toTokenAddress": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"fromAmount": "10000000",
"fromAddress": "0x..."
}'
Parameters (JSON Body)
| Parameter | Type | Required | Description |
|---|---|---|---|
fromChainId | number | Yes | Source chain ID |
toChainId | number | Yes | Destination chain ID |
fromTokenAddress | string | Yes | Source token address |
toTokenAddress | string | Yes | Destination token address |
fromAmount | string | Yes | Amount in smallest unit |
fromAddress | string | Yes | Sender address |
options | object | No | Additional options |
Response
{
"routes": [
{
"id": "0x...",
"steps": [...],
"toAmount": "9900000",
"toAmountMin": "9850000",
"gasCostUSD": "5.23",
"tags": []
}
]
}
When to Use
- Need multiple route options
- User wants to compare bridges
- Complex multi-hop transfers
POST /advanced/stepTransaction
Action: Get transaction data for a specific route step.Request
curl -X POST "https://li.quest/v1/advanced/stepTransaction" \
-H "Content-Type: application/json" \
-d '{ "step": { ... } }'
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
step | object | Yes | Step object from routes response |
Response
Returns the step withtransactionRequest populated.
When to Use
After/advanced/routes to get transaction data for each step.
GET /connections
Action: Get all possible token connections between two chains.Request
curl "https://li.quest/v1/connections?fromChain=1&toChain=42161"
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
fromChain | number | Yes | Source chain ID |
toChain | number | Yes | Destination chain ID |
fromToken | string | No | Filter by source token |
toToken | string | No | Filter by destination token |
Response
{
"connections": [
{
"fromChainId": 1,
"toChainId": 42161,
"fromTokens": [
{
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"chainId": 1
}
// ... more tokens that can be sent
],
"toTokens": [
{
"address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"chainId": 42161
}
// ... more tokens that can be received
]
}
]
}
Key Fields
| Field | Use |
|---|---|
fromChainId | Source chain |
toChainId | Destination chain |
fromTokens | Tokens that can be sent (address + chainId) |
toTokens | Tokens that can be received (address + chainId) |
When to Use
- Check if a route is possible before quoting
- Discover available destination tokens
- Build token selection UI
GET /tools
Action: Get available bridges and exchanges.Request
curl "https://li.quest/v1/tools"
Response
{
"bridges": [
{
"key": "across",
"name": "AcrossV4",
"logoURI": "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/bridges/across.svg",
"supportedChains": [
{ "fromChainId": 1, "toChainId": 42161 },
{ "fromChainId": 1, "toChainId": 10 },
{ "fromChainId": 1, "toChainId": 137 }
// ... more chain pairs
]
},
{
"key": "stargateV2",
"name": "Stargate V2",
"logoURI": "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/bridges/stargate.png",
"supportedChains": [
{ "fromChainId": 1, "toChainId": 42161 },
{ "fromChainId": 1, "toChainId": 43114 }
// ... more chain pairs
]
}
// ... 27 bridges total
],
"exchanges": [
{
"key": "uniswap",
"name": "Uniswap V3",
"logoURI": "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/exchanges/uniswap.png",
"supportedChains": [1, 42161, 10, 137, 8453]
},
{
"key": "1inch",
"name": "1inch",
"logoURI": "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/exchanges/oneinch.png",
"supportedChains": [1, 42161, 10, 137, 8453, 43114]
}
// ... 31 exchanges total
]
}
Key Fields
| Field | Use |
|---|---|
bridges[].key | Use in allowBridges / denyBridges |
bridges[].supportedChains | Check if bridge supports your chain pair |
exchanges[].key | Use in allowExchanges / denyExchanges |
exchanges[].supportedChains | Chains where DEX is available |
When to Use
- Filter routes by specific bridges/exchanges
- Show available tools to users
- Validate bridge/exchange selection
Quick Reference
| Endpoint | Method | Purpose |
|---|---|---|
/chains | GET | List supported chains |
/tokens | GET | Get tokens for chains |
/quote | GET | Get quote with tx data |
/status | GET | Check transfer status |
/advanced/routes | POST | Get multiple route options |
/advanced/stepTransaction | POST | Get tx data for route step |
/connections | GET | Check route availability |
/tools | GET | List bridges and exchanges |
Related Pages
- Five-Call Recipe - Complete workflow
- Schemas - Detailed type definitions
- Error Playbooks - Error handling

