Prediction market API
Prediction markets and exchanges in the same responses as bookmakers.
Prediction markets price the same games as bookmakers. In SockOdds they are bookmakers with their own keys, so their prices sit in the same responses as everyone else's, as decimal prices with the time we saw them. Kalshi, Fanatics Markets and Polymarket are delivered as of 30 October 2026.
Kalshi
Key kalshi. Delivered for Bundesliga, English Premier League, La Liga, Ligue 1, MLB, MLS, NBA, College football, NFL, NHL and Serie A.
Fanatics Markets
Key fanatics_markets. Delivered for NBA, College football, NFL and NHL.
Polymarket
Key polymarket. Delivered for Bundesliga, English Premier League, La Liga, Ligue 1, MLB, MLS, NBA, College football, NFL and NHL.
Betting exchanges are delivered the same way: Betfair Exchange, Matchbook, ProphetX, Novig and BetOpenly.
Compare a prediction market with bookmakers
Ask for one game's prices from a prediction market and a bookmaker side by side with bookmakers=:
curl -sS "https://api.sockodds.com/v1/odds?league=ncaaf&bookmakers=kalshi,betr&markets=winner&limit=1&starts_after=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
-H "Authorization: Bearer $SOCKODDS_API_KEY"const response = await fetch(`https://api.sockodds.com/v1/odds?league=ncaaf&bookmakers=kalshi,betr&markets=winner&limit=1&starts_after=${new Date().toISOString().slice(0, 19)}Z`, {
headers: { Authorization: `Bearer ${process.env.SOCKODDS_API_KEY}` },
});
console.log(JSON.stringify(await response.json(), null, 2));import json, os, urllib.request
from datetime import datetime, timezone
request = urllib.request.Request(
f"https://api.sockodds.com/v1/odds?league=ncaaf&bookmakers=kalshi,betr&markets=winner&limit=1&starts_after={datetime.now(timezone.utc):%Y-%m-%dT%H:%M:%SZ}",
headers={"Authorization": "Bearer " + os.environ["SOCKODDS_API_KEY"]},
)
with urllib.request.urlopen(request) as response:
print(json.dumps(json.load(response), indent=2))Response from a local copy of the API with invented test prices
{
"data": [
{
"id": "ev_000ckk0nc1tg",
"name": "Abilene Christian Wildcats v Air Force Falcons",
"league": {
"key": "ncaaf",
"name": "College football"
},
"scheduled_start": "2026-10-16T19:00:00.000Z",
"status": "scheduled",
"participants": [
{
"role": "away",
"identity": {
"key": "air_force_falcons",
"name": "Air Force Falcons"
}
},
{
"role": "home",
"identity": {
"key": "abilene_christian_wildcats",
"name": "Abilene Christian Wildcats"
}
}
],
"markets": [
{
"id": "mk_qpcfjj74vm67qng3",
"key": "winner",
"name": "Winner",
"period": "full",
"subject": null,
"alternate": false,
"outcomes": [
{
"id": "oc_2eq7ejh9tvepckre",
"name": "Abilene Christian Wildcats",
"side": "home",
"line": null,
"prices": [
{
"bookmaker": "betr",
"decimal_odds": 1.77,
"implied_probability": 0.564972,
"available": true,
"observed_at": "2026-10-15T07:58:00.000Z"
},
{
"bookmaker": "kalshi",
"decimal_odds": 1.69,
"implied_probability": 0.591716,
"available": true,
"observed_at": "2026-10-15T07:58:00.000Z"
}
]
},
{
"id": "oc_43ctd7dv6hy4dqjz",
"name": "Air Force Falcons",
"side": "away",
"line": null,
"prices": [
{
"bookmaker": "betr",
"decimal_odds": 2.18,
"implied_probability": 0.458716,
"available": true,
"observed_at": "2026-10-15T07:58:00.000Z"
},
{
"bookmaker": "kalshi",
"decimal_odds": 2.08,
"implied_probability": 0.480769,
"available": true,
"observed_at": "2026-10-15T07:58:00.000Z"
}
]
}
]
}
]
}
],
"meta": {
"count": 1,
"cursor": null
},
"links": {
"next": null
}
}Things to know
- A prediction market's price is shown in decimal like any other bookmaker's.
- Prediction markets may list a game under different rules from a bookmaker. Read each market's period before comparing.
- Prices move. Comparing them is research, not advice. SockOdds is data and analytics only.