Tutorial · 9 min · endpoints verified 2026-09-22

How to build an NHL props tracker

Put shots, goals, points or goalie saves beside the exact line timestamp and sample that make the number meaningful.

API coverage and endpoint overview: Explore the NHL API

Why this is hard

Skater and goalie markets need different context

A useful hockey props card knows the player position, market unit, stored line and freshness state. Treating every player as a skater produces plausible but wrong UI.

  • Goalie saves need goalie identity and goalie-specific history.
  • Shots on goal, goals, assists and points have different scales.
  • A stale line must remain visibly stale between active boards.
  • A market omitted from the response must not be filled with a default.

Path 1 · recommended

Have your AI agent build it

Use MCP to check hockey coverage and resolve the player, then call the NHL props route over REST.

1. Connect the MCP server

Add the server in your MCP client and sign in with your Big Balls account. Your client registers itself and handles the token exchange — there is no key to copy.

MCP client configjson
{
  "mcpServers": {
    "bigballs-sports-data": {
      "url": "https://mcp.bigballsdata.com/mcp"
    }
  }
}

2. Tools your agent gets

  • find_players

    Find canonical player IDs by name for use with player-stat tools.

  • get_player_stats

    Per-player career or per-season totals and per-game rates.

  • get_coverage

    Machine-readable map of what we hold and what we do not.

3. Ask for what you want

Paste this at your agent. It is written to make the model check coverage before it designs anything, which is what stops it inventing a field we do not serve.

Prompttext
Build an NHL props tracker. Resolve a canonical player id and position,
then call the NHL props REST route for a documented market. Show the market,
line, prices, sample window and freshness timestamp together. Keep goalie and
skater layouts separate, and render missing or stale states honestly.

What the agent cannot reach

NHL player props are not an MCP tool. MCP can establish player identity and stat context, while REST supplies the line and freshness block.

Path 2 · hand-coded

Build it yourself

The tracker resolves player and position first, then requests one market and gates its presentation on freshness.

  1. 01

    Start with the NHL leaderboard

    Use the leader response as a served identity source and retain player id, position and team context.

    Fetch NHL leadersbash
    curl -s "https://api.bigballsdata.com/v1/nhl/leaders?stat=points&limit=50" \
      -H "Authorization: Bearer $BBS_API_KEY"
  2. 02

    Request one explicit market

    Pass a documented market so the UI label and returned unit stay aligned.

    Fetch a shots-on-goal linebash
    curl -s "https://api.bigballsdata.com/v1/nhl/players/$PLAYER_ID/props?market=shots_on_goal" \
      -H "Authorization: Bearer $BBS_API_KEY"
  3. 03

    Render position and freshness together

    Choose the card vocabulary from position, then mark the line current only when the response freshness supports that state.

    Model the card statetypescript
    const card = {
      role: player.position === 'G' ? 'goalie' : 'skater',
      line: props.data?.line ?? null,
      freshness: props.freshness?.status ?? 'unknown',
      dataAsOf: props.freshness?.data_as_of ?? null,
    };

Reference

Every endpoint this tutorial uses

All on the gateway at api.bigballsdata.com. Verified against production on 2026-09-22.

MethodPathReturnsWhy you need itPlan
GET/v1/nhl/leadersNHL leader rows with canonical player and team identityThe player selector and position context.Free
GET/v1/nhl/players/:id/propsDocumented skater or goalie markets with line and freshnessThe tracker card. Read the freshness guide.Free

Pricing, honestly

Player props start free; full-game odds are separate

The NHL player-props route has a Free entry point. Full-game odds and line movement use their own market-data plan floors.

Free player prop

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

Edge game market

texttext
GET /v1/matches/:id/odds
  • Freshness remains visible on Free.
  • Skater and goalie markets share a route but not one semantic unit.
  • An upgrade does not fill an absent market.
  • Current game prices remain an Edge capability.

More tutorials

Other build guides

Known gaps

What the first tracker leaves out

Start with a trustworthy single-market card.

  • No synthetic consensus when sources are absent.
  • No goalie market shown for a skater.
  • No live badge derived only from the current date.

Questions

Which NHL markets are supported?
Use the markets documented by the route, including skater shots and goalie saves where a line is held.
Can a goalie use the skater card?
The transport can be shared, but the product labels and historical context should follow position.
What does stale mean?
The held line is older than the current-price window. It remains historical context and must not be styled as live.
Does a Free props route include full-game puck lines?
No. Per-player props and full-game odds are separate routes with separate plan boundaries.

Build the NHL props tracker

Resolve the position, request one market, and keep freshness next to the line.