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

# Get Transaction Transfers

> All token and native internal transfers for a single transaction, as one unified feed

<Info>
  **Required Parameters**: Both `transaction_hash` and `block_number` must be provided — the block number pins the transaction so its transfers can be located efficiently.
</Info>

Returns every transfer that happened inside one transaction:

* **Token transfers** — ERC-20 and other priced token movements, with the token's `asset` symbol and `contract_address`.
* **Native internal transfers** — value moved by internal calls in the chain's native asset (ETH, POL, BNB, AVAX, xDAI). These rows have `contract_address: null`.

Each row also carries the transaction context: `wallet_selection` (the transaction sender), `transaction_fee`, and `transaction_fee_asset`.

**Supported chains**: `ethereum`, `polygon`, `base`, `arbitrum`, `optimism`, `binance`, `avalanche`, `gnosis`. Gnosis has no internal-transfer feed, so it returns token transfers only.

## Example Requests

Get all transfers for a transaction:

```bash theme={null}
curl -s "https://api-gateway.sonarx.com/api/v1/customer/ethereum/transaction-transfers?transaction_hash=0xe6b8fb001206483fdda45b18ffa903b4c99d87e65b16ad9b01ac5e148f65aea6&block_number=2341625" \
  -H "apikey: YOUR_API_KEY" | jq
```

Another chain — same shape, just change the path segment:

```bash theme={null}
curl -s "https://api-gateway.sonarx.com/api/v1/customer/arbitrum/transaction-transfers?transaction_hash=0x62b16b03e641e3a14d8aa6e6c1f740eb530ff9a34306cf5ece3f7c25f7083524&block_number=23463206" \
  -H "apikey: YOUR_API_KEY" | jq
```

Paginate a transfer-heavy transaction (results are deterministically ordered, so pages never overlap or drift):

```bash theme={null}
curl -s "https://api-gateway.sonarx.com/api/v1/customer/gnosis/transaction-transfers?transaction_hash=0x66d0cb2cad2950f06aea544a5b9f1c4048284c148c319a96cba6d8f09cc37d5c&block_number=28002542&limit=1000&offset=0" \
  -H "apikey: YOUR_API_KEY" | jq

# next page
curl -s "https://api-gateway.sonarx.com/api/v1/customer/gnosis/transaction-transfers?transaction_hash=0x66d0cb2cad2950f06aea544a5b9f1c4048284c148c319a96cba6d8f09cc37d5c&block_number=28002542&limit=1000&offset=1000" \
  -H "apikey: YOUR_API_KEY" | jq
```

## Pagination

`limit` (1–1000, default 100) and `offset` (default 0) page through the results; `count` in the response is the number of rows in the current page — keep advancing `offset` by `limit` until `count < limit`.


## OpenAPI

````yaml GET /api/v1/customer/{chain}/transaction-transfers
openapi: 3.1.0
info:
  title: SonarX EVM API - Transaction Transfers
  description: >-
    All transfers for a single EVM transaction — token transfers and native
    internal transfers — returned as one unified feed.
  version: 1.0.0
servers:
  - url: https://api-gateway.sonarx.com
    description: Production API
security:
  - apiKey: []
tags:
  - name: Transaction Transfers
    description: Token + native internal transfers for a single transaction
