Tokens

Top traders on a token (by realized PnL)

Every wallet that traded this mint, ranked by realized SOL PnL (or ROI), using the SAME FIFO cost basis as /wallet/{address}/pnl (TR-16, 2026-10-14) — so a wallet's realized_pnl_sol here equals its per-token value there for the same window. Sells are matched only against earlier observed buys; tokens sold without an observed buy (transfers in, buys under the persistence floor, buys before the window) are reported as unmatched_sell_tokens and their proceeds are NOT counted as profit (cost_basis_complete: false). cost_method says which method answered: fifo, or average_cost (legacy, overstates profit on unmatched sells) while the FIFO function is not yet available. unrealized_pnl_sol / held_value_sol / total_pnl_sol are null when a wallet still holds a token we cannot price (never valued at 0). Each trader is enriched with our reputation data (is_kol, is_alpha_tracked + bot_confidence + historical win rate) so you can separate smart money from a bot round-trip. Distinct from /cap-table (first ~20 EARLY buyers by entry order): this ranks ALL traders by profit. PRO returns top 25, ULTRA top 100.

get/tokens/{mint}/top-traders

Request

  • Base URL: https://madeonsol.com/api/v1
  • URL: https://madeonsol.com/api/v1/tokens/{mint}/top-traders
  • Auth: HTTP bearer

Path parameters

mintstring required
Example:FfuWjhMm5LP3anZ5zq8SG4iqzYVvhM4LoyNMM957pump

Query parameters

limitinteger

Capped at 25 (PRO) / 100 (ULTRA).

offsetinteger

Page start within the ranking. rank continues across pages; the visible window stays capped at the tier's row ceiling (offset+limit ≤ 25 PRO / 100 ULTRA — paging past it returns an empty page).

sort'pnl' | 'roi'
window_daysinteger
min_bought_solnumber

Drop dust wallets that bought less than this.

Response

OK

mintstring
sort'pnl' | 'roi'
window_daysinteger
cost_method'fifo' | 'average_cost'

fifo = same cost basis as /wallet/{address}/pnl. average_cost = legacy fallback (unmatched sells counted at zero cost).

cost_method_notestring
completeness'complete' | 'incomplete'

Realized-PnL completeness. incomplete when at least one sell in the response has proceeds that went to another wallet (price_status proceeds_unattributed, migration 508): realized PnL and ROI then cover the known basis only, and the basis those sells consumed is reported as unknown_realized_cost_basis_sol, never as 0 proceeds or a loss. This is realized-PnL completeness. It is NOT coverage.completeness (source-coverage verification: verified / not_verified / ...), which says whether the trade capture for this subject is proven complete.

incomplete_reasonsstring[]

Empty when complete. /wallet/{address} and /tokens/{mint}/top-traders emit only proceeds_unattributed; unknown_consideration is shared with the FIFO routes (/pnl, /positions).

Example response

{
  "coverage": {
    "history_start": 1775984757,
    "scope": "pump.fun pipeline (pump.fun, LaunchLab/bonk, bags)",
    "size_floor": {
      "min_sol": 0.05,
      "min_stable_usd": 3.5,
      "applies_to": "buys and SOL-spending legs; SOL-receiving sells of any size are kept"
    }
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.