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

# Token Trades

> Real-time trade tape, token-wide by default or restricted to specific pools. `maker` is the trader behind the swap, resolved through relays, solvers and smart accounts, with isProTrader/isSniper badges on every row and isWash on Solana. On Base, preconfirmed (flashblocks) trades appear ~2.5s before block commit, flagged per row. Rich filters (side, USD/native/token size, date range, makers) and opaque cursor pagination.

`GET /v1/token/trades` · **1 credit**
`POST /v1/token/trades` · **1 credit**

<Tip>**Live**: the [`trades`](/streams/trades-stream) stream channel pushes these rows as they land, token-wide or on a pool subset, same shape.</Tip>

Real-time trade tape. `maker` is the trader behind the swap: when a wallet trades through a relay, a solver or a smart account, the row is attributed to that wallet, otherwise to the transaction sender. Every row carries `isProTrader`/`isSniper` badges, and `isWash` on Solana. On Base, preconfirmed (flashblocks) trades appear \~2.5s before block commit, flagged per row. **Token-wide by default** - pass `pools=` to restrict. Use the `POST` twin for the `makers[]` filter (up to 2000 addresses, beyond the URL length cap).

<Note>**One row per swap event.** On EVM a swap routed through several pools of the token yields one row per pool, all sharing `txHash` (`id` is `txHash:logIndex`): group by `txHash` for a per-transaction view. On Solana the legs of a transaction are aggregated into one row per transaction and side (`id` is `signature:b` or `signature:s`). Every row names its market in `poolAddress`: the pool of the swap event on EVM, the pool carrying the largest leg of the side on Solana.</Note>

<Note>**Pagination.** Each page is bounded by `limit` and by a scan window over the tape: a page can hold fewer than `limit` rows while `meta.hasMore` is `true`. Keep passing `meta.nextCursor` until `hasMore` is `false`; cursors never skip or repeat a trade, whatever the page size, and `hasMore: false` means the requested history is fully served. `fromAt` and `toAt` are unix milliseconds; a value in seconds is rejected with `400`.</Note>

<Note>An unknown token returns `404`. `meta.usdBasis` says how each `volumeUsd` and `priceUsd` was computed: `trade` = each trade valued at the native coin's USD price at that trade's minute, on EVM and Solana alike. `usdMin` and `usdMax` filter on that same `volumeUsd`.</Note>

<Note>Native coins (`0x0000…0000` and `0xeeee…eeee` on every chain, Solana included, the wrapped native such as WETH or WBNB, and the SOL mint) get the trade feed of their main USD markets (up to 10, the first rows of [`/v1/token/pools`](/endpoints/token-pools)), read from the coin's side: `isBuy` is `true` when the coin was bought, `amountToken` is the coin's amount, `quoteToken` and `amountQuote` the stablecoin it traded against, `priceNative` `1`, `priceUsd` the coin's USD price at the trade, `volumeUsd` the stablecoin amount, and `meta.usdBasis` is `trade` on every chain. `pools` restricts the feed to some of these markets. `isSniper` and `isWash` are `null` on these rows. The native coin of a chain whose native is itself a USD stablecoin (Tempo, Arc, Stable) returns `404`; its wrapped token keeps its own tape.</Note>

<Note>`quoteToken` is the token the trade was priced against: the quote of the pool in `poolAddress` (native, wrapped native, a stablecoin or another token), with its `address`, `symbol`, `name` and `decimals`. `amountQuote` is in units of that token. `priceUsd` is the token's USD price at the trade's `priceNative`.</Note>

<Note>Amounts are GROSS on-chain (the exact swapped value). `feesNative` is the total fee paid by the trader for the transaction (gas and priority fee, plus the validator tip on Solana) in the chain's native unit, `null` when it is not available for that row (a Base preconfirmed trade, for example, has no final fee before block commit). `isWash` is a boolean on Solana. On Base, the forming candle can include preconfirmed (flashblocks) swaps ahead of block commit; dedup by `id` or `txHash`.</Note>