paths:
  /api/v1/customer/{chain}/transaction-transfers:
    get:
      tags:
        - Transaction Transfers
      summary: Get Transaction Transfers
      description: >-
        Every transfer that happened inside a single transaction: ERC-20/token
        transfers and native internal transfers, combined into one feed. Native
        transfers report a null `contract_address`. Both `transaction_hash` and
        `block_number` are required. Results are deterministically ordered, so
        `limit`/`offset` pagination is stable across requests.
      operationId: getTransactionTransfers
      parameters:
        - name: chain
          in: path
          description: The blockchain network to query
          required: true
          schema:
            type: string
            enum:
              - ethereum
              - polygon
              - base
              - arbitrum
              - optimism
              - binance
              - avalanche
              - gnosis
            example: ethereum
        - name: transaction_hash
          in: query
          description: Transaction hash (0x-prefixed, 64 hex chars)
          required: true
          schema:
            type: string
            pattern: ^0x[a-fA-F0-9]{64}$
            maxLength: 66
            example: '0x62b16b03e641e3a14d8aa6e6c1f740eb530ff9a34306cf5ece3f7c25f7083524'
        - name: block_number
          in: query
          description: Block number the transaction is in
          required: true
          schema:
            type: integer
            minimum: 0
            example: 23463206
        - name: limit
          in: query
          description: Maximum number of results to return (1-1000)
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 100
        - name: offset
          in: query
          description: Number of results to skip
          required: false
          schema:
            type: integer
            minimum: 0
            default: 0
      responses:
        '200':
          description: Transfers for the transaction
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionTransfersResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    TransactionTransfersResponse:
      type: object
      properties:
        query:
          $ref: '#/components/schemas/TransactionTransfersQuery'
        offset:
          type: integer
          description: Number of results skipped
        limit:
          type: integer
          description: Maximum number of results requested
        count:
          type: integer
          description: Number of results returned in this page
        result:
          type: array
          items:
            $ref: '#/components/schemas/TransactionTransfer'
      required:
        - query
        - offset
        - limit
        - count
        - result
      example:
        query:
          chain: arbitrum
          block_number: 23463206
          transaction_hash: '0x62b16b03e641e3a14d8aa6e6c1f740eb530ff9a34306cf5ece3f7c25f7083524'
        offset: 0
        limit: 100
        count: 2
        result:
          - block_number: 23463206
            datetime: '2022-09-07T23:14:19'
            wallet_selection: '0xc39e5f40ba9ef2294663c0a5ba0cc8776ac90efe'
            protocol: arbitrum
            asset: Wrapped Ether
            contract_address: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1'
            transaction_hash: '0x62b16b03e641e3a14d8aa6e6c1f740eb530ff9a34306cf5ece3f7c25f7083524'
            sending_address: '0x1b02da8cb0d097eb8d57a175b88c7d8b47997506'
            receiving_address: '0xe8ee01ae5959d3231506fcdef2d5f3e85987a39c'
            quantity_transferred: 0.000001347077520779
            transaction_fee: 0.0000739179
            transaction_fee_asset: ETH
          - block_number: 23463206
            datetime: '2022-09-07T23:14:19'
            wallet_selection: '0xc39e5f40ba9ef2294663c0a5ba0cc8776ac90efe'
            protocol: arbitrum
            asset: ETH
            contract_address: null
            transaction_hash: '0x62b16b03e641e3a14d8aa6e6c1f740eb530ff9a34306cf5ece3f7c25f7083524'
            sending_address: '0x1b02da8cb0d097eb8d57a175b88c7d8b47997506'
            receiving_address: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1'
            quantity_transferred: 0.000001347077520779
            transaction_fee: 0.0000739179
            transaction_fee_asset: ETH
    TransactionTransfersQuery:
      type: object
      description: Echo of the filters applied to the request
      properties:
        chain:
          type: string
        block_number:
          type: integer
        transaction_hash:
          type: string
      required:
        - chain
        - block_number
        - transaction_hash
    TransactionTransfer:
      type: object
      description: >-
        One transfer inside the transaction — either a token transfer or a
        native internal transfer. Native transfers have a null contract_address.
      properties:
        block_number:
          type: integer
          nullable: true
          description: Block the transaction was included in
        datetime:
          type: string
          format: date-time
          nullable: true
          description: Block timestamp (UTC)
        wallet_selection:
          type: string
          nullable: true
          description: The transaction sender (transaction-level from address)
        protocol:
          type: string
          nullable: true
          description: The chain the transfer occurred on
        asset:
          type: string
          nullable: true
          description: >-
            Asset symbol of the transferred token; the native asset symbol for
            internal transfers
        contract_address:
          type: string
          nullable: true
          description: Token contract address; null for native-asset transfers
        transaction_hash:
          type: string
          nullable: true
          description: Hash of the transaction
        sending_address:
          type: string
          nullable: true
          description: Address the transfer was sent from
        receiving_address:
          type: string
          nullable: true
          description: Address the transfer was sent to
        quantity_transferred:
          type: number
          nullable: true
          description: Amount transferred, in the asset's units
        transaction_fee:
          type: number
          nullable: true
          description: Total fee paid by the transaction, in the native asset
        transaction_fee_asset:
          type: string
          nullable: true
          description: Native asset the fee was paid in (e.g. ETH, POL, BNB, AVAX, xDAI)
    ErrorResponse:
      type: object
      properties:
        detail:
          type: string
      required:
        - detail
      example:
        detail: API key is not enabled for this endpoint
  responses:
    Unauthorized:
      description: Unauthorized — missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: Forbidden — the API key is not enabled for this endpoint
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    ValidationError:
      description: Validation Error — missing or malformed parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    InternalError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: apikey
      description: API key for authentication

````