Prediction Market Data — Polymarket & Kalshi Momentum | Surf
Analyze prediction-market totals, trends and momentum for selected filters. Returns aggregate categories, top markets, momentum markets and momentum-summary counts under the selected filters. Use one Toolmu account and a shared prepaid balance across available Tools. Pay per use; no separate supplier subscription is required. The current execution ceiling for this Tool is 0.0288 Toolmu credits per call. This is a maximum, not the settled charge. Before execution, get the current Tool contract and check availability, the latest maximumCredits, your balance and budget. Supplier response credits_used, when present, describes supplier API credits and is not the Toolmu customer charge.
Up to 0.0288 credits / call
The final charge is based on confirmed usage. Unused reserved credits return to your available balance.
Surf
Prediction Market Data — Polymarket & Kalshi Momentum | Surf
Analyze prediction-market totals, trends and momentum for selected filters. Returns aggregate categories, top markets, momentum markets and momentum-summary counts under the selected filters. Use one Toolmu account and a shared prepaid balance across available Tools. Pay per use; no separate supplier subscription is required. The current execution ceiling for this Tool is 0.0288 Toolmu credits per call. This is a maximum, not the settled charge. Before execution, get the current Tool contract and check availability, the latest maximumCredits, your balance and budget. Supplier response credits_used, when present, describes supplier API credits and is not the Toolmu customer charge.
You receive
Returns aggregate categories, top markets, momentum markets and momentum-summary counts under the selected filters. Totals follow the selected filters; a crypto-category result is not the entire platform. Momentum labels describe the supplier's model, not predicted returns.
Start with your task
Summarize [Polymarket or Kalshi] prediction markets in [politics]. Show category trends for [the past 30 days] and list the 10 most traded markets over [this week]. If I omit platform or topic, include all available data. Label each time period; recent activity does not forecast returns.
Inputs & outputs
Inspect the current inputs, availability, and maximum charge before starting.
Input schema
Input schema
Field / Path
Type
Requirement
Meaning
queryParamsqueryParams
object
Optional
limitqueryParams.limit
integer
Optional
Limit for momentum markets list. Defaults to 20.
Default
20
Minimum
1
Maximum
100
orderqueryParams.order
string
Optional
Sort direction. Defaults to "desc".
Default
desc
Options
asc, desc
top_nqueryParams.top_n
integer
Optional
Number of top markets to include. Defaults to 10.
Default
10
Minimum
1
Maximum
50
offsetqueryParams.offset
integer
Optional
Pagination offset for momentum markets. Defaults to 0.
Default
0
Minimum
0
Maximum
9007199254740991
sort_byqueryParams.sort_by
string
Optional
Sort field for momentum markets. Defaults to "volume_7d".
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. Defaults to "30d".
Default
30d
Options
7d, 30d, 90d, 180d, 1y
View raw JSON
{
"type": "object",
"required": [],
"properties": {
"queryParams": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"~standard": {
"vendor": "zod",
"version": 1,
"jsonSchema": {}
},
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Limit for momentum markets list. Defaults to 20."
},
"order": {
"enum": [
"asc",
"desc"
],
"type": "string",
"default": "desc",
"description": "Sort direction. Defaults to \"desc\"."
},
"top_n": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Number of top markets to include. Defaults to 10."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Pagination offset for momentum markets. Defaults to 0."
},
"sort_by": {
"enum": [
"volume_7d",
"whale_flow_net_7d",
"price_change_7d",
"oi_change_7d"
],
"type": "string",
"default": "volume_7d",
"description": "Sort field for momentum markets. Defaults to \"volume_7d\"."
},
"category": {
"enum": [
"crypto",
"culture",
"economics",
"financials",
"politics",
"stem",
"sports"
],
"type": "string",
"description": "Category to analyze. Omit to get platform-wide totals across all categories."
},
"platform": {
"enum": [
"polymarket",
"kalshi"
],
"type": "string",
"description": "Filter to one platform."
},
"time_range": {
"enum": [
"7d",
"30d",
"90d",
"180d",
"1y"
],
"type": "string",
"default": "30d",
"description": "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. Defaults to \"30d\"."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
Result schema
Output fields have not been documented yet.
Additional notes
Analyze prediction-market totals, trends and momentum for selected filters
How to use this Tool
Use the deployed input fields below. Required fields must be supplied; optional filters narrow the result.
queryParams.limit (Optional): Limit for momentum markets list. Defaults to 20.
queryParams.order (Optional): Sort direction. Defaults to "desc".
queryParams.top_n (Optional): Number of top markets to include. Defaults to 10.
queryParams.offset (Optional): Pagination offset for momentum markets. Defaults to 0.
queryParams.sort_by (Optional): Sort field for momentum markets. Defaults to "volume_7d".
queryParams.category (Optional): Category to analyze. Omit to get platform-wide totals across all categories.
queryParams.platform (Optional): Filter to one platform.
queryParams.time_range (Optional): 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. Defaults to "30d".
What this Tool returns
Returns aggregate categories, top markets, momentum markets and momentum-summary counts under the selected filters.
Response fields and how to read them
The table follows the official response contract, including nested fields and useful response metadata. [] denotes an array item. Required means required within its parent object, not that a conditional parent always exists. A nullable type permits null; an optional field can be absent. Use the documented conditions below to distinguish missing, empty and zero values. Units and reporting windows apply only where explicitly documented.
Field, type and presence
Meaning and conditions
data.category_trends
array | null; Required within parent
Daily volume/OI time series by platform. When category is omitted, values are summed across all categories.
data.category_trends.[].market_count
integer; Required within parent; format: int64
Number of active markets
data.category_trends.[].open_interest_usd
number; Required within parent; format: double
Cumulative open interest (USD)
data.category_trends.[].source
string; Required within parent
Polymarket or Kalshi
data.category_trends.[].timestamp
integer; Required within parent; format: int64
Day start Unix timestamp
data.category_trends.[].volume_usd
number; Required within parent; format: double
Daily notional volume (USD)
data.momentum_markets
array | null; Required within parent
Per-market momentum signals sorted by sort_by
data.momentum_markets.[].category
string; Required within parent
Surf-curated category
data.momentum_markets.[].condition_id
string; Required within parent
Polymarket condition ID
data.momentum_markets.[].latest_price
number; Required within parent; format: double
Latest YES price (0-1)
data.momentum_markets.[].oi_change_7d
number; Required within parent; format: double
7-day open interest change (USD)
data.momentum_markets.[].price_change_7d
number; Required within parent; format: double
7-day price change
data.momentum_markets.[].price_momentum
string; Required within parent
CONFIRMING_UP, CONFIRMING_DOWN, DIVERGING_UP, DIVERGING_DOWN, or NEUTRAL
data.momentum_markets.[].question
string; Required within parent
Market question text
data.momentum_markets.[].smart_money_direction
string; Required within parent
BULLISH, BEARISH, or NEUTRAL
data.momentum_markets.[].smart_wallets_involved
integer; Required within parent; format: int64
Number of smart wallets with positions
data.momentum_markets.[].subcategory
string; Optional within parent
Surf-curated subcategory
data.momentum_markets.[].volume_7d
number; Required within parent; format: double
7-day volume (USD)
data.momentum_markets.[].volume_direction
string; Required within parent
INCREASING, STABLE, or DECREASING
data.momentum_markets.[].whale_flow_net_1d
number; Required within parent; format: double
Net whale flow (USD) last 24h
data.momentum_markets.[].whale_flow_net_7d
number; Required within parent; format: double
Net whale flow (USD) last 7 days
data.momentum_summary
object; Required within parent
Distribution of momentum signals (within category, or globally when category is omitted)
data.momentum_summary.confirming_down
integer; Required within parent; format: int64
Price down + volume up
data.momentum_summary.confirming_up
integer; Required within parent; format: int64
Price up + volume up
data.momentum_summary.diverging_down
integer; Required within parent; format: int64
Price down + volume down
data.momentum_summary.diverging_up
integer; Required within parent; format: int64
Price up + volume down
data.momentum_summary.neutral
integer; Required within parent; format: int64
No clear momentum
data.momentum_summary.total_active
integer; Required within parent; format: int64
Total active markets (in category, or globally when category is omitted)
data.momentum_summary.volume_decreasing
integer; Required within parent; format: int64
Markets with decreasing volume
data.momentum_summary.volume_increasing
integer; Required within parent; format: int64
Markets with increasing volume
data.top_markets
array | null; Required within parent
Top markets by open interest (within category, or globally when category is omitted)
data.top_markets.[].category
string; Required within parent
Surf-curated category
data.top_markets.[].condition_id
string; Optional within parent
Polymarket condition ID
data.top_markets.[].days_to_resolution
integer; Optional within parent; format: int64
Days until market end date
data.top_markets.[].event_group_slug
string; Optional within parent
Canonical Polymarket event group slug for sibling event pages
data.top_markets.[].event_slug
string; Optional within parent
Polymarket event slug
data.top_markets.[].event_ticker
string; Optional within parent
Kalshi event ticker
data.top_markets.[].event_title
string; Optional within parent
Event title
data.top_markets.[].latest_price
number; Optional within parent; format: double
Probability (0-1) for token_id/outcome_label from realtime price store. Omitted when no selected outcome token is available.
data.top_markets.[].market_link
string; Optional within parent
Direct link to market
data.top_markets.[].market_slug
string; Optional within parent
Polymarket market slug
data.top_markets.[].market_ticker
string; Optional within parent
Kalshi market ticker
data.top_markets.[].matched_counterpart
string; Optional within parent
Matching market ID on the other platform
data.top_markets.[].open_interest_usd
number; Required within parent; format: double
Current open interest (USD)
data.top_markets.[].outcome_label
string; Optional within parent
Polymarket selected outcome label
data.top_markets.[].platform
string; Required within parent
polymarket or kalshi
data.top_markets.[].question
string; Required within parent
Market question text
data.top_markets.[].smart_money_direction
string; Optional within parent
BULLISH, BEARISH, or NEUTRAL (Polymarket only)
data.top_markets.[].status
string; Required within parent
Market status
data.top_markets.[].subcategory
string; Optional within parent
Surf-curated subcategory
data.top_markets.[].token_id
string; Optional within parent
Polymarket selected outcome token ID
data.top_markets.[].trade_count_7d
integer; Required within parent; format: int64
Number of trades last 7 days
data.top_markets.[].volume_1d
number; Required within parent; format: double
Notional volume last 24h (USD)
data.top_markets.[].volume_30d
number; Required within parent; format: double
Notional volume last 30 days (USD)
data.top_markets.[].volume_7d
number; Required within parent; format: double
Notional volume last 7 days (USD)
meta.cached
boolean; Required within parent
Whether this response was served from cache
meta.credits_used
integer; Required within parent; format: int64
Credits deducted for this request
meta.empty_reason
string; Optional within parent
Hint explaining why the data array is empty, when applicable
Coverage, units and freshness
Totals follow the selected filters; a crypto-category result is not the entire platform. Momentum labels describe the supplier's model, not predicted returns.
Inspect any returned observation time, cache status, watermark, pagination and errors using their documented meanings. A successful request alone does not establish complete coverage. Where no freshness or completeness guarantee is documented, treat it as unknown. Saved Examples are historical and viewing them does not refresh data or execute a new call.
Data source and references
Surf supplies this endpoint through its Data API. Response contract and deployed Tool inputs reviewed on 2026-10-03 against official OpenAPI v0.2.102. This is a contract review date, not a data observation time. Coverage depends on the selected endpoint and request.
Use one Toolmu account and a shared prepaid balance across available Tools. Pay per use; no separate supplier subscription is required. The current execution ceiling for this Tool is 0.0288 Toolmu credits per call. This is a maximum, not the settled charge. Before execution, get the current Tool contract and check availability, the latest maximumCredits, your balance and budget. Supplier response credits_used, when present, describes supplier API credits and is not the Toolmu customer charge.
Choose a platform
Use [Polymarket] or [Kalshi]. Leave it out if you want results across all available platforms.
Choose [politics] and [the past 30 days] for a category trend. Leave the topic out to see all categories.
Summarize [Polymarket or Kalshi] prediction markets in [politics]. Show category trends for [the past 30 days] and list the 10 most traded markets over [this week]. If I omit platform or topic, include all available data. Label each time period; recent activity does not forecast returns.
See the busiest markets
Ask for [the 10 markets with the most trading this week], or [the markets with the biggest price changes this week].
Questions about this tool.
Inputs, results and details to know before running it.
queryParams.limit (Optional): Limit for momentum markets list. Defaults to 20. queryParams.order (Optional): Sort direction. Defaults to "desc". queryParams.top_n (Optional): Number of top markets to include. Defaults to 10. queryParams.offset (Optional): Pagination offset for momentum markets. Defaults to 0. queryParams.sort_by (Optional): Sort field for momentum markets. Defaults to "volume_7d". queryParams.category (Optional): Category to analyze. Omit to get platform-wide totals across all categories. queryParams.platform (Optional): Filter to one platform. queryParams.time_range (Optional): 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. Defaults to "30d".
Returns aggregate categories, top markets, momentum markets and momentum-summary counts under the selected filters.
Totals follow the selected filters; a crypto-category result is not the entire platform. Momentum labels describe the supplier's model, not predicted returns.
Use one Toolmu account and a shared prepaid balance across available Tools. Pay per use; no separate supplier subscription is required. The current execution ceiling for this Tool is 0.0288 Toolmu credits per call. This is a maximum, not the settled charge. Before execution, get the current Tool contract and check availability, the latest maximumCredits, your balance and budget. Supplier response credits_used, when present, describes supplier API credits and is not the Toolmu customer charge.
Ask your agent to Analyze prediction-market totals, trends and momentum for selected filters. Provide the required inputs above. If Toolmu is already connected, reuse that connection; otherwise use the setup instructions on this page. Before a paid execution, the agent must read the current Tool contract and check availability, the credit ceiling, balance, budget and your authorization. It should then execute the Tool and explain the returned fields and limitations.
Inspect any returned observation time, cache status, watermark, pagination and errors using their documented meanings. A successful request alone does not establish complete coverage. Where no freshness or completeness guarantee is documented, treat it as unknown. Saved Examples are historical and viewing them does not refresh data or execute a new call.