> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sprinter.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Request a LI.FI Intents Quote

> Prices a LI.FI intents order against Sprinter liquidity and reserves that liquidity for the quote's validity window. The response is shaped like a single element of LI.FI's own request-quote response.

Prices an order against Sprinter liquidity and **reserves that liquidity** for the quote's validity window. The response is shaped like a single element of LI.FI's [request-quote](https://docs.li.fi/lifi-intents/intents-api/request-quote) response, so an existing LI.FI intents client can consume it unchanged.

<Warning>
  A quote is valid for **15 seconds**. The reservation expires with it. Call [`POST /lifi-intents/transaction`](/api-reference/sprinter/lifi-intents/transaction) immediately — do not cache a quote or show it to a user for confirmation before converting it.
</Warning>

## Behaviour

|                     |                                                                                               |
| ------------------- | --------------------------------------------------------------------------------------------- |
| **Exclusivity**     | Always exclusive to Sprinter. `metadata.exclusiveFor` returns the filler address              |
| **Protocol**        | Always `lifi-escrow`. Your API key must be provisioned for it                                 |
| **Quotes returned** | Exactly one, or an error. There is no empty `quotes` array                                    |
| **Amount basis**    | `type=ExactInput` (default) reads `amount` as the input; `ExactOutput` reads it as the output |
| **Token defaults**  | `srcToken` defaults to the same token symbol as `token`, resolved on the source chain         |

## Errors

| Status | Meaning                                                                                                                      | Retry?                                                                             |
| ------ | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| `400`  | No route configured for this chain/token pair, or invalid parameters                                                         | No — fix the request or ask about onboarding the route                             |
| `404`  | Route exists, but no pool can serve it right now — capacity is reserved by other in-flight quotes, or pricing is unavailable | Yes, after a short backoff. Reservations expire in 15s, so pressure clears quickly |
| `401`  | Missing or unrecognized `X-Auth-Token`                                                                                       | No                                                                                 |

<Tip>
  `404` is a capacity answer, not a validity answer. Fall back to your own path if it persists, but a single retry a few seconds later often succeeds.
</Tip>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url 'https://api.sprinter.tech/lifi-intents/rfq?srcChain=eip155:8453&dstChain=eip155:42161&amount=100000000&token=0xaf88d065e77c8cC2239327C5EDb3A432268e5831&user=0x1F98431c8aD98523631AE4a59f267346ea31F984' \
    --header 'X-Auth-Token: YOUR_API_KEY'
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      "https://api.sprinter.tech/lifi-intents/rfq",
      params={
          "srcChain": "eip155:8453",
          "dstChain": "eip155:42161",
          "amount": "100000000",
          "token": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
          "user": "0x1F98431c8aD98523631AE4a59f267346ea31F984",
      },
      headers={"X-Auth-Token": "YOUR_API_KEY"},
  )
  quote = response.json()["quotes"][0]
  ```

  ```javascript JavaScript theme={null}
  const params = new URLSearchParams({
    srcChain: "eip155:8453",
    dstChain: "eip155:42161",
    amount: "100000000",
    token: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
    user: "0x1F98431c8aD98523631AE4a59f267346ea31F984",
  });

  const response = await fetch(
    `https://api.sprinter.tech/lifi-intents/rfq?${params}`,
    { headers: { "X-Auth-Token": "YOUR_API_KEY" } }
  );
  const { quotes } = await response.json();
  const quote = quotes[0];
  ```

  ```go Go theme={null}
  package main

  import (
  	"fmt"
  	"io"
  	"net/http"
  )

  func main() {
  	url := "https://api.sprinter.tech/lifi-intents/rfq" +
  		"?srcChain=eip155:8453&dstChain=eip155:42161&amount=100000000" +
  		"&token=0xaf88d065e77c8cC2239327C5EDb3A432268e5831" +
  		"&user=0x1F98431c8aD98523631AE4a59f267346ea31F984"

  	req, _ := http.NewRequest("GET", url, nil)
  	req.Header.Set("X-Auth-Token", "YOUR_API_KEY")
  	resp, _ := http.DefaultClient.Do(req)
  	defer resp.Body.Close()
  	body, _ := io.ReadAll(resp.Body)
  	fmt.Println(string(body))
  }
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "quotes": [
      {
        "validUntil": 1754481615,
        "eta": 45,
        "quoteId": "3f8a1c72-95e4-4d6b-b0a1-2c7e9f4d8a13",
        "provider": "sprinter",
        "preview": {
          "inputs": [
            {
              "user": "0x00010000022105141f98431c8ad98523631ae4a59f267346ea31f984",
              "asset": "0x0001000002210514833589fcd6edb6e08f4c7c32d4f71b54bda02913",
              "amount": "100000000"
            }
          ],
          "outputs": [
            {
              "receiver": "0x0001000002a4b1141f98431c8ad98523631ae4a59f267346ea31f984",
              "asset": "0x0001000002a4b114af88d065e77c8cc2239327c5edb3a432268e5831",
              "amount": "99850000"
            }
          ]
        },
        "metadata": {
          "exclusiveFor": "0x4c4A2f8c81640e47606d3fd77B353E87Ba015584"
        },
        "failureHandling": "refund-automatic"
      }
    ]
  }
  ```

  ```json 404 theme={null}
  {
    "error": "no available pools for request"
  }
  ```
</ResponseExample>

## Address format

`user`, `receiver` and `asset` inside `preview` are [ERC-7930](https://eips.ethereum.org/EIPS/eip-7930) interoperable addresses — chain id and account packed into one byte string:

```
version(2) | chainType(2) | chainRefLen(1) | chainRef(n) | addrLen(1) | addr(20)
```

`0x0001000002210514833589fc...2913` decodes to USDC on Base (`0x2105` = 8453).

`metadata.exclusiveFor` is a plain 20-byte hex address, not ERC-7930.

## Next step

Pass the quote object straight to [`POST /lifi-intents/transaction`](/api-reference/sprinter/lifi-intents/transaction) to get the transaction that opens the order.


## OpenAPI

````yaml get /lifi-intents/rfq
openapi: 3.0.0
info:
  contact: {}
  title: ''
  version: 0.0.1
servers:
  - url: https://api.sprinter.tech
    description: Production server
security: []
paths:
  /lifi-intents/rfq:
    get:
      tags:
        - Liquidity
      summary: Request a LI.FI intents quote backed by Sprinter liquidity
      description: >-
        Prices a LI.FI intents order against Sprinter liquidity and reserves
        that liquidity for the quote's validity window. The response is shaped
        like a single element of LI.FI's own request-quote response.
      parameters:
        - description: Source CAIP chain ID (e.g., eip155:8453)
          name: srcChain
          in: query
          required: true
          schema:
            type: string
        - description: Destination CAIP chain ID (e.g., eip155:42161)
          name: dstChain
          in: query
          required: true
          schema:
            type: string
        - description: Amount in the smallest denomination
          name: amount
          in: query
          required: true
          schema:
            type: string
        - description: Destination (borrow) token address (hex)
          name: token
          in: query
          required: true
          schema:
            type: string
        - description: User address on the source chain (hex)
          name: user
          in: query
          required: true
          schema:
            type: string
        - description: >-
            Source token address (hex). Defaults to the destination token's
            symbol on the source chain
          name: srcToken
          in: query
          schema:
            type: string
        - description: Receiver address on the destination chain (hex); defaults to user
          name: receiver
          in: query
          schema:
            type: string
        - description: >-
            Quote algorithm type (ExactInput or ExactOutput); defaults to
            ExactInput
          name: type
          in: query
          schema:
            type: string
      responses:
        '200':
          description: LI.FI intents quotes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/lifiintents.QuoteResponse'
        '400':
          description: >-
            Bad request due to invalid input, or no route configured for this
            pair
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
        '404':
          description: >-
            No pool could serve the request right now (capacity exhausted or
            pricing unavailable)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    lifiintents.QuoteResponse:
      type: object
      required:
        - quotes
      properties:
        quotes:
          type: array
          description: Quotes offered for the request. Sprinter returns exactly one.
          items:
            $ref: '#/components/schemas/lifiintents.Quote'
    responses.ErrorResponse:
      type: object
      required:
        - error
      properties:
        debug:
          type: string
        error:
          type: string
    lifiintents.Quote:
      type: object
      required:
        - preview
      properties:
        preview:
          $ref: '#/components/schemas/lifiintents.Preview'
        quoteId:
          type: string
          description: >-
            Identifier for the liquidity reservation backing this quote. Pass
            the quote back to /lifi-intents/transaction to keep it.
        validUntil:
          type: integer
          description: Unix timestamp after which the quote and its reservation expire.
        eta:
          type: integer
          description: Estimated fill duration in seconds.
        provider:
          type: string
          description: Always `sprinter`.
        failureHandling:
          type: string
          description: >-
            Always `refund-automatic` — an unfilled order is reclaimable on the
            escrow.
        partialFill:
          type: boolean
          description: >-
            Whether the order may be partially filled. Sprinter quotes are
            all-or-nothing.
        metadata:
          $ref: '#/components/schemas/lifiintents.Metadata'
        order:
          $ref: '#/components/schemas/lifiintents.Order'
        transactionRequest:
          $ref: '#/components/schemas/lifiintents.TransactionRequest'
    lifiintents.Preview:
      type: object
      required:
        - inputs
        - outputs
      properties:
        inputs:
          type: array
          minItems: 1
          description: >-
            Tokens escrowed on the origin chain. Every input must sit on the
            same origin chain.
          items:
            $ref: '#/components/schemas/lifiintents.Input'
        outputs:
          type: array
          minItems: 1
          description: Tokens delivered to the receiver.
          items:
            $ref: '#/components/schemas/lifiintents.Output'
    lifiintents.Metadata:
      type: object
      properties:
        exclusiveFor:
          type: string
          description: >-
            Address granted exclusivity over the fill. Defaults to Sprinter's
            filler address.
    lifiintents.Order:
      type: object
      description: >-
        Optional overrides for the escrow open call. Any field left unset is
        derived by the transaction endpoint.
      properties:
        nonce:
          type: string
        expires:
          type: integer
          description: Unix timestamp after which the order can no longer settle.
        fillDeadline:
          type: integer
          description: Unix timestamp after which the order can no longer be filled.
        inputOracle:
          type: string
    lifiintents.TransactionRequest:
      type: object
      description: >-
        Unsigned transaction calling open() on the input settler escrow. Send it
        from the user's wallet.
      required:
        - chainId
        - data
        - from
        - to
        - value
      properties:
        from:
          type: string
        to:
          type: string
          description: The LI.FI input settler escrow contract.
        chainId:
          type: integer
        data:
          type: string
        value:
          type: string
          description: Hex-encoded native value; `0x0` unless an input is the native token.
        gasPrice:
          type: string
        gasLimit:
          type: string
    lifiintents.Input:
      type: object
      required:
        - amount
        - asset
        - user
      properties:
        user:
          type: string
          description: Payer, as an ERC-7930 interoperable address.
        asset:
          type: string
          description: Input token, as an ERC-7930 interoperable address.
        amount:
          type: string
          description: Amount in the smallest denomination.
    lifiintents.Output:
      type: object
      required:
        - amount
        - asset
        - receiver
      properties:
        receiver:
          type: string
          description: Recipient, as an ERC-7930 interoperable address.
        asset:
          type: string
          description: Output token, as an ERC-7930 interoperable address.
        amount:
          type: string
          description: Amount in the smallest denomination.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      name: X-Auth-Token
      in: header

````