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

# Solana Traders Leaderboard

> Ranks Solana trading wallets by recent PnL performance over supported windows (`1`, `7`, `30`, or `90` days). Use filters to remove low-signal wallets, arbitrage wallets, and one-off winners.

## SDK Example

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

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

  const data = await client.getPnlV2TopTraders({ limit: 50, pnlMode: 'strict' });

  ```
</CodeGroup>


## OpenAPI

````yaml /data-api/pnl-v2/openapi.json get /v2/pnl/leaderboard/top
openapi: 3.1.0
info:
  title: SolanaTracker PnL V2 API
  description: >-
    Profit-and-loss tracking for Solana wallets. Provides wallet PnL summaries,
    token-level positions, leaderboards, KOL rankings, risk analysis, and
    historical performance data. All monetary values are in USD. All timestamps
    are Unix milliseconds unless noted otherwise.
  version: 2.0.0
servers:
  - url: https://data.solanatracker.io
    description: Production
security:
  - apiKey: []
tags:
  - name: Leaderboard
    description: Top traders, whales, and KOL rankings
  - name: Token
    description: Per-token trader and holder data
  - name: Wallet
    description: Wallet-level PnL, positions, history, and analysis
  - name: Batch
    description: Bulk wallet summaries and position lookups
paths:
  /v2/pnl/leaderboard/top:
    get:
      tags:
        - Leaderboard
      summary: Solana Traders Leaderboard
      description: >-
        Ranks Solana trading wallets by recent PnL performance over supported
        windows (`1`, `7`, `30`, or `90` days). Use filters to remove low-signal
        wallets, arbitrage wallets, and one-off winners.
      operationId: getTopTraders
      parameters:
        - name: sort
          in: query
          description: Field to rank by.
          schema:
            type: string
            enum:
              - realized
              - volume
              - days
              - roi
              - win_percentage
              - trades
              - tokens
            default: realized
        - $ref: '#/components/parameters/direction'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/platform'
        - $ref: '#/components/parameters/excludeArbitrage'
        - $ref: '#/components/parameters/pnlMode'
        - name: days
          in: query
          description: >-
            Rolling leaderboard window in days. Use 1, 7, 30, or 90 for exact
            supported windows; other values are resolved to the nearest
            supported window by the API.
          schema:
            type: integer
            default: 90
        - name: minTrades
          in: query
          description: Minimum trades within the window.
          schema:
            type: integer
            default: 20
        - name: minInvested
          in: query
          description: Minimum USD invested within the window.
          schema:
            type: number
            default: 1
        - name: minDays
          in: query
          description: Minimum number of active trading days.
          schema:
            type: integer
            default: 3
        - name: minWinRate
          in: query
          description: Minimum win rate percentage.
          schema:
            type: number
        - name: minRoi
          in: query
          description: Minimum ROI percentage.
          schema:
            type: number
        - name: minClosedTokens
          in: query
          description: Minimum closed positions.
          schema:
            type: integer
        - name: maxSingleTokenPct
          in: query
          description: >-
            Maximum percentage of PnL that can come from a single token. Filters
            out one-hit-wonders.
          schema:
            type: number
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
                properties:
                  traders:
                    type: array
                    items:
                      $ref: '#/components/schemas/Top90dTrader'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
              example:
                traders:
                  - wallet: HkFGQsW8mr8DTC2AE2WcC7MzwSnynfEryGMQSht271nf
                    period:
                      realized: 29253686.75
                      realizedRaw: 29511824.12
                      volume: 53377270.16
                      tradingDays: 79
                      roi: 345.12
                      days:
                        profitable: 58
                        losing: 21
                        maxSinglePnl: 891245.33
                        winRate: 73.42
                    pnlAdjustments:
                      mode: adjusted
                      invalidPnl: 29511824.12
                      adjustedCorrection: 258137.37
                    ending:
                      pnl:
                        realized: 29642991.91
                        total: 29684935.07
                    invested: 8476262.08
                    proceeds: 38119253.99
                    counts:
                      buys: 13842
                      sells: 27968
                      trades: 41810
                      tokensTraded: 4689
                    averages:
                      buy: 1168.23
                      sell: 1362.96
                    tokens:
                      profitable: 2441
                      losing: 159
                      closed: 2600
                    winRate: 93.88
                    timing:
                      firstTrade: 1736769677989
                      lastTrade: 1776617215655
                    lastSnapshotDate: '2026-04-19'
                    updatedAt: '2026-04-19T16:46:56.831Z'
                    identity:
                      name: null
                      twitter: null
                      avatar: >-
                        https://kol-avatar.solanatracker.io/HkFGQsW8mr8DTC2AE2WcC7MzwSnynfEryGMQSht271nf
                  - wallet: ApAKzJEqfnP7F74Za5xdTQxZMK4nD8dFTVBQ9bksTtGM
                    period:
                      realized: 19624090.03
                      volume: 34214876.02
                      tradingDays: 51
                      roi: 394.24
                    ending:
                      pnl:
                        realized: 19769219.5
                        total: 19768875.79
                    invested: 4977742.44
                    proceeds: 24746961.94
                    counts:
                      buys: 8655
                      sells: 20887
                      trades: 29542
                      tokensTraded: 2915
                    averages:
                      buy: 1119.37
                      sell: 1184.8
                    tokens:
                      profitable: 1811
                      losing: 33
                      closed: 1844
                    winRate: 98.21
                    timing:
                      firstTrade: 1772358151760
                      lastTrade: 1776607936649
                    lastSnapshotDate: '2026-04-19'
                    updatedAt: '2026-04-19T14:12:17.583Z'
                    identity:
                      name: null
                      twitter: null
                      avatar: >-
                        https://kol-avatar.solanatracker.io/ApAKzJEqfnP7F74Za5xdTQxZMK4nD8dFTVBQ9bksTtGM
                pagination:
                  hasMore: true
                  nextCursor: >-
                    eyJzb3J0VmFsdWUiOjE5NjI0MDkwLjAyODk1MTU5MywidGllQnJlYWtlciI6IkFwQUt6SkVxZm5QN0Y3NFphNXhkVFF4Wk1LNG5EOGRGVFZCUTlia3NUdEdNIn0=
                  count: 2
                  total: 2
                  pnlMode: adjusted
        '400':
          description: Invalid request parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-codeSamples:
        - lang: typescript
          label: SDK
          source: >
            import { Client } from '@solana-tracker/data-api';


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


            const data = await client.getPnlV2TopTraders({ limit: 50, pnlMode:
            'strict' });
      x-code-samples:
        - lang: typescript
          label: SDK
          source: >
            import { Client } from '@solana-tracker/data-api';


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


            const data = await client.getPnlV2TopTraders({ limit: 50, pnlMode:
            'strict' });
components:
  parameters:
    direction:
      name: direction
      in: query
      description: Sort direction.
      schema:
        type: string
        enum:
          - asc
          - desc
        default: desc
    limit:
      name: limit
      in: query
      description: Number of results per page.
      schema:
        type: integer
        default: 100
    cursor:
      name: cursor
      in: query
      description: >-
        Opaque pagination cursor returned from the previous page's
        `pagination.nextCursor`.
      schema:
        type: string
    platform:
      name: platform
      in: query
      description: >-
        Filter traders by the trading platform(s) they use. Comma-separated
        list.
      schema:
        type: string
        enum:
          - axiom
          - axiom-flash
          - bloom
          - photon
    excludeArbitrage:
      name: excludeArbitrage
      in: query
      description: Exclude wallets flagged as arbitrage bots. Pass `false` to include them.
      schema:
        type: string
        enum:
          - 'true'
          - 'false'
        default: 'true'
    pnlMode:
      name: pnlMode
      in: query
      description: >-
        How to treat positions flagged by the invalid PnL heuristic. `strict`
        zeros them out, `adjusted` caps them to a cost-basis-aware value, and
        `raw` leaves realized PnL untouched. Aliases `pnl_mode` and `mode` are
        also accepted by the API.
      schema:
        type: string
        enum:
          - strict
          - adjusted
          - raw
        default: strict
  schemas:
    Top90dTrader:
      type: object
      description: Top trader entry for the rolling-window leaderboard.
      properties:
        wallet:
          type: string
        period:
          type: object
          properties:
            realized:
              type:
                - number
                - 'null'
            realizedRaw:
              type:
                - number
                - 'null'
              description: Gross realized PnL before strict or adjusted filtering.
            volume:
              type:
                - number
                - 'null'
            tradingDays:
              type: integer
            roi:
              type:
                - number
                - 'null'
            days:
              type: object
              properties:
                profitable:
                  type: integer
                losing:
                  type: integer
                maxSinglePnl:
                  type:
                    - number
                    - 'null'
                winRate:
                  type:
                    - number
                    - 'null'
        pnlAdjustments:
          type: object
          properties:
            mode:
              type: string
              enum:
                - strict
                - adjusted
                - raw
            invalidPnl:
              type:
                - number
                - 'null'
            adjustedCorrection:
              type:
                - number
                - 'null'
        ending:
          type: object
          properties:
            pnl:
              type: object
              properties:
                realized:
                  type:
                    - number
                    - 'null'
                total:
                  type:
                    - number
                    - 'null'
        invested:
          type:
            - number
            - 'null'
        proceeds:
          type:
            - number
            - 'null'
        counts:
          type: object
          properties:
            buys:
              type: integer
            sells:
              type: integer
            trades:
              type: integer
            tokensTraded:
              type: integer
        averages:
          type: object
          properties:
            buy:
              type:
                - number
                - 'null'
            sell:
              type:
                - number
                - 'null'
        tokens:
          type: object
          properties:
            profitable:
              type: integer
            losing:
              type: integer
            closed:
              type: integer
        winRate:
          type:
            - number
            - 'null'
        timing:
          type: object
          properties:
            firstTrade:
              type:
                - integer
                - 'null'
            lastTrade:
              type:
                - integer
                - 'null'
        lastSnapshotDate:
          type:
            - string
            - 'null'
          format: date
        updatedAt:
          type:
            - string
            - 'null'
          format: date-time
        identity:
          $ref: '#/components/schemas/Identity'
    Pagination:
      type: object
      description: Cursor-based pagination metadata.
      properties:
        hasMore:
          type: boolean
          description: Whether more pages exist after this one.
        nextCursor:
          type:
            - string
            - 'null'
          description: >-
            Opaque cursor to pass as `?cursor=` for the next page. Null when
            there are no more results.
        count:
          type: integer
          description: Number of items returned in this page.
        total:
          type: integer
          description: Total number of matching items across all pages.
        pnlMode:
          type: string
          enum:
            - strict
            - adjusted
            - raw
          description: Resolved PnL treatment mode when the endpoint supports `pnlMode`.
        enrich:
          type: array
          description: List of enrichment modules applied to the response when supported.
          items:
            type: string
      required:
        - hasMore
        - nextCursor
        - count
        - total
    Error:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message.
      required:
        - error
    Identity:
      type: object
      description: >-
        Unified wallet identity. Only fields with known values are returned; a
        wallet can carry multiple tags at once.
      properties:
        name:
          type:
            - string
            - 'null'
          description: Display name, if known.
        twitter:
          type:
            - string
            - 'null'
          description: Twitter/X handle, if known.
        avatar:
          type:
            - string
            - 'null'
          format: uri
          description: Avatar image URL.
        type:
          type:
            - string
            - 'null'
          description: >-
            Primary label for single-badge UIs, such as `kol`, `developer`,
            `pool`, `bot`, `hacker`, `spam_dusting`, `exchange`, or a platform
            tag.
        tags:
          type: array
          items:
            type: string
          description: >-
            All resolved labels for the wallet, including KOL, platform, pool,
            developer, bot, arbitrage, hacker, spam-dusting, or exchange tags.
        platforms:
          type: array
          items:
            type: string
          description: >-
            Normalized trading frontend tags such as `axiom`, `bloom`, or
            `photon`. Query filters also accept `axiom-flash`, which is
            normalized to `axiom` in identity responses.
        bot:
          type: object
          properties:
            name:
              type:
                - string
                - 'null'
            avatar:
              type:
                - string
                - 'null'
              format: uri
        pool:
          type: object
          properties:
            program:
              type:
                - string
                - 'null'
            poolAddress:
              type:
                - string
                - 'null'
        developer:
          type: object
          properties:
            token:
              type:
                - string
                - 'null'
            via:
              type: array
              items:
                type: string
            pools:
              type: array
              items:
                type: string
            creationTx:
              type:
                - string
                - 'null'
            createdAt:
              type:
                - integer
                - 'null'
              description: Unix timestamp in seconds.
        hacker:
          type: object
          description: Curated exploit/scam wallet label, when known.
          properties:
            label:
              type:
                - string
                - 'null'
        spamDusting:
          type: object
          description: Curated spam-dusting wallet label, when known.
          properties:
            label:
              type:
                - string
                - 'null'
        exchange:
          type: object
          description: Known centralized exchange hot wallet label, when known.
          properties:
            name:
              type:
                - string
                - 'null'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: API Key for authentication

````