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

# Get Account Transfers

> Transfer history for a wallet: SOL, SPL and Token-2022 transfers in and out, newest first, with token metadata, wallet identities and optional USD prices at the time of each transfer.

By default, the transfers of transactions with DEX activity (swaps, liquidity adds and removes, pool fee claims) are left out; set `dex=include` or `dex=only` to see them. Filter by token, direction, sender, receiver or counterparty, time or slot range, amount, USD value and transaction outcome, or group transfers by transaction. Timestamps on this endpoint are Unix **seconds**.

Each parameter has one name. An unknown parameter is a 400 that names the right one (`unknown parameter timeStart; use start`), so a typo never returns an unfiltered page.

**Paging:** follow `pagination.next` until `hasMore` is `false`. A page holds whole transactions, so it can hold a few transfers more or fewer than `limit`. Filtered requests read a bounded number of transfers per call, so a page can hold fewer than `limit` rows, or none, while `hasMore` is still `true`.

For live transfers, join the [transfer rooms](/datastream/websockets/transferwallet) on Datastream. See the [transfers guide](/guides/transfers).

## SDK Example

```typescript
import { Client } from '@solana-tracker/data-api';

const client = new Client({ apiKey: 'YOUR_API_KEY' });

// USDC received over the last week, worth at least $10 at the time.
const data = await client.getAccountTransfers('FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF', {
  direction: 'in',
  mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
  minValue: 10,
  start: Math.floor(Date.now() / 1000) - 7 * 86400,
  limit: 100,
});

// Pass grouped: true for one entry per transaction, or use
// client.iterateAccountTransfers() with the same filters to page through every result.
```


## OpenAPI

````yaml /data-api/openapi.json get /account/{address}/transfers
openapi: 3.1.0
info:
  title: Solana Tracker Data API
  description: >-
    Solana Tracker Data API for token prices, holders, trades, charts, wallet
    data, risk signals, and market analytics.
  version: 1.0.0
  contact:
    email: contact@solanatracker.io
servers:
  - url: https://data.solanatracker.io
    description: Production server
security:
  - apiKey: []
