---
title: "Get a set of routes for a request that describes a transfer of tokens"
method: POST
path: "/v1/advanced/routes"
tags: ["advanced"]
---

# Get a set of routes for a request that describes a transfer of tokens

`POST /v1/advanced/routes`

## Request

- Base URL: `https://li.quest`
- URL: `https://li.quest/v1/advanced/routes`
- Auth: none declared
- TypeScript: <https://skmtc.dev/lifi/apis/li-fi-api/docs/v1/advanced/routes/post.ts> (a function with typed inputs; its response is checked against the schema)

In order to execute any transfer, you must first request possible `Routes`. From the result set a `Route` can be selected and executed by retrieving the transaction for every included `Step` using the `/steps/transaction` endpoint.
**Attention**: This request is more complex and intended to be used via our [JavaScript SDK](https://docs.li.fi/integrate-li.fi-js-sdk/install-li.fi-sdk).

## Headers

- `x-lifi-api-key` string

## Request body

- RoutesRequest: A description of a token transfer
  - `fromChainId` number, required: The sending chain id
  - `fromAmount` string, required: The amount that should be transferred including all decimals (e.g. 1000000 for 1 USDC (6 decimals))
  - `fromTokenAddress` string, required: The address of the sending `Token`
  - `toChainId` number, required: The id of the receiving chain
  - `toTokenAddress` string, required: The address of the receiving `Token`
  - `options` RouteOptions: Optional settings for the route
    - `insurance` boolean: Facilitates transfer insurance via insurace.io, ensuring secure and insured transfer of assets.
    - `integrator` string: Custom string the developer who integrates LiFi can set
    - `slippage` number, double: The maximum allowed slippage
    - `slippageScope` 'step' | 'route': Scope of `slippage`. `step` (default, same as omitted): `slippage` applies to every step. `route`: `slippage` is the budget for the whole route, each route's `toAmountMin` is one floor, `ceil(expected output × (1 − slippage))`, and the route and its steps carry a `routeSlippage` commitment. Routes that can't be protected are left out, with a reason starting with `ROUTE_SLIPPAGE_UNSUPPORTED` in `unavailableRoutes.filteredOut`. When `slippage` is omitted, the budget is the default slippage. See [Route-wide Slippage](/guides/route-wide-slippage).
    - `bridges` AllowDenyPrefer: Object defining which tools should be allowed, denied and preferred
      - `allow` string[]: Allowed tools
      - `deny` string[]: Forbidden tools
      - `prefer` string[]: Preferred tools
    - `exchanges` AllowDenyPrefer: Object defining which tools should be allowed, denied and preferred
      - `allow` string[]: Allowed tools
      - `deny` string[]: Forbidden tools
      - `prefer` string[]: Preferred tools
    - `pools` object: AMM pools or Solana venues that should not be considered for routing. Nested under `options.pools.deny` on POST `/v1/advanced/routes`. Only some exchanges can exclude pools: EVM pool entries restrict swaps on every chain except Solana to the `fly` exchange, and Solana program IDs restrict swaps on Solana to `jupiter`, `titan` and `okx`. Swaps on a chain with no matching entries are not restricted. The list is not carried in the returned steps: pass it again as the `denyPools` query parameter on every POST `/v1/advanced/stepTransaction` request.
      - `deny` string[], nullable: One to 100 AMM pool or Solana venue identifiers to exclude. Each entry is a non-zero Uniswap V2/V3 pool address (`0x` + 40 hex), a Uniswap V4 composite `<poolManagerAddress>-<poolId>` where `poolId` is a 32-byte hex string (`0x` + 64 hex), or a Solana venue program ID (base58), which excludes every pool of that venue. Identifiers of other chains are rejected; individual Solana pool addresses are not supported.
    - `order` 'FASTEST' | 'CHEAPEST': The way the resulting routes should be ordered
    - `allowSwitchChain` boolean: Whether chain switches should be allowed in the routes
    - `allowDestinationCall` boolean: Defines if we should return routes with a cross-chain bridge protocol (Connext, etc.) destination calls or not.
    - `referrer` string: Integrators can set a wallet address as referrer to track them
    - `fee` number, double: The percent of the integrator's fee that is taken from every transaction. The maximum fee amount should be less than 100%.
    - `distributionFees` DistributionFeeEntry[]: Optional array of partner-specified fee distributions. Each entry transfers its `percentage` of the source `fromAmount` to the `receiver` address in parallel with the integrator fee and any intermediary carve-out. Same validation and chain-support rules as the /quote `distributionFees` query parameter. On EVM and Tron this requires FeeForwarder; on Solana each receiver is a transfer instruction and at most 2 entries are accepted. The `receiver` form must match the source chain. Limits: 1..10 entries, each `percentage` in (0, 0.5); total of all distribution percentages plus the integrator `fee` must be strictly less than 1. Receivers are sanctions-screened at transaction-build time. On Solana swap-and-bridge routes the percentages apply to the swap output in the intermediate token.
      - `percentage` number, double, required: Fraction of the source token's `fromAmount` to transfer to the receiver (on Solana swap-and-bridge routes, use the swap output in the intermediate token instead). Must be greater than 0 and strictly less than 0.5 per entry; the total of all distributionFees percentages plus the integrator `fee` must remain strictly less than 1.
      - `receiver` string, required: Recipient address in the form of the source chain: 20-byte 0x-prefixed hex on EVM/Tron (all-lowercase or a valid EIP-55 checksum), base58 public key on Solana. A receiver whose form does not match the source chain is rejected.
    - `maxPriceImpact` number, double: The price impact threshold above which routes are hidden. As an example, one should specify 0.15 (15%) to hide routes with more than 15% price impact. The default is 10%.
    - `timing` object
      - `swapStepTimingStrategies` object[]: Timing setting to wait for a certain amount of swap rates. Please check [docs.li.fi](https://docs.li.fi) for more details.
        - `strategy` 'minWaitTime'
        - `minWaitTimeMs` number
        - `startingExpectedResults` number
        - `reduceEveryMs` number
      - `routeTimingStrategies` object[]: Timing setting to wait for a certain amount of routes to be generated before choosing the best one. Please check [docs.li.fi](https://docs.li.fi) for more details.
        - `strategy` 'minWaitTime'
        - `minWaitTimeMs` number
        - `startingExpectedResults` number
        - `reduceEveryMs` number
    - `preset` string: Pre-configured routing and quote optimization preset. The preset value `stablecoin` is supported for requesting swap and/or bridging operations involving stablecoin tokens. Each preset provides optimized default settings for slippage, price impact, and tool preferences that can be overridden by custom configuration options specified in the same request.
    - `svmMaxSupportedTransactionVersion` 0 | 1, nullable: Maximum Solana transaction version the client can sign. Defaults to 0; omission or null uses v0. Set to 1 to allow V1 where enabled. Jito requests always use v0. At execution, pass the maximum to /advanced/stepTransaction and inspect transactionRequest.svmTransactionVersion.
    - `svmPriorityFeeLevel` 'NORMAL' | 'FAST' | 'ULTRA': Priority fee level for Solana Virtual Machine (SVM) transactions.
  - `fromAddress` string: The sending wallet address
  - `toAddress` string: The receiving wallet address
  - `fromAmountForGas` string: The amount of the token to convert to gas on the destination side.

## Response `200`

The resulting routes that can be used to realize the described transfer of tokens

- RoutesResponse: A list of routes that can be used to realize the described transfer of tokens
  - `routes` Route[], required: List of possible `Routes` for the given transfer
    - `id` string, required: Unique identifier of the route
    - `fromChainId` number, required: The id of the sending chain
    - `fromAmountUSD` string, required: The amount that should be transferred in USD
    - `fromAmount` string, required: The amount that should be transferred
    - `fromToken` Token, required: Representation of a Token
      - `address` string, required: Address of the token
      - `decimals` number, required: Number of decimals the token uses
      - `symbol` string, required: Symbol of the token
      - `chainId` number, required: Id of the token's chain
      - `coinKey` string: Identifier for the token
      - `name` string, required: Name of the token
      - `logoURI` string: Logo of the token
      - `priceUSD` string: Token price in USD
    - `toChainId` number, required: The id of the receiving chain
    - `toAmountUSD` string, required: The estimated resulting amount of the `toToken` in USD as float with two decimals
    - `toAmount` string, required: The estimated resulting amount of the `toToken` including all decimals
    - `toAmountMin` string, required: The minimal resulting amount of the `toToken` including all decimals. It may reflect applicable slippage and known fee-on-transfer tax adjustments.
    - `routeSlippage` RouteSlippageCommitment: Route-wide slippage commitment attached to a route and its steps when the request used `slippageScope=route`. `minimumToAmount` is `ceil(referenceToAmount × (1 − slippage))` and doesn't change for the life of the route: every build of the transaction enforces at least this amount, or is refused.
      - `scope` 'route', required
      - `slippage` string, required: The budget for the whole route, as a decimal string, for example `0.01`
      - `referenceToAmount` string, required: The expected output the floor was computed from, in base units of the destination token
      - `minimumToAmount` string, required: The floor, in base units of the destination token. Also returned as `toAmountMin`.
      - `toChainId` integer, required: The chain the floor applies to
      - `toTokenAddress` string, required: The token the floor applies to
      - `toAddress` string: The recipient the delivery is measured at
      - `settlement` 'atomic' | 'conditional', required: `atomic`: a single transaction; a delivery below the floor reverts it. `conditional`: a cross-chain transfer. The source transaction enforces the source checkpoint, and the bridge holds the floor from there: Mayan, Across and Stargate V2 carry it in their own order, and other bridges are built only when their own minimum reaches it. A bridge that can't deliver its minimum refunds or recovers instead, which `/v1/status` reports as `NOT_FULFILLED`.
      - `checkpoints` object[], required: Amounts enforced along the way. `atomic`: one entry, the floor. `conditional`: the source checkpoint (the minimum the source transaction must hand to the bridge, in the bridged token) followed by the floor.
        - `stepId` string, required
        - `chainId` integer, required
        - `tokenAddress` string, required
        - `minimumAmount` string, required
    - `toToken` Token, required: Representation of a Token
      - `address` string, required: Address of the token
      - `decimals` number, required: Number of decimals the token uses
      - `symbol` string, required: Symbol of the token
      - `chainId` number, required: Id of the token's chain
      - `coinKey` string: Identifier for the token
      - `name` string, required: Name of the token
      - `logoURI` string: Logo of the token
      - `priceUSD` string: Token price in USD
    - `gasCostUSD` string: Aggregation of th eunderlying gas costs in USD
    - `steps` Step[], required: The steps required to fulfill the transfer
      - `id` string, required: Unique identifier of the step
      - `type` 'swap' | 'cross' | 'lifi' | 'protocol', required: The type of the step. `swap` executes a DEX swap on a single chain, `cross` bridges assets between chains, `lifi` runs LiFi's internal multi-action logic, and `protocol` represents protocol-level actions such as fee collection or vault interactions executed inside LiFi managed contracts.
      - `tool` string, required: The tool used for this step. E.g. `relay`
      - `toolDetails` object: The details of the tool used for this step. E.g. `relay`
        - `key` string: The tool key
        - `name` string: The tool name
        - `logoURI` string: The tool logo URL
      - `action` Action, required: Object describing what happens in a `Step`
        - `fromChainId` number, required: The id of the chain where the transfer should start
        - `fromAmount` string, required: The amount that should be transferred including all decimals
        - `fromToken` Token, required: Representation of a Token
          - `address` string, required: Address of the token
          - `decimals` number, required: Number of decimals the token uses
          - `symbol` string, required: Symbol of the token
          - `chainId` number, required: Id of the token's chain
          - `coinKey` string: Identifier for the token
          - `name` string, required: Name of the token
          - `logoURI` string: Logo of the token
          - `priceUSD` string: Token price in USD
        - `toChainId` number, required: The id of the chain where the transfer should end
        - `toToken` Token, required: Representation of a Token
          - `address` string, required: Address of the token
          - `decimals` number, required: Number of decimals the token uses
          - `symbol` string, required: Symbol of the token
          - `chainId` number, required: Id of the token's chain
          - `coinKey` string: Identifier for the token
          - `name` string, required: Name of the token
          - `logoURI` string: Logo of the token
          - `priceUSD` string: Token price in USD
        - `slippage` number, double: The maximum allowed slippage
        - `fromAddress` string: The sending wallet address
        - `toAddress` string: The receiving wallet address
      - `estimate` Estimate: An estimate for the current transfer
        - `tool` string, required: The tools that is being used for this step
        - `fromAmount` string, required: The amount that should be transferred including all decimals
        - `fromAmountUSD` string: The amount that should be transferred in USD equivalent
        - `toAmount` string, required: The estimated resulting amount of the `toToken` including all decimals
        - `toAmountMin` string, required: The minimal outcome of the transfer including all decimals. It may reflect applicable slippage and known fee-on-transfer tax adjustments.
        - `toAmountUSD` string: The estimated resulting amount of the `toToken` in USD equivalent
        - `approvalAddress` string, required: The contract address for the approval
        - `skipApproval` boolean: Optional flag indicating that this step needs no token approval, because the executing contract moves funds under the authorization already carried by the signed transaction or message.
        - `feeCosts` FeeCost[]: Fees charged on the transfer. On a `lifi` step this array is the concatenation of the fee costs of every entry in `includedSteps`, so it already contains them. Do not add both together.
          - `name` string, required: Human-readable name of the fee, for example `LIFI Fixed Fee` or `Relayer Gas fee`. Names are tool-specific free text and are not a stable enum. Do not branch on this value.
          - `description` string: Description of the fee costs
          - `percentage` string, required: The fee expressed as a fraction of the transferred amount, for example `0.0025` for 0.25%. A fee whose name contains `Fixed` may still report a non-zero fraction; do not infer the fee model from `name` or assume fixed-fee entries report `0`.
          - `token` Token, required: Representation of a Token
            - `address` string, required: Address of the token
            - `decimals` number, required: Number of decimals the token uses
            - `symbol` string, required: Symbol of the token
            - `chainId` number, required: Id of the token's chain
            - `coinKey` string: Identifier for the token
            - `name` string, required: Name of the token
            - `logoURI` string: Logo of the token
            - `priceUSD` string: Token price in USD
          - `amount` string: The fee amount in the smallest unit of `token`, before decimals are applied. Divide by `10 ** token.decimals` for a human-readable amount.
          - `amountUSD` string, required: The amount of fees in USD
          - `included` boolean, required: `true` means the fee is already accounted for in the quoted amounts and must not be added again as a separate user payment. `false` means the user pays it on top of `fromAmount`.
          - `feeSplit` object: Response-only breakdown of this fee entry's `amount` into the parties that share it. Returned for the LI.FI/integrator fee entry and for a separate `Distributions` entry when distributions are present; omitted for fees such as a relayer or bridge gas fee. For the LI.FI/integrator entry, `lifiFee`, `integratorFee`, and `intermediaryFee` (when present) are disjoint slices of its `amount`. For the `Distributions` entry, `lifiFee` and `integratorFee` are both "0"; its `amount` is the sum of its distribution recipients. `recipients[]` describes only the parent fee entry. It is a breakdown of that entry's `amount`, not an additional charge. This field is returned, not accepted: the API ignores a `feeSplit` posted in a request body, so integrations must read the split from the response instead of echoing back a previously quoted one.
            - `lifiFee` string: LI.FI's slice of `amount`, in the smallest unit of `token`.
            - `integratorFee` string: The integrator's slice of `amount`, in the smallest unit of `token`. It excludes intermediary fees (reported separately as `intermediaryFee`) and distributions (reported in a separate `Distributions` fee entry). It is "0" on the `Distributions` entry.
            - `intermediaryFee` string: The intermediary's slice of `amount`, in the smallest unit of `token`. Present only when an intermediary participates in the split.
            - `recipients` object[]: Per-recipient breakdown of this fee entry's `amount`. The LI.FI/integrator entry lists its own recipients, excluding partner-specified distributions. Those are listed in the separate `Distributions` entry's own `feeSplit.recipients[]`, with type `DISTRIBUTION` and one record per distribution.
              - …
        - `gasCosts` GasCost[]: Estimated network gas for the transfer. On a `lifi` step this is a single estimate for the transaction that is actually submitted. It aggregates raw gas costs from source-chain entries in `includedSteps` and, for EVM transactions, adds estimated LI.FI contract overhead. It may differ from and often exceed the sum of the source-chain per-step entries. Raw destination-chain gas costs are not added directly. Do not add the top-level and included-step arrays together.
          - `type` 'SUM' | 'APPROVE' | 'SEND' | 'FEE', required: The kind of gas cost this entry represents. - `SEND`: estimated network gas for the transaction the sender submits, normally on the source chain. This is the only value the API currently returns. - `APPROVE`: estimated network gas for a separate ERC-20 approval transaction. Reserved; approval gas is not currently returned as its own entry. - `FEE`: an execution cost charged as a fee rather than as a transaction the user signs. Reserved; such costs are currently reported in `feeCosts` instead. - `SUM`: an aggregate of the other entries. Reserved and not currently returned. Treat `APPROVE`, `FEE`, and `SUM` as forward-compatible values: handle them if they appear, but do not build a flow that depends on them.
          - `price` string: Gas price used for the estimate, in the smallest unit of the gas token per unit of gas (wei per gas on EVM chains).
          - `estimate` string: Estimated units of gas the transaction consumes
          - `limit` string: Suggested gas limit: `estimate` plus a safety buffer. Use this value when submitting the transaction, not `estimate`.
          - `amount` string, required: The estimated total gas cost in the smallest unit of the gas token. For EVM entries this is `estimate` multiplied by `price`. Other ecosystems may use chain-specific units and rounding, so consumers should treat `amount` as authoritative rather than reconstructing it from the other fields. Divide by `10 ** token.decimals` for a human-readable amount.
          - `amountUSD` string: Amount of the gas cost in USD
          - `token` Token, required: Representation of a Token
            - `address` string, required: Address of the token
            - `decimals` number, required: Number of decimals the token uses
            - `symbol` string, required: Symbol of the token
            - `chainId` number, required: Id of the token's chain
            - `coinKey` string: Identifier for the token
            - `name` string, required: Name of the token
            - `logoURI` string: Logo of the token
            - `priceUSD` string: Token price in USD
        - `executionDuration` number, required: The time needed to complete the following step
        - `data` object: Arbitrary data that depends on the the used tool
          - `bid` object
            - `user` string
            - `router` string
            - `initiator` string
            - `sendingChainId` number
            - `sendingAssetId` string
            - `amount` string
            - `receivingChainId` number
            - `receivingAssetId` string
            - `amountReceived` string
            - `receivingAddress` string
            - `transactionId` string
            - `expiry` number
            - `callDataHash` string
            - `callTo` string
            - `encryptedCallData` string
            - `sendingChainTxManagerAddress` string
            - `receivingChainTxManagerAddress` string
            - `bidExpiry` number
          - `bidSignature` string
          - `gasFeeInReceivingToken` string
          - `totalFee` string
          - `metaTxRelayerFee` string
          - `routerFee` string
      - `routeSlippage` RouteSlippageCommitment: Route-wide slippage commitment attached to a route and its steps when the request used `slippageScope=route`. `minimumToAmount` is `ceil(referenceToAmount × (1 − slippage))` and doesn't change for the life of the route: every build of the transaction enforces at least this amount, or is refused.
        - `scope` 'route', required
        - `slippage` string, required: The budget for the whole route, as a decimal string, for example `0.01`
        - `referenceToAmount` string, required: The expected output the floor was computed from, in base units of the destination token
        - `minimumToAmount` string, required: The floor, in base units of the destination token. Also returned as `toAmountMin`.
        - `toChainId` integer, required: The chain the floor applies to
        - `toTokenAddress` string, required: The token the floor applies to
        - `toAddress` string: The recipient the delivery is measured at
        - `settlement` 'atomic' | 'conditional', required: `atomic`: a single transaction; a delivery below the floor reverts it. `conditional`: a cross-chain transfer. The source transaction enforces the source checkpoint, and the bridge holds the floor from there: Mayan, Across and Stargate V2 carry it in their own order, and other bridges are built only when their own minimum reaches it. A bridge that can't deliver its minimum refunds or recovers instead, which `/v1/status` reports as `NOT_FULFILLED`.
        - `checkpoints` object[], required: Amounts enforced along the way. `atomic`: one entry, the floor. `conditional`: the source checkpoint (the minimum the source transaction must hand to the bridge, in the bridged token) followed by the floor.
          - `stepId` string, required
          - `chainId` integer, required
          - `tokenAddress` string, required
          - `minimumAmount` string, required
      - `integrator` string: A string containing tracking information about the integrator of the API
      - `includedSteps` IncludedStep[]
        - `id` string, required: Unique identifier of the step
        - `type` 'swap' | 'cross' | 'lifi' | 'protocol', required: The type of the step. `swap` executes a DEX swap on a single chain, `cross` bridges assets between chains, `lifi` runs LiFi's internal multi-action logic, and `protocol` represents protocol-level actions such as fee collection or vault interactions executed inside LiFi managed contracts.
        - `tool` string, required: The tool used for this step. E.g. `allbridge`
        - `toolDetails` object, required: The details of the tool used for this step. E.g. `allbridge`
          - `key` string: The tool key
          - `name` string: The tool name
          - `logoURI` string: The tool logo URL
        - `action` Action, required: Object describing what happens in a `Step`
          - `fromChainId` number, required: The id of the chain where the transfer should start
          - `fromAmount` string, required: The amount that should be transferred including all decimals
          - `fromToken` Token, required: Representation of a Token
            - `address` string, required: Address of the token
            - `decimals` number, required: Number of decimals the token uses
            - `symbol` string, required: Symbol of the token
            - `chainId` number, required: Id of the token's chain
            - `coinKey` string: Identifier for the token
            - `name` string, required: Name of the token
            - `logoURI` string: Logo of the token
            - `priceUSD` string: Token price in USD
          - `toChainId` number, required: The id of the chain where the transfer should end
          - `toToken` Token, required: Representation of a Token
            - `address` string, required: Address of the token
            - `decimals` number, required: Number of decimals the token uses
            - `symbol` string, required: Symbol of the token
            - `chainId` number, required: Id of the token's chain
            - `coinKey` string: Identifier for the token
            - `name` string, required: Name of the token
            - `logoURI` string: Logo of the token
            - `priceUSD` string: Token price in USD
          - `slippage` number, double: The maximum allowed slippage
          - `fromAddress` string: The sending wallet address
          - `toAddress` string: The receiving wallet address
        - `estimate` Estimate, required: An estimate for the current transfer
          - `tool` string, required: The tools that is being used for this step
          - `fromAmount` string, required: The amount that should be transferred including all decimals
          - `fromAmountUSD` string: The amount that should be transferred in USD equivalent
          - `toAmount` string, required: The estimated resulting amount of the `toToken` including all decimals
          - `toAmountMin` string, required: The minimal outcome of the transfer including all decimals. It may reflect applicable slippage and known fee-on-transfer tax adjustments.
          - `toAmountUSD` string: The estimated resulting amount of the `toToken` in USD equivalent
          - `approvalAddress` string, required: The contract address for the approval
          - `skipApproval` boolean: Optional flag indicating that this step needs no token approval, because the executing contract moves funds under the authorization already carried by the signed transaction or message.
          - `feeCosts` FeeCost[]: Fees charged on the transfer. On a `lifi` step this array is the concatenation of the fee costs of every entry in `includedSteps`, so it already contains them. Do not add both together.
            - `name` string, required: Human-readable name of the fee, for example `LIFI Fixed Fee` or `Relayer Gas fee`. Names are tool-specific free text and are not a stable enum. Do not branch on this value.
            - `description` string: Description of the fee costs
            - `percentage` string, required: The fee expressed as a fraction of the transferred amount, for example `0.0025` for 0.25%. A fee whose name contains `Fixed` may still report a non-zero fraction; do not infer the fee model from `name` or assume fixed-fee entries report `0`.
            - `token` Token, required: Representation of a Token
              - …
            - `amount` string: The fee amount in the smallest unit of `token`, before decimals are applied. Divide by `10 ** token.decimals` for a human-readable amount.
            - `amountUSD` string, required: The amount of fees in USD
            - `included` boolean, required: `true` means the fee is already accounted for in the quoted amounts and must not be added again as a separate user payment. `false` means the user pays it on top of `fromAmount`.
            - `feeSplit` object: Response-only breakdown of this fee entry's `amount` into the parties that share it. Returned for the LI.FI/integrator fee entry and for a separate `Distributions` entry when distributions are present; omitted for fees such as a relayer or bridge gas fee. For the LI.FI/integrator entry, `lifiFee`, `integratorFee`, and `intermediaryFee` (when present) are disjoint slices of its `amount`. For the `Distributions` entry, `lifiFee` and `integratorFee` are both "0"; its `amount` is the sum of its distribution recipients. `recipients[]` describes only the parent fee entry. It is a breakdown of that entry's `amount`, not an additional charge. This field is returned, not accepted: the API ignores a `feeSplit` posted in a request body, so integrations must read the split from the response instead of echoing back a previously quoted one.
              - …
          - `gasCosts` GasCost[]: Estimated network gas for the transfer. On a `lifi` step this is a single estimate for the transaction that is actually submitted. It aggregates raw gas costs from source-chain entries in `includedSteps` and, for EVM transactions, adds estimated LI.FI contract overhead. It may differ from and often exceed the sum of the source-chain per-step entries. Raw destination-chain gas costs are not added directly. Do not add the top-level and included-step arrays together.
            - `type` 'SUM' | 'APPROVE' | 'SEND' | 'FEE', required: The kind of gas cost this entry represents. - `SEND`: estimated network gas for the transaction the sender submits, normally on the source chain. This is the only value the API currently returns. - `APPROVE`: estimated network gas for a separate ERC-20 approval transaction. Reserved; approval gas is not currently returned as its own entry. - `FEE`: an execution cost charged as a fee rather than as a transaction the user signs. Reserved; such costs are currently reported in `feeCosts` instead. - `SUM`: an aggregate of the other entries. Reserved and not currently returned. Treat `APPROVE`, `FEE`, and `SUM` as forward-compatible values: handle them if they appear, but do not build a flow that depends on them.
            - `price` string: Gas price used for the estimate, in the smallest unit of the gas token per unit of gas (wei per gas on EVM chains).
            - `estimate` string: Estimated units of gas the transaction consumes
            - `limit` string: Suggested gas limit: `estimate` plus a safety buffer. Use this value when submitting the transaction, not `estimate`.
            - `amount` string, required: The estimated total gas cost in the smallest unit of the gas token. For EVM entries this is `estimate` multiplied by `price`. Other ecosystems may use chain-specific units and rounding, so consumers should treat `amount` as authoritative rather than reconstructing it from the other fields. Divide by `10 ** token.decimals` for a human-readable amount.
            - `amountUSD` string: Amount of the gas cost in USD
            - `token` Token, required: Representation of a Token
              - …
          - `executionDuration` number, required: The time needed to complete the following step
          - `data` object: Arbitrary data that depends on the the used tool
            - `bid` object
              - …
            - `bidSignature` string
            - `gasFeeInReceivingToken` string
            - `totalFee` string
            - `metaTxRelayerFee` string
            - `routerFee` string
      - `referrer` string: A string containing tracking information about the referrer of the integrator
      - `execution` unknown
      - `transactionRequest` object: An ether.js TransactionRequest that can be triggered using a wallet provider. (https://docs.ethers.io/v5/api/providers/types/#providers-TransactionRequest) Solana responses also include svmTransactionVersion (0 or 1), the version actually built. This may be lower than the requested maximum.
        - `svmTransactionVersion` 0 | 1: Solana transaction version actually built; Jito always uses 0.
    - `fromAddress` string: The sending wallet address
    - `toAddress` string: The receiving wallet address
    - `containsSwitchChain` boolean: Whether a chain switch is part of the route
  - `unavailableRoutes` UnavailableRoutes[]: An object representing the routes that are unavailable for the given transfer
    - `filteredOut` object[]: An object containing information about routes that were intentionally filtered out.
      - `overallPath` string: The complete representation of the attempted route.
      - `reason` string: Out best attempt at describing the failure.
    - `failed` object[]: An object containing information about failed routes.
      - `overallPath` string: The complete representation of the attempted route.
      - `subpaths` object: An object with all subpaths that generated one or more errors

## Other responses

- `400`: Invalid Routes Request
- `404`: Requested `to` or `from` token was not found

---

[API](https://skmtc.dev/lifi/apis/li-fi-api.md) - [All operations](https://skmtc.dev/lifi/apis/li-fi-api/llms.txt) - [OpenAPI document](https://skmtc.dev/lifi/apis/li-fi-api/revisions/82e72a7fa5e0?raw)
