NHL PLAYER PROPSLive · Stanley Cup Finals

NHL Player Props API

Per-player props live across 5 sportsbooks and 6 markets: shots on goal, goals, assists, points, blocked shots, and power play points. Cross-book best-line aggregation in the same canonical schema as the rest of the API.

1,000 req/day on the free plan (2,000 with GitHub). No credit card.

5,168 prop lines live across BetMGM, Caesars, DraftKings, FanDuel, BetRivers.

What you'll get

The same primitives that make /v1/nba/players/{id}/props useful, brought to NHL. One free key, one shape.

  • Cross-book best line

    Surface the best over and best under per market in a single request, with the book that posted the price.

  • Hit rate dashboards

    Render last-10 and season-long hit rate per market so users see the bet history at a glance.

  • Unified player_id

    Props join cleanly to /v1/nhl/games/{id}/matchup, player streaks, rolling stats — one id everywhere.

  • Bets Chat ready

    JSON envelope mirrors /v1/nba/players/{id}/props, so the Bets Chat integration ports directly with no schema rework.

  • Six core markets

    Shots on goal, goals, assists, points, blocked shots, and power play points. Audited markets, no novelty clutter.

  • Live for the Stanley Cup Finals

    5,168 prop lines refresh continuously across BetMGM, Caesars, DraftKings, FanDuel, and BetRivers.

Markets covered

Six core NHL markets live today. Audited, no novelty props.

MarketDescription
shots_on_goalTotal shots on goal in the game
goalsGoals scored
assistsAssists
pointsGoals + assists (the canonical NHL "points" combo)
blocked_shotsBlocked shots
power_play_pointsPoints (goals + assists) scored while on the power play

Endpoint shape

One call returns a single market for the player: the current line across books (best book per side) plus a rolling last-N-games hit rate for that market.

GET /v1/nhl/players/:id/props?market=shots_on_goal

Response shapejson
{
  "data": {
    "player": {
      "bbs_id": "84977260-f7d7-48af-857e-ea355ccdb266",
      "name": "Tage Thompson",
      "position": "C",
      "team": { "bbs_id": "37766f6e-e138-4f4a-a845-cf3bf06d00f4", "name": "Buffalo Sabres", "abbr": "BUF" }
    },
    "market": "shots_on_goal",
    "current_line": {
      "line": 3.5,
      "over_juice": -115,
      "under_juice": -114,
      "sportsbook": "balldontlie_fanduel",
      "sportsbook_display": "FanDuel",
      "fetched_at": "2026-06-02T06:07:21.726Z",
      "all_books": [
        { "sportsbook": "balldontlie_betmgm", "display": "BetMGM", "line": 3.5, "over_juice": -105, "under_juice": -130 },
        { "sportsbook": "balldontlie_draftkings", "display": "DraftKings", "line": 3.5, "over_juice": -135, "under_juice": 105 },
        { "sportsbook": "balldontlie_fanduel", "display": "FanDuel", "line": 3.5, "over_juice": -115, "under_juice": -114 }
      ]
    },
    "hit_rate": {
      "lookback_games": 20,
      "games_with_box_score": 7,
      "over_hits": 4,
      "under_hits": 3,
      "pushes": 0,
      "hit_pct_over": 0.5714,
      "samples": [
        { "match_id": "529e7cb8-8e2a-4554-a0ef-88bbfd21d510", "game_date": "2025-10-22", "opponent": null, "value": 5, "result": "over" },
        { "match_id": "9f9ba07e-1bac-45b6-bf65-d22d4020c566", "game_date": "2025-10-20", "opponent": null, "value": 3, "result": "under" }
      ]
    },
    "as_of": "2026-06-02T10:06:32.049Z"
  },
  "meta": { "cached": false, "cache_age_ms": 0 }
}

SDK call

One call returns every market the player has a posted line on tonight. The cross-book attribution lands in the same payload.

  • · Six markets returned in one call
  • · Cross-book best-line attribution per market
  • · Same canonical envelope as the rest of the API
Node.js, @bigballsdata/sdktypescript
// One market per call: best line across books + a rolling hit rate.
const url =
  'https://api.bigballsdata.com/v1/nhl/players/' + playerId +
  '/props?market=shots_on_goal&lookback=20';
const res = await fetch(url, { headers: { 'x-api-key': process.env.BBS_API_KEY! } });
const { data } = await res.json();

console.log(data.market, data.current_line?.line, 'best:', data.current_line?.sportsbook_display);
console.log('over hit rate:', data.hit_rate?.hit_pct_over, 'on', data.hit_rate?.games_with_box_score, 'games');

for (const b of data.current_line?.all_books ?? []) {
  console.log(' ', b.display, b.line, b.over_juice, '/', b.under_juice);
}

What will it cost

Free tier matches /v1/nba/players/{id}/props: 1,000 req/day on the free plan, 2,000 with GitHub connected. No credit card. Paid tiers (Solo / Trio / Edge / Pro) carry forward with the rest of the API.

See all plans

Frequently asked

How do I call the NHL Player Props endpoint?
GET /v1/nhl/players/:id/props?market=shots_on_goal with your API key in the Authorization header or as ?api_key=. One call returns one market: data.current_line (line, over_juice / under_juice, the best book per side, and all_books) plus data.hit_rate (over_hits / under_hits, hit_pct_over, games_with_box_score, and per-game samples). Live today across BetMGM, Caesars, DraftKings, FanDuel, and BetRivers.
Will it be on the free tier?
Yes. NHL Player Props will match /v1/nba/players/{id}/props on the free tier (1,000 req/day, 2,000 if you connect GitHub). No credit card to start.
Which sportsbooks does it cross-reference?
The same books the rest of the API normalises across. The response includes a books_count plus the specific book that posted the best over and the best under per market, so the source attribution is in the payload, not buried in a separate call.
How fresh are the prices?
Prices refresh continuously from the upstream books and the response is canonicalised to the BBS schema. The first request after a price change pays the upstream-fetch latency; subsequent calls within the cache window return cached data with cache_age_ms surfaced in meta.

Related APIs

Other APIs you can build with:

Stats reference

Get an API key now

The endpoint is live across BetMGM, Caesars, DraftKings, FanDuel, and BetRivers. 5,168 prop lines refreshing through every Stanley Cup Finals game.