Every MLB Betting Market in the SockOdds API
Winner, run line, totals, the first five innings and batter and pitcher markets for MLB, with the keys to request each one.
MLB is in SockOdds API v1 under the league key mlb (sport key baseball). 19 market types apply to it: the game lines, team totals, the first five innings, and player markets for batters and pitchers.
As of 30 October 2026, 19 bookmakers, exchanges and prediction markets were delivering MLB prices: Sportsbet, Unibet, Dabble, DraftKings, FanDuel, BetMGM, Kalshi, Polymarket, Bally Bet, BearBet, BetFocus, BetRivers, CashCage, Hard Rock Bet, LightningBet, Mintbet, ProphetX, TABtouch and theScore Bet. That mixes Australian bookmakers with US sportsbooks and prediction markets, so one request can put a Sportsbet price next to a US book's and a prediction market's.
Every MLB market type
The table comes from the API's own catalogue. A bookmaker quotes the markets it offers for each game, so a type being listed means you can ask for it, not that every bookmaker prices it every game.
Game markets
| Market | Key | Sides | Line | Periods |
|---|---|---|---|---|
| Winner | winner | home, away, competitor_1, competitor_2 | No | full, innings_1_to_5 |
| Result (with the draw) | result | home, draw, away | No | full, inning_1, innings_1_to_5 |
| Handicap | handicap | home, away, competitor_1, competitor_2 | Yes | full, innings_1_to_5 |
| Total runs | total_runs | over, under | Yes | full, innings_1_to_5, inning_1 |
Team markets
| Market | Key | Sides | Line | Periods |
|---|---|---|---|---|
| Team runs over/under | team_runs_over_under | over, under | Yes | full, innings_1_to_5, inning_1 |
Player markets
| Market | Key | Sides | Line | Periods |
|---|---|---|---|---|
| Player hits over/under | player_hits_over_under | over, under | Yes | full |
| To hit a home run | player_home_runs_anytime | yes, no | No | full |
| Player home runs over/under | player_home_runs_over_under | over, under | Yes | full |
| Player hits + runs + runs batted in over/under | player_hits_runs_runs_batted_in_over_under | over, under | Yes | full |
| Player total bases over/under | player_total_bases_over_under | over, under | Yes | full |
| Player runs batted in over/under | player_runs_batted_in_over_under | over, under | Yes | full |
| Player runs over/under | player_runs_over_under | over, under | Yes | full |
| Player strikeouts (as a batter) over/under | player_strikeouts_over_under | over, under | Yes | full |
| Pitcher strikeouts thrown over/under | player_strikeouts_thrown_over_under | over, under | Yes | full |
| Pitcher hits allowed over/under | player_hits_allowed_over_under | over, under | Yes | full |
| Pitcher earned runs allowed over/under | player_earned_runs_allowed_over_under | over, under | Yes | full |
| Pitcher outs recorded over/under | player_outs_recorded_over_under | over, under | Yes | full |
| Player stolen bases over/under | player_stolen_bases_over_under | over, under | Yes | full |
| Player batter walks over/under | player_walks_over_under | over, under | Yes | full |
Reading baseball markets
winneris the moneyline: sideshomeandaway.handicapis the run line. Each outcome carries its own line, so the favourite might behomeat-1.5and the underdogawayat1.5.total_runsis the game total;team_runs_over_underis one team's total, with the team as the market'ssubject.- Periods are
fullandinnings_1_to_5. The first five innings markets are the same market types on theinnings_1_to_5period, sowinneroninnings_1_to_5is the first five moneyline. Checkperiodbefore you compare two prices.
Prices are decimal, exactly as each bookmaker showed them, US sportsbooks included. The API never converts or rounds them, and it has no American odds field. If your users read American odds, convert at display time (odds format conversion has the formulas).
Batter and pitcher markets
Player markets are over/under markets on one player, who is the market's subject with a pl_ id that stays the same across bookmakers and games:
- batters: hits, total bases, runs batted in, runs, strikeouts, and the anytime home run (
player_home_runs_anytime, sideyes); - pitchers: strikeouts thrown, hits allowed, earned runs allowed and outs recorded.
An "N or more" bet is the over at N minus 0.5: two or more hits is player_hits_over_under over 1.5. Ask for the ones you want with markets=, up to 20 keys at once.
Moneyline across every book
This program reads the next MLB game's moneyline at every bookmaker your plan includes, regroups each outcome's prices by bookmaker key, and prints each bookmaker's prices with the moment the first was seen:
const response = await fetch(`https://api.sockodds.com/v1/odds?league=mlb&markets=winner&limit=1&starts_after=${new Date().toISOString().slice(0, 19)}Z`, {
headers: { Authorization: `Bearer ${process.env.SOCKODDS_API_KEY}` },
});
const body = await response.json();
for (const event of body.data) {
console.log(`${event.name}, ${event.scheduled_start}`);
// One line per bookmaker: collect each bookmaker's price on every side of the full game market.
const rows = new Map();
for (const market of event.markets) {
if (market.period !== "full") continue;
for (const o of market.outcomes) {
for (const price of o.prices) {
const row = rows.get(price.bookmaker) ?? { prices: [], seen: price.observed_at };
row.prices.push(`${o.name} ${price.decimal_odds.toFixed(2)}`);
rows.set(price.bookmaker, row);
}
}
}
for (const [bookmaker, row] of rows) {
console.log(` ${bookmaker}: ${row.prices.join(", ")} (seen ${row.seen})`);
}
}import json, os, urllib.request
from datetime import datetime, timezone
request = urllib.request.Request(
f"https://api.sockodds.com/v1/odds?league=mlb&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:
body = json.load(response)
for event in body["data"]:
print(f"{event['name']}, {event['scheduled_start']}")
# One line per bookmaker: collect each bookmaker's price on every side of the full game market.
rows = {}
for market in event["markets"]:
if market["period"] != "full":
continue
for o in market["outcomes"]:
for price in o["prices"]:
row = rows.setdefault(price["bookmaker"], {"prices": [], "seen": price["observed_at"]})
row["prices"].append(f"{o['name']} {price['decimal_odds']:.2f}")
for bookmaker, row in rows.items():
print(f" {bookmaker}: {', '.join(row['prices'])} (seen {row['seen']})")Output from a local copy of the API with invented test prices
Arizona Diamondbacks v Athletics, 2026-10-16T15:00:00.000Z
bally_bet: Arizona Diamondbacks 1.81, Athletics 2.23 (seen 2026-10-15T07:58:00.000Z)
thescore_bet: Arizona Diamondbacks 1.81, Athletics 2.23 (seen 2026-10-15T07:58:00.000Z)
fanduel: Arizona Diamondbacks 1.77, Athletics 2.18 (seen 2026-10-15T07:58:00.000Z)
unibet: Arizona Diamondbacks 1.77, Athletics 2.18 (seen 2026-10-15T07:58:00.000Z)
betrivers: Arizona Diamondbacks 1.74, Athletics 2.14 (seen 2026-10-15T07:58:00.000Z)
draftkings: Arizona Diamondbacks 1.72, Athletics 2.12 (seen 2026-10-15T07:58:00.000Z)
sportsbet: Arizona Diamondbacks 1.72, Athletics 2.12 (seen 2026-10-15T07:58:00.000Z)
dabble: Arizona Diamondbacks 1.69, Athletics 2.08 (seen 2026-10-15T07:58:00.000Z)
hard_rock_bet: Arizona Diamondbacks 1.69, Athletics 2.08 (seen 2026-10-15T07:58:00.000Z)
betmgm: Arizona Diamondbacks 1.65, Athletics 2.04 (seen 2026-10-15T07:58:00.000Z)The output comes from a local copy of the API with invented prices.
Which plan
MLB is on every plan, the free Developer plan included. Each plan reads a set of bookmakers, and a response holds those of them that are pricing the game: the Developer plan's are Sportsbet, TAB and Ladbrokes, Rookie adds more, and Pro includes every bookmaker we deliver, with recorded price history and the odds stream. See pricing and the MLB page.
Next
SockOdds provides data only. It does not offer tips or predictions on any game.