Every Premier League Betting Market in the SockOdds API
Result, double chance, draw no bet, totals, corners, cards and player markets for the English Premier League, with the keys to request each one.
The English Premier League is in SockOdds API v1 under the league key epl. It is soccer (sport key soccer), which has the widest market catalogue in the API: 63 market types apply to the Premier League, from the three-way result to corners, cards, exact scores and player markets for goals, shots, assists, tackles and saves.
As of 30 October 2026, 18 bookmakers, exchanges and prediction markets were delivering Premier League prices: Sportsbet, TAB, Neds, PointsBet, Unibet, Betfair Exchange, Pinnacle, Dabble, Betr, Kalshi, Polymarket, Matchbook, BetDeluxe, BetFocus, Mintbet, ProphetX, SwiftBet and TABtouch. Australian bookmakers sit next to exchanges and prediction markets in the same response, each under its own key.
Every Premier League 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 week.
Game markets
| Market | Key | Sides | Line | Periods |
|---|---|---|---|---|
| Either of two results | result_pair | home_or_draw, away_or_draw, either_team | No | full, half_1, half_2 |
| Total goals odd/even | total_goals_odd_even | odd, even | No | full, half_1, half_2 |
| Total corners odd/even | total_corners_odd_even | odd, even | No | full |
| Half-time/full-time | result_half_time_full_time | home_home, home_draw, home_away, draw_home, draw_draw, draw_away, away_home, away_draw, away_away | No | full |
| Exact score | result_exact_score | Each exact score | No | full, half_1, half_2 |
| Result (with the draw) | result | home, draw, away | No | full, half_1, half_2 |
| Both teams to score | both_teams_to_score | yes, no | No | full, half_1, half_2 |
| Result (draw no bet) | result_draw_no_bet | home, away | No | full, half_1, half_2 |
| Handicap | handicap | home, away, competitor_1, competitor_2 | Yes | full, half_1, half_2 |
| Total goals | total_goals | over, under | Yes | full, half_1, half_2 |
| Total corners | total_corners | over, under | Yes | full, half_1, half_2 |
| Total cards | total_cards | over, under | Yes | full |
| Total cards (a straight red counts one) | total_cards_single | over, under | Yes | full |
| Three-way handicap (home line) | result_handicap | home, draw, away | Yes | full, half_1, half_2 |
| A goal in both halves | goal_in_both_halves | yes, no | No | full |
| Both teams to score in both halves | both_teams_to_score_both_halves | yes, no | No | full |
| Both teams over (goals) | both_teams_goals_over | yes, no | Yes | full |
| Both teams over (cards) | both_teams_cards_over | yes, no | Yes | full |
| Highest-scoring half | highest_scoring_half | half_1, half_2, tie | No | full |
| Half of the first goal | first_goal_half | half_1, half_2, no_goal | No | full |
| Which teams score | which_teams_score | both_teams, home_only, away_only, neither_team | No | full |
| An own goal is scored | own_goal | yes, no | No | full |
| First team to score | first_team_to_score | home, away | No | full, half_1, half_2 |
| Last team to score | last_team_to_score | home, away | No | full |
| Most corners | result_corners | home, draw, away | No | full, half_1 |
| Corners handicap | handicap_corners | home, away | Yes | full |
| Corners three-way handicap (home line) | result_handicap_corners | home, draw, away | Yes | full |
| Most cards | result_cards | home, draw, away | No | full |
| Cards three-way handicap (home line) | result_handicap_cards | home, draw, away | Yes | full |
| Total shots on target | total_shots_on_target | over, under | Yes | full |
| Total saves | total_saves | over, under | Yes | full |
Team markets
| Market | Key | Sides | Line | Periods |
|---|---|---|---|---|
| Team goals odd/even | team_goals_odd_even | odd, even | No | full, half_1, half_2 |
| Team corners odd/even | team_corners_odd_even | odd, even | No | full |
| Team goals over/under | team_goals_over_under | over, under | Yes | full, half_1, half_2 |
| Team corners over/under | team_corners_over_under | over, under | Yes | full, half_1, half_2 |
| Team shots on target over/under | team_shots_on_target_over_under | over, under | Yes | full |
| Team saves over/under | team_saves_over_under | over, under | Yes | full |
| Team cards over/under | team_cards_over_under | over, under | Yes | full |
| Team wins either half | team_win_either_half_yes_no | yes, no | No | full |
| Team wins both halves | team_win_both_halves_yes_no | yes, no | No | full |
| Team scores in both halves | team_goal_in_both_halves_yes_no | yes, no | No | full |
| Team keeps a clean sheet | team_clean_sheet_yes_no | yes, no | No | full |
Player markets
| Market | Key | Sides | Line | Periods |
|---|---|---|---|---|
| Anytime goal scorer | player_goals_anytime | yes | No | full |
| First goal scorer | player_goals_first | Each competitor | No | full |
| Last goal scorer | player_goals_last | Each competitor | No | full |
| Player goals over/under | player_goals_over_under | over, under | Yes | full |
| Player tackles over/under | player_tackles_over_under | over, under | Yes | full |
| Player shots over/under | player_shots_over_under | over, under | Yes | full |
| Player shots on target over/under | player_shots_on_target_over_under | over, under | Yes | full |
| Anytime assist | player_assists_anytime | yes | No | full |
| To be carded | player_cards_anytime | yes | No | full |
| Player saves over/under | player_saves_over_under | over, under | Yes | full |
| Assist, starter only | player_assists_starter_anytime | yes | No | including_extra_time |
| First goalscorer, starter only | player_goals_starter_first | yes | No | including_extra_time |
| Last goalscorer, starter only | player_goals_starter_last | yes | No | including_extra_time |
| Goals, starter only | player_goals_starter_anytime | yes | No | including_extra_time |
| Goals or assists, starter only | player_goals_assists_starter_anytime | yes | No | including_extra_time |
| Booked, starter only | player_cards_starter_anytime | yes | No | including_extra_time |
| Shots on target, starter only | player_shots_on_target_starter_over_under | over, under | Yes | including_extra_time |
| Shots, starter only | player_shots_starter_over_under | over, under | Yes | including_extra_time |
| Fouls committed, starter only | player_fouls_committed_starter_over_under | over, under | Yes | including_extra_time |
| Tackles, starter only | player_tackles_starter_over_under | over, under | Yes | including_extra_time |
| Times fouled, starter only | player_fouled_starter_over_under | over, under | Yes | including_extra_time |
Reading soccer markets
Soccer has three outcomes where most sports have two, and the catalogue names them plainly:
resultis the three-way market: sideshome,drawandaway. It settles on the market's period:fullis the whole match,half_1andhalf_2the halves.result_pairis double chance:home_or_draw,away_or_drawandeither_team.result_draw_no_betreturns your stake on a draw.result_exact_scorehas one outcome per score, so its sides are the scores themselves.handicapis the goal line, with each outcome carrying its own figure:homeat-0.5withawayat0.5, for example.total_goals,total_cornersandtotal_cardsare over/under markets with a line on each outcome;team_goals_over_underandteam_corners_over_underare the same for one team, which is the market'ssubject.- The odd/even markets (
total_goals_odd_evenand friends) have sidesoddandeven.
Periods are full, half_1 and half_2. Check period on every market before you compare two prices: a first-half result and a full-time result are different bets.
Player markets
Goalscorer markets come in three forms. player_goals_anytime is one market per player with side yes. player_goals_first and player_goals_last are runner markets: one outcome per player, and the outcome's side is the player's id. Shots, shots on target, tackles and saves are over/under markets on one player, who is the market's subject. "N or more" bets, such as two or more shots on target, arrive as the over at N minus 0.5.
The same player keeps the same pl_ id across bookmakers and games, and one player's shots line at every bookmaker comes back as one market, with each bookmaker's price under its outcomes.
Compare the result across bookmakers
Because market and outcome ids are shared, each outcome appears once with every bookmaker's price on it, sorted best first, so a best-price board reads the first price on each outcome. This program reads the next Premier League game's result market from every Australian bookmaker quoting it and prints the highest price for each outcome:
const response = await fetch(`https://api.sockodds.com/v1/odds?league=epl&markets=result®ions=au&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}`);
for (const market of event.markets) {
if (market.period !== "full") continue;
for (const outcome of market.outcomes) {
const best = outcome.prices[0]; // prices are sorted best first
console.log(` ${outcome.name}: ${best.decimal_odds.toFixed(2)} at ${best.bookmaker}`);
}
}
}import json, os, urllib.request
from datetime import datetime, timezone
request = urllib.request.Request(
f"https://api.sockodds.com/v1/odds?league=epl&markets=result®ions=au&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']}")
for market in event["markets"]:
if market["period"] != "full":
continue
for outcome in market["outcomes"]:
best = outcome["prices"][0] # prices are sorted best first
print(f" {outcome['name']}: {best['decimal_odds']:.2f} at {best['bookmaker']}")Output from a local copy of the API with invented test prices
AFC Bournemouth v Arsenal, 2026-10-16T12:00:00.000Z
AFC Bournemouth: 2.11 at tab
Draw: 3.50 at tab
Arsenal: 3.71 at tabThe output comes from a local copy of the API with invented prices. Prices move, so check observed_at before you act on one.
Which plan
The Premier League is on Rookie and Pro, not on the free Developer plan. Rookie includes 9 bookmakers (Sportsbet, TAB, Ladbrokes, Neds, PointsBet, Unibet, Betfair Exchange, Dabble and Betr); Pro includes every bookmaker we deliver, recorded price history and the odds stream. See pricing and the Premier League page.
Next
- Every market type in the API
- Odds comparison example
- How to build an odds comparison site in Australia
SockOdds provides data only. It does not offer tips or predictions on any game.