paths:
  /account/{address}/transfers:
    get:
      tags:
        - Transfers
      summary: Get Account Transfers
      description: >-
        Transfer history for a wallet: SOL, SPL and Token-2022 transfers in and
        out, newest first, with token metadata, wallet identities and optional
        USD prices at the time of each transfer.


        By default, the transfers of transactions with DEX activity (swaps,
        liquidity adds and removes, pool fee claims) are left out; set
        `dex=include` or `dex=only` to see them. Filter by token, direction,
        sender, receiver or counterparty, time or slot range, amount, USD value
        and transaction outcome, or group transfers by transaction. Timestamps
        on this endpoint are Unix **seconds**.


        Each parameter has one name. An unknown parameter is a 400 that names
        the right one (`unknown parameter timeStart; use start`), so a typo
        never returns an unfiltered page.


        **Paging:** follow `pagination.next` until `hasMore` is `false`. A page
        holds whole transactions, so it can hold a few transfers more or fewer
        than `limit`. Filtered requests read a bounded number of transfers per
        call, so a page can hold fewer than `limit` rows, or none, while
        `hasMore` is still `true`.


        For live transfers, join the [transfer
        rooms](/datastream/websockets/transferwallet) on Datastream. See the
        [transfers guide](/guides/transfers).
      parameters:
        - name: address
          in: path
          required: true
          schema:
            type: string
          description: >-
            Wallet or account address. SPL transfers are matched by the token
            accounts this wallet owns.
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 100
          description: >-
            Transfers per page. A page holds whole transactions, so it can hold
            a few more or fewer. With `grouped=true` it counts transactions
            instead, unless `dex=include` is set and none of `type`, the
            address, amount or slot filters, or `excludeZero` are. At most 100
            with `minValue` or `maxValue`.
        - name: cursor
          in: query
          schema:
            type: string
          description: >-
            `pagination.next` from the previous page. Keep every other parameter
            the same between pages. An empty `cursor=` returns the first page.
        - name: sortOrder
          in: query
          schema:
            type: string
            enum:
              - desc
              - asc
            default: desc
          description: '`desc` returns newest first, `asc` oldest first.'
        - name: start
          in: query
          description: >-
            Block time from, Unix **seconds**, inclusive. Milliseconds are
            rejected.
          schema:
            type: integer
            minimum: 0
        - name: end
          in: query
          description: >-
            Block time to, Unix **seconds**, inclusive. Must be at least
            `start`.
          schema:
            type: integer
            minimum: 0
        - name: startSlot
          in: query
          schema:
            type: integer
            minimum: 0
          description: Slot from, inclusive.
        - name: endSlot
          in: query
          schema:
            type: integer
            minimum: 0
          description: Slot to, inclusive.
        - name: direction
          in: query
          schema:
            type: string
            enum:
              - all
              - in
              - out
            default: all
          description: Transfers received by (`in`) or sent from (`out`) the address.
        - name: type
          in: query
          description: >-
            `sol` for native SOL transfers, `spl` for SPL and Token-2022
            transfers (wrapped SOL included). Both by default.
          schema:
            type: string
            enum:
              - sol
              - spl
        - name: mint
          in: query
          schema:
            type: string
          description: >-
            Only transfers of this token. The wrapped SOL mint
            `So11111111111111111111111111111111111111112` returns native SOL and
            wrapped SOL transfers.
        - name: status
          in: query
          description: >-
            Outcome of the transaction: `success` (default), `failed` or `any`.
            Each transfer has its own `status`.
          schema:
            type: string
            enum:
              - success
              - failed
              - any
            default: success
        - name: dex
          in: query
          description: >-
            `exclude` (default) leaves out every transfer of a transaction with
            DEX activity, `only` returns only those, `include` returns
            everything. A transaction has DEX activity when one of its transfers
            goes to or comes from a pool (an account a DEX or launchpad program
            owns, or a Raydium or Meteora vault authority): swaps, liquidity
            adds and removes, and fee or reward claims. A transaction where the
            address sent one token and received another counts too.
          schema:
            type: string
            enum:
              - exclude
              - include
              - only
            default: exclude
        - name: from
          in: query
          description: Up to 5 comma-separated sender addresses (wallet or token account).
          schema:
            type: string
        - name: to
          in: query
          description: >-
            Up to 5 comma-separated receiver addresses (wallet or token
            account).
          schema:
            type: string
        - name: counterparty
          in: query
          description: >-
            Up to 5 comma-separated addresses on either side (wallet or token
            account).
          schema:
            type: string
        - name: excludeFrom
          in: query
          schema:
            type: string
          description: Drop transfers from these addresses (up to 5, comma-separated).
          style: form
          explode: false
        - name: excludeTo
          in: query
          schema:
            type: string
          description: Drop transfers to these addresses (up to 5, comma-separated).
          style: form
          explode: false
        - name: minAmount
          in: query
          schema:
            type: number
            minimum: 0
          description: Minimum amount in token units (`uiAmount`), inclusive.
        - name: maxAmount
          in: query
          schema:
            type: number
            minimum: 0
          description: Maximum amount in token units (`uiAmount`), inclusive.
        - name: minValue
          in: query
          schema:
            type: number
            minimum: 0
          description: >-
            Minimum USD value at the time of the transfer, inclusive. Turns on
            `historicPrices`, and `limit` can be at most 100. Each page checks
            the next `limit` transfers and returns those that match, so it can
            hold fewer, or none, while `hasMore` is `true`.
        - name: maxValue
          in: query
          schema:
            type: number
            minimum: 0
          description: >-
            Maximum USD value at the time of the transfer, inclusive. Turns on
            `historicPrices`, and `limit` can be at most 100.
        - name: historicPrices
          in: query
          schema:
            type: boolean
            default: false
          description: >-
            Add `price.usd` and `value.usd` to every transfer: the token's USD
            price from the last 1-minute candle at or before the transfer, at
            most an hour old, else `null`. USDC, USDT and USD1 are priced at 1.
            Without it, transfers have no `price` or `value`.
        - name: grouped
          in: query
          description: >-
            Also return `transactions`: the page's transfers grouped by
            transaction, with totals, `dex` and swap detection.
          schema:
            type: boolean
            default: false
        - name: excludeZero
          in: query
          schema:
            type: boolean
            default: false
          description: Drop zero-amount transfers.
      responses:
        '200':
          description: Transfers for the address
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountTransfersResponse'
              example:
                account: GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3
                transfers:
                  - signature: >-
                      2VxcHt8HKSt2T2EuUZLyWPsEKz4H4BPreWV28aZDEzoaHG4Fsu232oKKeQqpVqsSYaf3vv8KN7UoZ4MPJA8vw9EF
                    status: success
                    type: spl
                    direction: in
                    from:
                      address: C2RjaMN2NeYAErS6KiBjPQhHCt95J8mCmmLiQqZXPisR
                      owner: BfG7WYmravgBhNdWpGoiFmF8L1duw2vdqdDHiZid2hoJ
                    to:
                      address: D9CEogjHA6CpS12F8St9zpSco7pQKJB5uR1RqDsuzQZk
                      owner: GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3
                    token:
                      name: USD Coin
                      symbol: USDC
                      mint: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
                      image: >-
                        https://image.solanatracker.io/proxy?url=https%3A%2F%2Fraw.githubusercontent.com%2Fsolana-labs%2Ftoken-list%2Fmain%2Fassets%2Fmainnet%2FEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v%2Flogo.png
                      decimals: 6
                    amount: '25000000'
                    uiAmount: '25'
                    decimals: 6
                    price:
                      usd: 1
                    value:
                      usd: 25
                    timestamp: 1792483949
                    slot: 459159504
                pagination:
                  next: >-
                    st1.eyJjIjpudWxsLCJrIjoiMlZ4Y0h0OEhLU3QyVDJFdVVaTHlXUHNFS3o0SDRCUHJlV1YyOGFaREV6b2FIRzRGc3UyMzJvS0tlUXFwVnFzU1lhZjN2djhLTjdVb1o0TVBKQTh2dzlFRjoyOi0xIn0
                  hasMore: true
                  count: 1
        '400':
          description: >-
            Invalid address, filter or cursor, or an unknown parameter. The
            message names the parameter, e.g. `limit must be an integer from 1
            to 1000` or `unknown parameter timeStart; use start`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '502':
          description: Transfer history is temporarily unavailable. Retry the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: >-
            Historic prices are unavailable right now (with `minValue` or
            `maxValue`). Retry the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-codeSamples:
        - lang: shell
          label: USDC received
          source: >-
            curl --get
            "https://data.solanatracker.io/account/GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3/transfers"
            \
              --header "x-api-key: YOUR_API_KEY" \
              --data-urlencode "mint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" \
              --data-urlencode "direction=in" \
              --data-urlencode "historicPrices=true" \
              --data-urlencode "limit=50"
        - lang: javascript
          label: Page through history
          source: |
            const address = "GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3";
            let cursor;

            do {
              const url = new URL(`https://data.solanatracker.io/account/${address}/transfers`);
              url.search = new URLSearchParams({ limit: "100", historicPrices: "true", ...(cursor && { cursor }) });
              const response = await fetch(url, { headers: { "x-api-key": "YOUR_API_KEY" } });
              if (!response.ok) throw new Error((await response.json()).error);
              const page = await response.json();

              for (const t of page.transfers) {
                console.log(t.direction, t.uiAmount, t.token.symbol, t.value.usd, t.signature);
              }
              cursor = page.pagination.next;
            } while (cursor);
        - lang: typescript
          label: SDK
          source: >
            import { Client } from '@solana-tracker/data-api';


            const client = new Client({ apiKey: 'YOUR_API_KEY' });


            // USDC received over the last week, worth at least $10 at the time.

            const data = await
            client.getAccountTransfers('FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF',
            {
              direction: 'in',
              mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
              minValue: 10,
              start: Math.floor(Date.now() / 1000) - 7 * 86400,
              limit: 100,
            });


            // Pass grouped: true for one entry per transaction, or use

            // client.iterateAccountTransfers() with the same filters to page
            through every result.
      x-code-samples:
        - lang: shell
          label: USDC received
          source: >-
            curl --get
            "https://data.solanatracker.io/account/GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3/transfers"
            \
              --header "x-api-key: YOUR_API_KEY" \
              --data-urlencode "mint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" \
              --data-urlencode "direction=in" \
              --data-urlencode "historicPrices=true" \
              --data-urlencode "limit=50"
        - lang: javascript
          label: Page through history
          source: |
            const address = "GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3";
            let cursor;

            do {
              const url = new URL(`https://data.solanatracker.io/account/${address}/transfers`);
              url.search = new URLSearchParams({ limit: "100", historicPrices: "true", ...(cursor && { cursor }) });
              const response = await fetch(url, { headers: { "x-api-key": "YOUR_API_KEY" } });
              if (!response.ok) throw new Error((await response.json()).error);
              const page = await response.json();

              for (const t of page.transfers) {
                console.log(t.direction, t.uiAmount, t.token.symbol, t.value.usd, t.signature);
              }
              cursor = page.pagination.next;
            } while (cursor);
        - lang: typescript
          label: SDK
          source: >
            import { Client } from '@solana-tracker/data-api';


            const client = new Client({ apiKey: 'YOUR_API_KEY' });


            // USDC received over the last week, worth at least $10 at the time.

            const data = await
            client.getAccountTransfers('FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF',
            {
              direction: 'in',
              mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
              minValue: 10,
              start: Math.floor(Date.now() / 1000) - 7 * 86400,
              limit: 100,
            });


            // Pass grouped: true for one entry per transaction, or use

            // client.iterateAccountTransfers() with the same filters to page
            through every result.
