---
title: "Smart Money KOL Ranking"
method: GET
path: "/gateway/v1/smart-money/kol/ranking"
tags: ["Smart Money"]
---

# Smart Money KOL Ranking

`GET /gateway/v1/smart-money/kol/ranking`

## Request

- Base URL: `https://api.asksurf.ai`
- URL: `https://api.asksurf.ai/gateway/v1/smart-money/kol/ranking`
- Auth: HTTP bearer

Ranks crypto KOLs by how well they actually trade.

**Boards** (`type`):
- `composite` (default): trading skill blended with influence; every Smart KOL is included, plus KOLs with a composite score of at least 40.
- `smart`: trading skill only. The skill score is computed from the last 90 days of on-chain spot and perp positions and validated out of sample — KOLs scoring 75+ were profitable in the following month more than twice as often as the average KOL.
- `bigv`: large accounts (50k+ followers and $500k+ traded), regardless of skill.

Each row carries scores, 90-day PnL and volume (rounded) and the reasons a KOL is kept off the Smart board (`flags`). Use `smart-money-kol-detail` for per-market statistics. The pool also scores traders known only from FOMO; their handle is `fomo:<FOMO handle>`.

**Privacy:** responses never include wallet addresses or transaction identifiers. Per-KOL amounts are rounded to 2 significant figures, and per-token KOL lists carry names only.

**Data refresh:** daily

## Query parameters

- `type` 'composite' | 'smart' | 'bigv': Board: composite (skill + influence), smart (trading skill only), bigv (large following and trading volume)
- `sort_by` 'composite_score' | 'smart_score' | 'influence_score' | 'pnl' | 'followers' | 'volume': Sort field. Defaults to the board's own order: rank for composite and smart (by unrounded scores), volume (spot + perp, unrounded) for bigv
- `order` 'asc' | 'desc': Sort order
- `limit` integer: Results per page
- `offset` integer: Pagination offset

## Response `200`

OK

- DataResponseSmartMoneyKOLItem
  - `$schema` string, uri: A URL to the JSON Schema for this object.
  - `data` SmartMoneyKOLItem[], nullable, required
    - `avatar` string: Avatar URL
    - `flags` string[], nullable, required: Reasons the KOL is kept off the Smart board: insufficient_sample, suspected_bot, not_profitable, inactive_30d, not_kol, no_x_profile
    - `followers_count` integer, required: X follower count
    - `handle` string, required: Trader handle: an X handle without @, or fomo:<handle> for a trader known only from FOMO
    - `is_bigv` boolean, required: On the big-account board (large following and trading volume)
    - `is_smart` boolean, required: On the Smart (trading skill) board
    - `name` string, required: Display name
    - `on_composite_board` boolean, required: On the composite board
    - `perp_notional_90d_usd` number, double: 90-day perp notional in USD, rounded to 2 significant figures
    - `pnl_90d_usd` number, double: 90-day PnL across markets in USD, rounded to 2 significant figures
    - `rank` integer, required: Rank on the requested board (by the board's default order)
    - `risks` string[], nullable, required: Risk notes that do not affect ranking: bag_holding (very high win rate with small wins and large losses)
    - `scores` SmartMoneyScores
      - `composite` number, double, required: Composite score (0-100): trading skill blended with influence
      - `followers_pct` number, double, required: Follower count percentile (0-100)
      - `influence` number, double, required: Influence score (0-100): average of the three percentiles below
      - `smart` number, double, required: Trading skill score (0-100), validated out of sample
      - `smart_followers_pct` number, double, required: Smart follower count percentile (0-100)
      - `volume_pct` number, double, required: Trading volume percentile (0-100)
    - `smart_followers_count` integer, required: Number of smart followers
    - `smart_since` integer: Day the KOL entered the Smart board (Unix seconds)
    - `spot_volume_90d_usd` number, double: 90-day spot buy amount in USD, rounded to 2 significant figures
    - `suspected_bot_markets` string[], nullable, required: Markets (spot, perp) whose activity looks automated
    - `verified` boolean, required: Whether the X account is verified
  - `meta` OffsetMeta, required
    - `cached` boolean, required: Whether this response was served from cache
    - `credits_used` integer, required: Credits deducted for this request
    - `empty_reason` string: Hint explaining why the data array is empty, when applicable
    - `has_more` boolean: Whether more items may exist beyond this response. For offset-paged endpoints, continue with a larger offset. For time-series endpoints without offset/cursor controls, true means the requested time range hit an upstream cap; narrow from/to to continue. Omitted when exhaustion cannot be proven.
    - `limit` integer, required: Maximum number of items returned in this response
    - `offset` integer, required: Number of items skipped (pagination offset)
    - `total` integer: Total number of matching items (before pagination). Omitted when total is unknown.
    - `watermark` integer: Warehouse watermark (Unix seconds) this response was computed at, on warehouse-backed endpoints (e.g. Hyperliquid /trades/aggregate) — rows up to this time come from the warehouse, newer rows from the live tail. Omitted elsewhere.

## Other responses

- `default`: Error

## Changes

- **2026-10-23** `cd899b4049b6`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/asksurf/apis/asksurf-public-rest-api/changes/gateway/v1/smart-money/kol/ranking/get.md)

---

[API](https://skmtc.dev/asksurf/apis/asksurf-public-rest-api.md) - [All operations](https://skmtc.dev/asksurf/apis/asksurf-public-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/asksurf/apis/asksurf-public-rest-api/revisions/91774fdd5302?raw)