<RequestExample>
  ```bash cURL theme={null}
  curl 'https://api.serialized.xyz/v1/token/trades?chain=evm:8453&address=0x4ed4e862860bed51a9570b96d89af5e1b0efefed&limit=3' \
    -H 'Authorization: YOUR_API_KEY'
  ```

  ```bash cURL (makers[], POST) theme={null}
  curl -X POST 'https://api.serialized.xyz/v1/token/trades' \
    -H 'Authorization: YOUR_API_KEY' -H 'Content-Type: application/json' \
    -d '{"chain":"evm:8453","address":"0x4ed4e862860bed51a9570b96d89af5e1b0efefed","makers":["0x95d955179a7cd45aeef394ed39f6a8d8b1bd1e09"],"limit":3}'
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "data": [
      {
        "id": "0x9d6dd98095ebcb254576b23b2269edf8fa984b581404209aa2a5fe3a14431bdf:289",
        "at": 1786718835000,
        "maker": "0x95d955179a7cd45aeef394ed39f6a8d8b1bd1e09",
        "isBuy": true,
        "amountToken": 77.05662024406023,
        "amountQuote": 0.000042612402192036,
        "quoteToken": { "address": "0x4200000000000000000000000000000000000006", "symbol": "WETH", "name": "Wrapped Ether", "decimals": 18 },
        "priceNative": 5.4747124708872e-7,
        "priceUsd": 0.00103052429,
        "volumeNative": 0.000042612402192036,
        "volumeUsd": 0.08021081608014609,
        "feesNative": 0.0000021,
        "isProTrader": false,
        "isSniper": false,
        "isWash": null,
        "preconfirmed": false,
        "txHash": "0x9d6dd98095ebcb254576b23b2269edf8fa984b581404209aa2a5fe3a14431bdf",
        "block": 49964744,
        "logIndex": 289,
        "poolAddress": "0x0ca6485b7e9cf814a3fd09d81672b07323535b64"
      },
      {
        "id": "0xfe19670bf678d0a83f9ef9227e34f3a76462a924603a31ec2481fac34c7be319:407",
        "at": 1786695809000,
        "maker": "0x6011b76b4b7badc0c4aa28a703a7eedc28334181",
        "isBuy": true,
        "amountToken": 27832.30183604025,
        "amountQuote": 0.015391014265196838,
        "quoteToken": { "address": "0x4200000000000000000000000000000000000006", "symbol": "WETH", "name": "Wrapped Ether", "decimals": 18 },
        "priceNative": 5.4748839531073e-7,
        "priceUsd": 0.001030556569,
        "volumeNative": 0.015391014265196838,
        "volumeUsd": 28.97104483687929,
        "feesNative": 0.0000034,
        "isProTrader": true,
        "isSniper": false,
        "isWash": null,
        "preconfirmed": false,
        "txHash": "0xfe19670bf678d0a83f9ef9227e34f3a76462a924603a31ec2481fac34c7be319",
        "block": 49953231,
        "logIndex": 407,
        "poolAddress": "0x0ca6485b7e9cf814a3fd09d81672b07323535b64"
      }
    ],
    "meta": {
      "asOf": 1786725098947,
      "usdBasis": "trade",
      "hasMore": true,
      "nextCursor": "e1:eyJ0IjoxNzg2Njk1ODA5MDAwLCJiIjo0OTk1MzIzMSwibCI6NDA3fQ"
    }
  }
  ```
</ResponseExample>


## OpenAPI

````yaml openapi.json GET /v1/token/trades
openapi: 3.1.0
info:
  title: Serialized Data API
  description: >-
    On-chain data for trading apps - tokens, candles, token filters. Built on
    our own indexers. 18 EVM chains + Solana, live.
  version: 0.1.0
