> ## 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 All Holders for a Solana Token

> Fetch the complete holder list for any Solana token — top wallets, whale concentration, and full paginated exports for risk checks and holder dashboards.

Knowing who holds a token is critical before buying. If a few wallets hold most of the supply, those wallets can move the market or create serious risk. The Data API gives you three endpoints depending on how much holder data you need.

## Top 100 Holders

The [top 100 holders](/data-api/get-token-holders-top-100) endpoint returns the largest wallets by balance — fast, no pagination needed.

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://data.solanatracker.io/tokens/6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN/holders" \
    -H "x-api-key: YOUR_API_KEY"
  ```

  ```javascript JavaScript theme={null}
  const token = "6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN";

  const res = await fetch(`https://data.solanatracker.io/tokens/${token}/holders`, {
    headers: { "x-api-key": "YOUR_API_KEY" }
  });
  const { holders, total } = await res.json();

  console.log(`Total holders: ${total}`);
  holders.forEach((h, i) => {
    console.log(`#${i + 1} ${h.wallet} — ${h.percentage.toFixed(2)}% (${h.amount.toLocaleString()} tokens)`);
  });
  ```

  ```python Python theme={null}
  import requests

  token = "6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN"
  res = requests.get(
      f"https://data.solanatracker.io/tokens/{token}/holders",
      headers={"x-api-key": "YOUR_API_KEY"}
  )
  data = res.json()
  print(f"Total holders: {data['total']}")
  for i, h in enumerate(data["holders"]):
      print(f"#{i+1} {h['wallet']} — {h['percentage']:.2f}%")
  ```
</CodeGroup>

***

## Top 20 Holders

The [top 20 holders](/data-api/get-top-20-token-holders) endpoint is a lighter call — useful for quick whale concentration checks without pulling the full 100.

```bash theme={null}
curl "https://data.solanatracker.io/tokens/6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN/holders/top" \
  -H "x-api-key: YOUR_API_KEY"
```

**Quick concentration check:**

```javascript theme={null}
const res = await fetch(`https://data.solanatracker.io/tokens/${token}/holders/top`, {
  headers: { "x-api-key": "YOUR_API_KEY" }
});
const holders = await res.json();

const top10Pct = holders.slice(0, 10).reduce((sum, h) => sum + h.percentage, 0);
console.log(`Top 10 wallets hold ${top10Pct.toFixed(1)}% of supply`);

