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

# Open quoting service

> Exact-input quotes from every solver without an API key, via the separate quotes.eco.com service.

`POST https://quotes.eco.com/api/v3/quotes/exactIn` returns every solver's quote for an exact-input transfer. No API key or account is needed.

It is a different service from the [v1 API](/api-reference/introduction), with a different request and response format:

|                 | Open quoting service                                          | v1 API                                                 |
| --------------- | ------------------------------------------------------------- | ------------------------------------------------------ |
| Host            | `quotes.eco.com`                                              | `api.eco.com/v1`                                       |
| Field names     | `dAppID`, `sourceChainID`, `sourceToken`                      | `dappId`, `source.chainId`, `source.token`             |
| Response        | `201` with `{ data: [ … ] }`, one entry per solver            | `200` with one top-level quote object                  |
| Funding         | Publish and fund the intent on the Portal with `encodedRoute` | Ready-to-send transaction, or gasless submit endpoints |
| Partner pricing | No                                                            | Yes, with an API key                                   |

Each entry in `data` carries `quoteData.quoteResponse` (amounts, fees, `deadline`, `encodedRoute`) and `quoteData.contracts` (the source and destination Portal and the prover). `destinationAmount` and `minimumDestinationAmount` are what the recipient receives. An empty `data` array means no solver quoted the route. The two formats are not interchangeable with v1.

## Errors and limits

* `400`: invalid fields, in the format `{ statusCode, createdBy: "ValidationFilter", validationErrors }`. `dAppID` allows letters, digits, dots, underscores, and hyphens, up to 64 characters.
* `429`: rate limited, by Eco or by an upstream quote provider. Honor `Retry-After` when present.
* `5xx`: service failure. Retry with backoff.

No requests-per-second quota is published for this service.


## OpenAPI

````yaml public-quote.openapi.json POST /api/v3/quotes/exactIn
openapi: 3.0.3
info:
  title: Eco open quoting service
  version: '3'
servers:
  - url: https://quotes.eco.com
security: []
paths:
  /api/v3/quotes/exactIn:
    post:
      tags:
        - Quotes V3
      summary: Request public exact-in quotes
      description: >-
        Returns every solver quote for an exact-input transfer, without an API
        key. This is the open quoting service at `quotes.eco.com`, not the v1
        API: it uses `dAppID`, `sourceChainID`-style field names and answers
        `201` with `{ data: [...] }`, one entry per solver. The chosen quote is
        published and funded on the source Portal with `encodedRoute` (see the
        Routes REST API guide). Partner pricing and gasless funding are
        available on the v1 API only.


        No published requests-per-second quota. Handle `429` and honor
        `Retry-After` when present. Examples use real mainnet token and Portal
        addresses with placeholder wallets.
      operationId: QuotesV3Controller_getReverseQuotes
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuotesRequestV3DTO'
            examples:
              op-to-base:
                summary: 1 USDC from OP Mainnet to Base
                value:
                  dAppID: your-app
                  intentExecutionTypes:
                    - SELF_PUBLISH
                  quoteRequest:
                    sourceChainID: 10
                    destinationChainID: 8453
                    sourceToken: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'
                    destinationToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
                    sourceAmount: '1000000'
                    funder: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'
                    recipient: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8'
      responses:
        '201':
          description: Successfully retrieved exact in quotes from solvers
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuotesResponseV3DTO'
              examples:
                one-solver:
                  summary: Live response shape (encodedRoute trimmed; ~2 KB in full)
                  value:
                    data:
                      - quoteID: quote:ae2fe3f2-ca9b-4fc9-97c7-1d77250815e0
                        quoteResponseID: quoteResponse:4ba1a3d5-366b-41d7-99b3-aad76dda92d9
                        solverID: '0x5Bc2DBb5db4a7AC63256e5fCD3ED4886C7dB4AE7'
                        quoteData:
                          contracts:
                            sourcePortal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                            destinationPortal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                            prover: '0xeC00008537c1F26E739486BCFCC818d81234d5aD'
                          quoteResponse:
                            intentExecutionType: SELF_PUBLISH
                            sourceChainID: 10
                            destinationChainID: 10
                            finalDestinationChainID: 8453
                            sourceToken: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'
                            destinationToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
                            sourceAmount: '1000000'
                            destinationAmount: '969873'
                            minimumDestinationAmount: '969873'
                            funder: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'
                            refundRecipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'
                            recipient: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8'
                            fees:
                              - name: Eco Protocol Fee
                                description: >-
                                  Protocol fee for fulfilling intent on chain
                                  8453
                                token:
                                  address: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'
                                  decimals: 6
                                  symbol: USDC
                                amount: '30127'
                                kinds:
                                  - kind: protocol
                                    amount: '30127'
                                    basis: estimate
                            deadline: 1789528743
                            quoteExpiry: 1789528083
                            estimatedFulfillTimeSec: 30
                            encodedRoute: >-
                              0x0000000000000000000000000000000000000000000000000000000000000020…
                empty:
                  summary: No solver quoted the request
                  value:
                    data: []
        '400':
          description: 'Validation failure. Example: omit quoteRequest.'
          content:
            application/json:
              examples:
                empty-body:
                  summary: 'Live: empty body'
                  value:
                    statusCode: 400
                    createdBy: ValidationFilter
                    validationErrors:
                      dAppID: >-
                        dAppID should not be empty, dAppID must be a string,
                        dAppID must be shorter than or equal to 64 characters,
                        dAppID may only contain letters, digits, dots,
                        underscores, and hyphens
                      quoteRequest: quoteRequest should not be empty
        '403':
          description: Access restricted.
        '429':
          description: Rate limit. Honor Retry-After when supplied.
        '500':
          description: Service failure.
      security: []
