> ## 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.

# List chains

> Returns every chain the API can quote, with Portal and Executor addresses and the quote-signing address.

Returns every chain the API can quote, with its Portal and Executor contract addresses and the address that signs quotes. `chainId` filters to one chain. Solana is chain `1399811149`.

Requires `x-api-key`. Partner pricing, attribution, and enabled features are tied to the key. Without a key the gateway answers `403` with a plain JSON body (`{"Message": "User is not authorized ..."}`); a key that is unknown, revoked, or not enabled for v1 answers `401 invalid-api-key`. No requests-per-second quota is published. Handle `429` and honor `Retry-After` when present.

Examples use real mainnet token and contract addresses with placeholder wallets, hashes, signatures, and IDs.


## OpenAPI

````yaml api-v1.openapi.json GET /v1/chains
openapi: 3.1.0
info:
  title: Eco API
  version: v1
  description: >-
    Reference for the Eco API at https://api.eco.com/v1: quotes, chain and token
    discovery, gasless funding, intent status, and Circle Gateway fast deposits.
    Every operation requires an API key except the Circle Gateway operations,
    which are open.
servers:
  - url: https://api.eco.com
    description: Eco API
security: []
tags:
  - name: quotes
  - name: intents
  - name: status
  - name: discovery
  - name: circle-gateway
