---
title: "Get Solana token holder concentration for a pump.fun mint"
method: GET
path: "/v1/mint/{mint}/holders"
tags: ["paid"]
---

# Get Solana token holder concentration for a pump.fun mint

`GET /v1/mint/{mint}/holders`

## Request

- Base URL: `https://api.loopholetape.com`
- URL: `https://api.loopholetape.com/v1/mint/{mint}/holders`
- Auth: none required

Use to measure the holder concentration of a Solana token on pump.fun from our ledger of its curve trades: its largest wallets and the creator's and create-slot buyers' shares; for who bought and sold trade by trade use GET /v1/mint/{mint}/flow. Up to 100 holders of one covered pump.fun mint, largest first, from our own per-wallet ledger of its bonding-curve trades: rank, wallet, share of supply, tokens, first-buy slot and time, last trade time, how the first tokens moved, buy and sell counts, and the labels we observe (dev = the creator, bundle = first tokens in the create slot or the next one, mayhem_agent; insider, latency_bot or skilled when the wallet is ranked on our pump.fun leaderboard, otherwise none). The concentration block carries the holder count, top-5 and top-10 share, HHI and the dev, bundle and insider shares the compact check reports. A cohorts block groups the supply by launch role: dev (the creator and the wallets our funding capture saw it fund), bundlers (first tokens in the create slot or the next), snipers (after them, within 2 s of the create slot: slots 2-8 on today's slots), each with its share of supply, wallet count, SOL in and out of the curve and its largest wallets, plus top-1 and top-10 share; each holder row names its cohorts. Labels are observations, not a verdict on a wallet. Full live coverage and feed lag <= 5 s required; an uncovered mint or a stale feed is refused unpaid. After a migration the ledger stops at the curve. The cohorts block also carries the holders' reputation across tokens: the share of supply held now by known dumpers (wallets that sold within 60 s of their first buy on 3 or more other mints), by repeat bundlers (in the create-slot bundle on 3 or more other mints) and by wallets new to our tape, from our own trade tape since 2026-09-27T00:18:34Z; each holder row carries its history on other mints (mints, bundled, quick sells, settled, rugged, graduated).

## Path parameters

- `mint` string, required

## Query parameters

- `limit` integer

## Response `200`

Paid response (header PAYMENT-RESPONSE carries the settlement)

- Envelope
  - `ok` boolean, required
  - `schema_version` '2.0', required
  - `generated_at` string, date-time, required
  - `t` number, required: unix seconds at generation
  - `coverage` 'full' | 'thin', required: the mint is inside our live window (created while our captur / thin = the mint is not in the live window (older than ~2 h of silen
  - `data` object, required
  - `meta` object, required
    - `source` string
    - `version` string
    - `feed_lag_s` number, nullable: seconds between the newest event in our tape and now (the age of the newest event we ingested; it does not say whether the capture runs behind the chain, see chain_lag_s)
    - `is_stale` boolean: the ingest age (feed_lag_s) exceeds the route's freshness limit (5 s for compact risk checks, 30 s otherwise); a paid or keyed pump.fun request is also refused above 5 s of estimated chain lag when the gate enforces (see chain_lag_s, tape_behind), which this flag does not show
    - `chain_lag_s` number, nullable: estimated seconds the newest slot in our pump.fun tape is behind the Solana RPC's processed tip (slots_behind x the measured slot time, to 0.1 s); null when the tip is unknown; absent on Robinhood Chain answers
    - `slots_behind` integer, nullable: estimated slots between the newest slot in our pump.fun tape and the Solana RPC's processed tip (a tip read every 30 s, carried forward by the wall time since at the slot rate our own reads measure); 0 when the tape is at or ahead of the estimate; null when the tip is unknown
    - `tape_behind` boolean, nullable: true when the estimated chain_lag_s is above 5 s, false within 5 s, null when there is no tip to compare; on pump.fun answers only
    - `last_slot` integer, nullable
    - `price_usd` number, nullable
    - `next` object: related resources worth calling next (paths relative to base_url)
    - `disclaimer` string

## Other responses

- `402`: Payment required (x402 v2): header PAYMENT-REQUIRED = base64 of the body
- `404`: not found or invalid: mint is not a pump.fun mint with full live coverage; check /v1/check/coverage first. ({ok:false, error, hint})
- `422`: Validation Error

---

[API](https://skmtc.dev/loopholetape/apis/loophole-tape.md) · [All operations](https://skmtc.dev/loopholetape/apis/loophole-tape/llms.txt) · [OpenAPI document](https://skmtc.dev/loopholetape/apis/loophole-tape/revisions/eea099d70151?raw)