if (top10Pct > 50) {
  console.log("🚨 High concentration — rug risk");
} else if (top10Pct > 30) {
  console.log("⚠️ Moderate concentration — proceed with caution");
} else {
  console.log("✅ Reasonably distributed supply");
}
```

***

## All Holders (Paginated)

For a full export of every holder — needed for building a holder dashboard, tracking supply distribution over time, or doing deep risk analysis — use the [paginated holders](/data-api/get-all-token-holders-paginated) endpoint. It supports up to 5,000 holders per page.

Cursor pagination means the response gives you a `nextCursor`. Send that cursor in the next request to get the next page.

<CodeGroup>
  ```bash cURL theme={null}
  # First page
  curl "https://data.solanatracker.io/tokens/6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN/holders/paginated?limit=1000" \
    -H "x-api-key: YOUR_API_KEY"

  # Subsequent pages — pass the cursor from the previous response
  curl "https://data.solanatracker.io/tokens/6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN/holders/paginated?limit=1000&cursor=CURSOR_FROM_PREV_RESPONSE" \
    -H "x-api-key: YOUR_API_KEY"
  ```

  ```javascript JavaScript theme={null}
  async function getAllHolders(token) {
    const allHolders = [];
    let cursor = null;

    do {
      const url = new URL(`https://data.solanatracker.io/tokens/${token}/holders/paginated`);
      url.searchParams.set("limit", "1000");
      if (cursor) url.searchParams.set("cursor", cursor);

      const res = await fetch(url.toString(), {
        headers: { "x-api-key": "YOUR_API_KEY" }
      });
      const data = await res.json();

      allHolders.push(...data.holders);
      cursor = data.nextCursor ?? null;

      console.log(`Fetched ${allHolders.length} / ${data.total} holders`);
    } while (cursor);

    return allHolders;
  }

  const token = "6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN";
  const holders = await getAllHolders(token);
  console.log(`Total holders fetched: ${holders.length}`);
  ```

  ```python Python theme={null}
  import requests

  def get_all_holders(token, api_key):
      all_holders = []
      cursor = None
      base_url = f"https://data.solanatracker.io/tokens/{token}/holders/paginated"
      headers = {"x-api-key": api_key}

      while True:
          params = {"limit": 1000}
          if cursor:
              params["cursor"] = cursor

          res = requests.get(base_url, headers=headers, params=params)
          data = res.json()

          all_holders.extend(data["holders"])
          print(f"Fetched {len(all_holders)} / {data['total']} holders")

          cursor = data.get("nextCursor")
          if not cursor:
              break

      return all_holders

  holders = get_all_holders(
      "6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN",
      "YOUR_API_KEY"
  )
  print(f"Done — {len(holders)} total holders")
  ```
</CodeGroup>

***

## Holder Concentration Analysis

Once you have the holder list, you can calculate supply concentration. This shows how much of the token supply is controlled by the largest wallets.

<img src="https://mintcdn.com/solanatracker/ZM5vWoSAJUJFeh6A/images/guides/holders-wallet-tags.png?fit=max&auto=format&n=ZM5vWoSAJUJFeh6A&q=85&s=1823b98bbf8e0e8af9d34de2f59a3ea3" alt="Holder table showing wallet labels beside top token holders" width="3032" height="678" data-path="images/guides/holders-wallet-tags.png" />

```javascript theme={null}
async function analyzeConcentration(token) {
  const res = await fetch(
    `https://data.solanatracker.io/tokens/${token}/holders/top`,
    { headers: { "x-api-key": "YOUR_API_KEY" } }
  );
  const holders = await res.json();

  const top5   = holders.slice(0, 5).reduce((s, h) => s + h.percentage, 0);
  const top10  = holders.slice(0, 10).reduce((s, h) => s + h.percentage, 0);
  const top20  = holders.reduce((s, h) => s + h.percentage, 0);

  console.log(`Top 5 wallets:  ${top5.toFixed(1)}%`);
  console.log(`Top 10 wallets: ${top10.toFixed(1)}%`);
  console.log(`Top 20 wallets: ${top20.toFixed(1)}%`);
  console.log(`Largest single holder: ${holders[0].percentage.toFixed(2)}%`);

  // Flag high-risk patterns
  if (holders[0].percentage > 20) console.log("🚨 Single whale holds >20% — high risk");
  if (top10 > 50)                  console.log("🚨 Top 10 hold >50% of supply — danger");
}
```

<Tip>
  Cross-reference holder data with the [risk score](/data-api/risk) returned by the token info endpoint — it already factors in top-10 concentration and single-wallet ownership thresholds. See the [Token Safety & Rugcheck](/guides/token-safety) guide for details.
</Tip>

***

## Use Cases

| What you're building                    | Endpoint to use                           |
| --------------------------------------- | ----------------------------------------- |
| Quick concentration check before buying | Top 20 holders                            |
| Holder count badge on a token page      | Top 100 (check `total` field)             |
| Full holder export / CSV                | Paginated (cursor loop)                   |
| Whale alert — detect large positions    | Top 100 or Top 20, filter by `percentage` |
| Historical holder distribution          | Paginated snapshots over time             |

***

## Live Holder Updates

To track holder changes in real time — new holders, whale exits, and creator-wallet sell-offs — use the Datastream WebSocket. See the [Live Token Holder Updates](/guides/live-holder-updates) guide.
