---
title: "Get a quote for a relayed token transfer"
method: GET
path: "/v1/relayer/quote"
---

# Get a quote for a relayed token transfer

`GET /v1/relayer/quote`

## Request

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

This endpoint can be used to request a quote for a transfer of one token to another, cross chain or not.
The endpoint returns a `Step` object which contains information about the estimated result as well as a `transactionRequest` which can directly be sent to your wallet.
The estimated result can be found inside the `estimate`, containing the estimated `toAmount` of the requested `Token` and the `toAmountMin`, which is the guaranteed minimum value that the transfer will yield including slippage.
If you want to learn more about how to use this endpoint please have a look at our [guide](/introduction/user-flows-and-examples/requesting-route-fetching-quote).

## Query parameters

- `fromChain` string, required
- `toChain` string, required
- `fromToken` string, required
- `toToken` string, required
- `fromAddress` string, required
- `toAddress` string
- `fromAmount` string, required
- `order` 'FASTEST' | 'CHEAPEST'
- `slippage` number
- `integrator` string
- `fee` number
- `referrer` string
- `allowBridges` QuoteBridgesEnum[]
- `allowExchanges` QuoteExchangesEnum[]
- `denyBridges` QuoteBridgesEnum[]
- `denyExchanges` QuoteExchangesEnum[]
- `preferBridges` QuoteBridgesEnum[]
- `preferExchanges` QuoteExchangesEnum[]
- `allowDestinationCall` boolean
- `fromAmountForGas` string
- `maxPriceImpact` number
- `swapStepTimingStrategies` string[]
- `routeTimingStrategies` string[]
- `skipSimulation` boolean

## Headers

- `x-lifi-api-key` string

## Response `200`

- RelayQuoteResponse
  - `status` string
  - `data` RelayQuoteData
    - `quote` RelayQuote
      - `tokenOwner` string
      - `chainId` integer
      - `permit` RelayPermitSchema: A set of parameters specifying the token, permitted amount, spender address, nonce (for uniqueness), and deadline (for expiration) in a Permit2 allowance grant.
        - `permitted` PermittedTokenSchema, required
          - `token` string
          - `amount` string
        - `spender` string, required
        - `nonce` string, required
        - `deadline` integer, required
      - `witness` RelayWitnessFull
        - `witnessType` RelayWithnessType
          - `LiFiCall` RelayWitnessParameters[]
            - `type` string
            - `name` string
        - `witnessTypeName` string
        - `witness` RelayWitness
          - `diamondAddress` string
          - `diamondCalldataHash` string
      - `permitData` RelayPermitWithWitness
        - `permitted` PermittedTokenSchema
          - `token` string
          - `amount` string
        - `spender` string
        - `nonce` string
        - `deadline` integer
        - `witness` RelayWitness
          - `diamondAddress` string
          - `diamondCalldataHash` string
      - `step` Step: Object that represents one step of a `Route`
        - `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
              - …
            - `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
        - `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
              - …
            - `toChainId` number, required: The id of the chain where the transfer should end
            - `toToken` Token, required: Representation of a Token
              - …
            - `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.
              - …
            - `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.
              - …
            - `executionDuration` number, required: The time needed to complete the following step
            - `data` object: Arbitrary data that depends on the the used tool
              - …
        - `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.
    - `approvalTxs` ContractTransactionSchema[]
      - `to` string
      - `from` string
      - `nonce` number
      - `gasLimit` string
      - `gasPrice` string
      - `data` string
      - `value` string
      - `chainId` string
      - `type` number
      - `accessList` RelayAccessList[]
        - `address` string
        - `storageKeys` string[]
      - `maxPriorityFeePerGas` string
      - `maxFeePerGas` string
      - `customData` unknown
      - `enableCcipRead` boolean
      - `blockTag` string

## Other responses

- `400`: Invalid quote request
- `404`: Unable to find a quote for the requested transfer.

---

[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)
