---
title: "Get Wallet Summaries Batch"
method: POST
path: "/v2/pnl/wallets/batch"
tags: ["Batch"]
---

# Get Wallet Summaries Batch

`POST /v2/pnl/wallets/batch`

Returns wallet-level PnL summaries, resolved identity, and wallet tags for up to 100 unique wallets. Missing/non-indexed wallets are returned in `notFound`; invalid addresses are returned in `invalid`; requests above the limit are truncated and include a `truncated` object.

## Request body

- object
  - `wallets` string[], required — Wallet addresses to summarize. Up to 100 unique valid wallets are processed.

## Response `200`

Wallet summaries found.

- object
  - `count` integer — Number of wallets returned.
  - `wallets` object[]
    - `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
    - `summary` Summary — Aggregated wallet-level PnL summary across all positions.
      - `pnl` 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.
      - `invested` number, nullable — Total USD spent buying tokens.
      - `proceeds` number, nullable — Total USD received from selling tokens.
      - `openPositions` object
        - `cost` number, nullable — Total cost basis of currently-held positions.
        - `value` number, nullable — Current market value of held positions.
      - `counts` object
        - `buys` integer
        - `sells` integer
        - `trades` integer — Total number of buy + sell transactions.
        - `tokensTraded` integer — Number of distinct tokens traded.
        - `tokensHeldEver` integer — Total tokens ever held (including sold).
      - `averages` object
        - `buy` number, nullable — Average USD per buy transaction.
        - `sell` number, nullable — Average USD per sell transaction.
      - `roi` number, nullable — Return on investment as a percentage: (totalPnl / invested) * 100.
      - `timing` object
        - `firstTrade` integer, nullable — Unix ms timestamp of the wallet's first trade.
        - `lastTrade` integer, nullable — Unix ms timestamp of the wallet's most recent trade.
        - `avgHoldTimeSecs` integer, nullable — Average hold duration across all positions with a first buy, in seconds. Uses the same per-position formula as `timing.holdTimeSecs` on positions and traders (first buy to last sell for closed bags, live duration for open bags). Not the same as `/chart` → `summary.averages.holdTimeSecs`, which is day-weighted from daily snapshots.
    - `tags` object
      - `isArbitrage` boolean
      - `platforms` string[]
    - `updatedAt` union — Wallet summary update timestamp as returned by the API.
      - string
      - integer
  - `notFound` string[] — Valid wallets with no indexed summary. Omitted when empty.
  - `invalid` string[] — Wallet addresses that failed Base58 validation. Omitted when empty.
  - `truncated` object — Returned when more than 100 unique valid wallets are submitted.
    - `requested` integer
    - `limit` integer

## Other responses

- `400` — Missing wallets array or no valid wallet addresses provided.
- `500` — Server error.

---

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