KOL

KOL trade feed (real-time on PRO+; 5-min delay on free)

Stream-of-consciousness feed of every buy/sell of at least 0.05 SOL (or $3.50 in USDC/USDT) from 2,000+ tracked Solana KOL wallets. Sub-3s latency from on-chain confirmation on PRO and up (and x402 pay-per-call); the free tier serves this feed on a 5-minute delay (response carries delay/as_of).

get/kol/feed

Request

  • Base URL: https://madeonsol.com/api/v1
  • URL: https://madeonsol.com/api/v1/kol/feed
  • Auth: HTTP bearer

Query parameters

sincestring date-time

Only trades strictly newer than this ISO8601 time — the poll cursor. Feed back the response's next_since.

include'token'

include=token embeds the /token/{mint} snapshot on each row (≤20 distinct mints 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
beforestring date-time

Cursor: return trades strictly older than this ISO timestamp. Use next_before from the previous response.

cursorstring

PREFERRED pagination (audit F09 follow-up): the next_cursor from a previous page — an opaque strict (traded_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.

action'buy' | 'sell'
kolstring

Filter by KOL wallet address

min_solnumber

Min SOL size per trade

token_age_max_mininteger

Max token age (min) at trade time

exclude_sellsboolean

Drop sell-side trades

min_kol_winratenumber

Min 7d winrate of the buying KOL

strategy'scalper' | 'day_trader' | 'swing_trader' | 'hodler' | 'mixed'

Filter by auto-classified trader style

min_mc_usdnumber

v1.6: lower bound on market_cap_usd_at_trade. Trades with unknown MC drop out when set.

max_mc_usdnumber

v1.6: upper bound on market_cap_usd_at_trade.

Response

OK. Response includes next_before (ISO timestamp of the last row — pass to the before param on the next call). Every row carries token_image_url and launchpad (pumpfun/launchlab/bags, null for non-launchpad mints).

countinteger
data_age_secondsinteger nullable

Seconds since the newest returned row's traded_at; null on an empty page.

next_beforestring date-time nullable

Page-down cursor: pass as before= for older rows.

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

Poll cursor: traded_at of the newest row on this page (or the since you sent when the page is empty). Pass as since= to fetch only newer rows; if count === limit page down with before= until you pass your previous since.

sincestring date-time nullable

Echo of the since parameter.

includedstring[]

Present only when include= was honoured.

include_errorsobject

Present only when an unknown include= value was sent: { <name>: { status: 400, error } }.

delaystring

Free tier only — the applied feed delay ("5m").

delay_secondsinteger

Free tier only — the delay in seconds (300).

as_ofstring date-time

Free tier only — the delayed cutoff the page was served at.

delay_notestring

Free tier only — plain-words note that PRO+ and x402 are real-time.

upgradestring

Free tier only — pricing URL.

Changes

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