NHL odds API

NHL prices, markets and identifiers through one REST API.

The NHL has the league key nhl in the SockOdds API. It is an ice hockey league based in the United States (sport key ice_hockey). Its events have a home and an away team.

Request NHL odds

Current prices for the next NHL game, one market, from every bookmaker your plan includes:

curl -sS "https://api.sockodds.com/v1/odds?league=nhl&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=nhl&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=nhl&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_000ckk0w9ynj",
      "name": "Anaheim Ducks v Boston Bruins",
      "league": {
        "key": "nhl",
        "name": "NHL"
      },
      "scheduled_start": "2026-10-16T21:00:00.000Z",
      "status": "scheduled",
      "participants": [
        {
          "role": "away",
          "identity": {
            "key": "boston_bruins",
            "name": "Boston Bruins"
          }
        },
        {
          "role": "home",
          "identity": {
            "key": "anaheim_ducks",
            "name": "Anaheim Ducks"
          }
        }
      ],
      "markets": [
        {
          "id": "mk_bg0b5yy8a507qx5c",
          "key": "winner",
          "name": "Winner",
          "period": "full",
          "subject": null,
          "alternate": false,
          "outcomes": [
            {
              "id": "oc_0kr7xvzpdedf8erj",
              "name": "Anaheim Ducks",
              "side": "home",
              "line": null,
              "prices": [
                {
                  "bookmaker": "betopenly",
                  "decimal_odds": 1.81,
                  "implied_probability": 0.552486,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                },
                {
                  "bookmaker": "pointsbet",
                  "decimal_odds": 1.77,
                  "implied_probability": 0.564972,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                },
                {
                  "bookmaker": "tab",
                  "decimal_odds": 1.72,
                  "implied_probability": 0.581395,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                },
                {
                  "bookmaker": "unibet",
                  "decimal_odds": 1.69,
                  "implied_probability": 0.591716,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                }
              ]
            },
            {
              "id": "oc_7syjxnk9xmcawrmp",
              "name": "Boston Bruins",
              "side": "away",
              "line": null,
              "prices": [
                {
                  "bookmaker": "betopenly",
                  "decimal_odds": 2.23,
                  "implied_probability": 0.44843,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                },
                {
                  "bookmaker": "pointsbet",
                  "decimal_odds": 2.18,
                  "implied_probability": 0.458716,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                },
                {
                  "bookmaker": "tab",
                  "decimal_odds": 2.12,
                  "implied_probability": 0.471698,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                },
                {
                  "bookmaker": "unibet",
                  "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
  }
}

Prices are decimal and exactly as each bookmaker showed them, with the time we saw them. A price older than ten minutes is withheld rather than shown as current.

Bookmakers

22 bookmakers deliver NHL prices through v1 as of 30 October 2026: TAB, PointsBet, Unibet, Betfair Exchange, Pinnacle, Dabble, DraftKings, FanDuel, BetMGM, Kalshi, Polymarket, Matchbook, Bally Bet, BetOpenly, BetRivers, Fanatics Markets, Hard Rock Bet, LightningBet, Mintbet, Novig, ProphetX and Star Sports.

NHL markets

19 market types are defined for the NHL. Ask for any of them with markets=; a bookmaker quotes the markets it offers for each game.

Game markets

MarketKeySidesLinePeriods
Either of two resultsresult_pairhome_or_draw, away_or_draw, either_teamNofull, regulation
Total goals odd/eventotal_goals_odd_evenodd, evenNofull, regulation, period_1, period_2, period_3
Exact scoreresult_exact_scoreEach exact scoreNofull, regulation, period_1, period_2, period_3
Winnerwinnerhome, away, competitor_1, competitor_2Nofull, period_1, period_2, period_3
Result (with the draw)resulthome, draw, awayNofull, regulation, period_1, period_2, period_3
Result (draw no bet)result_draw_no_bethome, awayNofull, period_1, period_2, period_3
Handicaphandicaphome, away, competitor_1, competitor_2Yesfull, period_1, period_2, period_3
Total goalstotal_goalsover, underYesfull, regulation, period_1, period_2, period_3

Team markets

MarketKeySidesLinePeriods
Team goals over/underteam_goals_over_underover, underYesfull, regulation, period_1, period_2, period_3
Team shots on goal over/underteam_shots_on_goal_over_underover, underYesfull

Player markets

MarketKeySidesLinePeriods
Anytime goal scorerplayer_goals_anytimeyesNofull
First goal scorerplayer_goals_firstEach competitorNofull
Last goal scorerplayer_goals_lastEach competitorNofull
Player goals over/underplayer_goals_over_underover, underYesfull
Player points over/underplayer_points_over_underover, underYesfull
Player assists over/underplayer_assists_over_underover, underYesfull
Player saves over/underplayer_saves_over_underover, underYesfull
Player shots on goal over/underplayer_shots_on_goal_over_underover, underYesfull
Player blocked shots over/underplayer_blocked_shots_over_underover, underYesfull

Periods

full (Full match), regulation (Regulation time), period_1 (First period), period_2 (Second period) and period_3 (Third period).

Plans

The NHL is included on Rookie and Pro. Pro adds recorded price history, from 23 February 2026. See pricing.

Search across the SockOdds documentation and catalogue.