mcpbeat Sign in

0xinsider MCP Server

by 0xinsider Your server? Claim it
answering

0xinsider is answering right now. Last checked 5 min ago. 5 615 installs a week from npm. It exposes 69 tools. Last commit 28 Oct 2026.

Read-only Polymarket sports and esports data: wallet grades on settled P&L, large trades, markets.

Installs per day peak 1 425 · avg 616 · +65% w/w
a month agotoday
Uptime history 46 days of history · worst day 99%
46 days agonow
100.0%
Uptime 24h
91 of 91 checks
69
Tools
read from the server
324 ms
Response time
average over 24h
5 615
Installs / week
npm and PyPI

What changed 238

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 19 September 2026. No other catalogue keeps this.

2 Nov 18 tool descriptions were rewritten28 times that day batch_get_traders, get_game, get_large_trades and 15 more
2 Nov 14 tools appeared get_account, get_category_leaderboard, get_game_holders and 11 more
2 Nov 12 tools changed the parameters they ask for14 times that day get_large_trades, get_large_trades_history, get_leaderboard and 9 more
28 Oct a tool description was rewritten3 times that day get_trader_context
27 Oct 19 tool descriptions were rewritten25 times that day batch_get_market_intel, batch_get_traders, explore_markets and 16 more
27 Oct 2 tools changed the parameters they ask for explore_markets, get_leaderboard
26 Oct 4 tool descriptions were rewritten get_pick_of_the_day, get_pick_of_the_day_archive, get_trader_pnl and 1 more
22 Oct 3 tool descriptions were rewritten explore_markets, get_edge_hunter, get_trader_pnl
22 Oct 2 tools changed the parameters they ask for explore_markets, get_edge_hunter
16 Oct 2 tool descriptions were rewritten4 times that day get_pick_of_the_day, get_pick_of_the_day_archive
and 161 more, back to 19 September 2026

What the code does

We read the source, 4 d ago · tools taken from the live server · rules 995398eba69f

Capabilities

What this server is able to do. For an MCP server this is often the job itself — a terminal server runs commands because that is what it is for. Listed so you know what you are plugging in, not as an accusation.

Package points at a different repository 0xinsider/agent-plugin
пакет @0xinsider/mcp ссылается на 0xinsider/0xinsider

Is this your server and something here is wrong? Tell us — corrections are free and do not require a plan.

This code can reach further than it looks

We found places where it runs commands, builds paths or queries from values it is given. None of that is a flaw by itself — it becomes one when the code changes, and code changes quietly between releases. We re-read it on every one.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 5 min ago.

run in your terminal
claude mcp add mcp --transport http https://api.0xinsider.com/api/v1/mcp
Settings → Connectors → Add custom connector, then paste this address
https://api.0xinsider.com/api/v1/mcp
~/.codex/config.toml
[mcp_servers.mcp]
url = "https://api.0xinsider.com/api/v1/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "mcp": {
      "url": "https://api.0xinsider.com/api/v1/mcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "mcp": {
      "type": "http",
      "url": "https://api.0xinsider.com/api/v1/mcp"
    }
  }
}

Available tools 69

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

