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

# Track the status of an intent

> Returns the state of intents, quotes, and gasless jobs by hash, ID, or wallet. Always 200; unknown IDs report status unknown.

Returns the state of intents, quotes, and gasless funding jobs. At least one filter is required; paging controls alone are rejected with `400`. Exact lookups (`intentHash`, `sourceTxHash`, `destinationTxHash`, `quoteId`, `jobId`) always return `200`; an unknown ID is reported with `status: "unknown"`. `wallet` returns a page of intents and is the only filter `status` can be combined with. A consumed quote reports `submitted` with its `intentHashes`, per-step `steps[]`, and `sourceTx` / `destinationTx` once known.

`quoteId` and `jobId` are bare UUIDs, without the `quote:` or `gasless:` prefix.

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/intents/status
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/intents/status:
    get:
      tags:
        - status
      summary: Track the status of an intent
      description: >-
        Returns the state of intents, quotes, and gasless funding jobs. At least
        one filter is required; paging controls alone are rejected with `400`.
        Exact lookups (`intentHash`, `sourceTxHash`, `destinationTxHash`,
        `quoteId`, `jobId`) always return `200`; an unknown ID is reported with
        `status: "unknown"`. `wallet` returns a page of intents and is the only
        filter `status` can be combined with. A consumed quote reports
        `submitted` with its `intentHashes`, per-step `steps[]`, and `sourceTx`
        / `destinationTx` once known.


        `quoteId` and `jobId` are bare UUIDs, without the `quote:` or `gasless:`
        prefix.


        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: intents.status
      parameters:
        - name: intentHash
          in: query
          required: false
          schema:
            type: string
          description: >-
            Exact lookup of one intent by its hash, as returned by `POST
            /v1/quotes`.
          example: '0x3f1886e7c3a4cab62b4a0661e393600f0917d5a514652e96623b0f17ce0d3749'
        - name: sourceTxHash
          in: query
          required: false
          schema:
            type: string
          description: Exact lookup by the source-chain funding transaction hash.
        - name: destinationTxHash
          in: query
          required: false
          schema:
            type: string
          description: Exact lookup by the destination-chain fulfillment transaction hash.
        - name: quoteId
          in: query
          required: false
          schema:
            type: string
            format: uuid
          description: >-
            Exact lookup of a quote by its bare UUID, without the `quote:`
            prefix.
          example: 8a7cbdcd-2aed-40b0-ab08-c4c10af15f23
        - name: jobId
          in: query
          required: false
          schema:
            type: string
            format: uuid
          description: >-
            Exact lookup of a gasless funding job by its bare UUID, without the
            `gasless:` prefix.
          example: 0f450218-1b2c-4d3e-8f9a-0b1c2d3e4f5a
        - name: wallet
          in: query
          required: false
          schema:
            type: string
            minLength: 1
          description: >-
            Pages through intents funded by, or delivered to, this wallet. The
            only filter that returns a collection.
          example: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum:
              - pending
              - filled
              - settled
              - refunded
              - refundable
              - expired
              - failed
              - unknown
          description: >-
            Narrows a `wallet` page to one status. Rejected with `400` unless
            `wallet` is also supplied.
        - name: cursor
          in: query
          required: false
          schema:
            type: string
            minLength: 1
          description: Opaque cursor from a previous `nextCursor`.
        - name: limit
          in: query
          required: false
          schema:
            default: 20
            type: integer
            minimum: 1
            maximum: 50
          description: Page size for `wallet` lookups, 1-50. Default 20.
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        type:
                          type: string
                          enum:
                            - intent
                            - quote
                            - gasless
                            - deposit-address
                        status:
                          type: string
                        updatedAt:
                          type:
                            - integer
                            - 'null'
                        intentHashes:
                          type: array
                          items:
                            type: string
                        txHash:
                          type:
                            - string
                            - 'null'
                        subStatuses:
                          type: array
                          items:
                            type: object
                            properties:
                              chainId:
                                type: integer
                              quoteIds:
                                type: array
                                items:
                                  type: string
                              txHash:
                                type:
                                  - string
                                  - 'null'
                              intentHashes:
                                type: array
                                items:
                                  type: string
                              state:
                                type: string
                                enum:
                                  - pending
                                  - submitted
                                  - published
                                  - failed
                            required:
                              - chainId
                              - quoteIds
                              - txHash
                              - intentHashes
                              - state
                        sourceTx:
                          type: object
                          properties:
                            chainId:
                              type: integer
                            txHash:
                              type: string
                            token:
                              type: string
                            amount:
                              type: string
                          required:
                            - chainId
                            - txHash
                            - token
                            - amount
                        destinationTx:
                          type: object
                          properties:
                            chainId:
                              type: integer
                            txHash:
                              type: string
                            token:
                              type: string
                            amount:
                              type: string
                          required:
                            - chainId
                            - txHash
                            - token
                            - amount
                        steps:
                          type: array
                          items:
                            type: object
                            properties:
                              type:
                                type: string
                                enum:
                                  - SWAP
                                  - BRIDGE
                              intentHash:
                                type: string
                              status:
                                type: string
                              from:
                                type: object
                                properties:
                                  token:
                                    type: string
                                  amount:
                                    type: string
                                  chainId:
                                    type: integer
                                required:
                                  - token
                                  - amount
                                  - chainId
                              to:
                                type: object
                                properties:
                                  token:
                                    type: string
                                  amount:
                                    type: string
                                  chainId:
                                    type: integer
                                required:
                                  - token
                                  - amount
                                  - chainId
                              transactions:
                                type: object
                                properties:
                                  created:
                                    type: object
                                    properties:
                                      chainId:
                                        type: integer
                                      txHash:
                                        type: string
                                    required:
                                      - chainId
                                      - txHash
                                  fulfilled:
                                    type: object
                                    properties:
                                      chainId:
                                        type: integer
                                      txHash:
                                        type: string
                                    required:
                                      - chainId
                                      - txHash
                                  refunded:
                                    type: object
                                    properties:
                                      chainId:
                                        type: integer
                                      txHash:
                                        type: string
                                    required:
                                      - chainId
                                      - txHash
                            required:
                              - type
                              - intentHash
                              - status
                              - from
                              - to
                              - transactions
                      required:
                        - id
                        - type
                        - status
                        - updatedAt
                  nextCursor:
                    type:
                      - string
                      - 'null'
                required:
                  - results
                  - nextCursor
              examples:
                quote-active:
                  summary: >-
                    Live: a quote that has not been funded yet (GET
                    ?quoteId=<uuid>)
                  value:
                    results:
                      - id: quote:8a7cbdcd-2aed-40b0-ab08-c4c10af15f23
                        type: quote
                        status: active
                        updatedAt: 1789522700
                        steps: []
                    nextCursor: null
                quote-filled-detail:
                  summary: >-
                    Live: a funded quote whose intent was fulfilled, with
                    per-step transactions
                  value:
                    results:
                      - id: quote:c1ed3798-e227-45a6-ad7c-b805f9e7a392
                        type: quote
                        status: submitted
                        intentHashes:
                          - >-
                            0x28cf072bb7fcd236cb417ef542f91002a84e04afb4c144ceb3ded8056bfa790f
                        updatedAt: 1789432832
                        steps:
                          - type: BRIDGE
                            intentHash: >-
                              0x28cf072bb7fcd236cb417ef542f91002a84e04afb4c144ceb3ded8056bfa790f
                            status: FULFILLED
                            from:
                              token: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
                              amount: '1000000'
                              chainId: 8453
                            to:
                              token: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'
                              amount: '989500'
                              chainId: 10
                            transactions:
                              created:
                                chainId: 8453
                                txHash: >-
                                  0x522dc811ae11692c9066747d24e96fa6d42315945aef9246ac19adb5663fe5c9
                              fulfilled:
                                chainId: 10
                                txHash: >-
                                  0xace13db990e6c9aac0957510443262a90c128795c30086a5b0e62ac713c20866
                        sourceTx:
                          chainId: 8453
                          txHash: >-
                            0x522dc811ae11692c9066747d24e96fa6d42315945aef9246ac19adb5663fe5c9
                          token: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
                          amount: '1000000'
                        destinationTx:
                          chainId: 10
                          txHash: >-
                            0xace13db990e6c9aac0957510443262a90c128795c30086a5b0e62ac713c20866
                          token: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'
                          amount: '989500'
                    nextCursor: null
                intent-filled:
                  summary: An intent delivered on the destination chain
                  value:
                    results:
                      - id: >-
                          intent:0x3f1886e7c3a4cab62b4a0661e393600f0917d5a514652e96623b0f17ce0d3749
                        type: intent
                        status: filled
                        updatedAt: 1767225600
                        txHash: >-
                          0xbee3c510b4e912445589df6b04b46f5650604426e8c6200179df512a47f11459
                    nextCursor: null
                gasless-handoff:
                  summary: A gasless funding job whose intent has been published
                  value:
                    results:
                      - id: gasless:0f450218-1b2c-4d3e-8f9a-0b1c2d3e4f5a
                        type: gasless
                        status: published
                        updatedAt: 1767225600
                        intentHashes:
                          - >-
                            0x3f1886e7c3a4cab62b4a0661e393600f0917d5a514652e96623b0f17ce0d3749
                        subStatuses:
                          - chainId: 8453
                            quoteIds:
                              - quote:8a7cbdcd-2aed-40b0-ab08-c4c10af15f23
                            txHash: >-
                              0xbee3c510b4e912445589df6b04b46f5650604426e8c6200179df512a47f11459
                            intentHashes:
                              - >-
                                0x3f1886e7c3a4cab62b4a0661e393600f0917d5a514652e96623b0f17ce0d3749
                            state: published
                    nextCursor: null
                intent-unknown:
                  summary: 'Live: an intent hash the API has not seen (still 200)'
                  value:
                    results:
                      - id: >-
                          intent:0x239539a7cc10146f96a4c17cf041abaf19452c7dab4d0d6437d3b3c4ac03d0e3
                        type: intent
                        status: unknown
                        updatedAt: null
                    nextCursor: null
                wallet-page:
                  summary: A wallet page (GET ?wallet=…&limit=…)
                  value:
                    results:
                      - id: >-
                          intent:0x3f1886e7c3a4cab62b4a0661e393600f0917d5a514652e96623b0f17ce0d3749
                        type: intent
                        status: filled
                        updatedAt: 1767225600
                        txHash: >-
                          0xbee3c510b4e912445589df6b04b46f5650604426e8c6200179df512a47f11459
                      - id: >-
                          intent:0x239539a7cc10146f96a4c17cf041abaf19452c7dab4d0d6437d3b3c4ac03d0e3
                        type: intent
                        status: unknown
                        updatedAt: null
                    nextCursor: Y3Vyc29yOjE3NjcyMjU2MDA6aW50ZW50OjB4YWJhYg
        '400':
          description: Request failed validation
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                no-filter:
                  summary: No filter supplied
                  value:
                    type: https://api.eco.com/v1/errors/invalid-request
                    title: Request failed validation
                    status: 400
                    code: invalid-request
                    detail: >-
                      at least one filter required (intentHash, sourceTxHash,
                      destinationTxHash, quoteId, jobId, wallet, status); paging
                      controls alone are not a filter
                    requestId: f371e43e6fd4406b10e19487b3170edf
                prefixed-quote-id:
                  summary: 'quoteId sent with its quote: prefix'
                  value:
                    type: https://api.eco.com/v1/errors/invalid-request
                    title: Request failed validation
                    status: 400
                    code: invalid-request
                    detail: Invalid UUID
                    requestId: f371e43e6fd4406b10e19487b3170edf
                status-without-wallet:
                  summary: status without wallet
                  value:
                    type: https://api.eco.com/v1/errors/invalid-request
                    title: Request failed validation
                    status: 400
                    code: invalid-request
                    detail: >-
                      status narrows a collection and cannot identify one on its
                      own; combine it with wallet
                    requestId: f371e43e6fd4406b10e19487b3170edf
                limit-too-large:
                  summary: limit above 50
                  value:
                    type: https://api.eco.com/v1/errors/invalid-request
                    title: Request failed validation
                    status: 400
                    code: invalid-request
                    detail: 'Too big: expected number to be <=50'
                    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

````