alerts_create
ChatGPTCreate a new on-chain transfer alert for the current user. Fires when a transfer on ONE chain (eth or bsc only) matches: token_symbol if given, min_value_usd if given, and, if address is given, that wallet on the side address_role says. address = ONE 20-byte EVM address ('0x' + 40 hex); ENS names, entity names and non-EVM addresses are refused. Without min_value_usd EVERY transfer touching the address matches (dust and unpriced tokens too); with it only transfers that already carry a USD value do. One notification per cooldown_minutes, at most 10 a day. label is the user-visible name. channels = ['email'], ['discord'], or both. USD value thresholds only (not token-quantity size). One address and one chain per alert: create several alerts to watch more. Returns the new alert row including its id.
alerts_delete
ChatGPTDelete one of the user's alerts by id. Soft-delete (pauses it, keeps history) by default; pass hard=true to remove permanently. Returns {ok: true} on success.
alerts_edit
ChatGPTPartial update of one of the user's alerts. Only the fields you pass are modified; pass alert_id to identify which one (get it from alerts_list). Use is_active=false to pause an alert without deleting it. address replaces the alert's wallet condition (one per alert; same rules as alerts_create); address='' removes it; address_role alone moves the existing address to that side.
alerts_list
ChatGPTList the current user's alert rules. Returns active alerts by default; pass include_inactive=true to include paused/deleted ones. Also use this to look up an alert_id before editing or deleting.
alerts_list_channels
ChatGPTList the user's enabled email + discord notification channels. Use before creating an alert to confirm which channels are available. Returns a list of {id, channel_type, is_verified, label} rows.
alerts_register_webhook
ChatGPTRegister an HTTPS webhook as an alert delivery channel for the current user. We POST signed JSON to the URL when alerts fire. Optional secret (>=16 chars) enables HMAC-SHA256 signing — recipients verify by computing HMAC-SHA256(secret, '{X-Vike-Timestamp}.{body}') and comparing to the hex value in X-Vike-Signature (sig=...). Replays should be rejected if timestamp is more than ~5 min old. Payload, headers and a verification example: https://vike.io/docs/ai/data/on-chain/alerts/#alerts_register_webhook
hl_builders
ChatGPTHyperliquid builder codes (front-ends and bots that attach their address to an order and take a slice of the taker fee), by view. leaderboard: builders ranked by fee revenue, routed volume, unique users or fills over a window. stats: venue-wide builder economics. profile: one builder's totals with per-symbol and per-dex breakdowns, user-volume deciles and lifetime totals. users: the wallets routing through one builder. fills: its raw routed fills (sum fee_usd; fee is in its own fee_token). series: fee, volume, users and fills per hour or day (users is NOT additive across buckets). fee_usd is the builder's own cut, trader_fee_usd what the trader paid; every *_pct is percentage points 0-100. History depth differs by builder: compare active_days and window before comparing windows. Same data as GET /v1/hyperliquid/builders and its sub-routes.
hl_cohort_metrics
ChatGPTHourly long/short positioning of ONE Hyperliquid perp split by cohort: every bucket of one ladder, every hour, in one call (the matrix behind 'are whales / smart money long or short BTC'). axis picks the ladder: size (account value), pnl (percentile of cumulative realized PnL), pnl_abs (realized PnL in dollar bands), pnl_unrealized (currently onside), tier (each position's own notional). Rows are hour x cohort: notional in USD (total_position_value, total_position_value_long) and bias = (long - short) / (long + short), a fraction from -1 (all short) to +1 (all long), not a percent. BACKTESTS: by default the pnl cohort is TODAY's grading applied to past hours (look-ahead); pass label_basis=point_in_time for each hour's label as it was, and read label_computed and freshness in the envelope. The hour in progress is never included. The response holds about hours x 12-13 rows: pass a small hours (1-24) for a current read and page older data with cursor. With include (volume, median_pnl; size or pnl axis) the newest hour's rows also carry each cohort's 24-hour fill volume and the median realized PnL of its wallets, in USD, computed at request time. Same data as GET /v1/hl-cohorts/symbols/{symbol}/cohort-metrics.
hl_leaderboard
ChatGPTRank Hyperliquid wallets with the full risk set, by view. ranking: precomputed per-window metrics sorted on any of 20 keys (PnL, ROI, win rate, Calmar, profit factor, drawdown, streaks, ...), filtered by cohort and by minimum trades / win rate / volume, cursor-paged. A window is what was REALIZED in it (the trades closed in it) and a wallet needs 3 closed trades in it unless min_trades says otherwise (0 = no floor). flow_adjusted: ranks FILLS-DERIVED realized trading PnL, which excludes deposits by construction, with deposits, withdrawals and daily attribution returned beside it (flow_unbalanced marks rows whose attributed block is unreliable). UNITS differ from hl_perp_top_traders: here win_rate and min_win_rate are FRACTIONS (0.6 = 60%), there percents; max_drawdown_pct and pnl_pct are percents, and pnl_pct is null under $1 of equity (prefer it to the raw roi); money is USD. Same data as GET /v1/hyperliquid/leaderboard and /leaderboard/flow-adjusted.
hl_liquidations
ChatGPTHyperliquid liquidations, by view. fills: liquidation events, newest first, filtered by symbol, wallet, side and time. Rows are INFERRED from ~5-minute position snapshots (a position over $100 whose mark was within 5% of its liquidation price and which is gone from the next snapshot; liq_ts is that snapshot's time and size/mark are the last values seen, not a fill; a hand close that near liquidation counts, partial liquidations are missed), plus fills the venue marked as liquidations; direction is the side of the position that was CLOSED (long = longs liquidated, price fell) and each row's pnl_cohort carries a pnl_cohort_basis saying how it was labelled. risk: per symbol, the share of open notional close to liquidation: percent_risk is a FRACTION from 0 to 1 despite its name, ranked by that fraction, so thin micro-cap markets can top it (read total_value_usd, or pass min_value_usd). heatmap: one symbol, where its open positions' own liquidation prices cluster, in equal-width price bins weighted by notional USD; positions outside +-50% of mark or without a liquidation price are left out and counted under coverage. Same data as GET /v1/hyperliquid/{liquidations, liquidations/risk, symbols/{symbol}/liquidation-heatmap}.
hl_market
ChatGPTHyperliquid market positioning, by view. open_interest: open interest per symbol at the latest snapshot beside the venue's own figure, so the two can be reconciled. symbol_metrics: the hourly open-interest, position-count and bias series (a fraction from -1 to +1) of ONE symbol, all cohorts summed or one cohort sliced; the newest row is provisional (the hour in progress). A pnl cohort slice here uses TODAY's grading for past hours (look-ahead): use hl_cohort_metrics with label_basis=point_in_time for research. size_breakdown: one symbol's positioning by position-size bucket (ten dollar ranges, empty ones zero-filled). positions: individual position rows, current by default or historical with start (and optionally end; end alone is refused; bound it by symbol or wallet). positions is ordered by KEY, NOT by size (current: wallet, symbol, direction; historical: symbol, snapshot time, wallet), because the cursor pages on the primary key: limit=10 is the first ten wallets in address order, never the ten biggest. For the biggest positions of ONE symbol pass sort=size (current only, limit at most 500, no cursor): rows come biggest first and each carries account_value, the wallet's NATIVE perp account value in USD (null when unknown, never 0; a builder DEX's separate account is not in it); there is no per-position cumulative funding. For market-wide sizes use size_breakdown, open_interest or hl_cohort_metrics. indices: four cohort readings of ONE symbol, all RATIOS from -1 (all short) to +1 (all long), not percents, and null (never 0) when a cohort holds no positions: latest is the newest 5-minute snapshot and series the settled hourly rows, newest first (hours sizes the window, limit caps the rows, has_more says older rows exist). smi = long share of the 3x smart / 2x smart / smart wallets minus long share of the rekt / 2x rekt / 3x rekt wallets; wsi = long share of the 4x whale .. whale wallets minus long share of the 2x shrimp / shrimp wallets; whale_bias and smart_bias = (long - short) / (long + short) over those whale / smart wallets (latest only). latest.smi and latest.smart_bias rank wallets by today's PnL grading (latest.label_basis is current), the hourly series by each hour's own grading (top-level label_basis is point_in_time). large_fills: one symbol's fills of at least min_usd (from $50,000) of the last hours (up to 24), newest first, the website's Whale Activity feed: ts, wallet, direction (buy | sell), size_token, size_usd, price, order_type (market = crossed the book, limit = rested), size_cohort, pnl_cohort (graded at the fill's own hour where that hour is labelled, else today; pnl_cohort_basis says which). The source keeps only the newest 200 fills over $50k per symbol, so on a busy symbol it reaches back minutes, not a day: covered_from is how far back the answer reaches (the oldest fill held when truncated is true, else the start of the hours window) and truncated is true when that cap may have cut older fills inside hours (they may all be below min_usd). limit defaults to 200, everything the source holds per symbol; has_more is true when a lower limit cut matching rows. Liquidations are not flagged. Notional is USD. Same data as GET /v1/hyperliquid/{positions/symbols, positions} and GET /v1/hl-cohorts/symbols/{symbol}/{metrics, size-breakdown, indices, large-fills}.
hl_ohlcv
ChatGPTHistorical OHLCV candles for a Hyperliquid market, aggregated from HL's own executed fills. Pass symbol as the HL asset (BTC, ETH, HYPE); market picks perps or HL spot and dex picks a builder-deployed HIP-3 perp DEX (default HL, the core venue). Buckets are left-aligned UTC and the window is half-open [start, end). Returns candles as {ts (epoch ms, UTC), open, high, low, close, volume, volume_usd, n_trades} ascending by ts, plus source naming the rollup that answered.
hl_perp_top_traders
ChatGPTRank top Hyperliquid perp wallets by PnL / ROI / win rate / volume / trade count within a time window. Use for questions like 'top HL traders with win rate > 75%' or 'best HL perp wallets last 7d'. Data comes from the same pipeline that backs vike.io/perps/wallets. Use win_rate expressed as percent (0-100). roi_pct is window realized PnL over the CURRENT account value and max_drawdown_pct is account-level and all-time (null when the wallet has too little equity history to say), both in percent (12.5 = 12.5%).
hl_position_match
ChatGPTReverse-lookup a Hyperliquid open position from share-card details (symbol + side + leverage + entry price). Given the info shown on a HL trader's share card, return wallet(s) with matching open positions, ranked by entry-price proximity. Useful for 'whose share card is this?' or 'who has a 25x ETH long open at $3,200?'. Walks tight (±0.05%) -> loose (±0.5%) -> fallback (±1.0%) entry bands and requires leverage within ±0.5. Reads from the latest position snapshot (freshness-gated to the newest 15-minute window).
hl_segments
ChatGPTThe Hyperliquid cohort vocabulary and its latest-snapshot positioning, by view. cohorts: the label sets per ladder, the exact spellings every cohort parameter accepts. segments: the catalogue with bounds, ranks and what each ladder measures (size is account value in USD; pnl is a percentile rank of cumulative realized PnL, not dollars; pnl_abs is dollars). summary: everything ONE cohort holds right now across all symbols: long/short notional in USD, bias a fraction from -1 to +1, pct_wallets_in_profit a FRACTION from 0 to 1 despite its name, exposure_ratio = notional / margin used, perp_bias = (long - short) / equity and equity_exposure = (long + short) / equity, native perp account only: positions on the main dex over the native perp account value (each wallet once, the whole account even under opened_within); builder-DEX positions are not included; wallets without a known positive native equity are left out of perp_bias, equity_exposure and this share's numerator, see equity_covered_share (main-dex notional of the counted wallets / of the whole cohort). Unbounded ratios (above 1 = over 1x; null when equity <= 0); that equity is not total_equity, so perp_bias x total_equity != total_long_usd - total_short_usd. heatmap: the whole symbol x cohort board (large: every symbol with open interest; empty cells are omitted). Positions are the latest 5-minute snapshot. history: ONE cohort (cohort + axis, both required; axis is size or pnl only) hour by hour, summed over all symbols, newest first, from 2026-04-07: long_usd and short_usd in USD, bias = (long - short) / (long + short), a RATIO from -1 to +1 (null when both are 0), position_count = open positions, NOT wallets. Each hour carries the cohort label it had then (label_basis is point_in_time; pnl labels are daily before 2026-08-06, see label_computed). hours sizes the window, limit caps the rows, has_more says older rows exist. With include=leverage each hour also carries perp_bias, equity_exposure and equity_covered_share, the three summary ratios of that hour (null before 2026-08-11 and for a missing hour; perp_bias and equity_exposure are also null where no wallet has a known positive equity, and equity_covered_share is 0 when none is counted). An unknown cohort for the axis is an error. Same data as GET /v1/hl-cohorts/{cohorts, segments, segments/{cohort}/summary, heatmap, segments/{cohort}/history}.
hl_wallet
ChatGPTOne Hyperliquid wallet, by view. summary: live equity, open positions, both cohort labels, the risk metrics of the window (win_rate is a FRACTION from 0 to 1; max_drawdown_pct and pnl_pct are percents, pnl_pct is null under $1 of equity), cumulative realized PnL since inception and lifetime deposits and withdrawals, all money in USD; open_positions.perp_bias = (long - short) / equity.account_value and equity_exposure = (long + short) / it, native perp account only: positions on the main dex over the native perp account value; builder-DEX positions are not included. Unbounded ratios, null with no main-dex position or no positive equity. trades_summary: closed round-trip trade statistics overall and per symbol, medians as well as means. An address we hold nothing for (summary) or that never traded (trades_summary) is an error, never a block of zeros. Find addresses with hl_leaderboard, hl_perp_top_traders or hl_position_match. Same data as GET /v1/hyperliquid/wallets/{address} and /wallets/{address}/trades/summary.
hl_wallet_activity
ChatGPTA Hyperliquid wallet's event history, by view. fills: raw fills, newest first (size_usd, closed_pnl in USD; fee is in its own fee_token). funding: funding payments, payment_usd signed from the wallet's side (negative = the wallet PAID). ledger: deposits, withdrawals, transfers and vault events with amount_usd. builders: the builder codes the wallet's flow is routed through, by volume (share_of_volume is of its builder-routed volume only, not of all its trading). Keyset-paged: pass nextCursor back; it is null on the last page. Same data as GET /v1/hyperliquid/wallets/{address}/{fills, funding, ledger, builders}.
perp_funding
ChatGPTPerpetual-futures funding rates. Pass symbol (e.g. 'BTC') to get current per-venue rates for one asset. Omit symbol to get top cross-venue funding-arbitrage opportunities (pre-ranked, normalised to daily %, spreads >= 0.3%). Each arb row includes long_exchange+long_daily_pct, short_exchange+short_daily_pct, spread_daily_pct. A halted or no-longer-polled venue (Coinbase International, halted 2026-10-01) is left out, and so is a venue silent for over an hour in the per-symbol list.
perp_long_short
ChatGPTLong/short positioning that perp venues publish for one symbol: binance, bybit, gate, okx. The venues do NOT measure the same thing, so every row carries basis: binance = top traders by POSITIONS; okx and gate = top traders by ACCOUNTS; bybit = ALL accounts. Compare a venue with itself over time, never as a like-for-like average across venues. long_share / short_share are fractions of 1 (0.63 = 63 %); long_short_ratio = long / short (1.72 = 1.72 longs per short; above 1 is long-heavy). Without hours: the newest 5-minute print per venue and its age in seconds (venues printed within the last hour, stale_venues went silent). With hours (1-168): an hourly long_short_ratio series per venue, the last print in each UTC hour. Covers about 40 major symbols only; any other symbol returns empty lists and a note, never zeros. symbol is the canonical base asset ('BTC').
perp_open_interest
ChatGPTOpen interest of one perpetual-futures symbol on each venue Vike polls: aster, binance, bitget, bybit, hyperliquid, kucoin, okx. oi_usd is USD NOTIONAL (open contracts x mark price when polled), not contracts or coins. Without hours: the newest print per venue and its age in seconds; venues printed within the last hour, stale_venues went silent (last print within 30 days) and must NOT be summed in. With hours (1-168): an hourly series per venue, the last print in each UTC hour. Venues are polled roughly every 5-8 minutes. symbol is the canonical base asset ('BTC', not 'BTCUSDT'). A symbol no venue lists returns empty lists and a note, never zeros.
perp_spreads
ChatGPTGet top cross-venue spread-arbitrage opportunities for perpetual futures. Returns symbols where the price gap between the cheapest and most-expensive exchange is >= 0.5%. Each row includes buy_exchange+buy_price, sell_exchange+sell_price, and spread_pct. Pre-ranked — just cite the rows directly. Outliers (>400 bps from cross-venue median, typically unit-mismatch listings like 1000SHIB) are already filtered out.
polymarket_archive
ChatGPTIndex of the bulk Polymarket L2 archive: one Parquet file per UTC day and stream (book_events, trades, l1_quotes), either multi-asset ('flat') or per asset and tenor ('family', e.g. btc + 5m). view='datasets' (default) lists files, filtered and paged, with bytes and rows where recorded; view='url' resolves exactly one file to its download URL (give date and stream, plus asset and tenor together for a family file). This tool never downloads anything: fetch the URL yourself with your API key (X-API-KEY header); downloads are authenticated and metered separately from tool calls. asset and tenor match family files ONLY, so supplying either hides every flat file. Returns {datasets, limit, offset, total} for 'datasets', one dataset row for 'url'.
polymarket_leaderboard
ChatGPTLeaderboard of Polymarket wallets ranked by realized P&L, hit rate, volume or trade count, for all time or over a window, optionally within one market category. The same board vike.io/polymarket shows. Returns rows {rank, proxy_wallet, pseudonym, display_name, realized_pnl_usd (lifetime, USD, resolved markets only), realized_pnl_window_usd (USD over window, by resolution time), resolved_markets, hit_rate, hit_rate_ci, volume_all_usd, volume_window_usd (USD), trades_all, trades_window, avg_trade_usd, markets, first_seen, last_seen (UTC), tags}. hit_rate is a FRACTION from 0 to 1 (0.62 = 62%), volume-weighted (the share of the wallet's resolved dollar volume that sat in markets it won), not a count of wins; it is null, never 0, when the wallet has no resolved volume. hit_rate_ci is the +/- half-width of the 95% Wilson interval, also a fraction: read hit_rate +/- hit_rate_ci and distrust a hit_rate with a wide one; a near-100% rate on a sliver of P&L is an arbitrage pattern, not skill. min_resolved defaults to 20 so a hit rate rests on a real sample; 0 lists thinner wallets. tags are whale (lifetime volume $100k or more), bot (average trade under $20 over 100+ trades), hot / cold (lifetime P&L of +/-$1,000 on 5+ resolved markets). The top of a category is often bots with tens of thousands of resolved markets: check tags and avg_trade_usd, or pass min_avg_usd=20 to drop every bot-tagged wallet. first_seen is the wallet's first trade in the recorded tape, which starts on 2026-01-01, so it does not show that a wallet is new. The 24h / 7d / 30d windows are rebuilt hourly (hour-granular) and a market's resolution time can be corrected later, so a windowed figure can be revised; window=all is not affected. Page with limit and offset; ties break on the wallet address. Addresses are public on-chain data; this tool names no one.
polymarket_market_detail
ChatGPTDeep-dive on one Polymarket market by condition_id: question, category, outcomes with their clob_token_ids, 24h and total volume, liquidity, a price series per outcome, the top 30 holders per side, the last 100 trades (with wallets), tape stats and resolution status. There is no live quote or smart-money block here: use polymarket_orderbook for quotes and polymarket_smart_money for the cohort. Use after polymarket_markets when the user asks about a specific market.
polymarket_market_stats
ChatGPTTape summary for ONE Polymarket outcome token: recorded events (total_events), trades, trade_volume in outcome SHARES (not USD), snapshots, and the first / last recorded timestamps (first_ms / last_ms, epoch ms). token_id is the ERC-1155 OUTCOME token id (decimal string from clob_token_ids in polymarket_market_detail or outcomes[].token_id in polymarket_markets); a condition_id (0x...) will NOT work. Always returns ONE row: a token that was never recorded answers all zeros with total_events = 0, which means 'never recorded', not 'quiet'.
polymarket_markets
ChatGPTList trending / top Polymarket prediction-market events ranked by 24h volume. Returns market title, slug, category, current Yes/No mid quotes, 24h volume, and end_date. Filter by category (Crypto | Sports | Politics | Pop-Culture | Tech | all). Use for 'what's hot on Polymarket' or 'top crypto prediction markets'.
polymarket_ohlcv
ChatGPTHistorical OHLCV candles for ONE Polymarket outcome token, from the recorded L2 tape. token_id is the ERC-1155 outcome token id — a market's condition_id will NOT work here; read the token ids off clob_token_ids from polymarket_market_detail. Prices are probabilities in [0, 1]. Returns bars OLDEST first as {ts (epoch ms, UTC), open, high, low, close, volume, trades}. There is no cursor, so a window wider than limit is truncated at the OLD end — raise from to reach the recent end. With to and no from, limit keeps the bars nearest to (to=X, limit=1 is the last bar at or before X).
polymarket_orderbook
ChatGPTOrder-book snapshot for ONE Polymarket outcome token: the nearest full-book snapshot at or before ts (the latest when omitted), flattened to price levels. token_id is the ERC-1155 OUTCOME token id (decimal string from clob_token_ids in polymarket_market_detail or outcomes[].token_id in polymarket_markets); a condition_id (0x...) will NOT work. Returns rows {as_of_ts (epoch ms, the snapshot actually used), side ('ask' | 'bid'), level (1 = best), price (probability in [0, 1]), size (shares)}, all asks before all bids. A book can be one-sided, so fewer than 2 x depth rows is normal. A level can repeat in one answer (the recorder writes several identical snapshot rows for one venue timestamp): keep one row per (side, level) and read a side's depth as its highest level, never as a row count. as_of_ts can be old for a quiet or finished market, so check it before quoting a spread. [] means no snapshot at or before ts, or a token that was never recorded.
polymarket_settlement
ChatGPTOn-chain resolution of ONE Polymarket market, keyed by its condition_id (the market's 0x... hex id from polymarket_markets or polymarket_market_detail; an outcome token id matches nothing here). Returns [] or one row {condition_id, slug, question, outcomes, winning_index, winning_outcome, winning_token_id, token_ids, payouts, resolved_block, resolved_ts_ms (epoch ms), market_known}. market_known false means the market list has no row for it: slug, question, outcomes, token_ids, winning_outcome and winning_token_id are then empty, the on-chain fields still exact. [] means the chain has not resolved this condition, NOT that the market is open: a market can be cancelled or voided with no on-chain resolution, so read polymarket_market_detail for the market's own status.
polymarket_settlements_bulk
ChatGPTOn-chain resolutions of MANY Polymarket markets in one call, oldest resolution first, paged: the list form of polymarket_settlement (same row fields), for 'which markets resolved in this window', 'every settled BTC 5-minute market' or a backtest set. from_ms is inclusive and to_ms exclusive (epoch ms, on resolution time); slug_prefix (lowercase letters, digits and -, e.g. btc-updown-5m-) keeps one family of markets. Returns {settlements, has_more, next_cursor}; while has_more is true pass next_cursor back as cursor for the next page. Only markets the chain resolved appear: a cancelled or voided market with no on-chain resolution is not here.
polymarket_smart_money
ChatGPTDetect smart-money signals on Polymarket. Two modes: 'flows' = markets with the largest net cohort inflow in the last N hours; 'mispricings' = markets where cohort bought meaningfully below current mid (potential edge). Cohort is wallets with $1k+ realized PnL over 5+ resolved markets.
polymarket_tape
ChatGPTRaw Polymarket L2 event tape for ONE time window (at most 24 hours) on one or more outcome tokens, oldest first, from the recorded order-book feed. token_id / token_ids are ERC-1155 OUTCOME token ids (long decimal strings: read them off clob_token_ids in polymarket_market_detail or outcomes[].token_id in polymarket_markets); a market's condition_id (0x...) will NOT work. Event types: trade (price = probability in [0, 1], size = shares, side = buy | sell), price_change, book (the whole ladder in bids / asks, JSON carried as strings), tick_size_change, status. Always pass event_type: without it a page is mostly price_change and book rows. Returns {events, has_more, next_cursor}; pass next_cursor back as cursor for the next page. A 0 in best_bid, best_ask, price or size on a row type that does not populate it means absent, not a price of 0. The tape carries no wallet addresses. to_ms is EXCLUSIVE here, unlike to in polymarket_ohlcv.
polymarket_wallet
ChatGPTProfile a Polymarket trader: realized P&L (24h / 7d / 30d / all-time), hit-rate on resolved markets, total volume, top categories traded, and recent positions. Use when the user gives a Polymarket wallet address.
token_holders
ChatGPTTop holders of an ERC-20 token by cumulative net inflow USD. Returns wallet, net flow USD, volume USD, tx count, first/last seen dates, and known labels. Use when the user asks 'top holders of X' or 'who holds the most of token Y'.
token_screener
ChatGPTDiscover tokens by activity within a window. Rank by volume, net inflow, holder count, or smart-money inflow. Filters: min volume USD, min holders, smart-money-only. Use when the user asks 'what tokens are trending today' / 'find tokens with smart money accumulating' / 'rising tokens under $100M cap'.
token_search
ChatGPTSearch for tokens by name or symbol. Returns matching symbols, names, addresses (0x-prefixed, lower case; pass them straight to token_holders and token_transfers), and logos.
token_transfers
ChatGPTGet who bought and sold a specific token in a given period. Shows top buyers/sellers with quantities and USD values.
wallet_batch_labels
ChatGPTBulk label + 30d summary lookup for many addresses in one call. Caps at 100 addresses. Returns one row per input address in input order, with: entity, wallet_type, risk_flag, 30d net flow, 30d volume, 30d tx count, read from chain's own tables. The 30d fields are live and null only for an address with no label (found: false). Use when the user pastes a CSV of addresses or asks to enrich a list.
wallet_compare
ChatGPTCompare two wallets: shared counterparties (both wallets transacted with these addresses) + shared tokens (both wallets touched these tokens) within a window. Use when the user asks 'are these two wallets related' / 'what do X and Y have in common'.
wallet_counterparties
ChatGPTTop trading partners of an ETH/BSC/Base/HyperEVM wallet by combined transfer volume. Returns counterparty address, total volume, amount sent/received, tx count, first/last seen, and labels (when known). Use when the user asks 'who does this wallet trade with' / 'main counterparties of X'.
wallet_discover
ChatGPTFind top wallets ranked by volume, inflow, outflow, net flow, tx count, or realized PnL. On base and hyperevm window=all always works; 24h/7d/30d/90d only while those windows were refreshed in the last 2 days, otherwise a 400.
wallet_ens
ChatGPTReverse ENS lookup: turn a 0x address into a human-readable name like 'vitalik.eth'. Returns null if the address has no ENS name set. Use whenever you have an address and want to display a friendlier identifier.
wallet_exchange_usage
ChatGPTWhich centralised exchanges a wallet sent to and received from over a window, computed from our transfers joined to the addresses the chain's label table marks as exchanges. Returns exchanges [{entity, sent_usd, recv_usd, sent_share, transfers, first_seen, last_seen, addresses, label_confidence, label_sources}] with USD in plain dollars (priced transfers only), and activity totals over ALL counterparties so shares can be checked. pattern is "sweeps_to_single_cex" when >=90% of the wallet's outgoing USD went to one exchange across >=3 outgoing transfers: an OBSERVED pattern, not a claim that the address is a deposit address. Exchange figures are a lower bound (an exchange address we have not labelled is invisible; labels are sparse on hyperevm) and labels are a consensus with a stated confidence, not a certainty. A very active wallet is refused with a message to narrow window. found is false when the wallet has no priced transfer in the window. Use when the user asks 'which exchanges does this wallet use' / 'does it send to an exchange'.
wallet_first_funder
ChatGPTThe earliest inbound transfers of a wallet, from our own transfer tables, as TWO separate answers: first_native_in (the first plain send of the chain's coin to the wallet, at least min_native WHOLE coins; amount in whole coins, amount_wei exact in wei) and first_token_in (the first token transfer priced at min_usd USD or more; amount in whole tokens). Each carries the sender, its label (entity, wallet_type, label_confidence), time, tx_hash, block and amount_usd in plain dollars (null = no USD price). This is NOT proof of who funded the wallet: native rows hold top-level sends only (coin moved by a contract call or a bridge is absent), history starts on a different date per chain (coverage.history_from), and the sender may be an exchange or a relay. found is false when neither exists. On hyperevm, protocol system addresses appear as senders and come back with wallet_type 'system' (no entity name). Use when the user asks 'who funded this wallet' / 'where did its first coins come from', and pass the coverage caveats on.
wallet_label_provenance
ChatGPTFull multi-source label cascade for one ETH wallet. Returns labels from several third-party label providers and the heuristic classifier with per-source attribution and a consensus entity/type. Use when the user asks 'what do you know about this address' or 'who labeled this wallet'.
wallet_pnl_history
ChatGPTDaily net-flow series for a wallet over the last N days (proxy for daily PnL). Returns per-day net inflow USD + cumulative + gross volume + tx count. NOTE: this is net inflow USD, not true realized PnL (which would require WAC accounting per token). Useful as a directional indicator.
wallet_summary
ChatGPTGet a wallet's aggregate metrics: volume, inflow, outflow, net flow, tx count, tokens traded across time windows (24h/7d/30d/90d/all). Without chain it answers for the more recently active of ethereum and bsc, and for base or hyperevm only when the wallet has no priced ethereum/bsc volume; the result's chain says which.
wallet_token_balances
ChatGPTCurrent token balances for a wallet on Ethereum, BSC, Base and HyperEVM, read from the chain at request time. Returns per-holding (chain, symbol, balance, USD value, USD price). On base and hyperevm, symbol, name, balance and USD exist only for tokens we map and price (about 170 on base, about 50 on hyperevm). Any other token is listed, with its address and balance_raw and the rest null, only when min_usd=0 is passed: the default floor of $1 keeps priced tokens only. A non-zero native balance is always listed, with a USD value where a price exists; HyperCore (spot or perp accounts) is not included. Use when the user asks 'what tokens does this wallet hold' / 'current portfolio of X' — pair with wallet_label_provenance for institutional context.
wallet_trace
ChatGPTTrace a wallet's money through counterparties. direction=out follows where funds went, in where they came from, both (default) either way. At each hop, expand to the top N counterparties by USD volume in that direction. Returns nodes + edges of the resulting graph. Use when the user asks 'where did funds from X go' (out) / 'who funded Y' (in) / 'follow the money 3 hops from Z' / wallet investigation.
wallet_transactions
ChatGPTRaw per-wallet transfer list (single transactions, not aggregates). Filter by direction (in/out/all), days back, min USD, and optionally a specific token. Returns time, tx_hash, from, to, token_address, value_usd, direction, block. Use when the user asks 'show me recent transfers for X' / 'last 100 transactions of wallet Y' / forensic audit queries.