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

# Get cross-chain transfers by hash

> Returns the cross-chain transfer whose source or destination transaction is `tx_hash`, with both legs: each leg's network, transaction hash, address, time and asset, and `matched_leg` to say which leg your hash is. Send one hash from either leg; no network, protocol or direction is needed. The destination asset is what was actually delivered, so a cross-chain swap shows the asset received. Results are newest first, usually one; a hash with more than 100 transfers (an IBC relayer transaction) pages through `meta.next_cursor`. An empty `items` means no cross-chain transfer for this hash is indexed: it did not cross chains, or it crossed on a protocol, network or date range outside `GET /v2/cross-chain/coverage`. A transfer whose delivery is not yet observed is returned with its status and `null` destination fields, never as an empty answer. An IBC transfer is also found by its acknowledgement transaction, on the `source` leg. For Circle Gateway, the deposit into Gateway that funded a transfer also finds it, on the `source` leg and listed in `funding_deposit_tx_hashes`. A Gateway deposit not proven to fund a transfer comes back as its own item with status `DEPOSITED` and `gateway_deposit` saying whether it is unspent, partly spent, withdrawn, or why it cannot be linked; such items appear only here, never in `GET /v2/transfers`. To search transfers by address, network or date, use `GET /v2/transfers`.



## OpenAPI

````yaml /api-reference/data-api.json get /v2/cross-chain/transfers/by-hash/{tx_hash}
openapi: 3.0.0
info:
  title: Range Data API
  description: >-
    The Range Data API for crypto addresses, networks, transactions, and
    entities.
  version: 1.7.37
  contact: {}
servers:
  - url: https://api.range.org
    description: Range API Server
security:
  - Authorization: []
tags:
  - name: Entity Information
    description: Get information about entities.
  - name: Network Information
    description: Get information about networks.
  - name: Protocols
    description: Get information about cross-chain protocols.
  - name: Token transfers
    description: Get information about token transfers.
  - name: Cross-chain transfers
    description: >-
      Look up cross-chain transfers using either the source or destination
      transaction hash, and explore coverage by protocol and network.
paths:
  /v2/cross-chain/transfers/by-hash/{tx_hash}:
    get:
      tags:
        - Cross-chain transfers
      summary: Get cross-chain transfers by hash
      description: >-
        Returns the cross-chain transfer whose source or destination transaction
        is `tx_hash`, with both legs: each leg's network, transaction hash,
        address, time and asset, and `matched_leg` to say which leg your hash
        is. Send one hash from either leg; no network, protocol or direction is
        needed. The destination asset is what was actually delivered, so a
        cross-chain swap shows the asset received. Results are newest first,
        usually one; a hash with more than 100 transfers (an IBC relayer
        transaction) pages through `meta.next_cursor`. An empty `items` means no
        cross-chain transfer for this hash is indexed: it did not cross chains,
        or it crossed on a protocol, network or date range outside `GET
        /v2/cross-chain/coverage`. A transfer whose delivery is not yet observed
        is returned with its status and `null` destination fields, never as an
        empty answer. An IBC transfer is also found by its acknowledgement
        transaction, on the `source` leg. For Circle Gateway, the deposit into
        Gateway that funded a transfer also finds it, on the `source` leg and
        listed in `funding_deposit_tx_hashes`. A Gateway deposit not proven to
        fund a transfer comes back as its own item with status `DEPOSITED` and
        `gateway_deposit` saying whether it is unspent, partly spent, withdrawn,
        or why it cannot be linked; such items appear only here, never in `GET
        /v2/transfers`. To search transfers by address, network or date, use
        `GET /v2/transfers`.
      operationId: findTransfersByHash
      parameters:
        - name: tx_hash
          required: true
          in: path
          description: >-
            A transaction hash from either side of a cross-chain transfer: the
            one that sent the funds or the one that delivered them. For Circle
            Gateway, also the deposit into Gateway that funded the transfer. No
            network, protocol or direction is needed.
          schema:
            minLength: 1
            maxLength: 128
            example: '0x9539f73f932974f9c1cc50658324a3007850ca8b944570f21038d07937e36175'
            type: string
        - name: cursor
          required: false
          in: query
          description: >-
            Opaque cursor from a previous page's `meta.next_cursor`. Omit for
            the first page.
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrossChainTransfersResponseDto'
        '400':
          description: The hash is empty, too long, or not letters and digits.
        '503':
          description: Cross-chain data is temporarily unavailable