market
get_market_candles
OHLC price candles for a market's outcome tokens from the stored Polymarket CLOB price history, the series the market chart draws, for open and resolved markets. The stored series is daily: a 1d candle usually holds one point, so its open, high, low and close are that day's close, and 1w aggregates the daily closes. No intraday detail is invented. Args: - condition_id (string, required): Raw provider condition_id or the mkt_-prefixed market id - resolution (string, optional): 1d (default, UTC day) or 1w (ISO week from Monday 00:00 UTC) - from (integer, optional): Exclusive lower bound, unix seconds - to (integer, optional): Inclusive upper bound, unix seconds; from must not be after to Returns: condition_id, resolution, and outcomes, each with its token_id and candles, plus meta.
get_market_flow
One market's flow and top positions: the signed flow of every tracked large trade in the window (net_flow_usd and its direction, YES or NO), the large-trade count, gross buy and sell volumes, and the top five graded trader positions. The envelope object is market_flow. Use search_markets first to find the condition_id for a market. Args: - condition_id (string, required): Market condition ID (from search_markets results) - timeframe (string, optional): Lookback window: "1h", "4h", "24h", "7d" (default "24h") Returns: Market info, the flow under sharp_money (net_flow_usd, direction YES/NO, large_trade_count, volumes) with smart_money as its deprecated byte-identical alias, and the top 5 graded trader positions.
get_market_holders
The S, A and B graded wallets holding one Polymarket market, from a complete provider holder scan: shares, Polymarket's currentValue for the leg, grade, win record in the market's category, and badges. A wallet holding both outcomes is listed once on its net side. Ordered by current value. The roster is at most 60 seconds old over a provider walk at most 180 seconds old; scan.fetched_at is its only timestamp. An incomplete scan is an error with a retry time, never a shorter list. C, D, F and ungraded wallets are never listed and are counted only in scan.wallet_count; get_market_top_holders lists the largest holders of every grade. Counts differ from get_positions by design: a live scan, the graded cohort, and no 100 USD size floor. Args: - condition_id (string, required): Raw provider condition_id or the mkt_-prefixed market id - outcome (string, optional): yes, no, or all (default) - min_grade (string, optional): S keeps S, A keeps S and A, B (default) keeps S, A and B - limit (number, 1-100, default 20): Holders per page - cursor (string, optional): next_cursor from the previous page, bound to the same market and filters Returns: data (holders), has_more, next_cursor, total, market, scan, totals and meta. totals covers the whole roster before outcome and min_grade: yes_usd and no_usd, the S, A and B wallet counts per side (yes_grades, no_grades), and that USD split by grade per side (yes_grade_usd, no_grade_usd), so the S-grade money on each side needs no page walk.
get_market_intel
Deprecated alias of get_market_flow (#16312), kept live until its 2027-02-01 sunset (#29351), then removed; it calls the deprecated /api/v1/market/{condition_id}/intel path, whose envelope keeps object: market_intel. Sharp money flow analysis for a specific prediction market. Shows net flow direction, whale trade count, buy/sell volumes, and top graded trader positions. Use search_markets first to find the condition_id for a market. Args: - condition_id (string, required): Market condition ID (from search_markets results) - timeframe (string, optional): Lookback window: "1h", "4h", "24h", "7d" (default "24h") Returns: Market info, sharp_money flow (net_flow_usd, direction YES/NO, volumes) with smart_money as its deprecated byte-identical alias, and top 5 trader positions.
get_market_snapshot
Provider-first live market-card snapshot for one raw provider condition_id. Forwards IDs to the V1 handler without mkt_ rewriting. Args: - condition_id (string, required): Raw provider condition_id returned by search or explore - expand (string[], optional): "trust" adds per-field provenance (source, freshness, reconciliation, completeness) for current_price and spread_bps Returns: Market identity, outcomes, liquidity, sports context, and freshness states, plus trust when expanded.
get_market_top_holders
The largest holders of one Polymarket market on each outcome, every grade from S to F and ungraded wallets included: the event page's Top holders table. Up to 100 per outcome, largest shares first, with Polymarket's current value, average entry price and position P&L for the leg, the wallet's grade, its sports and esports realized P&L and volume, its win record in the market's category, and badges. Use get_market_holders for the complete S, A and B roster; this is the top of the holder board, whatever the grade. On an open market the sample is rebuilt at most every 30 seconds from a holder board re-read at most every 120 seconds, so positions are usually up to about 150 seconds old: positions_as_of says when the board was fetched and computed_at when the sample was built. Once the 30 seconds pass, the last sample comes back with source_stale true while a new one builds, if its board is at most 300 seconds old; read again a few seconds later for the new sample. A resolved market's sample is at most 300 seconds old. Busy or unavailable holder data is an error with a retry time. Args: - condition_id (string, required): Raw provider condition_id or the mkt_-prefixed market id - limit (number, 1-100, default 20): Holders per outcome Returns: market, yes and no (holder rows, each with rank), totals (yes_count, no_count, yes_shares and no_shares over the whole sample before limit, and sample_cap: a count equal to it means that many or more), profiles_status, category_records_as_of, computed_at, positions_as_of, source_stale and meta.
get_market_wallets_in_out
One market's net buyers and net sellers over the last 24 hours or 7 days, live: the 0xinsider market page's wallets in/out panel for a Pro viewer. A wallet's net is its buys minus its sells in the window across both outcomes, in USD of matched notional, fees excluded. Args: - condition_id (string, required): Raw provider condition_id or the mkt_-prefixed market id - window (string, optional): 24h (default) or 7d Returns: condition_id, window, window_start and window_end (the inclusive bounds the read used), summary (wallets_in and wallets_out, the count of wallets with a positive and a negative net over every wallet in the window, and net_usd, the sum of every net), net_buyers (largest net first) and net_sellers (most negative first), at most 25 each, each wallet with its address, display_name, current grade, net_usd, trades in the window and last_traded_at (its newest trade on any market, at or before window_end), plus meta. A wallet that bought and sold the same amount nets zero and is on neither list. Reads are cached for about a minute. A condition_id with no market page answers not_found; a market outside sports and esports answers market_out_of_scope.
large
get_large_positions
List the largest current open positions from graded traders (Polymarket-only). Each row carries position value, open (unrealized) P&L, share count, entry/current price, outcome label, and trader/market context. Cursor-paginated by position value descending. Polymarket-only: the scanner filters platform = 'polymarket', so an unknown condition_id matches nothing and returns an empty list (never fabricated rows). Args: - limit (number, 1-100, default 20): Max results per page - cursor (string, optional): Opaque pagination cursor from previous response - min_size (number, optional): Minimum position value in USD - category (string, optional): Filter by provider-backed market category - min_grade (string, optional): Minimum trader grade (S, A, B, C, D, F) - condition_id (string, optional): Scope to one market (raw provider id or mkt_-prefixed) Returns: List of large positions with trader, market, value, P&L, and pagination metadata.
get_large_trade
Read one large trade by ID. Accepts either the wt_ ID returned by large-trade list/history responses or the raw numeric id. Args: - id (string, required): Large trade ID such as wt_123 or 123 Returns: One large trade with trader info, market context, size, side, price, current review_score (signal_score is its deprecated twin, same value, until its 2027-02-01 sunset) and trader grade, point-in-time recorded_review_score (recorded_signal_score is its deprecated twin until its 2027-02-01 sunset; null before 2026-08-03) and trader grade_at_trade with grade_at_trade_status (unknown before 2026-09-19), optional suspicion_score, and optional suspicion_track. A null suspicion track means the persisted legacy row has no track label.
get_large_trade_counterparty_executions
Page the counterparty executions of one large trade past the first page get_large_trade embeds in counterparty_analysis. Reads the immutable snapshot that response names; a stale or changed snapshot fails with reason cursor_expired, so read get_large_trade again and restart. Args: - id (string, required): Large trade ID such as wt_123 or 123 - snapshot_id (string, required): counterparty_analysis.snapshot_id from get_large_trade - cursor (string, optional): executions_next_cursor from get_large_trade or from the previous page - limit (number, 1-100, default 100): Executions per page Returns: executions (each with its first makers page and makers_next_cursor), executions_next_cursor, execution counts, status and meta.
get_large_trade_counterparty_makers
Page the maker wallets of one counterparty execution past the first page its execution embeds. Percentages keep the whole execution as their denominator across pages. Args: - id (string, required): Large trade ID such as wt_123 or 123 - execution_id (string, required): execution_id of the execution - snapshot_id (string, required): counterparty_analysis.snapshot_id from get_large_trade - cursor (string, optional): makers_next_cursor from the execution or next_cursor from the previous page - limit (number, 1-100, default 100): Makers per page Returns: items (makers), next_cursor, execution_id, snapshot_id and meta.
get_large_trades
Get recent large trades from graded prediction market traders. Each trade includes a 0-1 review score, persisted suspicion facts, trader grade, and market context. Cursor-paginated, newest first. Args: - limit (number, 1-100, default 20): Max results per page - cursor (string, optional): Pagination cursor from previous response - min_size (number, default 5000): Minimum trade size in USD - category (string, optional): Filter by market category (case-insensitive) - min_grade (string, optional): Minimum trader grade (S, A, B, C, D, F) - suspicious_only (boolean, optional): Keep only persisted suspicion_score >= 60; false preserves the current result set - min_market_volume_share (number, 0-1, optional): Keep only trades whose market_volume_share is known and at least this; a fraction, so 0.01 is one percent of the market's traded volume - sort (string, optional): "recent" (default, newest first) or "market_volume_share" (biggest share of its market first, over the last 30 days, or from the from bound on the history tools; a cursor is bound to the order it was minted in) - since (string, optional): wt_ id of a trade a previous call returned; answers only the trades recorded after it, in commit order, so a trade recorded late still arrives. Poll with the first trade of the last answer that had trades and deduplicate on id; recent order only - condition_id (string, optional): One market's large trades, by exact raw provider condition_id; not with event_slug or since - event_slug (string, optional): Every market of one game (moneyline, spreads, totals and props), the markets get_game_trades reads; recent order only, not with condition_id or since; an unknown slug is not_found Returns: List of large trades with trader info, market context, size, side, price, current review_score (signal_score is its deprecated twin, same value, until its 2027-02-01 sunset) and trader grade, point-in-time recorded_review_score (recorded_signal_score is its deprecated twin until its 2027-02-01 sunset; null before 2026-08-03) and trader grade_at_trade with grade_at_trade_status (unknown before 2026-09-19), optional suspicion_score, and optional suspicion_track. A null suspicion track means the persisted legacy row has no track label. The page carries data_quality beside data: status, as_of (the oldest clock the page rests on) and field_groups. fresh and stale both mean tracked and clocked; stale means as_of is older than max_age_s, the refresh budget of the group writer. Neither is a tolerance: compare as_of with your own. unknown means this read cannot date that group, never that it is recent.
get_large_trades_history
Replay historical large trades from the local record. Supports cursor pagination plus condition, trader, category, grade, platform, suspicion, market-share, and RFC3339 from/to filters, and a market_volume_share sort. Args: - limit (number, 1-100, default 20) - cursor (string, optional): Pagination cursor with wth_ prefix - min_size (number, optional): Minimum trade size in USD - condition_id (string, optional): Exact raw provider condition_id - event_slug (string, optional): Every market of one game, the markets get_game_trades reads; recent order only, not with condition_id; an unknown slug is not_found - trader (string, optional): Wallet, alias, or username - category (string, optional) - min_grade (string, optional): S, A, B, C, D, or F; filters on today's grade, not the grade at trade time - suspicious_only (boolean, optional): Keep only persisted suspicion_score >= 60 - platform (string, optional): polymarket or all - from/to (string, optional): RFC3339 traded_at bounds - min_market_volume_share (number, 0-1, optional): Keep only trades whose market_volume_share is known and at least this; a fraction, so 0.01 is one percent of the market's traded volume - sort (string, optional): "recent" (default, newest first) or "market_volume_share" (biggest share of its market first, over the last 30 days, or from the from bound on the history tools; a cursor is bound to the order it was minted in) Returns: Historical large trades with replay metadata, current review_score (signal_score is its deprecated twin, same value, until its 2027-02-01 sunset) and trader grade, point-in-time recorded_review_score (recorded_signal_score is its deprecated twin until its 2027-02-01 sunset; null before 2026-08-03) and trader grade_at_trade with grade_at_trade_status (unknown before 2026-09-19), optional suspicion_score, and optional suspicion_track. A null suspicion track means the persisted legacy row has no track label. The page carries data_quality beside data: status, as_of (the oldest clock the page rests on) and field_groups. fresh and stale both mean tracked and clocked; stale means as_of is older than max_age_s, the refresh budget of the group writer. Neither is a tolerance: compare as_of with your own. unknown means this read cannot date that group, never that it is recent.
trader
get_trader
Look up a prediction market trader by wallet address or username. Returns grade (S through F) and the sports and esports record: realized P&L (pnl.in_scope), markets traded, win rate, and volume. Wallet figures cover sports and esports markets only. Optional expand fields for heavier data: - strategy: Trading strategy classification - categories: Per-category performance breakdown - quant_metrics: retired since 2026-10-27; accepted and never returned, because its metrics covered every market of the wallet. Read pnl.in_scope or get_trader_pnl for the sports and esports record - trust: Per-field provenance (source, freshness, reconciliation, completeness) for grade, P&L, and stats A wallet address with no trader yet returns sync_status "unknown" (not an error). A username or trader id that matches no trader is a not_found error. Args: - address (string, required): Ethereum wallet address (0x...) or trader username - expand (string[], optional): Heavy fields to include: "strategy", "categories", "trust" ("quant_metrics" is accepted and returns nothing) - max_age_s (integer, optional, 0 or more): Freshness ceiling in seconds. The call answers only when data_quality.status is fresh or stale and data_quality.as_of is no older than this; otherwise it fails with reason freshness_ceiling_unsatisfied (HTTP 409). Nothing is refreshed to meet it Returns: Trader profile with grade, P&L, stats, and optional expanded fields. The trader carries data_quality: status, as_of (the oldest clock the body rests on) and field_groups. fresh and stale both mean tracked and clocked; stale means as_of is older than max_age_s, the refresh budget of the group writer. Neither is a tolerance: compare as_of with your own. unknown means this read cannot date that group, never that it is recent.
get_trader_categories
One wallet's win record in every canonical category it has a settled market in: wins, decided (wins plus losses) and win_rate per category, busiest first. The Esports record also lists each esports game it has a settled market in. The basis is every settled market at any size, so it differs from get_trader's categories expansion, which applies a 20 USD notional floor and an entry-price rule; neither corrects the other. A category with fewer decided markets than min_decided_for_win_rate keeps its counts with win_rate null and status not_enough_data. An absent category means no record, never a 0% record. Args: - address (string, required): Wallet address (0x...), username, or trd_-prefixed trader id - category (string, optional): One canonical category through the shared rollup: soccer and EPL reach Soccer, every esports label reaches Esports, football is American football. A game is not a filter: ask for esports and read games Returns: records, min_decided_for_win_rate, basis, computed_at and meta. A trader with no settled market returns empty records; an unknown address is a not_found error.
get_trader_context
One structured context object for a trader: the full get_trader profile plus position_summary (sync coverage and realized and unrealized P&L rollups with an as_of open-position clock), data_as_of and a freshness_note on what the point-in-time snapshot covers. position_summary is absent when the trader is not tracked locally or native net economics is unavailable. Its open-position figures (markets_open, unrealized_mtm, cost_basis_locked) cover the wallet's sports and esports markets, each judged when read; markets_synced, markets_resolved and the resolved win figures count every stored market, which can include markets of other categories, and sync_coverage adds markets_pruned and markets_unstored, its deleted and its unstored markets of other categories, and markets_combo, its combo markets, to markets_synced; markets_total, total_realized_pnl and synced_realized_pnl cover every Polymarket market of the wallet. A wallet address with no trader yet returns sync_status "unknown" on the nested trader; a username or trader id that matches no trader is a not_found error. Args: - address (string, required): Wallet address (0x...), username, or trd_-prefixed trader id Returns: trader, position_summary, data_as_of, freshness_note and meta.
get_trader_export_snapshot
Read export source-range, completeness, volume reconciliation, row-count estimate, and large-export policy for one trader. Metadata only; does not start an export job. Args: - address (string, required): Trader wallet address, known username-style lookup, or trd_-prefixed trader ID emitted by the API. Bare integer database IDs are not accepted Returns: Trader export snapshot metadata.
get_trader_grade_at
The grade a trader was visibly recorded with at a past instant, from prospective grade observations: what the wallet's grade was when a trade or decision happened, never a reconstruction. status is graded, ungraded or unknown; use grade only when status is graded. Before available_from (the first recorded observation), after deletion, or in a grade-transition gap, status is unknown and grade is null. observation carries observed_at, published_by and model provenance, which older observations leave null. Never substitute a current grade. Args: - address (string, required): Wallet address (0x...), username, or trd_-prefixed trader id - as_of (string, required): RFC3339 instant, such as the trade or decision time; future instants are refused Returns: status, grade, available_from, observation and meta.
get_trader_pnl
Get a trader's sports and esports daily P&L time series and pre-derived stats. Returns entries (daily realized P&L and its running sum), period stats (all/90d/30d/7d), monthly aggregation, per-year totals, the drawdown series, series_status, and realized: how the days add up to the wallet's Sports P&L. A day's daily_change is the realized P&L of the wallet's sports and esports markets dated to that UTC day (the resolution day, else the last trade day), so the days plus realized.undated_pnl equal realized.realized_pnl, the Sports P&L on the trader object. series_status pending means the series is not computed yet: entries are empty and never mean zero. A resolved trader with no sports or esports day returns an empty structured object (HTTP 200); an unknown address returns not found. Args: - address (string, required): Wallet address (0x...), username, or trd_-prefixed trader id - from / to (string, optional): Inclusive UTC calendar dates (YYYY-MM-DD) bounding the daily series (entries and drawdown); stats, monthly and year_totals stay defined over the full history - sections (string[], optional): Which sections to return: "entries", "stats", "monthly", "year_totals", "drawdown"; omit for all five. A section left out is absent, and an unrecognized name is an error, never ignored Returns: Structured trader P&L object (entries, stats, monthly, year_totals, drawdown, freshness_at, series_status, realized). A request that sent from, to or sections also carries view: the bounds applied, the sections present, entries_total, entries_in_window and the pre-window anchor.
game
get_game
The same game object list_games returns, for one event_slug: both sides with their provider ids and live scores, the UTC kickoff, the provider's own status, the esports series format, and the game's winner markets (the moneyline, or a soccer game's three 1X2 legs) with their condition_id, outcome token ids and provider moneyline prices. For the game's spreads, totals and player props, call list_game_markets with the same event_slug. The slug is the identity the live_sports_updated webhook pulse carries, so a receiver can read the full game straight from a pulse. Args: - event_slug (string, required): the game's event slug, for example nfl-buf-nyj-2026-09-22. Matched case-insensitively Returns: the game object with the envelope's meta. status.state keeps postponed, cancelled, suspended and delayed distinct from a plain 'not live'. Each game's own coverage reports whether scores, competitor provider ids and the schedule were available: when competitors reads labels, do not join on names. A slug outside the published coverage answers 404, including a real Polymarket event in a sport this deployment does not serve; list_games names what is covered. Carries no sharp-money split and no holder identity.
get_game_holders
The S, A and B graded holders of up to 25 markets of one game in one call. Each item is get_market_holders for one market, unfiltered and cut to limit, with its market, scan and totals. Pass condition_ids from list_game_markets; a market that is not one of the game's is that item's not_found. Results preserve request order and duplicate inputs return duplicate rows. Uses the V1 batch item quota, one item per condition_id. A market whose roster is not ready within the request is an item error with reason read_model_warming and retry_at: its scan keeps running, so a retry after that time reads it. Page past limit with get_market_holders. Args: - event_slug (string, required): the game's event slug, for example nba-bos-orl-2026-11-01. Matched case-insensitively - condition_ids (string[], required): 1-25 condition_id values of this game's markets - limit (number, 1-100, default 20): holders per market Returns: Ordered batch results with per-item success or error details; an ok item's data carries data (holders), has_more, total, market, scan, totals, computed_at and cached.
get_game_sharp_money
Where the graded money sits on a whole game, in one read: the S, A and B grade wallets' USD on each side (home, away and, for a 1X2 game, draw) summed across the game's markets, each side's integer share of it, the leader, and wallet counts by grade, plus the backend's verdict on the split. The same aggregate the game page on 0xinsider renders, so the two cannot disagree. Use it instead of paging get_market_holders per market and summing. Args: - event_slug (string, required): the game's event slug, for example nba-bos-orl-2026-11-01. Matched case-insensitively Returns: data with event_slug, status, lifecycle, verdict, allocation, total_usd, unallocated_usd, trader_count, holders_partial, outcomes[] (side, label, usd, pct, is_leader, wallets.s/a/b), computed_at and money_as_of, plus meta. Every aggregate field is null unless status is computed; null means unknown, never zero. verdict.kind is no_sharp_money, all_on, split, leans (label, pct), leans_over_price (label, divergence_pts: how many probability points the money share sits above the price), no_clear_lean, unavailable (money exists but cannot be attributed) or withheld (the money is published but no directional claim is supported). When allocation is degraded, outcomes sum to total_usd minus unallocated_usd and carry no pct or leader. holders_partial true means a market's holder list was a capped page, so counts and dollars cover part of the holders. A settled game returns its recap with lifecycle settled. A game whose aggregate is still computing answers 503 read_model_warming with Retry-After; read again then. A slug with no sports market answers 404. Pro and Max. Descriptive analytics, not an order instruction.
get_game_trades
A game's newest fills across every market in it, live: the moneyline, spreads, totals and props, player props included, newest first. The same rows the 0xinsider game page's activity rail shows a Pro viewer. Every fill, not only large ones; use get_large_trades with event_slug for the game's large trades with review scores. Args: - event_slug (string, required): the game's event slug, for example nba-bos-orl-2026-11-01. Matched case-insensitively - limit (number, 1-200, default 100): newest fills to return Returns: data (each fill's id, traded_at, side, outcome, outcome_index, price, shares, size_usd, the signed spread point, the trader's address, display_name and current grade, and the market's condition_id, title, slug and line_label, its name within the game), has_more (always false: poll again rather than page), event_slug, source_stale and meta. source_stale true means the rows are the game's last complete read while its refresh runs. Deduplicate on id across polls. A 503 read_model_warming means the game's first read is still running: retry after Retry-After. An unknown slug answers not_found; an event outside sports and esports answers market_out_of_scope.
list_game_markets
Every stored Polymarket market of one event_slug: the moneyline, spreads, totals, team totals, half and quarter lines, player props and the rest, plus the markets of the event's child events (a soccer game's exact score, halftime result and more-markets events), each with its own event_slug. Each row carries the condition_id, the provider's sports_market_type and groupItemTitle, the provider's typed line and, when stated, the outcome index it belongs to, both outcome labels with their CLOB token ids, and active or closed status. Ordered by sports_market_type, then line, then condition_id. Pass a condition_id to get_market_holders, get_market_flow or get_market_snapshot. Args: - event_slug (string, required): the event slug from list_games, get_game or a search_markets result, for example nba-bos-orl-2026-11-01. Matched case-insensitively. Live, upcoming and settled events all answer - sports_market_type (string, optional): comma-separated provider market types to keep, case-insensitive (spreads, totals, points, first_half_totals). Omitted keeps every type; an unknown type returns an empty page - status (string, optional): active, closed or all (default all) - limit (number, 1-100, default 20) - cursor (string, optional): opaque gmk_v1_ cursor from next_cursor, sent with the same filters - expand (string[], optional): sharp_money adds each row's sharp_money: status (computed, not_computed or unavailable; the first read of a game can be unavailable while its split is built, so retry after a few seconds), trader_count, per-outcome usd and S/A/B wallet counts, and money_as_of, the game page's per-line split Returns: data, has_more, next_cursor, event_slug, families and meta. families lists every market type the event holds with its market and active counts, whatever the filters: read it first to choose a sports_market_type. A slug no stored market carries answers 404; an event outside sports and esports answers 404 with reason market_out_of_scope. Carries no price and no holder identity: get_game_holders reads the holders of several of these markets in one call.
pick
get_pick_of_the_day
Get the published Pick of the Day selections for today, or for a past product day with `date`, and their recorded facts. Pro opens five selections in total: the explicitly designated free selection plus the first four non-free selections in publication order. Max opens every available daily selection, up to twenty-five. Read entitled `picks` in `publication_order` order; use stable decimal-string `pick_id` for identity, not deprecated `pick_rank`. `is_free_selection` designates account access; `supersedes_pick_id` is deprecated and always null. `locked_picks` lists extra unresolved slots with only pick_rank and required_tier=max; game identity, identifying clocks and backed facts are omitted. Each full pick carries the matchup, backed side (pick_outcome_label), recorded publication price and return on the flat $1,000 stake (`stake_usd`, `return_usd`; `return_per_100` keeps the literal $100 basis), available holder facts, top grade, CLV capture status and backend-provided thesis. `scheduled_picks` contains entitled scheduled slots with release_at and kickoff; unauthorized slots appear in identity-free locked_picks instead. No market identity is revealed before publication. Withdrawn picks are omitted from current and dated recommendations, the archive and its statistics, even after market settlement. The public ledger retains every published commitment under its original identity and proof bytes. With `date`, the tool reads that past day's slate as the dated web page shows it, under the same tier rule, with no scheduled_picks. A past day with no published pick returns not_found with param date; a past day does not change, so do not retry it. A date after today is a bad_request. For today, when no active pick is available, the tool returns reason pick_not_released and retry_at. Schedule the next read from the returned retry guidance or an entitled scheduled slot's release_at instead of polling. An entitled published pick whose holder proof is not readable appears in `proof_pending_picks` (pick_rank, release_at, kickoff, retry_at), while `picks` contains readable picks. The tool returns read_model_warming only when no entitled published pick has readable proof. If only Max-locked selections have published, a successful state=none response carries picks=[], pick_count=0, locked_picks and an upgrade action. For automated entry, require a present, matching, unexpired entry_authorization. Honor its returned max_entry_price and expires_at, quote a current executable book for the actual stake and retain any stricter local limits. Fees are separate; authorization guarantees neither liquidity nor execution. Args: - date (string, optional): Product day (America/New_York) in YYYY-MM-DD format, on or before today; omit for today's slate Returns: The published pick set for the current or requested product day (America/New_York); for today, a pick_not_released error with retry_at before the first pick publishes.
get_pick_of_the_day_archive
Get the Pick of the Day track record: each published pick that has not been withdrawn, with its outcome (win, loss, void or pending), recorded publication price, unit score and CLV fields, plus the rolling hit rate (wins / decided; void and pending excluded) and flat-$1,000-stake profit and ROI (`hit_rate.stake_usd` names the stake). The actual API key tier controls unresolved access: Pro opens five selections in total, the designated free selection plus the first four non-free selections in publication order; Max opens every available daily selection, up to twenty-five. Every resolved outcome (win/loss/void) is public. Unentitled pending rows retain only slot/date/outcome and required_tier with backed_side_locked=true; matchup, category, league, image, publication clock and backed facts are omitted. The archive retains the included historical picks, losses included. Withdrawn recommendations are omitted from archive rows and every aggregate, including the cumulative series, even after market settlement. The public ledger retains every published commitment under its original pick_id and proof bytes. Args: none Returns: picks[] newest first with outcome and CLV fields, plus the aggregate record (hit_rate, decided, wins, losses, voids, profit, roi, total risked).
get_pick_of_the_day_ledger_entry
Read one published pick's sealed, opened or uncommitted ledger entry by its stable decimal-string pick_id. commitment_version explicitly selects version 1 legacy proofs or version 2 rank-free proofs. Never infer a proof format from dates or reorder canonical bytes. Pending proofs withhold the backed side and nonce. This tool requires the usual authenticated MCP tools/call transport; the corresponding REST read is public.
get_pick_of_the_day_stats
Get the Pick of the Day track-record breakdown the stats page shows, computed from the same rows the archive publishes: the rolling hit rate, the win rate the market expected at publication, flat-stake outcome stats (drawdown, rolling form, profit factor, concentration), and buckets by day, sport, league or category label, access group (Free, Pro, Max), month, entry-price band, market type and totals side, plus streaks, records and every void pick. Withdrawn picks are outside every figure, as in the archive. Args: none Returns: hit_rate, market_expectations, outcome_stats, days[], categories[], sports[], tiers[], months[], price_bands[], market_types[], total_sides[], streaks, records and voids[].
batch
batch_get_market_flow
Read-only batch lookup of market flow for 1-25 raw provider condition_id values. Results preserve request order and duplicate inputs return duplicate rows. Uses the same V1 batch item quota as POST /api/v1/markets/flow/batch. Args: - condition_ids (string[], required): Raw provider condition IDs - timeframe (string, optional): "1h", "4h", "24h", or "7d" (default "24h") Returns: Ordered batch market-flow results with per-item success or error details.
batch_get_market_intel
Deprecated alias of batch_get_market_flow (#16312), kept live until its 2027-02-01 sunset (#29351), then removed; it calls the deprecated POST /api/v1/markets/intel/batch path, whose envelope keeps object: market_intel_batch. Read-only batch lookup for 1-25 raw provider condition_id values. Results preserve request order and duplicate inputs return duplicate rows. Uses the same V1 batch item quota as POST /api/v1/markets/intel/batch. Args: - condition_ids (string[], required): Raw provider condition IDs - timeframe (string, optional): "1h", "4h", "24h", or "7d" (default "24h") Returns: Ordered batch market-intelligence results with per-item success or error details.
batch_get_traders
Read-only batch lookup for 1-25 trader wallet addresses or known usernames. Results preserve request order and duplicate inputs return duplicate rows. Uses the same V1 batch item quota as POST /api/v1/traders/batch. Args: - traders (string[], required): Wallet addresses or known usernames - expand (string[], optional): Heavy fields to include for every trader: "strategy", "categories", "trust" (trust is per-field provenance for grade, P&L, and stats; "quant_metrics" is accepted and returns nothing since 2026-10-27) Returns: Ordered batch trader results with per-item success or error details. Each successful item's trader carries data_quality: status, as_of and field_groups; fresh and stale mean tracked and clocked (stale: older than the writer refresh budget, max_age_s), neither is a tolerance, and unknown means undatable, never recent.
whale
get_whale_trade
Deprecated alias of get_large_trade (#16304), kept live until its 2027-02-01 sunset (#29351), then removed; it calls the deprecated /api/v1/whale-trades/{id} path, whose envelope keeps object: whale_trade. Read one whale trade by ID. Accepts either the wt_ ID returned by whale-trade list/history responses or the raw numeric whale_alerts.id. Args: - id (string, required): Whale trade ID such as wt_123 or 123 Returns: One whale trade with trader info, market context, size, side, price, current review_score (signal_score is its deprecated twin, same value, until its 2027-02-01 sunset) and trader grade, point-in-time recorded_review_score (recorded_signal_score is its deprecated twin until its 2027-02-01 sunset; null before 2026-08-03) and trader grade_at_trade with grade_at_trade_status (unknown before 2026-09-19), optional suspicion_score, and optional suspicion_track. A null suspicion track means the persisted legacy row has no track label.
get_whale_trades
Deprecated alias of get_large_trades (#16304), kept live until its 2027-02-01 sunset (#29351), then removed; it calls the deprecated /api/v1/whale-trades path. Get recent large trades from graded prediction market traders. Each trade includes a 0-1 review score, persisted suspicion facts, trader grade, and market context. Cursor-paginated, newest first. Args: - limit (number, 1-100, default 20): Max results per page - cursor (string, optional): Pagination cursor from previous response - min_size (number, default 5000): Minimum trade size in USD - category (string, optional): Filter by market category (case-insensitive) - min_grade (string, optional): Minimum trader grade (S, A, B, C, D, F) - suspicious_only (boolean, optional): Keep only persisted suspicion_score >= 60; false preserves the current result set - min_market_volume_share (number, 0-1, optional): Keep only trades whose market_volume_share is known and at least this; a fraction, so 0.01 is one percent of the market's traded volume - sort (string, optional): "recent" (default, newest first) or "market_volume_share" (biggest share of its market first, over the last 30 days, or from the from bound on the history tools; a cursor is bound to the order it was minted in) - since (string, optional): wt_ id of a trade a previous call returned; answers only the trades recorded after it, in commit order, so a trade recorded late still arrives. Poll with the first trade of the last answer that had trades and deduplicate on id; recent order only - condition_id (string, optional): One market's large trades, by exact raw provider condition_id; not with event_slug or since - event_slug (string, optional): Every market of one game (moneyline, spreads, totals and props), the markets get_game_trades reads; recent order only, not with condition_id or since; an unknown slug is not_found Returns: List of whale trades with trader info, market context, size, side, price, current review_score (signal_score is its deprecated twin, same value, until its 2027-02-01 sunset) and trader grade, point-in-time recorded_review_score (recorded_signal_score is its deprecated twin until its 2027-02-01 sunset; null before 2026-08-03) and trader grade_at_trade with grade_at_trade_status (unknown before 2026-09-19), optional suspicion_score, and optional suspicion_track. A null suspicion track means the persisted legacy row has no track label. The page carries data_quality beside data: status, as_of (the oldest clock the page rests on) and field_groups. fresh and stale both mean tracked and clocked; stale means as_of is older than max_age_s, the refresh budget of the group writer. Neither is a tolerance: compare as_of with your own. unknown means this read cannot date that group, never that it is recent.
get_whale_trades_history
Deprecated alias of get_large_trades_history (#16304), kept live until its 2027-02-01 sunset (#29351), then removed; it calls the deprecated /api/v1/whale-trades/history path. Replay historical whale trades from local whale_alerts rows. Supports cursor pagination plus condition, trader, category, grade, platform, suspicion, market-share, and RFC3339 from/to filters, and a market_volume_share sort. Args: - limit (number, 1-100, default 20) - cursor (string, optional): Pagination cursor with wth_ prefix - min_size (number, optional): Minimum trade size in USD - condition_id (string, optional): Exact raw provider condition_id - event_slug (string, optional): Every market of one game, the markets get_game_trades reads; recent order only, not with condition_id; an unknown slug is not_found - trader (string, optional): Wallet, alias, or username - category (string, optional) - min_grade (string, optional): S, A, B, C, D, or F; filters on today's grade, not the grade at trade time - suspicious_only (boolean, optional): Keep only persisted suspicion_score >= 60 - platform (string, optional): polymarket or all - from/to (string, optional): RFC3339 traded_at bounds - min_market_volume_share (number, 0-1, optional): Keep only trades whose market_volume_share is known and at least this; a fraction, so 0.01 is one percent of the market's traded volume - sort (string, optional): "recent" (default, newest first) or "market_volume_share" (biggest share of its market first, over the last 30 days, or from the from bound on the history tools; a cursor is bound to the order it was minted in) Returns: Historical whale trades with replay metadata, current review_score (signal_score is its deprecated twin, same value, until its 2027-02-01 sunset) and trader grade, point-in-time recorded_review_score (recorded_signal_score is its deprecated twin until its 2027-02-01 sunset; null before 2026-08-03) and trader grade_at_trade with grade_at_trade_status (unknown before 2026-09-19), optional suspicion_score, and optional suspicion_track. A null suspicion track means the persisted legacy row has no track label. The page carries data_quality beside data: status, as_of (the oldest clock the page rests on) and field_groups. fresh and stale both mean tracked and clocked; stale means as_of is older than max_age_s, the refresh budget of the group writer. Neither is a tolerance: compare as_of with your own. unknown means this read cannot date that group, never that it is recent.
category
get_category_leaderboard
Get one sports or esports category's edge leaderboard, the board the site's category pages show: wallets ranked by the 95% lower bound of their edge over the price they paid in the category, counted over independent events, best first. Only wallets whose lower bound is above zero are listed; total counts them. active_within keeps wallets that traded in the category within 7d, 30d or 90d, and min_events sets the independent events a wallet needs. Cursor-paginated; a cursor issued before the ranking refreshed returns cursor_expired. A slug outside sports and esports is not_found on slug. Args: - slug (string, required): Category slug, e.g. soccer, basketball, tennis, esports - active_within (string, optional): all (default), 7d, 30d or 90d - min_events (number, optional, default 0): Independent events a wallet needs in the category - limit (number, 1-100, default 20): Max results per page - cursor (string, optional): Opaque pagination cursor from previous response Returns: rows (rank, category, id, address, username, platform, grade, edge_lower_bound, independent_events, unresolved_events, n_resolved, win_rate, pnl, as_of) and pagination metadata.
list_category_leaders
List every sports and esports category's top three edge leaders, the board the site's categories index shows: in each category, wallets ranked by the 95% lower bound of their edge over the price they paid, counted over independent events. Only wallets whose lower bound is above zero are listed, so a category can carry fewer than three. Rows come by category, then rank; get_category_leaderboard pages one category's full ranking. Args: none Returns: rows (rank, category, id, address, username, platform, grade, edge_lower_bound, independent_events, unresolved_events, n_resolved, win_rate, pnl, as_of).
combo
get_combo
One Polymarket combo: legs, conjunction result, all-time trade totals, the newest 100 taker fills, lifecycle totals and ingest coverage. Requires a Pro or Max API key. Unlike get_combo_fills it keeps executions priced above 0.95. Null lifecycle or missing leg facts are unknown, never zero. Args: - condition_id (string, required): Combo ID, 0x and 62 lowercase hex characters; not a binary market's condition_id Returns: combo, fills, lifecycle, coverage, access and meta. A malformed ID is a bad_request error and an unknown one not_found.
get_combo_fills
Live Polymarket combo (multi-leg) taker fills with exact decimal-string economics, wallet identity and grade, legs, conjunction result and ingest coverage. Requires a Pro or Max API key. The listing holds executions priced at most 0.95; get_combo has a combo's complete history. sort recent pages with next_cursor; largest and payout page with next_offset. A continuation can end on an empty page. Args: - result (string, optional): CSV of pending, won, lost; all clears the filter - legs (string, optional): CSV of 2, 3, 4, 5+; all clears the filter - min_stake (integer, optional, default 0): Minimum collateral in whole USDC - min_multiplier (integer, optional, default 0): 0 disables the filter; otherwise 2 to 1000000 shares per dollar at execution - grades (string, optional): CSV of S, A, B, C, D, F; all clears the filter; ungraded wallets never match - sports (string, optional): CSV of sport slugs such as nfl, nba, soccer, esports; all clears the filter; a combo matches when any leg is in a selected sport - sort (string, optional): recent (default, newest first), largest (collateral), or payout (buy-fill shares, sells excluded) - window (string, optional): 24h, 7d or all; defaults to all for recent and 24h for largest and payout - limit (number, 1-200, default 50): Fills per page - cursor (string, optional): next_cursor from the previous recent page - offset (number, 0-5000, optional): next_offset from the previous largest or payout page Returns: data (fills), has_more, next_cursor, next_offset, limit, sort, window, coverage and meta.
insider
get_insider_radar
Deprecated alias of get_suspicious_trades (#16301), kept live until its 2027-02-01 sunset (#29351), then removed; it calls the deprecated /api/v1/insider-radar path. Stored trades whose recorded suspicion score meets the live flag threshold. Cursor-paginated by suspicion score (highest first). Use mode=stable when a walk must stay on one published scoring generation; restart when it returns cursor_expired. Each suspicious trade includes: - suspicion_score (60-100) - severity (currently flag) - Sub-scores: size and fresh_wallet when recorded; timing and edge are null - Evidence JSON with the scorer's stored signals Args: - limit (number, 1-100, default 20): Max results per page - cursor (string, optional): Pagination cursor from previous response - min_suspicion (number, 0-100, default 0): Minimum score; the live floor of 60 also applies - severity (string, optional): "flag" selects live rows; "watch" returns none because no live watch policy exists - mode (string, optional): "live" (default) uses fresh cached pages; "stable" pins the walk to one published scoring generation Returns: List of suspicious trades with trader, market, scores, and evidence.
get_insider_radar_flag
Deprecated alias of get_suspicious_trade (#16301), kept live until its 2027-02-01 sunset (#29351), then removed; it calls the deprecated /api/v1/insider-radar/{id} path. Read one suspicious trade by ID. Accepts the rf_ ID returned by list responses or the raw numeric whale_alerts.id. Args: - id (string, required): Suspicious trade ID such as rf_123 or 123 Returns: One suspicious trade with trader, market, suspicion scores, and evidence.
leaderboard
get_leaderboard
Get the top-ranked prediction market traders (grades S, A, B only). By default in the board's own rank order; sort, dir and activity reorder and scope the same wallets as the site's leaderboard does. Supports cursor pagination and optional filters. Args: - limit (number, 1-100, default 20): Max results per page - cursor (string, optional): Pagination cursor from previous response; it is bound to the sort, dir and activity it was read with - category (string, optional): Filter by category slug - strategy (string, optional): Trading style: two_sided, category_focused, high_activity, diversified, mixed, unclassified - sort (string, optional): rank (default), grade, volume (sports and esports USD volume), predictions, pnl, win_rate (wallets with at least 5 decided markets), edge (price_edge.edge, wallets whose edge ranks); a missing value sorts lowest - dir (string, optional): asc or desc; omitted, rank 1 first for rank and largest first for the rest - activity (string, optional): all (default), active (last trade 30 days ago or less) or inactive Returns: Ranked list of traders with grade, score, sports and esports P&L, markets, win rate, edge over the price paid, and strategy.
get_leaderboard_leagues
List every league that has its own skill leaderboard, grouped by sport, most ranked wallets first. Each row's sport and slug are the sport and league arguments of get_sport_leaderboard. A league is listed once its edge sort ranks at least min_ranked wallets. A ranking being rebuilt returns read_model_warming with a retry time. Args: none Returns: min_ranked, min_resolved, refreshed_at and leagues[] (category, sport, slug, name, ranked_traders, total_traders).
position
get_position_timeline
Get stored Polymarket fills available for one tracked trader in one market, newest first, with server-computed running_amount and running_avg_price. The REST identity accepts a 0x wallet, username, trd_-prefixed trader id, or bare integer traders.id with precedence wallet, trd_, integer, then username. Only warm-tier traders, the wallets we sync most often, are tracked. Args: - condition_id (string, required): Market condition ID - address (string, optional): Any supported REST trader identity, including a bare integer traders.id - trader_id (number, optional): Convenience alias for a bare integer traders.id; provide exactly one of address or trader_id - limit (number, 1-100, default 20): Max events per page - cursor (string, optional): Pagination cursor from previous response Returns: List of position timeline events with pagination metadata.
get_position_timeline_by_id
Get stored Polymarket fills available for one internal trader id in one market, newest first, using the public V1 /api/v1/traders/{id}/position-timeline route. Args: - condition_id (string, required): Market condition ID - trader_id (number, required): Internal traders.id alias - limit (number, 1-100, default 20) - cursor (string, optional) Returns: List of position timeline events with pagination metadata.
suspicious
get_suspicious_trade
Read one suspicious trade by ID. Accepts the rf_ ID returned by list responses or the raw numeric whale_alerts.id. Args: - id (string, required): Suspicious trade ID such as rf_123 or 123 Returns: One suspicious trade with trader, market, suspicion scores, and evidence.
get_suspicious_trades
Stored trades whose recorded suspicion score meets the live flag threshold. Cursor-paginated by suspicion score (highest first). Use mode=stable when a walk must stay on one published scoring generation; restart when it returns cursor_expired. Each suspicious trade includes: - suspicion_score (60-100) - severity (currently flag) - Sub-scores: size and fresh_wallet when recorded; timing and edge are null - Evidence JSON with the scorer's stored signals Args: - limit (number, 1-100, default 20): Max results per page - cursor (string, optional): Pagination cursor from previous response - min_suspicion (number, 0-100, default 0): Minimum score; the live floor of 60 also applies - severity (string, optional): "flag" selects live rows; "watch" returns none because no live watch policy exists - mode (string, optional): "live" (default) uses fresh cached pages; "stable" pins the walk to one published scoring generation Returns: List of suspicious trades with trader, market, scores, and evidence.
account
get_account
Identify the calling account and credential: user_id, credential_id, credential_kind (api_key, oauth_grant or integration_key), credential_status, entitlement (paid_data_access active or lapsed, and the recovery_action when lapsed) and scopes (null for full developer-key access). Use it to confirm which account an agent is spending before a run. It costs no monthly quota and no per-minute request: it shares a separate 100 reads/minute inspection allowance with get_usage. It returns no secret, payment or contact detail. Args: none Returns: user_id, credential_id, credential_kind, credential_status, entitlement and scopes.
combos
get_combos_summary
The stored count of traded Polymarket combos whose YES conjunction is still pending, and when it was computed. Requires a Pro or Max API key. The count refreshes at most every five minutes and is cached for 60 seconds. A null live value is unknown, never zero. Returns: live (count and computed_at, or null) and meta.
content
search_content
Search 0xinsider's editorial content by keyword. Returns matching learn articles, glossary entries, comparisons, research, and trading strategies with their canonical URLs. Args: - q (string, required): Search query, 1-256 characters before whitespace trimming - limit (number, 1-50, default 10): Max results Returns: List of matching content items with content_id, kind, slug, title, excerpt, and url.
coverage
get_coverage
Read which V1 data surfaces the API serves for Polymarket, the one venue it covers. Every surface reports the status supported: grade, pnl, strategy, timeline, large_trades, whale_signal (the deprecated spelling of large_trades, until its 2027-02-01 sunset), suspicious_trades, insider_radar (the deprecated spelling of suspicious_trades, until its 2027-02-01 sunset), and market_snapshot. Use this before choosing trader, market, large-trade, or suspicious-trade routes. Args: none Returns: Static backend-owned coverage document under the single key polymarket.
daily
get_daily_report_snapshot
Read one dated daily whale-activity report snapshot. Args: - date (string, required): UTC report date in YYYY-MM-DD format Returns: Report snapshot metadata and entries.
edge
get_edge_hunter
Read the Max-only Edge Hunter API at https://0xinsider.com/sports/edge. Pro receives 403 forbidden with reason max_plan_required. One view selector offers board (default), full signals and cohort observations. All views accept kind sports|esports (omission covers both), sports, leagues, market_types, condition_ids, event_slugs, series_slugs and legacy category. Array selections accept 1..100 supplied values before deduplication, including comma-separated values inside a value; repeat REST query keys or supply MCP arrays. Lists match OR; axes match AND. Canonical sports and machine league identities normalize case-insensitively; market types and event/series slugs are exact case-sensitive provider strings. category=NFL selects the Football bucket; leagues=[nfl] selects NFL. Selection precedes the cap or pagination and appears as normalized selection beside the result fields; changed selections cannot share cursors or ETags. Every row carries nullable market_context with nullable league, series_slug, market_type and metadata_updated_at for authoritative filter discovery; metadata_updated_at is the local canonical writer clock, not provider observation time. Selected reads fail closed with 503 read_model_warming if frozen sidecar readiness is absent. Board defaults stay B grade floor, 30 rows and 48-hour horizon; min_grade S/A/B and limit clamp 1..30 are configurable, total is before the cap, with both current outcome quotes. Signals use min_grade default B, horizon default 12/clamp 1..48, limit default 20/clamp 1..100 and cursor, retaining token_id, all ranked/holder/directional/category-skill fields and clocks. Grade floor requires a holder at that grade or better without removing other holders. Observations require cohort wider_holder|in_play|emerging_pile, accept limit/cursor, and retain full observation rows, snapshot_as_of, degraded, source-generation/category funnel diagnostics and REST meta. With cohort wider_holder, admission most_held_48h opts in to the most-held selection instead: per sport, up to 8 wider_holder markets kicking off within 48 hours, most graded holders first, then volume, then soonest kickoff, at most 4 per event, recomputed every refresh and not held; every row's admitted_by is most_held_48h, the response echoes admission, and its funnel, coverage and degradation describe that selection. Required degradation_reasons names each cause with its canonical sport or null for a generation-wide cause. Degradation and coverage input_markets/capacity_limited_markets/emitted_observations/incomplete_holder_markets describe the whole all-sports generation and remain unchanged by selectors. coverage.selected_observations counts matching selected cohort rows before pagination; returned_observations counts this page. Intentional capacity_limited admission does not itself degrade a snapshot, and pagination cannot recover excluded markets. not_configured upcoming supply is not a provider failure. A selected funnel with no failure terminals does not prove the shared generation healthy. A legacy category value that cannot resolve to a sport retains its zero-work empty result: all six counts are zero and reasons are empty without reading the all-sports snapshot, so those values do not establish its health. Observation horizon stays 48h with 12h in-play kickoff lookback and 30s live snapshot ceiling; after one missed refresh, observations serve the last snapshot up to 45s longer with its age in meta.cache_age_s, and a second miss in a row returns 503; funnel accounting is not a league/type/ID selection census. All public views read warmed generations only; missing or stale readiness returns 503 read_model_warming with Retry-After 5. Advanced views use private,no-cache with REST/SDK ETag/304 helpers; board uses private,no-store and has no ETag/pagination. Invalid mode-specific parameters return 400. Price marks are market midpoints, not wallet entry prices; volume is shares. Null/db_only/degraded identify unavailable or weaker evidence. Analytics is not an order instruction.
event
get_event_replay_since
Replay durable public large-trade events strictly after an opaque cursor, in commit order (a page never reaches past the oldest open write transaction, so a late-committing lower id is delivered later instead of skipped). Filters narrow the stream in place and are bound to the cursor: a cursor issued under other filters answers error.reason cursor_expired, so restart without a cursor. expand=trade adds the public trade read to every event, so a page needs no per-event get_whale_trade call. Args: - cursor (string, optional): Opaque event replay cursor - limit (number, 1-100, default 50) - trader (string, optional): wallet address, trd_ id or username - condition_id (string, optional): raw condition_id or mkt_ id - min_grade (string, optional): S, A, B, C, D or F - min_size (number, optional): minimum size in USD - expand (string, optional): "trade" Returns: Event replay window with retention and completeness metadata; each event carries trade when expanded.
explore
explore_markets
Browse large-trade-active titled markets for discovery surfaces. Returns grouped event clusters or standalone markets plus live facets. Cursor-paginated over visible discovery entries. Args: - limit (number, 1-48, default 24): Max discovery entries per page - cursor (string, optional): Pagination cursor from previous response - category (string, optional): Filter by market category (case-insensitive): a sport or esports bucket such as Basketball or Esports; any other category is rejected - status (string, optional): Filter by status: "active", "closed", or "all" - platform (string, optional): Explore is Polymarket-only; accepted for backward-compatibility, does not change the result set - sort (string, optional): Sort by "trending", "hot", "expiring", "large_trades" (deprecated spelling "whales" until its 2027-02-01 sunset), "volume", or "newest" - q (string, optional): Keyword search against market titles, up to 64 characters before whitespace trimming Returns: Market discovery entries, facets, and pagination metadata.
games
list_games
The fixture list: one coherent game per row, so an agent never has to assemble a game from market searches and team-name matching. Each row carries both sides with their provider ids and live scores, the UTC kickoff, the provider's own status, the esports series format, and the game's winner markets (the moneyline, or a soccer game's three 1X2 legs) with their condition_id, outcome token ids and provider moneyline prices. A game's spreads, totals and player props are not on the row: list_game_markets lists every market of one event_slug. Ordered by kickoff, then event_slug; games whose kickoff the provider has not published sort last. For what is on now, pass window=now: without it the list is the whole catalog and starts at the oldest game still open, which can be weeks old. Args: - sport (string, optional): canonical bucket, case-insensitive, with - and _ read as a space (table-tennis and Table Tennis are one bucket). Omitted means every covered sport - league (string, optional): league tag as coverage.leagues spells it (nfl, epl, cs2), case-insensitive - status (string, optional): scheduled, live, paused, ended, postponed, cancelled, suspended, delayed, or unknown. ended, cancelled and postponed also list finished games that have left the live board (freshness.source stored) for kickoffs in starts_after..starts_before, by default the 7 days before now; such a page can be short, or empty, while has_more is true, so follow next_cursor until has_more is false - starts_after / starts_before (string, optional): RFC 3339 kickoff bounds; a game with no published kickoff is excluded whenever either bound is set - window (string, optional): all (default, the whole catalog) or now: games the provider reports in play, plus any other game whose kickoff was at most 3 hours ago or is still to come, without ended, postponed or cancelled games - limit (number, 1-100, default 20) - cursor (string, optional): opaque gms_v1_ cursor from next_cursor. It pins the page position, not a snapshot: the catalog is live, so a game added or removed between pages moves with it - expand (string, optional): sharp_money adds each game's sharp_money, the object get_game_sharp_money returns, read from the sport board's cached aggregate (one board read per sport, so a page stays fast). A game the board did not evaluate reads status not_computed: call get_game_sharp_money for it. A sport whose aggregate could not be read reads status unavailable while the rest of the page is served. Pro and Max Returns: data, has_more, next_cursor, as_of, coverage and meta. Read coverage before reading an empty page: it names the sports and leagues this deployment serves and any scope whose source was unavailable for this read, so an unserved sport is never confused with a quiet night. A sport or status this deployment does not serve returns an empty page, not an error. status.state keeps postponed, cancelled, suspended and delayed distinct from a plain 'not live', and a kickoff in the past is never read as live on its own. Scores are the provider's own strings, because a set score and a run total are not both integers. Carries no sharp-money split unless expand is sharp_money, and no holder identity; holders stay on get_market_holders.
markets
search_markets
Search prediction markets by keyword. Returns one market per matching Polymarket event, with status, category, platform and event_slug: the event's representative market: the market whose title is q, else a moneyline or winner market before an O/U, spread or alt line, so a game's spreads, totals and player props never appear as separate results. An event holding a market whose title is q (case-insensitive) ranks first whatever its date, so a pasted market title returns that market first. Pass a sports result's event_slug to list_game_markets for every market of that game. Use this to find condition_id values needed by get_market_flow. Supports cursor pagination: pass next_cursor from the previous page with the same q, status and category to read the next page; stop when has_more is false. Args: - q (string, required): Search query - limit (number, 1-100, default 20): Max results per page - cursor (string, optional): Pagination cursor from the previous response's next_cursor - status (string, optional): Filter by status: "active", "closed", or "all" (default "all") - category (string, optional): Filter by category Returns: data (one market per matching event, with id, condition_id, title, slug, event_slug, category, platform, status), has_more, next_cursor.
monthly
get_monthly_report_snapshot
Read one UTC monthly whale-activity report snapshot. Args: - month (string, required): UTC report month in YYYY-MM format Returns: Report snapshot metadata and entries.
platforms
get_platforms
Deprecated alias of get_coverage (#16315), kept live until its 2027-02-01 sunset (#29351), then removed; it calls the deprecated /api/v1/platforms path, which serves the same body. Read which V1 data surfaces the API serves for Polymarket, the one venue it covers. Every surface reports the status supported: grade, pnl, strategy, timeline, large_trades, whale_signal (the deprecated spelling of large_trades, until its 2027-02-01 sunset), suspicious_trades, insider_radar (the deprecated spelling of suspicious_trades, until its 2027-02-01 sunset), and market_snapshot. Use this before choosing trader, market, large-trade, or suspicious-trade routes. Args: none Returns: Static backend-owned coverage document under the single key polymarket.
positions
get_positions
List current prediction-market positions from the public positions-board feed. Returns trader, market, value, side, share, P&L, and freshness context. Cursor-paginated by current value descending. Args: - limit (number, 1-100, default 20): Max results per page - cursor (string, optional): Pagination cursor from previous response - min_size (number, optional): Minimum current value in USD; defaults to 100, or to 0 when wallet is present; send 0 for every reconciled position - category (string, optional): Filter by provider-backed market category - condition_id (string, optional): Scope to one market: raw provider condition_id or mkt_-prefixed market id - wallet (string[], optional): Scope to one wallet or a book of wallets (up to 25); each value is a wallet address, known username, or trd_-prefixed trader id - min_grade (string, optional): Minimum trader grade (S, A, B, C, D, F) - side (string, optional): Filter by binary side: "yes" or "no" - consistency (string, optional): live (default) or snapshot. snapshot requires wallet and freezes up to 500 positions and 2 MB for up to five minutes; repeat the same filters and consistency on every page. A new first page replaces the API key's prior snapshot; a changed filter errors, and an expired or replaced cursor returns cursor_expired Returns: List of current positions with pagination metadata. The page carries data_quality beside data: status, as_of (the oldest clock the page rests on) and field_groups. fresh and stale both mean tracked and clocked; stale means as_of is older than max_age_s, the refresh budget of the group writer. Neither is a tolerance: compare as_of with your own. unknown means this read cannot date that group, never that it is recent. With consistency=snapshot, the page also carries snapshot: as_of, expires_at, row_count.
report
get_report
Unified whale-activity report snapshot selector. One route for all three granularities; dispatches to the same per-granularity cap and date window as the granularity-specific report tools. Args: - granularity (string, required): "daily", "weekly", or "monthly" - period (string, required): Period token for the granularity. daily: UTC date YYYY-MM-DD. weekly: ISO week YYYY-WW, or a from,to YYYY-MM-DD pair. monthly: UTC month YYYY-MM. Returns: Report snapshot metadata and entries (source_range, snapshot.status, completeness, reconciliation, report).
resolution
get_resolution_report
Read one UTC day's resolution report: on the day's resolved sports and esports markets, how often the side the profitable (S, A and B grade) wallets held won, beside how often every qualifying wallet's side won, one vote each. markets lists each market they held a position in, with the consensus side, its confidence and each wallet's side, cost and realized P&L; view totals drops it. A past day is served from its retained build: generated_at says when it was built and source_updates_pending that a newer build has been requested. A day with no build yet returns read_model_warming with a retry time. Args: - date (string, required): UTC report date in YYYY-MM-DD format, no later than today - view (string, optional): full (default) or totals Returns: date, market_scope, grade_basis, the counts (total_resolved, with_smart_positions, smart_money_right, smart_money_wrong, accuracy, all_wallets_right, all_wallets_wrong, all_wallets_accuracy, total_smart_pnl), generated_at, source_updates_pending and markets[].
sharp
get_sharp_money_flows
Ranked sharp-money flow discovery across prediction markets. Use this before you know a condition_id to find where graded traders are net buying or selling. Cursor-paginated, ranked by absolute net flow descending. Args: - timeframe (string, optional): Lookback window: "1h", "4h", "24h", "7d" (default "24h") - limit (number, 1-100, default 20): Max results per page - cursor (string, optional): Pagination cursor with smf_ prefix - category (string, optional): Filter by provider-backed market category - platform (string, optional): "polymarket" or "all" (default "all") - min_grade (string, optional): Minimum trader grade S, A, B, C, D, or F (default "B" = S/A/B) - direction (string, optional): Filter by net flow direction: "YES" or "NO" - condition_id (string, optional): One market's flow, by exact raw provider condition_id; not with event_slug - event_slug (string, optional): Rank only the markets of one game (moneyline, spreads, totals and props), the markets get_game_trades reads; not with condition_id; an unknown slug is not_found Returns: Ranked markets with sharp_money (net_flow_usd, direction, whale_trade_count, buy/sell volumes) and market identity. smart_money is a deprecated byte-identical alias of sharp_money until its 2027-02-01 sunset.
smart
get_smart_money_flows
Deprecated alias of get_sharp_money_flows (#16308), kept live until its 2027-02-01 sunset (#29351), then removed; it calls the deprecated /api/v1/markets/smart-money-flows path. Ranked sharp-money flow discovery across prediction markets. Use this before you know a condition_id to find where graded traders are net buying or selling. Cursor-paginated, ranked by absolute net flow descending. Args: - timeframe (string, optional): Lookback window: "1h", "4h", "24h", "7d" (default "24h") - limit (number, 1-100, default 20): Max results per page - cursor (string, optional): Pagination cursor with smf_ prefix - category (string, optional): Filter by provider-backed market category - platform (string, optional): "polymarket" or "all" (default "all") - min_grade (string, optional): Minimum trader grade S, A, B, C, D, or F (default "B" = S/A/B) - direction (string, optional): Filter by net flow direction: "YES" or "NO" - condition_id (string, optional): One market's flow, by exact raw provider condition_id; not with event_slug - event_slug (string, optional): Rank only the markets of one game (moneyline, spreads, totals and props), the markets get_game_trades reads; not with condition_id; an unknown slug is not_found Returns: Ranked markets with sharp_money (net_flow_usd, direction, whale_trade_count, buy/sell volumes) and market identity. smart_money is a deprecated byte-identical alias of sharp_money until its 2027-02-01 sunset.
sport
get_sport_leaderboard
Get one sport's skill leaderboard, or with league one league's: the board the site's sport pages show. Wallets need min_resolved resolved markets in the sport or league. sort edge (the default) ranks edge_skill, the edge over the price paid pulled toward the board's edge_average by how much of the record is noise; a wallet without a ranked edge sorts after the ranked ones. sort pnl ranks realized P&L and win_rate the Wilson lower bound of the win rate. Boards are ranked to 100 wallets. A sport outside sports and esports is not_found on sport; a league the sport has no board for is not_found on league (get_leaderboard_leagues lists them). Args: - sport (string, required): Sport slug, e.g. soccer, basketball, football, esports; an alias such as nba reads its sport's board - league (string, optional): League slug of the sport, e.g. premier-league - sort (string, optional): edge (default), pnl or win_rate - limit (number, 1-100, default 20): Rows from the top of the board Returns: sport, category, league, sort, min_resolved, limit, total_traders, edge_average, volume_scope, as_of and rows[] (rank, id, address, username, platform, grade, n_resolved, wins, losses, win_rate, win_rate_wilson_lb, price_edge, edge_hold, edge_skill, pnl, volume, cost, roi, last_category_trade_at).
trending
get_trending_wallets
List wallets ranked by trailing-window realized P&L (Polymarket-only discovery). Each row carries the window P&L, volume, distinct markets, grade, hot-streak tier, and its sports and esports realized P&L by day (one point per UTC day of the window, dates ascending, 0 on a day with none; empty while daily_pnl_series_status is pending, which never means zero; it does not sum to the window P&L, which counts every market). Cursor-paginated by window P&L descending. A cold read model returns a 503 retry-after (warming), never a 500 or fabricated ranking. Args: - limit (number, 1-50, default 20): Max results per page - cursor (string, optional): Opaque pagination cursor from previous response - window (string, optional): Trailing window: "7d" (default) or "30d" Returns: Ranked trending wallets with window stats and pagination metadata.
usage
get_usage
Read the calling credential's own request budget: the per-minute rate limit (used, limit, remaining, reset_at), today's UTC usage, and the monthly quota (used, limit, remaining, reset_at, binding, pay_as_you_go, ceiling, unavailable_reason). Call it before a long run and slow down or stop before monthly_quota.remaining reaches 0; when binding is true, requests past the limit are refused until reset_at. It costs no monthly quota and no per-minute request: it shares a separate 100 reads/minute inspection allowance with get_account. monthly_quota is null with unavailable_reason when the month's count cannot be read. Args: none Returns: rate_limit, daily_usage and monthly_quota. Times are Unix seconds.
webhook
get_webhook
Read-only lookup of one webhook endpoint owned by the authenticated API key user. This does not create, update, verify, rotate, or delete webhook endpoints. Args: - id (number, required): Webhook endpoint id Returns: Webhook endpoint configuration record.
webhooks
list_webhooks
Read-only list of webhook endpoints owned by the authenticated API key user. This does not create, update, verify, rotate, or delete webhook endpoints. Args: none Returns: List of webhook endpoint configuration records.
weekly
get_weekly_report_snapshot
Read one weekly whale-activity report snapshot. Pass either from/to UTC dates or an ISO YYYY-WW week token. Args: - week (string, optional): YYYY-WW selector - from/to (string, optional): UTC dates in YYYY-MM-DD format Returns: Report snapshot metadata and entries.

Tools removed

Tools this server used to expose. Anything built against them stopped working on the day they went.

get_pre_game_side_observations
removed 11 Oct 2026
get_pre_game_sides
removed 11 Oct 2026
get_sports_edge_observations
removed 11 Oct 2026
get_sports_edge_signals
removed 11 Oct 2026

Endpoints

URLTransportStateLatencyChecked
https://api.0xinsider.com/api/v1/mcp streamable-http answering 353 ms 5 min ago

Alternatives to 0xinsider

same job, measured the same way
Polymarket MCP Server
by mrlarryjohnson111

Live Polymarket data for agents: markets, insider-scored whale trades, leaderboards, wallet P&L

answering
Hydromancer
by joshavenue

Read-only Hyperliquid data: wallets, top traders, markets, funding and liquidations.

local only
Polymarket MCP
by 0xchron

Read-only Polymarket prediction market data for AI agents.

199 installs/wk local only
PMWallets
by polymarketwallets

Polymarket smart-money data: rank traders by on-chain PnL, follow them, read their fills.

178 installs/wk answering
three.ws KOL
by nirholas

Per-wallet KOL deep dive — a tracked trader's portfolio P&L and its trades on a given mint.

74 installs/wk local only
Marketmaster
by marketmaster

Live Kalshi and Polymarket data: EV edges, cross-venue arbitrage, markets, and whale trades.

67 installs/wk 6 tools answering
Istanbul MCP
by batu1-1an

Read-only Istanbul open city data: transport, parking, water, nearby services and datasets.

18 tools answering
Resolved Markets
by resolvedmarkets

Polymarket orderbook history, live books, trades and settlements, plus Hyperliquid perp books.

answering

0xinsider — questions

Answers built from our own checks of this server.

What can 0xinsider do?
It exposes 69 tools, read directly from the server on our last check. Among them: batch_get_market_flow, batch_get_market_intel, batch_get_traders, explore_markets, get_account, get_category_leaderboard and 63 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is 0xinsider mostly used for?
Its tools cluster around market, trader and large. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is 0xinsider working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 324 ms. The bar chart above shows every period we have measured.
Did 0xinsider ever remove tools?
Yes. get_pre_game_side_observations, get_pre_game_sides, get_sports_edge_observations, get_sports_edge_signals are no longer exposed — we recorded the date each one disappeared. A tool vanishing usually means a breaking change for anything that depended on it.
How do I connect 0xinsider?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does 0xinsider need an API key?
No. 0xinsider completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 69 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is 0xinsider?
It answers our handshake in 324 ms on average, which is faster than 44% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.
How many people use 0xinsider?
The npm package @0xinsider/mcp was installed 5 615 times in the last week. Week over week that is +65%. We show installs rather than GitHub stars on purpose: a star is a bookmark, an install is someone actually running it.
Is 0xinsider open source?
The code is open source: it is published under the MIT licence and 1 stars on GitHub. The licence covers the code in the repository, not the hosted service at api.0xinsider.com, which runs on its operator's own terms.