Skip to main content
Prediction Market data is currently in beta. It is actively being worked on and improved, but may be unreliable. Polymarket data is live, and Kalshi data will be added soon.At least for the time being, this endpoint requires a Growth or Enterprise plan. Learn more.
This endpoint only works with Polymarket. Token holder data is only available for Polymarket because it operates on-chain using ERC-1155 tokens on Polygon. Kalshi is a centralized exchange and does not have publicly queryable token holder information.

Returns

Arguments

Example: Get top token holders for a prediction market

{
  predictionTokenHolders(
    input: {
      marketId: "0xff0cfa9506cfa95759e4c7591654195bd26e3011f9882b51439135e04f2b69f1:Polymarket:0xc5d563a36ae78145c45a50134d48a1215220f80a:137"
      tokenId: "22363389315034600521629710486925706522870234823631575045933955878780499716955"
      limit: 10
    }
  ) {
    items {
      walletAddress
      amount
      predictionTrader {
        alias
        primaryAddress
        totalTradesCount
        totalVolumeUsd
        allTimeProfitUsd
      }
    }
    total
  }
}
Example Response
{
  "data": {
    "predictionTokenHolders": {
      "items": [
        {
          "walletAddress": "0xf68a281980f8c13828e84e147e3822381d6e5b1b",
          "amount": "14681.673332",
          "predictionTrader": {
            "alias": "Sanitar",
            "primaryAddress": null,
            "totalTradesCount": 33183,
            "totalVolumeUsd": "19351881.362839",
            "allTimeProfitUsd": "-126477.772588"
          }
        },
        {
          "walletAddress": "0x2005d16a84ceefa912d4e380cd32e7ff827875ea",
          "amount": "12698.126771",
          "predictionTrader": {
            "alias": "RN1",
            "primaryAddress": null,
            "totalTradesCount": 439062,
            "totalVolumeUsd": "66693740.477832",
            "allTimeProfitUsd": "1095836.858951"
          }
        },
        {
          "walletAddress": "0x6ea84a0c3b910e14342bfd7bc5e9551d622addc0",
          "amount": "4000.000000",
          "predictionTrader": {
            "alias": "Moggster",
            "primaryAddress": null,
            "totalTradesCount": 159,
            "totalVolumeUsd": "31725.594729",
            "allTimeProfitUsd": "-2950.868127"
          }
        },
        // ... 7 more token holders
      ],
      "total": 1002
    }
  }
}

Usage Guidelines

  • Market ID format:
    • Polymarket: <marketAddress>:Polymarket:<exchangeAddress>:<networkId> (e.g., 0x25aa90b3cd98305e849189b4e8b770fc77fe89bccb7cf9656468414e01145d38:Polymarket:0xc5d563a36ae78145c45a50134d48a1215220f80a:137)
    • Kalshi: <marketSlug>:Kalshi (e.g., KXMVECROSSCATEGORY-S2026A4A05B370DF-F1FBA451AA9:Kalshi)
  • Getting token IDs: Query a market using predictionMarkets and retrieve the outcomeIds array - each ID represents a different outcome token (e.g., Yes/No)
  • Token holder sorting: Results are sorted by amount in descending order (largest holders first)
  • Trader profiles: The predictionTrader field may be null if the wallet address hasn’t been indexed as a trader (always null for Kalshi, though Kalshi markets don’t support this endpoint)
  • Pagination: Returns paginated results - use cursor for pagination through large holder lists

Understanding Token Holder Data

  • Amounts are returned as strings to preserve precision for large numbers
  • predictionTrader will be null for wallets that only hold tokens but haven’t placed trades
  • Results are sorted by token amount (highest balances first)

Troubleshooting Tips

The predictionTrader field is only populated for wallets that have been indexed as active traders with trading history. Wallets that only received tokens through transfers (not trades) or very new wallets may not have an associated trader profile yet. These holders will show walletAddress and amount but have null for predictionTrader.
The amount field represents the raw token balance in the smallest unit (similar to wei for ETH). For Polymarket, these are typically 18-decimal precision numbers. To convert to a human-readable format, divide by 10^18. For example, “125000000000000000000” equals 125 tokens. Always use string parsing for precision to avoid JavaScript number overflow.
Yes, token holder balances are updated as trades occur on the blockchain. When tokens are bought, sold, or transferred, the holder balances reflect those changes. There may be a brief delay (typically seconds to minutes) as blocks are processed and indexed.
The API returns all token holders sorted by amount (largest first). To filter by minimum amount, fetch the results and filter client-side. Since results are sorted descending, once you encounter a holder below your threshold, you can stop pagination as all subsequent holders will have smaller amounts.
Binary markets (Yes/No) have two outcome tokens. You need to make two separate queries - one for each tokenId. Use the market’s outcomeIds array to get both token IDs, then query predictionTokenHolders once for outcomeIds[0] and once for outcomeIds[1].
This query returns holders for a specific token. To see all positions for a specific trader across markets, use predictionTraderMarketsStats with the trader’s ID (Polymarket only). That query returns per-market statistics including shares held for each outcome.
No. This endpoint only works for Polymarket because Kalshi is a centralized exchange that doesn’t expose token holder information. Polymarket uses on-chain ERC-1155 tokens on Polygon, making holder data publicly queryable.