MadeOnSol ships two KOL token feeds that look almost identical on the surface: /v1/kol/tokens/hot and /v1/kol/tokens/trending. Both return the Solana tokens that tracked KOL wallets are currently buying. Both take a period and a min_kols filter. On any given day their result sets overlap by 40–70%.
But they are fundamentally different scorers, and using the wrong one will either slow your signal pipeline to a crawl or leave you acting on tokens the smart money has already exited. This post explains what each endpoint actually computes, which question each answers, and how to use both together.
The one-sentence difference
/trending is a volume-and-flow ranker: which tokens are KOLs putting the most SOL into, right now.
/hot is a velocity-and-consensus ranker: which tokens are seeing fresh KOL wallets enter quickly, with acceleration scoring and strategy diversity.
Trending tells you where the money is. Hot tells you where the conviction is forming.
/trending in detail
The trending endpoint groups KOL buys by token over a window and ranks by total buy volume in SOL. It accepts short windows (5m, 15m, 30m) for PRO and ULTRA, down to tight intraday bursts.
For each token you get:
buy_volume_sol and sell_volume_sol across the window
net_flow_sol — the directional bias
buy_count and sell_count — transaction counts
kol_count — distinct KOLs involved
first_buy_at and latest_buy_at
A token ranks high on /trending if KOLs are throwing meaningful SOL at it. That's it. No acceleration math, no strategy diversity, no winrate enrichment.
That makes /trending the right choice when you care about current positioning: what is smart money actually holding right now, weighted by how much they're holding? Use cases:
- Dashboards showing live KOL flow
- Sell-pressure detection (watch
sell_volume_sol climb)
- Whale-sized move alerts (single large buy moves a token into the top 5)
The downside: a token where one whale KOL dumped 50 SOL ten minutes ago will rank higher than a token where eight separate KOLs each bought 5 SOL in the last two minutes. For pure volume, that ordering is correct. For alpha discovery, it's misleading.
/hot in detail
The hot endpoint ranks by acceleration: how fast new KOL wallets are entering the token compared to baseline. It also enriches each row with the quality of the KOLs buying, not just their count.
For each token you get everything /trending returns, plus:
acceleration — the core ranking score; higher means more unique KOLs entering in the recent sub-window vs the full window
kols_total and kols_recent — total KOLs over the full window, and how many of them entered in the final third
time_to_consensus_sec — span between the first KOL buy and the last, i.e. how fast the consensus formed
avg_winrate_7d — mean 7-day win rate of the KOLs on this token
entry_rank_avg — average early-entry percentile (how early these specific KOLs tend to enter tokens in general)
unique_strategies and strategies[] — distinct auto-tagged strategies represented (sniper, swing, smart-money, etc.)
/hot also supports two post-filters:
min_avg_winrate=70 — drop tokens where the average buyer's 7-day winrate is below 70%
unique_strategies=true — require at least 2 distinct trader strategies (filters out single-strategy coordination)
A token ranks high on /hot when many independent KOLs, quickly, are first-entering it. It is explicitly tuned for the moment conviction is forming, before the full position has been built out.
Use /hot when you care about leading signal: what are smart wallets about to load up on? Use cases:
- Copy-trade entry triggers (fire when 3+ high-winrate KOLs enter within 5 minutes)
- Early-stage sniping (catch tokens in the forming phase, not the positioned phase)
- Filtering out coordinated pumps (
unique_strategies=true requires strategy diversity)
- Discord/Telegram alert bots that want to ping before the move
A worked example
Say a token has been accumulating KOL interest for 45 minutes. Five KOLs bought early, and one large KOL bought 80 SOL ten minutes ago.
On /trending?period=1h, this token sits at the top: total buy_volume_sol is dominated by the single 80 SOL buy, and the kol_count of 6 is healthy.
On /hot?period=1h, the same token might rank in the middle or drop off entirely: kols_recent (last third of the window) is only 1, so acceleration is low — the consensus already formed, the move is mature.
Meanwhile, a newer token with 4 KOLs entering in the last 8 minutes (vs 0 earlier in the window) will dominate /hot while barely showing on /trending because the total volume is still small.
Both readings are correct. Which you act on depends on whether you're trying to ride positioned flow or catch forming conviction.
Calling both together
A robust signal pipeline typically runs both and joins them. The intersection — tokens that are both hot (forming) AND trending (getting real SOL) — is the tightest filter.
import { MadeOnSol } from "madeonsol";
const client = new MadeOnSol({ apiKey: process.env.MADEONSOL_API_KEY! });
async function highConvictionSignals() {
const [hotRes, trendRes] = await Promise.all([
client.kol.tokens.hot({
period: "1h",
min_kols: 3,
min_avg_winrate: 65,
unique_strategies: true,
limit: 30,
}),
client.kol.tokens.trending({ period: "30m", min_kols: 2, limit: 30 }),
]);
const trendingMints = new Set(trendRes.trending.map((t) => t.token_mint));
const signals = hotRes.hot_tokens
.filter((t) => trendingMints.has(t.token_mint))
.filter((t) => (t.avg_winrate_7d ?? 0) >= 65)
.map((t) => ({
mint: t.token_mint,
symbol: t.token_symbol,
kols_recent: t.kols_recent,
acceleration: t.acceleration,
avg_winrate: t.avg_winrate_7d,
age_minutes: t.first_kol_buy_age_minutes,
}));
console.log(`High-conviction signals: ${signals.length}`);
console.table(signals);
}
highConvictionSignals();
The intersection of "forming consensus" (/hot) and "real SOL deployed" (/trending) is a meaningfully tighter filter than either alone. Most actionable signals score on both lists.
Tier considerations
Both endpoints respect tier caps:
| Field / feature | BASIC | PRO | ULTRA |
|---|
/trending min period | 1h | 5m | 5m |
/hot limit max | 5 | 20 | 50 |
/trending limit max | 10 | 20 | 50 |
| KOL wallet addresses in response | hidden | hidden | full |
| KOL names in response | hidden | names only | names + wallets |
For production copytrade or sniper pipelines, ULTRA is what you want — you need full KOL wallet addresses to cross-reference against your own watchlists and linked-wallet filters.
Those linked-wallet filters are exactly what the co-buy timing heuristic for detecting linked Solana wallets computes — run a token's kol_count through it before treating five buyers on /hot or /trending as five independent opinions instead of one operator running multiple wallets.
Common mistakes to avoid
Using /trending for entry signals. By the time a token is top of , the move is already underway. You'll get filled at worse prices than the KOLs already holding it. Use for entry, for confirmation and size tracking.