Prediction Market Analytics

GET/gateway/v1/prediction-market/analytics

Trends, top markets, momentum distribution, and per-market momentum signals for prediction markets.

Platform-wide totals: Omit `category` to get aggregated volume/OI/market-count across the entire prediction market (Polymarket + Kalshi combined). Use `platform` to filter to one exchange. This is the recommended way to answer questions like "What is Polymarket's total volume this week?" or "How does Kalshi volume compare to Polymarket?"

Category drill-down: Provide `category` to scope all data to one category (e.g. crypto, politics).

Combines volume/OI time series, top markets by open interest, momentum summary (price/volume signal distribution), and per-market momentum signals (price changes, volume direction, whale flows).

Note on top_markets: When both `category` and `platform` are omitted, top markets are ranked globally by open interest. Because Polymarket OI is significantly larger than Kalshi OI, the list will skew heavily toward Polymarket. Use `platform` to get per-platform rankings.

Use `search` instead if you want to browse/search individual markets.

Data refresh: ~5 minutes.

Query Parameters

categoryenum<string>

Category to analyze. Omit to get platform-wide totals across all categories.

Available options:cryptocultureeconomicsfinancialspoliticsstemsports
platformenum<string>

Filter to one platform

Available options:polymarketkalshi
time_rangeenum<string>

Window for category trends: `7d`, `30d`, `90d`, `180d`, or `1y`. Bucket size is fixed at 1 day — this endpoint uses `time_range` only and does NOT accept `interval`.

Available options:7d30d90d180d1y
top_ninteger

Number of top markets to include

sort_byenum<string>

Sort field for momentum markets

Available options:volume_7dwhale_flow_net_7dprice_change_7doi_change_7d
orderenum<string>

Sort direction

Available options:ascdesc
limitinteger

Limit for momentum markets list

offsetinteger

Pagination offset for momentum markets

Prediction Market Analytics
const options = {method: 'GET'};

fetch('https://api.asksurf.ai/gateway/v1/prediction-market/analytics', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
OK
{
  "$schema": "https://example.com/schemas/DataObjectResponseAnalyticsBody.json",
  "data": {
    "category_trends": [
      {
        "market_count": 123,
        "open_interest_usd": 123,
        "source": "<string>",
        "timestamp": 123,
        "volume_usd": 123
      }
    ],
    "momentum_markets": [
      {
        "category": "<string>",
        "condition_id": "<string>",
        "latest_price": 123,
        "oi_change_7d": 123,
        "price_change_7d": 123,
        "price_momentum": "<string>",
        "question": "<string>",
        "smart_money_direction": "<string>",
        "smart_wallets_involved": 123,
        "subcategory": "<string>",
        "volume_7d": 123,
        "volume_direction": "<string>",
        "whale_flow_net_1d": 123,
        "whale_flow_net_7d": 123
      }
    ],
    "momentum_summary": {
      "confirming_down": 123,
      "confirming_up": 123,
      "diverging_down": 123,
      "diverging_up": 123,
      "neutral": 123,
      "total_active": 123,
      "volume_decreasing": 123,
      "volume_increasing": 123
    },
    "top_markets": [
      {
        "category": "<string>",
        "condition_id": "<string>",
        "days_to_resolution": 123,
        "event_group_slug": "<string>",
        "event_slug": "<string>",
        "event_ticker": "<string>",
        "event_title": "<string>",
        "latest_price": 123,
        "market_link": "<string>",
        "market_slug": "<string>",
        "market_ticker": "<string>",
        "matched_counterpart": "<string>",
        "open_interest_usd": 123,
        "outcome_label": "<string>",
        "platform": "<string>",
        "question": "<string>",
        "smart_money_direction": "<string>",
        "status": "<string>",
        "subcategory": "<string>",
        "token_id": "<string>",
        "trade_count_7d": 123,
        "volume_1d": 123,
        "volume_30d": 123,
        "volume_7d": 123
      }
    ]
  },
  "meta": {
    "cached": true,
    "credits_used": 123,
    "empty_reason": "<string>"
  }
}