components:
  schemas:
    AccountTransfersResponse:
      type: object
      required:
        - account
        - transfers
        - pagination
      properties:
        account:
          type: string
        grouped:
          type: boolean
          description: Present and true when `grouped=true`
        transfers:
          type: array
          items:
            $ref: '#/components/schemas/AccountTransfer'
          description: >-
            Transfers in this page. With `grouped=true`, every transfer of the
            returned transactions.
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/TransferTransaction'
          description: '`grouped=true` only'
        pagination:
          type: object
          properties:
            next:
              type:
                - string
                - 'null'
              description: Pass as `cursor` for the next page
            hasMore:
              type: boolean
            count:
              type: integer
              description: Transfers in this page (transactions when grouped)
            transferCount:
              type: integer
              description: '`grouped=true` only: transfers in this page'
        enrichmentStatus:
          type: string
          enum:
            - partial
          description: >-
            Present when the price lookup ran out of time: prices it did not
            find are null. Such a page is not cached.
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Error message
      required:
        - error
    AccountTransfer:
      type: object
      required:
        - signature
        - status
        - type
        - direction
        - from
        - to
        - token
        - amount
        - uiAmount
        - decimals
        - timestamp
        - slot
      properties:
        signature:
          type: string
        status:
          type: string
          enum:
            - success
            - failed
        type:
          type: string
          enum:
            - sol
            - spl
        direction:
          type: string
          enum:
            - in
            - out
          description: Relative to the requested address
        from:
          $ref: '#/components/schemas/TransferParty'
        to:
          $ref: '#/components/schemas/TransferParty'
        token:
          $ref: '#/components/schemas/TransferToken'
        amount:
          type: string
          description: Raw amount in base units
        uiAmount:
          type: string
          description: Exact decimal amount
        decimals:
          type: integer
        price:
          type: object
          required:
            - usd
          properties:
            usd:
              type:
                - number
                - 'null'
          description: >-
            USD price at the time of the transfer. Only with
            `historicPrices=true` or a value filter; `usd` is null when no price
            was found.
        value:
          type: object
          required:
            - usd
          properties:
            usd:
              type:
                - number
                - 'null'
          description: >-
            `uiAmount` × price. Only with `historicPrices=true` or a value
            filter.
        timestamp:
          type:
            - integer
            - 'null'
          description: Block time, Unix seconds
        slot:
          type:
            - integer
            - 'null'
    TransferTransaction:
      type: object
      properties:
        signature:
          type: string
        status:
          type: string
          enum:
            - success
            - failed
          description: Outcome of the transaction
        timestamp:
          type:
            - integer
            - 'null'
        slot:
          type:
            - integer
            - 'null'
        type:
          type: string
          enum:
            - swap
            - transfer
          description: '`swap` when `dex` is true, otherwise `transfer`'
        dex:
          type: boolean
          description: '`true` when the transaction has DEX activity (see `dex`)'
        direction:
          type: string
          enum:
            - in
            - out
            - both
            - swap
          description: >-
            `swap` when `dex` is true; otherwise `in`, `out`, or `both` when the
            transaction moved tokens both ways
        legs:
          type: integer
          description: Transfers in this transaction
        totals:
          type: object
          properties:
            value:
              type: object
              required:
                - usd
              properties:
                usd:
                  type:
                    - number
                    - 'null'
              description: >-
                Gross USD in plus out. Only with `historicPrices=true` or a
                value filter.
            in:
              type: object
              description: >-
                With a single token on that side, the token's totals; otherwise
                `legs`. `usd` only with `historicPrices=true` or a value filter.
              properties:
                usd:
                  type:
                    - number
                    - 'null'
                legs:
                  type: integer
                token:
                  $ref: '#/components/schemas/TransferToken'
                amount:
                  type: string
                uiAmount:
                  type: string
                decimals:
                  type: integer
                price:
                  type: object
                  required:
                    - usd
                  properties:
                    usd:
                      type:
                        - number
                        - 'null'
                  description: Only with `historicPrices=true` or a value filter.
                value:
                  type: object
                  required:
                    - usd
                  properties:
                    usd:
                      type:
                        - number
                        - 'null'
                  description: Only with `historicPrices=true` or a value filter.
            out:
              type: object
              description: >-
                With a single token on that side, the token's totals; otherwise
                `legs`. `usd` only with `historicPrices=true` or a value filter.
              properties:
                usd:
                  type:
                    - number
                    - 'null'
                legs:
                  type: integer
                token:
                  $ref: '#/components/schemas/TransferToken'
                amount:
                  type: string
                uiAmount:
                  type: string
                decimals:
                  type: integer
                price:
                  type: object
                  required:
                    - usd
                  properties:
                    usd:
                      type:
                        - number
                        - 'null'
                  description: Only with `historicPrices=true` or a value filter.
                value:
                  type: object
                  required:
                    - usd
                  properties:
                    usd:
                      type:
                        - number
                        - 'null'
                  description: Only with `historicPrices=true` or a value filter.
            net:
              type: object
              required:
                - usd
              properties:
                usd:
                  type:
                    - number
                    - 'null'
              description: >-
                USD in minus out. Only with `historicPrices=true` or a value
                filter.
            tokens:
              type: array
              items:
                $ref: '#/components/schemas/TransferTokenTotal'
        swap:
          type: object
          description: Set when the address sent one token and received another
          properties:
            in:
              $ref: '#/components/schemas/TransferTokenTotal'
            out:
              $ref: '#/components/schemas/TransferTokenTotal'
        transfers:
          type: array
          items:
            $ref: '#/components/schemas/AccountTransfer'
    TransferParty:
      type: object
      required:
        - address
        - owner
      properties:
        address:
          type: string
          description: Token account for SPL transfers, wallet for SOL transfers
        owner:
          type: string
          description: Wallet that owned `address` at the time of the transfer
        identity:
          type: object
          additionalProperties: true
          description: >-
            Known wallet identity (KOL, exchange, pool, developer, SNS name and
            tags). Omitted for unknown wallets.
    TransferToken:
      type: object
      properties:
        name:
          type:
            - string
            - 'null'
        symbol:
          type:
            - string
            - 'null'
        mint:
          type: string
          description: '`So11111111111111111111111111111111111111112` for SOL'
        image:
          type:
            - string
            - 'null'
        decimals:
          type: integer
    TransferTokenTotal:
      type: object
      properties:
        token:
          $ref: '#/components/schemas/TransferToken'
        direction:
          type: string
          enum:
            - in
            - out
        amount:
          type: string
        uiAmount:
          type: string
        decimals:
          type: integer
        price:
          type: object
          required:
            - usd
          properties:
            usd:
              type:
                - number
                - 'null'
          description: Only with `historicPrices=true` or a value filter.
        value:
          type: object
          required:
            - usd
          properties:
            usd:
              type:
                - number
                - 'null'
          description: Only with `historicPrices=true` or a value filter.
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: API Key for authentication

````

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