servers:
  - url: https://demo.serialized.xyz
    description: 'Demo: no key needed, read endpoints, rate-limited per IP'
  - url: https://api.serialized.xyz
    description: 'Production: your API key in the Authorization header'
security:
  - apiKey: []
  - {}
paths:
  /v1/token/trades:
    get:
      summary: Token Trades
      description: >-
        Real-time trade tape. `maker` is the trader behind the swap, resolved
        through relays, solvers and smart accounts, with isProTrader/isSniper
        badges on every row. On Base, preconfirmed (flashblocks) trades appear
        ~2.5s before block commit, flagged per row. Filters: side,
        USD/native/token amount ranges, date range, makers (POST twin, up to
        2000). Cursor pagination.
      operationId: trades-tape
      parameters:
        - schema:
            type: string
            x-default: evm:8453
          in: query
          name: chain
          required: true
          description: Public chain id.
          example: evm:8453
        - schema:
            type: string
            x-default: '0x4ed4e862860bed51a9570b96d89af5e1b0efefed'
          in: query
          name: address
          required: true
          description: Token address.
          example: '0x4ed4e862860bed51a9570b96d89af5e1b0efefed'
        - schema:
            type: string
            x-default: '0x0ca6485b7e9cf814a3fd09d81672b07323535b64'
          in: query
          name: pools
          required: false
          description: >-
            Optional CSV of pool addresses (≤50) to restrict the tape; default
            token-wide (every pool of the token).
          example: '0x0ca6485b7e9cf814a3fd09d81672b07323535b64'
        - schema:
            anyOf:
              - type: string
                enum:
                  - buy
              - type: string
                enum:
                  - sell
          in: query
          name: tradeType
          required: false
        - schema:
            minimum: 0
            type: number
          in: query
          name: usdMin
          required: false
        - schema:
            minimum: 0
            type: number
          in: query
          name: usdMax
          required: false
        - schema:
            minimum: 0
            type: number
          in: query
          name: nativeMin
          required: false
        - schema:
            minimum: 0
            type: number
          in: query
          name: nativeMax
          required: false
        - schema:
            minimum: 0
            type: number
          in: query
          name: tokenAmountMin
          required: false
        - schema:
            minimum: 0
            type: number
          in: query
          name: tokenAmountMax
          required: false
        - schema:
            minimum: 0
            type: integer
          in: query
          name: fromAt
          required: false
          description: >-
            Unix MILLISECONDS, inclusive lower bound. A value in seconds is
            rejected (400).
        - schema:
            minimum: 0
            type: integer
          in: query
          name: toAt
          required: false
          description: >-
            Unix MILLISECONDS, inclusive upper bound (at most 7 days ahead). A
            value in seconds is rejected (400).
        - schema:
            type: string
          in: query
          name: cursor
          required: false
          description: Opaque - from meta.nextCursor.
        - schema:
            default: desc
            anyOf:
              - type: string
                enum:
                  - asc
              - type: string
                enum:
                  - desc
            x-default: desc
          in: query
          name: sort
          required: false
          example: desc
        - schema:
            anyOf:
              - type: string
                enum:
                  - washOnly
              - type: string
                enum:
                  - organicOnly
            x-default: organicOnly
          in: query
          name: washFilter
          required: false
          description: >-
            `washOnly` or `organicOnly` - filter by the per-transaction wash
            badge (solana; every row carries `isWash`).
          example: organicOnly
        - schema:
            minimum: 1
            maximum: 500
            default: 100
            type: integer
            x-default: 3
          in: query
          name: limit
          required: false
          description: 1-500, default 100.
          example: 3
        - schema:
            type: string
          in: query
          name: include
          required: false
          description: 'Opt-ins: traderTxCounts.'
      responses:
        '200':
          description: Standard `{ data, meta }` envelope.
components:
  securitySchemes:
    apiKey:
      type: apiKey
      name: Authorization
      in: header
      description: Your raw API key (not needed on the demo server).

````

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