KOL

Recent first-KOL-touch events

Every 'first KOL buy on a token mint' event. Filterable by scout tier (S/A/B/C from mv_kol_scout_score), KOL winrate, token age, mint suffix. Backtest: top scouts attract ≥3 follow-on KOLs within 4h ~50% of the time vs ~14% baseline. Median lead time before second KOL is 12s — for trading, subscribe to the kol:first_touches WebSocket channel (PRO+) rather than polling.

get/kol/first-touches

Request

  • Base URL: https://madeonsol.com/api/v1
  • URL: https://madeonsol.com/api/v1/kol/first-touches
  • Auth: HTTP bearer

Query parameters

includestring

Comma-separated includes: wallet and/or followers_4h. include=wallet embeds /wallet/{address} for the first-KOL wallet on each event (ULTRA only — the wallet address itself is an ULTRA field here; ≤20 distinct wallets per page). Runs the sibling handler in-process and embeds its body under its own key; a failing include lands in include_errors and never fails the request; counts as ONE call.

limitinteger
sincestring date-time

Polling cursor — events strictly newer than this

beforestring date-time

Pagination cursor — events strictly older than this

cursorstring

PREFERRED pagination (audit F09 follow-up): the next_cursor from a previous page — an opaque strict (first_buy_at, id) keyset, so paging never repeats or skips rows that share a timestamp and progresses with limit=1 through runs of identical timestamps. Malformed or tampered → 400. Cannot be combined with before= (400); before= stays supported as the legacy bound.

kolstring

Filter to one KOL wallet (32-44 base58 chars)

min_kol_winrate_7dnumber
min_scout_tier'S' | 'A' | 'B' | 'C'
min_n_touchesinteger
strategy'scalper' | 'day_trader' | 'swing_trader' | 'hodler' | 'mixed'
token_age_max_mininteger
min_first_buy_solnumber
mint_suffixstring

e.g. 'pump', 'bonk'

preset'scout' | 'fresh_launch'
min_mc_usdnumber

v1.6: lower bound on market_cap_usd_at_first_buy. Touches with unknown MC drop out when set.

max_mc_usdnumber

v1.6: upper bound on market_cap_usd_at_first_buy.

Response

OK — returns { events, count, next_before, data_age_seconds }. Each event has first_kol.{name, winrate_7d, strategy, scout_tier, scout_score, n_first_touches_30d}. ULTRA also gets first_kol.wallet.

countinteger
next_beforestring date-time nullable

Pass as ?before= to page further back

next_cursorstring nullable

Opaque keyset cursor for the next (older) page — pass as cursor=. PREFERRED over next_before, which is a strict timestamp bound that skips same-timestamp siblings of the boundary row.

has_moreboolean

false only when the feed is exhausted (not merely when the page is short).

next_sincestring date-time nullable

Pass as ?since= to poll only newer rows

sincestring date-time nullable
data_age_secondsinteger nullable
streamobject nullable

WS stream pointer for kol:first_touches

includedstring[]

Present when include=wallet was honored

include_truncatedobject

Present when the wallet include capped at 20 distinct wallets

include_errorsobject

Present when a requested include was invalid or unauthorized (e.g. include=wallet below ULTRA)

Changes

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