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.
{
"mcpServers": {
"bigballs-sports-data": {
"url": "https://mcp.bigballsdata.com/mcp"
}
}
}2. Tools your agent gets
find_playersFind canonical player IDs by name for use with player-stat tools.
get_player_statsPer-player career or per-season totals and per-game rates.
get_coverageMachine-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.
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.
- 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 leadersbashcurl -s "https://api.bigballsdata.com/v1/nhl/leaders?stat=points&limit=50" \ -H "Authorization: Bearer $BBS_API_KEY" - 02
Request one explicit market
Pass a documented market so the UI label and returned unit stay aligned.
Fetch a shots-on-goal linebashcurl -s "https://api.bigballsdata.com/v1/nhl/players/$PLAYER_ID/props?market=shots_on_goal" \ -H "Authorization: Bearer $BBS_API_KEY" - 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 statetypescriptconst 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.
| Method | Path | Returns | Why you need it | Plan |
|---|---|---|---|---|
| GET | /v1/nhl/leaders | NHL leader rows with canonical player and team identity | The player selector and position context. | Free |
| GET | /v1/nhl/players/:id/props | Documented skater or goalie markets with line and freshness | The 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
GET /v1/nhl/players/:id/props?market=shots_on_goalEdge game market
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
- How to build a fantasy hockey app
- How to build a fantasy basketball app
- How to build an NBA scoreboard
- How to build an NHL scoreboard
- How to build an NBA props tracker
- How to build an NBA shot chart
- How to build an NBA matchup page
- How to build an NHL xG explorer
- How to build an NHL goalie dashboard
- How to build a soccer xG app
- How to build a cricket app
- NFL fantasy football API tutorial
- How to build an NFL scouting tool
- How to build an NFL conditions analytics tool
- NFL betting model API tutorial
- NFL live game center API tutorial
- How to build an NCAAF scoreboard and live game center
- How to build college football rankings and conference standings
- How to build an NCAAF fantasy football app
- How to build an MLB live scoreboard
- How to build a fantasy baseball app
- How to build an MLB pitching dashboard
- How to build an MLB betting model
- How to build an MLB standings dashboard
- How to build a soccer fantasy app
- How to build a soccer betting model
- How to build a soccer live match center
- How to build a soccer player production board
- How to build a soccer fixture alert app
- How to build a soccer scouting tool
- How to build an NCAAF betting model
- How to build an NCAAF conditions analytics tool
- How to build a WNBA live scoreboard
- How to build a WNBA quarter tracker
- How to build a WNBA odds board
- How to build a WNBA schedule browser
- How to build a WNBA team-form tool
- How to build an NCAAB scoreboard
- How to build a March Madness archive
- How to build an NCAAB game-detail view
- How to build an NCAAB team-form dashboard
- How to build an NCAAB head-to-head tool
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.
Related APIs
Other APIs you can build with: