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

# Smart Money KOL Activity

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

## Request

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

Lists what KOLs opened and closed, one row per KOL, day, market, chain, token and kind (`open`, `close`), newest first: size (perp: notional), realized PnL on closes, and the number of positions behind the row. Covers the last 90 days.

Pass up to 50 X handles in `handles` (comma-separated, `@` optional, case-insensitive); a former handle is answered under the KOL's current one. `since` defaults to 7 days ago; `min_usd` (default 1000) drops small rows; `market` is `spot`, `perp` or `all`. The response also carries `coverage` for every requested 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. Activity is aggregated per day.

**Data refresh:** hourly

## Query parameters

- `handles` string, required: Comma-separated X/Twitter handles (with or without @, case-insensitive, at most 50)
- `since` string: Earliest day to include: Unix seconds or YYYY-MM-DD (UTC). Defaults to 7 days ago; anything older than 90 days is raised to 90 days ago
- `min_usd` number, double: Minimum size in USD (perp: notional) of a row
- `market` 'spot' | 'perp' | 'all': spot (on-chain DEX), perp (perpetual futures) or all
- `limit` integer: Rows per page
- `offset` integer: Pagination offset

## Response `200`

OK

- SmartMoneyKOLActivityResponse
  - `$schema` string, uri: A URL to the JSON Schema for this object.
  - `coverage` SmartMoneyKOLCoverage[], nullable, required: Coverage of every requested handle, in request order
    - `boards` string[], nullable, required: Boards the KOL is on (composite, smart, bigv); null when not tracked
    - `chains` string[], nullable, required: Chains the tracked wallets are active on; null when not tracked
    - `handle` string, required: Current X/Twitter handle (a former handle in the request is answered with the current one)
    - `last_activity_at` integer, nullable, required: Day of the latest tracked trade (Unix seconds, UTC day); null when unknown
    - `low_confidence_wallets` integer, nullable, required: Tracked wallets attributed with low confidence, shown up to 10; null when not tracked
    - `not_scored_reason` string, nullable, required: Why a tracked KOL is not scored: no_tracked_wallets, inactive_90d, insufficient_sample; null otherwise
    - `scored` boolean, nullable, required: Whether the KOL has scores in the current run; null when not tracked
    - `synced_at` integer, nullable, required: When the KOL's data was last synced (Unix seconds, truncated to the hour); null when unknown
    - `tier` string, nullable, required: Sync tier: hot, warm or cold; null when not tracked
    - `tracked` boolean, required: Whether the KOL's trading is tracked
    - `wallets` integer, nullable, required: Tracked wallets, shown up to 10 (see wallets_capped); null when not tracked
    - `wallets_capped` boolean, required: True when the KOL has more than 10 tracked wallets
  - `data` SmartMoneyKOLActivity[], nullable, required: Activity rows, newest first
    - `at` integer, required: Day of the activity (Unix seconds, UTC day)
    - `chain` string: Chain (canonical long-form)
    - `handle` string, required: Current X/Twitter handle
    - `is_scored` boolean, required: Whether these positions count toward the KOL's scores
    - `kind` string, required: open or close
    - `market` string, required: spot or perp
    - `n_positions` integer, required: Positions aggregated into this row
    - `pnl_usd` number, double: Close only: realized PnL in USD, rounded to 2 significant figures
    - `side` string: Perp: long or short
    - `size_usd` number, double: Amount opened or closed that day in USD (perp: notional), rounded to 2 significant figures
    - `source` string, required: Where the activity was seen: onchain, fomo or hyperliquid
    - `symbol` string: Token symbol (perp: the coin)
    - `token_address` string: Spot: token contract address; absent for perps and unresolved tokens
  - `meta` SmartMoneyKOLActivityMeta, required
    - `as_of` integer: Latest sync time among the requested KOLs (Unix seconds, truncated to the hour); absent when none is tracked
    - `cached` boolean, required: Whether this response was served from cache
    - `credits_used` integer, required: Credits deducted for this request
    - `limit` integer, required: Maximum number of rows returned in this response
    - `offset` integer, required: Number of rows skipped (pagination offset)
    - `total` integer: Total number of matching rows (before pagination)

## Other responses

- `default`: Error

## Changes

- **2026-10-27** `80609ba16f51`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/asksurf/apis/asksurf-public-rest-api/changes/gateway/v1/smart-money/kol/activity/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)