components:
  schemas:
    CrossChainTransfersResponseDto:
      type: object
      properties:
        items:
          description: >-
            The cross-chain transfers whose source or destination transaction is
            the looked-up hash, newest first, 100 per page. Usually one. For a
            Circle Gateway deposit hash: the transfers it funded, plus a
            `DEPOSITED` item for the deposit while it is not wholly linked.
            Empty when our index holds no cross-chain transfer for this hash:
            see `GET /v2/cross-chain/coverage` for what the index covers.
          type: array
          items:
            $ref: '#/components/schemas/CrossChainTransferDto'
        meta:
          $ref: '#/components/schemas/CrossChainTransfersMetaDto'
      required:
        - items
        - meta
    CrossChainTransferDto:
      type: object
      properties:
        id:
          type: string
          example: YmFzZS9pbmsvNjIzMzkzNg
          description: >-
            Stable identifier of the transfer. Both legs return the same id, and
            `GET /v2/transfers/{id}` accepts it. A `DEPOSITED` item is not a
            transfer, so `GET /v2/transfers/{id}` does not serve its id.
        protocol:
          type: string
          example: across
          description: The protocol that carried the transfer.
        status:
          type: string
          enum:
            - SUCCEEDED
            - PENDING
            - ERROR_ON_DESTINATION
            - TIMEOUT
            - UNPAIRED
            - REFUNDED
            - DEPOSITED
          example: SUCCEEDED
          description: >-
            Settlement status. `PENDING` and other unsettled records are
            returned, never hidden: they mean the transfer is known but its
            destination leg is not (yet) observed. `DEPOSITED` marks a Circle
            Gateway deposit that is not (or not wholly) linked to a transfer:
            the item is the deposit itself, described by `gateway_deposit`, with
            no destination. Treat a value you do not recognize as unsettled.
        time:
          type: string
          example: '2026-09-22T11:02:37.000Z'
          description: 'When the transfer started: the time of the source leg.'
        matched_leg:
          enum:
            - source
            - destination
            - both
          type: string
          example: source
          description: >-
            Which leg the looked-up hash is, so the other one is the answer.
            `both` when a same-network record uses one transaction for both
            legs. `source` also when the hash is a Circle Gateway deposit (one
            in `funding_deposit_tx_hashes`, or the deposit of a `DEPOSITED`
            item) or an IBC transfer's acknowledgement on the source chain.
        source:
          $ref: '#/components/schemas/CrossChainLegDto'
        funding_deposit_tx_hashes:
          example:
            - '0x3d61d9dcb7dabf967dbebb0679d75a4e33bb48a2ff14c7fc2a100ea83ab081c9'
          description: >-
            Circle Gateway only: the deposits into Gateway that the chain proves
            funded this transfer. `source.tx_hash` is still the transfer's own
            burn. Absent when no deposit is linked.
          type: array
          items:
            type: string
        gateway_deposit:
          description: >-
            Only on a `DEPOSITED` item: where the deposit stands. The source leg
            is the deposit (network, deposit hash, depositor, time, and the
            amount and USD deposited).
          allOf:
            - $ref: '#/components/schemas/CrossChainGatewayDepositDto'
        destination:
          nullable: true
          description: '`null` when nothing is known yet about where the funds land.'
          type: object
          allOf:
            - $ref: '#/components/schemas/CrossChainLegDto'
      required:
        - id
        - protocol
        - status
        - time
        - matched_leg
        - source
        - destination
    CrossChainTransfersMetaDto:
      type: object
      properties:
        next_cursor:
          type: string
          nullable: true
          example: eyJpZCI6IjkxeFFlV3Z...
          description: >-
            Opaque cursor for the next page, or null when this page holds the
            rest. Pass it back unchanged as `cursor` with the same hash.
        page_number:
          type: number
          example: 1
          description: Current page number.
      required:
        - next_cursor
        - page_number
    CrossChainLegDto:
      type: object
      properties:
        network:
          type: string
          nullable: true
          example: base
          description: Range network id of this leg.
        tx_hash:
          type: string
          nullable: true
          example: '0x9539f73f932974f9c1cc50658324a3007850ca8b944570f21038d07937e36175'
          description: >-
            Transaction hash of this leg. `null` on the destination while the
            funds have not been seen arriving.
        address:
          type: string
          nullable: true
          example: '0x4e0fdbb660635e76ed66799cd6505372a960cfd3'
        time:
          type: string
          nullable: true
          example: '2026-09-22T11:02:37.000Z'
          description: >-
            When this leg happened on its network. On the destination, when the
            funds arrived: `null` until the delivery is observed.
        asset:
          nullable: true
          description: >-
            What this leg moved. On the destination, only what the record shows
            was delivered: `null` when the transfer has not settled or the
            protocol does not record a delivered amount. A cross-chain swap
            delivers a different asset from the one sent.
          type: object
          allOf:
            - $ref: '#/components/schemas/CrossChainAssetDto'
      required:
        - network
        - tx_hash
        - address
        - time
        - asset
    CrossChainGatewayDepositDto:
      type: object
      properties:
        state:
          enum:
            - unspent
            - partly_linked
            - withdrawn
            - unlinked
          type: string
          example: unspent
          description: >-
            Where the deposit stands. `unspent`: nothing spent from it yet.
            `partly_linked`: the transfers it funded so far are in the same
            answer, and `remaining_amount` is still unspent. `withdrawn`: taken
            back out of Gateway rather than bridged, see `withdrawn_amount`.
            `unlinked`: the chain cannot prove which transfers it funded, see
            `reason`. Treat a value you do not recognize as `unlinked`.
        reason:
          nullable: true
          enum:
            - pooled
            - ambiguous
            - balance_mismatch
            - unavailable
          type: string
          example: null
          description: >-
            Why the deposit cannot be linked, or `null`. `pooled`: the
            depositor's Gateway balance already held older funds that no tracked
            deposit accounts for, so this deposit cannot be told apart from
            them; the depositor's Gateway transfers on this network after `time`
            are candidates. `ambiguous`: several deposits and several transfers
            share one balance. `balance_mismatch`: the balance on chain
            disagrees with what was seen. `unavailable`: the chain could not be
            read yet; this is retried and can still change.
        remaining_amount:
          type: number
          nullable: true
          example: 25
          description: >-
            The least amount of the deposit still unspent, in the deposited
            token: at least this much is left, though more may be. `null` when
            not known, and always for `unlinked`.
        withdrawn_amount:
          type: number
          nullable: true
          example: null
          description: >-
            Amount withdrawn from Gateway instead of bridged, or `null` when
            none.
      required:
        - state
        - reason
        - remaining_amount
        - withdrawn_amount
    CrossChainAssetDto:
      type: object
      properties:
        symbol:
          type: string
          nullable: true
          example: USDC
        amount:
          type: number
          example: 38.24
        usd:
          type: number
          nullable: true
          example: 38.24
      required:
        - symbol
        - amount
        - usd
  securitySchemes:
    Authorization:
      type: apiKey
      in: header
      name: X-API-KEY
      description: Authorization method required to allow user to access the api endpoints.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.