Kalshi API: Search markets
Find Kalshi prediction events about a topic, ranked by total contracts traded, with Yes prices, outcome volumes and status. Settled chances show the resolved result; closed outcomes have no live buy or sell prices. Older closed markets may lack 24-hour volume; very broad searches cover up to 1,000 matches.
Unofficial. Not affiliated with or endorsed by Kalshi.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Topic, required
topic Words describing the event, for example Fed rate decision.
Super Bowl
- Max Results optional
max_results Maximum number of events, for example 5.
3
Whole number from 1 to 20. Default
5.- Include Closed optional
include_closed Include closed and settled events, for example true.
true
True or false. Default
false.
Input as JSON
{ "topic": "Super Bowl", "max_results": 3, "include_closed": true}Output
{ "events": [ { "link": "https://kalshi.com/markets/kxsb/super-bowl/kxsb-26" , "title": "2026 Pro Football Championship: Seattle vs New England", "volume": 358758507, "category": "Sports", "outcomes": [ { "name": "Seattle", "status": "settled", "volume": 85214022, "volume_24h": null, "market_ticker": "KXSB-26-SEA", "chance_percent": 100, "yes_buy_price_usd": null, "yes_sell_price_usd": null }, { "name": "New England", "status": "settled", "volume": 158189302, "volume_24h": null, "market_ticker": "KXSB-26-NE", "chance_percent": 0, "yes_buy_price_usd": null, "yes_sell_price_usd": null }, { "name": "Denver", "status": "settled", "volume": 13124987, "volume_24h": null, "market_ticker": "KXSB-26-DEN", "chance_percent": 0, "yes_buy_price_usd": null, "yes_sell_price_usd": null } ], "close_time": "2026-02-09T03:24:32Z", "event_ticker": "KXSB-26" }, { "link": "https://kalshi.com/markets/kxsb/super-bowl/kxsb-27" , "title": "2027 Pro Football Champion", "volume": 146486249, "category": "Sports", "outcomes": [ { "name": "Buffalo", "status": "open", "volume": 8072219.98, "volume_24h": 115812.1, "market_ticker": "KXSB-27-BUF", "chance_percent": 14, "yes_buy_price_usd": 0.14, "yes_sell_price_usd": 0.12 }, { "name": "Los Angeles R", "status": "open", "volume": 9477101.3, "volume_24h": 84191.06, "market_ticker": "KXSB-27-LAR", "chance_percent": 12, "yes_buy_price_usd": 0.12, "yes_sell_price_usd": 0.11 }, { "name": "San Francisco", "status": "open", "volume": 8245743.68, "volume_24h": 171343.55, "market_ticker": "KXSB-27-SF", "chance_percent": 10, "yes_buy_price_usd": 0.1, "yes_sell_price_usd": 0.09 } ], "close_time": "2029-02-13T23:30:00Z", "event_ticker": "KXSB-27" }, { "link": "https://kalshi.com/markets/kxfirstsuperbowlsong/what-will-be-the-first-super-bowl-song-played-during-halfitme/kxfirstsuperbowlsong-26feb09" , "title": "Bad Bunny’s halftime opener?", "volume": 113517455, "category": "Entertainment", "outcomes": [ { "name": "Tití Me Preguntó", "status": "settled", "volume": 14658162, "volume_24h": null, "market_ticker": "KXFIRSTSUPERBOWLSONG-26FEB09-TIT", "chance_percent": 100, "yes_buy_price_usd": null, "yes_sell_price_usd": null }, { "name": "Chambea", "status": "settled", "volume": 10461699, "volume_24h": null, "market_ticker": "KXFIRSTSUPERBOWLSONG-26FEB09-CHA", "chance_percent": 0, "yes_buy_price_usd": null, "yes_sell_price_usd": null }, { "name": "MONACO", "status": "settled", "volume": 10262477, "volume_24h": null, "market_ticker": "KXFIRSTSUPERBOWLSONG-26FEB09-MON", "chance_percent": 0, "yes_buy_price_usd": null, "yes_sell_price_usd": null } ], "close_time": "2026-02-09T01:27:10Z", "event_ticker": "KXFIRSTSUPERBOWLSONG-26FEB09" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"kalshi.com/search_markets","input":{"topic":"Super Bowl","max_results":3,"include_closed":true}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "kalshi.com/search_markets" , "input": { "topic": "Super Bowl", "max_results": 3, "include_closed": True }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "kalshi.com/search_markets" , "input": { "topic": "Super Bowl", "max_results": 3, "include_closed": true } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run kalshi.com/search_markets# with {"topic":"Super Bowl","max_results":3,"include_closed":true}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "topic" ], "properties": { "topic": { "type": "string", "minLength": 1, "description": "Words describing the event, for example Fed rate decision." }, "max_results": { "type": "integer", "default": 5, "maximum": 20, "minimum": 1, "description": "Maximum number of events, for example 5." }, "include_closed": { "type": "boolean", "default": false, "description": "Include closed and settled events, for example true." } }}Output schema
{ "type": "object", "required": [ "events" ], "properties": { "events": { "type": "array", "items": { "type": "object", "required": [ "title", "category", "close_time", "link", "volume", "event_ticker", "outcomes" ], "properties": { "link": { "type": "string" }, "title": { "type": "string" }, "volume": { "type": [ "number", "null" ] }, "category": { "type": [ "string", "null" ] }, "outcomes": { "type": "array", "items": { "type": "object", "required": [ "name", "chance_percent", "yes_buy_price_usd", "yes_sell_price_usd", "volume", "volume_24h", "status", "market_ticker" ], "properties": { "name": { "type": "string" }, "status": { "enum": [ "open", "closed", "settled" ], "type": "string" }, "volume": { "type": [ "number", "null" ] }, "volume_24h": { "type": [ "number", "null" ] }, "market_ticker": { "type": "string" }, "chance_percent": { "type": [ "number", "null" ] }, "yes_buy_price_usd": { "type": [ "number", "null" ] }, "yes_sell_price_usd": { "type": [ "number", "null" ] } }, "additionalProperties": false } }, "close_time": { "type": [ "string", "null" ] }, "event_ticker": { "type": "string" } }, "additionalProperties": false }, "description": "Matching Kalshi events sorted by total trading volume, highest first." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
kalshi.com/search_markets- Returns
- events with title, category, close time, link, volume and outcomes (chance, Yes buy/sell price, volume, 24h volume, status)
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method kalshi.com/search_markets with the inputs above.
Ask your agent
- What are the odds traders are giving on the next Fed rate decision? Show me the top 5 Kalshi markets by volume with Yes prices.
- Find the most heavily traded prediction markets on who will win the 2028 presidential election, top 10 please.
- I want to see past and settled markets about Bitcoin hitting $150k, including how they resolved. Give me up to 8.
- Pull the 3 most active prediction events on whether a government shutdown happens this year, with chance and 24h volume for each outcome.
- Search kalshi.com for Super Bowl winner markets, include closed ones too, and list outcome prices and status for the top 15.
See more
Finds Polymarket prediction markets about a topic, ranked by total trading volume, with outcome chances and market details.
polymarket.com/search_marketsLists the open Polymarket markets with the most trading in the last 24 hours. You can pick one category or list all of them; markets outside the named categories are labeled Other.
polymarket.com/list_trending_marketsShows how a Polymarket outcome's chance changed over time, from a market question or a Polymarket link. For a text question it uses the highest-volume matching market.
polymarket.com/get_odds_historyLists the most-watched live Kick streams right now, optionally in one category and language, sorted by current viewers.
kick.com/list_live_streamsSearches OpenAlex scholarly works by topic, with optional institution, publication-year and open-access filters, ranked by relevance, citations or newest date.
openalex.org/search_papersFinds public Kaggle datasets on a topic, with size, file formats, usability, popularity and license. Lists at most 100 results in Kaggle's order; files are not downloaded.
kaggle.com/search_datasetsFinds publicly listed stocks in a country, filtered by sector, US-dollar market cap band and minimum dividend yield, in the requested order. Quotes may be delayed.
tradingview.com/screen_stocksLists US IPOs from a chosen year, newest first. Each IPO comes with its IPO price, current price and return since IPO. Coverage begins in 2019.
stockanalysis.com/list_recent_ipos