---
title: "Get Token Batch Positions"
method: POST
path: "/v2/pnl/tokens/{token}/positions/batch"
tags: ["Token"]
---

# Get Token Batch Positions

`POST /v2/pnl/tokens/{token}/positions/batch`

Returns positions for multiple wallets on one token mint in a single request. Wallets with no matching position are returned in `notFound`. Max 200 wallets.

## Path parameters

- `token` string, required

## Query parameters

- `pnlMode` 'strict' | 'adjusted' | 'raw'

## Request body

- object
  - `wallets` string[], required — Wallet addresses to look up. Max 200.

## Response `200`

Positions found. Wallets that never traded this token appear in `notFound`.

- object
  - `token` string
  - `pnlMode` 'strict' | 'adjusted' | 'raw'
  - `count` integer — Number of positions returned
  - `positions` TokenScopedPositionWithWallet[]
    - `wallet` string
    - `identity` Identity — Unified wallet identity. Only fields with known values are returned; a wallet can carry multiple tags at once.
      - `name` string, nullable — Display name, if known.
      - `twitter` string, nullable — Twitter/X handle, if known.
      - `avatar` string, uri, nullable — Avatar image URL.
      - `type` string, nullable — Primary label for single-badge UIs, such as `kol`, `developer`, `pool`, `bot`, `hacker`, `spam_dusting`, `exchange`, or a platform tag.
      - `tags` string[] — All resolved labels for the wallet, including KOL, platform, pool, developer, bot, arbitrage, hacker, spam-dusting, or exchange tags.
      - `platforms` string[] — 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` object
        - `name` string, nullable
        - `avatar` string, uri, nullable
      - `pool` object
        - `program` string, nullable
        - `poolAddress` string, nullable
      - `developer` object
        - `token` string, nullable
        - `via` string[]
        - `pools` string[]
        - `creationTx` string, nullable
        - `createdAt` integer, nullable — Unix timestamp in seconds.
      - `hacker` object — Curated exploit/scam wallet label, when known.
        - `label` string, nullable
      - `spamDusting` object — Curated spam-dusting wallet label, when known.
        - `label` string, nullable
      - `exchange` object — Known centralized exchange hot wallet label, when known.
        - `name` string, nullable
    - `token` string — Token mint address (base58).
    - `pnl` object — Realized, unrealized, and total profit/loss in USD.
      - `token` PnlBlock — Realized, unrealized, and total profit/loss in USD.
        - `realized` number, nullable — Profit/loss from closed trades (tokens fully or partially sold).
        - `realizedRaw` number, nullable — Unfiltered realized PnL before `pnlMode` adjustments. Present on position rows and leaderboard period stats when available.
        - `unrealized` number, nullable — Paper profit/loss on tokens still held, based on current market price.
        - `total` number, nullable — Sum of realized + unrealized PnL.
      - `wallet` WalletLifetimePnl — Lifetime PnL summary for a wallet, used on token-scoped enrichment responses.
        - `realized` number, nullable
        - `unrealized` number, nullable
        - `total` number, nullable
        - `invested` number, nullable
        - `proceeds` number, nullable
        - `totalTrades` integer
        - `tokensTraded` integer
      - `realized` number, nullable — Profit/loss from closed trades (tokens fully or partially sold).
      - `realizedRaw` number, nullable — Unfiltered realized PnL before `pnlMode` adjustments. Present on position rows and leaderboard period stats when available.
      - `unrealized` number, nullable — Paper profit/loss on tokens still held, based on current market price.
      - `total` number, nullable — Sum of realized + unrealized PnL.
    - `invested` number, nullable — Total cost basis (USD spent buying this token).
    - `proceeds` number, nullable — Total USD received from sales of this token.
    - `roi` number, nullable — Return on investment percentage.
    - `current` object
      - `balance` number, nullable — Current token balance (native units).
      - `costBasis` number, nullable — Cost basis of remaining held tokens.
      - `value` number, nullable — Current USD value of held tokens.
      - `price` number, nullable — Current token price in USD.
      - `avgCost` number, nullable — Average cost per token in USD.
    - `volume` object
      - `tokensBought` number, nullable — Total tokens purchased (native units).
      - `tokensSold` number, nullable — Total tokens sold (native units).
      - `buyUsd` number, nullable — Total USD spent on buys.
      - `sellUsd` number, nullable — Total USD received from sells.
    - `averages` object
      - `buy` number, nullable — Average buy size in USD.
      - `sell` number, nullable — Average sell size in USD.
    - `counts` object
      - `buys` integer
      - `sells` integer
      - `total` integer — Total transactions (buys + sells).
    - `timing` object
      - `firstBuy` integer, nullable — Unix ms.
      - `lastBuy` integer, nullable — Unix ms.
      - `firstSell` integer, nullable — Unix ms.
      - `lastSell` integer, nullable — Unix ms.
      - `firstTrade` integer, nullable — Unix ms.
      - `lastTrade` integer, nullable — Unix ms.
      - `holdTimeSecs` integer, nullable — How long the position has been (or was) held, in seconds.
    - `meta` TokenMeta — Basic token metadata and current market data.
      - `symbol` string, nullable
      - `name` string, nullable
      - `decimals` integer, nullable
      - `price` number, nullable — Current price in USD.
      - `liquidity` number, nullable — Current liquidity in USD.
      - `marketCap` number, nullable — Current market cap in USD.
      - `primaryMarket` string, nullable — Primary DEX where this token trades (e.g. Raydium, Orca).
    - `portfolioPercent` number, nullable — This position's value as a percentage of the wallet's total holdings value. Only present on the positions endpoint.
  - `notFound` string[] — Wallets that never traded this token
  - `invalid` string[] — Addresses that failed Base58 validation. Omitted when empty.

## Other responses

- `400` — Invalid token address or no valid wallets provided.
- `500` — Server error.

---

[API](https://skmtc.net/solanatracker/apis/solana-tracker-data-api.md) · [All operations](https://skmtc.net/solanatracker/apis/solana-tracker-data-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/solanatracker/solana-tracker-data-api/revisions/c07c6f82d0c4/schema)
