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

# Wallet Transfers

> Token in/out history of a wallet, newest first: deposits, withdrawals, plain transfers - timestamp (ms), token, amount, direction, counterparty, tx hash. Paginate with the opaque `cursor` from `meta.nextCursor`: exact pagination that never skips or repeats a transfer. The reconciliation primitive next to `/v1/wallet/trades`.

`GET /v1/wallet/transfers` · **1 credit**

Token in/out history of a wallet, newest first: deposits, withdrawals, plain transfers - timestamp (ms), token, amount, direction, counterparty, tx hash. Paginate with the opaque `cursor` from `meta.nextCursor`: exact pagination that never skips or repeats a transfer. The reconciliation primitive next to `/v1/wallet/trades`.

<Note>**Pagination.** A page scans up to `limit` transactions of the wallet, newest first, and serves their token movements: a transaction that moved several tokens adds several rows, a transaction that only swapped adds none, so a page can hold fewer or more than `limit` rows while `meta.hasMore` is `true`. Keep passing `meta.nextCursor` until `hasMore` is `false`; cursors never skip or repeat a transfer, and `hasMore: false` means the wallet's history is fully served. `meta.nextCursor` is present while `meta.hasMore` is true.</Note>

<Note>**Time window and order.** `from` and `to` bound the history in unix milliseconds, both inclusive; `order` is `desc` (newest first, default) or `asc`. They combine with `cursor`: keep the same `from`, `to` and `order` on every page of a walk. `meta.oldestAt` is the oldest timestamp of the page.</Note>

<Note>`direction` is `in` or `out`; `counterparty` is the other side of the transfer (the zero address for a mint or a burn). Amounts are strings for precision, in token units; `amountUsd` is valued at transfer time and `null` when no price is known for that token at that moment. EVM chains serve the last 90 days of token movements.</Note>

<RequestExample>
  ```bash cURL theme={null}
  curl 'https://api.serialized.xyz/v1/wallet/transfers?chain=evm:8453&wallet=0x95d955179a7cd45aeef394ed39f6a8d8b1bd1e09&limit=2' \
    -H 'Authorization: YOUR_API_KEY'
  ```

  ```bash cURL (next page) theme={null}
  curl 'https://api.serialized.xyz/v1/wallet/transfers?chain=evm:8453&wallet=0x95d955179a7cd45aeef394ed39f6a8d8b1bd1e09&limit=2&cursor=MTc4Njk5MTI0NHwweDNhNGI1YzZkN2U4ZjlhMGIxYzJkM2U0ZjVhNmI3YzhkOWUwZjFhMmIzYzRkNWU2ZjdhOGI5YzBkMWUyZjNhNGJ8MTJ8MA' \
    -H 'Authorization: YOUR_API_KEY'
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "data": [
      {
        "at": 1786998412000,
        "chain": "evm:8453",
        "txHash": "0x7c1f2a9b0e3d4c5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f",
        "direction": "in",
        "tokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
        "tokenSymbol": "USDC",
        "amount": "250.5",
        "amountUsd": null,
        "counterparty": "0xae695f8e2cf6bac920fc983ec0e43c77c471b366"
      },
      {
        "at": 1786991244000,
        "chain": "evm:8453",
        "txHash": "0x3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b",
        "direction": "out",
        "tokenAddress": "0x4ed4e862860bed51a9570b96d89af5e1b0efefed",
        "tokenSymbol": "DEGEN",
        "amount": "10000",
        "amountUsd": null,
        "counterparty": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045"
      }
    ],
    "meta": {
      "asOf": 1787163134668,
      "hasMore": true,
      "nextCursor": "MTc4Njk5MTI0NHwweDNhNGI1YzZkN2U4ZjlhMGIxYzJkM2U0ZjVhNmI3YzhkOWUwZjFhMmIzYzRkNWU2ZjdhOGI5YzBkMWUyZjNhNGJ8MTJ8MA",
      "oldestAt": 1786991244000
    }
  }
  ```
</ResponseExample>


## OpenAPI

````yaml openapi.json GET /v1/wallet/transfers
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/wallet/transfers:
    get:
      summary: Wallet Transfers
      description: >-
        Token in/out history of a wallet, newest first: deposits, withdrawals,
        plain transfers - timestamp (ms), token, amount, direction,
        counterparty, tx hash. Paginate with the opaque `cursor` from
        `meta.nextCursor`: exact pagination that never skips or repeats a
        transfer. The reconciliation primitive next to `/v1/wallet/trades`.
      operationId: wallet-transfers
      parameters:
        - schema:
            type: string
            x-default: evm:8453
          in: query
          name: chain
          required: true
          description: Public chain id - `evm:<id>` or `solana`.
          example: evm:8453
        - schema:
            type: string
            x-default: '0x8888888888888888888888888888888888888888'
          in: query
          name: wallet
          required: true
          description: Wallet address.
          example: '0x8888888888888888888888888888888888888888'
        - schema:
            minimum: 1
            maximum: 100
            default: 50
            type: integer
            x-default: 50
          in: query
          name: limit
          required: false
          description: >-
            Transactions scanned per page (default 50, max 100). A page holds
            the token movements of those transactions: fewer or more rows than
            `limit`.
          example: 50
        - schema:
            type: string
          in: query
          name: cursor
          required: false
          description: >-
            Opaque resume token from `meta.nextCursor` - exact pagination, no
            skip or duplicate.
        - schema:
            minimum: 0
            type: integer
          in: query
          name: from
          required: false
          description: >-
            Inclusive lower time bound, unix MILLISECONDS. A value in seconds is
            rejected (400).
        - schema:
            minimum: 0
            type: integer
          in: query
          name: to
          required: false
          description: >-
            Inclusive upper time bound, unix MILLISECONDS. A value in seconds is
            rejected (400).
        - schema:
            enum:
              - asc
              - desc
            default: desc
            type: string
            x-default: desc
          in: query
          name: order
          required: false
          description: >-
            Sort order by time: `desc` (newest first, default) or `asc`. Keep
            the same order on every page of a walk.
          example: desc
      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.