components:
  schemas:
    QuotesRequestV3DTO:
      type: object
      properties:
        dAppID:
          type: string
          description: Unique identifier for the client application making the request
          example: your-app
        intentExecutionTypes:
          type: array
          description: Array of intent execution types to fetch quotes for
          example:
            - SELF_PUBLISH
          items:
            type: string
            enum:
              - SELF_PUBLISH
              - GASLESS
        quoteRequest:
          description: >-
            Cross-chain token swap request details including source/destination
            tokens and addresses
          allOf:
            - $ref: '#/components/schemas/QuoteRequestV3DTO'
        contracts:
          description: >-
            Optional contract addresses to use for the cross-chain swap (will
            use defaults if not specified)
          allOf:
            - $ref: '#/components/schemas/QuotesV3RequestContractsDTO'
      required:
        - dAppID
        - intentExecutionTypes
        - quoteRequest
    QuotesResponseV3DTO:
      type: object
      properties:
        data:
          description: Array of solver quote responses
          type: array
          items:
            $ref: '#/components/schemas/SolverQuoteV2ResponseDTO'
      required:
        - data
    QuoteRequestV3DTO:
      type: object
      properties:
        sourceChainID:
          type: number
          description: Chain ID of the source network where tokens will be sent from
          example: 10
        destinationChainID:
          type: number
          description: Chain ID of the destination network where tokens will be received
          example: 8453
        sourceToken:
          type: string
          description: Contract address of the token being sent on the source chain
          example: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'
        destinationToken:
          type: string
          description: >-
            Contract address of the token to be received on the destination
            chain
          example: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
        sourceAmount:
          type: string
          description: >-
            Amount of source tokens to send, specified as a string
            representation of a bigint
          example: '1000000'
        funder:
          type: string
          description: Address that will provide the tokens and pay for the transaction
          example: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'
        refundRecipient:
          type: string
          description: >-
            Address to receive refunds if the intent fails (defaults to funder
            if not specified)
          example: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'
        recipient:
          type: string
          description: Address that will receive the tokens on the destination chain
          example: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8'
      required:
        - sourceChainID
        - destinationChainID
        - sourceToken
        - destinationToken
        - sourceAmount
        - funder
        - recipient
    QuotesV3RequestContractsDTO:
      type: object
      properties:
        sourcePortal:
          type: string
          description: >-
            Contract address for the intent source (where intents are created
            and managed)
          example: '0x1234567890abcdef1234567890abcdef12345678'
        destinationPortal:
          type: string
          description: >-
            Contract address for the inbox (receives and processes cross-chain
            messages)
          example: '0x567890abcdef1234567890abcdef1234567890ab'
        prover:
          type: string
          description: >-
            Contract address for the prover (handles cross-chain proof
            verification)
          example: '0xabcdef1234567890abcdef1234567890abcdef12'
    SolverQuoteV2ResponseDTO:
      type: object
      properties:
        quoteID:
          type: string
        solverID:
          type: string
        receiveSignedIntentUrl:
          type: string
        quoteData:
          $ref: '#/components/schemas/SolverQuoteDataV2DTO'
        quoteResponseID:
          type: string
          description: Quote-response identifier, when supplied.
      required:
        - quoteID
        - solverID
        - receiveSignedIntentUrl
        - quoteData
    SolverQuoteDataV2DTO:
      type: object
      properties:
        quoteResponse:
          description: >-
            Detailed quote information including tokens, amounts, fees, and
            timing
          allOf:
            - $ref: '#/components/schemas/QuoteResponseDataV3DTO'
        contracts:
          description: Contract addresses required for executing this cross-chain swap
          allOf:
            - $ref: '#/components/schemas/QuoteV3ResponseContractsDTO'
      required:
        - contracts
    QuoteResponseDataV3DTO:
      type: object
      properties:
        intentExecutionType:
          type: string
          enum:
            - SELF_PUBLISH
            - GASLESS
          description: The execution type for this quote entry
          example: SELF_PUBLISH
        sourceChainID:
          type: number
          description: Chain ID of the source network where tokens will be sent from
          example: 1
        destinationChainID:
          type: number
          description: Chain ID of the destination network where tokens will be received
          example: 42161
        sourceToken:
          type: string
          description: Contract address of the token being sent on the source chain
          example: '0xA0b86a33E6441e45C3b9d1C3D6a0b5be4b7b5b5a'
        destinationToken:
          type: string
          description: >-
            Contract address of the token to be received on the destination
            chain
          example: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8'
        sourceAmount:
          type: string
          description: >-
            Amount of source tokens to send, as a string representation of a
            bigint
          example: '1000000'
        destinationAmount:
          type: string
          description: >-
            Amount of destination tokens to be received, as a string
            representation of a bigint
          example: '995000'
        funder:
          type: string
          description: Address that will provide the tokens and pay for the transaction
          example: '0x742d35Cc6527C92b4A1F3a2a8b1c9b3e8c4c5b2a'
        refundRecipient:
          type: string
          description: Address to receive refunds if the intent fails
          example: '0x742d35Cc6527C92b4A1F3a2a8b1c9b3e8c4c5b2a'
        recipient:
          type: string
          description: Address that will receive the tokens on the destination chain
          example: '0x8Ba1c0a8B4A4b9e8A9f1a6B7c8d9e0F1234567890'
        fees:
          description: >-
            Array of fees that will be charged for executing this cross-chain
            swap
          type: array
          items:
            $ref: '#/components/schemas/FeeV3DTO'
        deadline:
          type: number
          description: >-
            Unix timestamp (in seconds) after which this quote expires and
            cannot be executed
          example: 1672531200
        estimatedFulfillTimeSec:
          type: number
          description: Estimated time in seconds for the cross-chain swap to be completed
          example: 300
        encodedRoute:
          type: string
          description: ABI-encoded route data for onchain intent execution
          example: >-
            0x00000000000000000000000000000000000000000000000000000000000000202810ea6d0860ce5315ef2b62b1b580f2b4ef158b76a6ea8f8982600c130e55e70000000000000000000000000000000000000000000000000000000068e56fa2000000000000000000000000b5e58a8206473dc3ab9b8d4d3b0f84c0ba68f8b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000833589fcd6edb6e082dc7c32d4f71b54bda0291300000000000000000000000000000000000000000000000000000000004bd61000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda02913000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000002b2c52b1b63c4bfc7f16910a1734641d8e34de6200000000000000000000000000000000000000000000000000000000004bd61000000000000000000000000000000000000000000000000000000000
      required:
        - intentExecutionType
        - sourceChainID
        - destinationChainID
        - sourceToken
        - destinationToken
        - sourceAmount
        - destinationAmount
        - funder
        - refundRecipient
        - recipient
        - fees
        - deadline
        - estimatedFulfillTimeSec
        - encodedRoute
    QuoteV3ResponseContractsDTO:
      type: object
      properties:
        sourcePortal:
          type: string
          description: >-
            Contract address for the intent source (where intents are created
            and managed)
          example: '0x1234567890abcdef1234567890abcdef12345678'
        destinationPortal:
          type: string
          description: >-
            Contract address for the inbox (receives and processes cross-chain
            messages)
          example: '0x567890abcdef1234567890abcdef1234567890ab'
        prover:
          type: string
          description: >-
            Contract address for the prover (handles cross-chain proof
            verification)
          example: '0xabcdef1234567890abcdef1234567890abcdef12'
      required:
        - sourcePortal
        - destinationPortal
        - prover
    FeeV3DTO:
      type: object
      properties:
        name:
          type: string
          description: Name identifier for the fee type
          example: Solver Fee
        description:
          type: string
          description: Human-readable description of what this fee covers
          example: Fee paid to the solver for executing the cross-chain swap
        token:
          description: Token information for the fee payment
          allOf:
            - $ref: '#/components/schemas/TokenInfoV3DTO'
        amount:
          type: string
          description: Fee amount as a string representation of a bigint
          example: '1000'
      required:
        - name
        - description
        - token
        - amount
    TokenInfoV3DTO:
      type: object
      properties:
        address:
          type: string
          description: Contract address of the token
          example: '0xA0b86a33E6441e45C3b9d1C3D6a0b5be4b7b5b5a'
        decimals:
          type: number
          description: Number of decimal places for the token
          example: 6
        symbol:
          type: string
          description: Token symbol or ticker
          example: USDC
      required:
        - address
        - decimals
        - symbol

````