paths:
  /v1/chains:
    get:
      tags:
        - discovery
      summary: List chains
      description: >-
        Returns every chain the API can quote, with its Portal and Executor
        contract addresses and the address that signs quotes. `chainId` filters
        to one chain. Solana is chain `1399811149`.


        Requires `x-api-key`. Partner pricing, attribution, and enabled features
        are tied to the key. Without a key the gateway answers `403` with a
        plain JSON body (`{"Message": "User is not authorized ..."}`); a key
        that is unknown, revoked, or not enabled for v1 answers `401
        invalid-api-key`.


        No requests-per-second quota is published. Handle `429` and honor
        `Retry-After` when present.


        Examples use real mainnet token and contract addresses with placeholder
        wallets, hashes, signatures, and IDs.
      operationId: chains.list
      parameters:
        - name: chainId
          in: query
          required: false
          schema:
            type: integer
            exclusiveMinimum: 0
          description: 'Returns only this chain. Example: `8453` for Base.'
          example: 8453
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  chains:
                    type: array
                    items:
                      type: object
                      properties:
                        chainId:
                          type: integer
                        name:
                          type: string
                        quoteSigner:
                          description: >-
                            Address whose EIP-712 signature appears as
                            `signature` on every quote for this chain. Read it
                            from here and cache with a refresh rather than
                            pinning it; it can rotate.
                          type: string
                        type:
                          type: string
                          enum:
                            - evm
                            - svm
                            - tvm
                        encoding:
                          type: string
                          enum:
                            - abi
                            - borsh
                        status:
                          type: string
                          enum:
                            - live
                            - paused
                        contracts:
                          type: object
                          properties:
                            portal:
                              type: string
                              description: >-
                                Address on the relevant chain: `0x…` hex for EVM
                                chains, base58 for Solana, `T…` base58 for Tron.
                            executor:
                              type:
                                - string
                                - 'null'
                              description: >-
                                Address on the relevant chain: `0x…` hex for EVM
                                chains, base58 for Solana, `T…` base58 for Tron.
                          required:
                            - portal
                            - executor
                          description: >-
                            Deployed Eco contracts: `portal` is the funding
                            target for this chain's intents, `executor` runs
                            destination calls (null where not deployed).
                      required:
                        - chainId
                        - name
                        - quoteSigner
                        - type
                        - encoding
                        - status
                        - contracts
                  limits:
                    type: object
                    properties:
                      paging:
                        type: object
                        properties:
                          maxLimit:
                            type: integer
                          defaultLimit:
                            type: integer
                        required:
                          - maxLimit
                          - defaultLimit
                    required:
                      - paging
                required:
                  - chains
              examples:
                all-chains:
                  summary: Live response on 2026-09-15
                  value:
                    chains:
                      - chainId: 1
                        name: Ethereum
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: evm
                        encoding: abi
                        status: live
                        contracts:
                          portal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                          executor: '0xEc2C96e75B09e29b66bf2Ee5C37fa749eF9AA7c7'
                      - chainId: 10
                        name: OP Mainnet
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: evm
                        encoding: abi
                        status: live
                        contracts:
                          portal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                          executor: '0xEc2C96e75B09e29b66bf2Ee5C37fa749eF9AA7c7'
                      - chainId: 130
                        name: Unichain
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: evm
                        encoding: abi
                        status: live
                        contracts:
                          portal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                          executor: '0xEc2C96e75B09e29b66bf2Ee5C37fa749eF9AA7c7'
                      - chainId: 137
                        name: Polygon
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: evm
                        encoding: abi
                        status: live
                        contracts:
                          portal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                          executor: '0xEc2C96e75B09e29b66bf2Ee5C37fa749eF9AA7c7'
                      - chainId: 143
                        name: Monad
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: evm
                        encoding: abi
                        status: live
                        contracts:
                          portal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                          executor: null
                      - chainId: 480
                        name: World Chain
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: evm
                        encoding: abi
                        status: live
                        contracts:
                          portal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                          executor: '0xEc2C96e75B09e29b66bf2Ee5C37fa749eF9AA7c7'
                      - chainId: 999
                        name: HyperEVM
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: evm
                        encoding: abi
                        status: live
                        contracts:
                          portal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                          executor: '0xEc2C96e75B09e29b66bf2Ee5C37fa749eF9AA7c7'
                      - chainId: 2020
                        name: Ronin
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: evm
                        encoding: abi
                        status: live
                        contracts:
                          portal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                          executor: '0xEc2C96e75B09e29b66bf2Ee5C37fa749eF9AA7c7'
                      - chainId: 5042
                        name: Arc
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: evm
                        encoding: abi
                        status: live
                        contracts:
                          portal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                          executor: null
                      - chainId: 8453
                        name: Base
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: evm
                        encoding: abi
                        status: live
                        contracts:
                          portal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                          executor: '0xEc2C96e75B09e29b66bf2Ee5C37fa749eF9AA7c7'
                      - chainId: 9745
                        name: Plasma
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: evm
                        encoding: abi
                        status: live
                        contracts:
                          portal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                          executor: '0xEc2C96e75B09e29b66bf2Ee5C37fa749eF9AA7c7'
                      - chainId: 42161
                        name: Arbitrum One
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: evm
                        encoding: abi
                        status: live
                        contracts:
                          portal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                          executor: '0xEc2C96e75B09e29b66bf2Ee5C37fa749eF9AA7c7'
                      - chainId: 1399811149
                        name: Solana
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: svm
                        encoding: abi
                        status: live
                        contracts:
                          portal: EcooswwC1NggsckZyF5SeAL9WsgJs3UhPbrqY1apV73F
                          executor: Gk1ZpHHx9tgSo68hiT2prBQCjkstdUYVZn4SWL3NzR2U
                    limits:
                      paging:
                        maxLimit: 50
                        defaultLimit: 20
                one-chain:
                  summary: GET /v1/chains?chainId=8453
                  value:
                    chains:
                      - chainId: 8453
                        name: Base
                        quoteSigner: '0x1D636584Eec22B53Be1930daF6B12a0E13C8B870'
                        type: evm
                        encoding: abi
                        status: live
                        contracts:
                          portal: '0xEC000064576f9C95a8623Bc0eff3db6d296ea6df'
                          executor: '0xEc2C96e75B09e29b66bf2Ee5C37fa749eF9AA7c7'
                    limits:
                      paging:
                        maxLimit: 50
                        defaultLimit: 20
        '400':
          description: Request failed validation
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://api.eco.com/v1/errors/invalid-request
                title: Request failed validation
                status: 400
                code: invalid-request
                requestId: f371e43e6fd4406b10e19487b3170edf
        '401':
          description: >-
            The supplied x-api-key is unknown, revoked, or not enabled for the
            v1 API. Returned for every v1 endpoint by the gateway, with
            Content-Type application/json.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://api.eco.com/v1/errors/invalid-api-key
                title: API key is missing, unknown, or revoked
                status: 401
                code: invalid-api-key
                requestId: 98e4c42f-9c70-4539-843e-8d31803001e6
        '403':
          description: >-
            No API key supplied. The gateway rejects the request before it
            reaches the API, with a plain JSON body.
          content:
            application/json:
              example:
                Message: >-
                  User is not authorized to access this resource with an
                  explicit deny in an identity-based policy
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://api.eco.com/v1/errors/rate-limit-exceeded
                title: Rate limit exceeded
                status: 429
                code: rate-limit-exceeded
                requestId: 1eac3d6cc2aafa524b0c47a039576f8c
        '500':
          description: Internal error
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://api.eco.com/v1/errors/internal-error
                title: Internal error
                status: 500
                code: internal-error
                requestId: 02dabcf0f4e3def9a6091526d3d21022
        default:
          description: Error (RFC 9457 problem+json; see x-error-catalog)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
      security:
        - ApiKey: []
components:
  schemas:
    Problem:
      type: object
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
          minLength: 1
        status:
          type: integer
          minimum: 400
          maximum: 599
        code:
          type: string
          description: >-
            Stable, machine-readable error code from the catalog. Branch on this
            and `status`, not on `title` or `detail`.
        detail:
          type: string
        instance:
          type: string
        legacyCode:
          type: string
          description: >-
            The pre-v1 numeric error code this problem maps to, for integrations
            migrating from the older services.
        solverErrors:
          type: array
          items:
            type: object
            properties:
              solver:
                type: string
                description: >-
                  Address on the relevant chain: `0x…` hex for EVM chains,
                  base58 for Solana, `T…` base58 for Tron.
              solverName:
                type: string
                minLength: 1
              code:
                type: string
                minLength: 1
              message:
                type: string
            required:
              - solver
              - message
        errors:
          type: array
          items:
            type: object
            properties:
              field:
                type: string
                minLength: 1
              detail:
                type: string
                minLength: 1
            required:
              - field
              - detail
          description: Field-level validation failures.
        requestId:
          type: string
          description: >-
            Correlation ID for support. Present on router-served errors;
            deposit-address-served errors carry a short numeric value.
      required:
        - type
        - title
        - status
        - code
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: x-api-key

````