
NHL and PWHL stats, play-by-play, expected goals and odds. REST API and MCP server. Free to start.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Your PuckAPI API key. Get a free key (500 credits every month) at puckapi.com/signup
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use when you need everything about one game: both teams' full info, all betting odds, and the goalies who started, with their time on ice. Requires a game ID (get one from get_games or get_schedule). Odds for every game from 2019-20 on (and part of the 2019 playoffs). Goalie starts are derived from play-by-play, so they are available for played games, not upcoming ones. Costs 10 credits. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
NHL game ID (e.g. 2025020887)
League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.
Use when you need everything about one game: both teams' full info, all betting odds, and the goalies who started, with their time on ice. Requires a game ID (get one from get_games or get_schedule). Odds for every game from 2019-20 on (and part of the 2019 playoffs). Goalie starts are derived from play-by-play, so they are available for played games, not upcoming ones. Costs 10 credits. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
| Argument | Type | Description |
|---|---|---|
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl. |
| game_id* | string | NHL game ID (e.g. 2025020887) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"game_id"
],
"properties": {
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"whl",
"qmjhl",
"echl",
"ahl",
"ushl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
},
"game_id": {
"type": "string",
"description": "NHL game ID (e.g. 2025020887)"
}
}
}Use when querying past or future games with filters. Returns scores, teams, venue, and game metadata. For upcoming-only games, prefer get_schedule (2 cr) instead. Costs 5 credits.
| Argument | Type | Description |
|---|---|---|
| team | string | Team abbreviation to filter (home or away) |
| limit | integer | Max results (default 100) |
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl. |
| season | string | Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. |
| date_to | string | End date (YYYY-MM-DD) |
| date_from | string | Start date (YYYY-MM-DD) |
| game_type | string | Filter by game type |
| game_state | string | Filter by game state. FINAL and OFF both mean finished and return the same games; FUT is scheduled, LIVE in progress. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"team": {
"type": "string",
"description": "Team abbreviation to filter (home or away)"
},
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Max results (default 100)"
},
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"whl",
"qmjhl",
"echl",
"ahl",
"ushl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
},
"season": {
"type": "string",
"description": "Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted."
},
"date_to": {
"type": "string",
"description": "End date (YYYY-MM-DD)"
},
"date_from": {
"type": "string",
"description": "Start date (YYYY-MM-DD)"
},
"game_type": {
"enum": [
"regular",
"playoff",
"preseason"
],
"type": "string",
"description": "Filter by game type"
},
"game_state": {
"enum": [
"FUT",
"LIVE",
"FINAL",
"OFF"
],
"type": "string",
"description": "Filter by game state. FINAL and OFF both mean finished and return the same games; FUT is scheduled, LIVE in progress."
}
}
}Use when ranking goalies or comparing goalie performance. Returns a leaderboard sorted by save%, GAA, GSAX, or wins, with a games-played filter. Includes goals saved above expected, high-danger save%, rolling save% and GSAX over the last 10 appearances, form trend and rest days. Goalie expected goals cover every strength, unlike the 5v5-only team possession columns. Costs 5 credits.
| Argument | Type | Description |
|---|---|---|
| team | string | Filter by team abbreviation |
| limit | integer | Max results (default 20) |
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl. |
| season | string | Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to the most recent season with stats, which is the current season once it is under way and the previous one before that. The season actually used is echoed in filters.season. |
| sort_by | string | Sort metric (default save_pct). gsax is goals saved above expected. |
| min_games | integer | Minimum games played (default 10; early in a season, half the most games anyone has played so far) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"team": {
"type": "string",
"description": "Filter by team abbreviation"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max results (default 20)"
},
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"whl",
"qmjhl",
"echl",
"ahl",
"ushl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
},
"season": {
"type": "string",
"description": "Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to the most recent season with stats, which is the current season once it is under way and the previous one before that. The season actually used is echoed in filters.season."
},
"sort_by": {
"enum": [
"save_pct",
"gaa",
"gsax",
"wins"
],
"type": "string",
"description": "Sort metric (default save_pct). gsax is goals saved above expected."
},
"min_games": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Minimum games played (default 10; early in a season, half the most games anyone has played so far)"
}
}
}Use when comparing two teams' history. Returns recent matchups with win/loss record. Can filter by season or get all-time. Costs 10 credits.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max games to return (default 20) |
| team1* | string | First team abbreviation (e.g. BUF) |
| team2* | string | Second team abbreviation (e.g. TOR) |
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl. |
| season | string | Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Omit for all-time. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"team1",
"team2"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Max games to return (default 20)"
},
"team1": {
"type": "string",
"description": "First team abbreviation (e.g. BUF)"
},
"team2": {
"type": "string",
"description": "Second team abbreviation (e.g. TOR)"
},
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"whl",
"qmjhl",
"echl",
"ahl",
"ushl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
},
"season": {
"type": "string",
"description": "Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Omit for all-time."
}
}
}Use when analyzing how betting lines moved over time. Returns time-series snapshots grouped by bookmaker. Most expensive tool (25 cr). If you only need current lines, use get_odds (10 cr) instead. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
| Argument | Type | Description |
|---|---|---|
| game_id* | string | NHL game ID |
| bookmaker | string | Filter by specific bookmaker key (lowercase) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"game_id"
],
"properties": {
"game_id": {
"type": "string",
"description": "NHL game ID"
},
"bookmaker": {
"type": "string",
"description": "Filter by specific bookmaker key (lowercase)"
}
}
}Use when checking betting lines. Pass game_id for one game (10 credits): moneyline, puck line and total by bookmaker, opening and closing. Or pass season (optionally with team) for a whole season of closing lines in one call, with final scores, at 10 credits per game returned (a full season is ~13,700 credits, a team-season ~820), 100 games a page by default (up to 500). Each book's line is an array in the order given by columns. Set estimate_only to get the price without being charged. Every game from 2019-20 on (and part of the 2019 playoffs): about 16 to 18 books a game from 2020-21 to 2023-24, about 6 in 2019-20, 8 in 2024-25 and 2025-26 (60+ on about 300 games in 2025-26), with all_books; a season answer defaults to the four main books. A season those four do not carry (2019-20) returns every book it has. Each line carries a source field (one value for opening and closing lines from August 2020, another for final per-book lines); a season answer lists each game's sources. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
| Argument | Type | Description |
|---|---|---|
| team | string | With season: only this team's games (abbreviation, e.g. BUF). |
| limit | integer | With season: games per page (default 100, max 500). |
| offset | integer | With season: page offset; use next_offset from the previous page. |
| season | string | Season for a whole season of lines, e.g. 2025-26 or 20252026. Used when game_id is not set. |
| game_id | string |
Use when you need a player's game-by-game stat lines for a season, not a season total. For skaters: date, opponent, home/away, goals, assists, points, shots, PIM and power-play points for each game. For goalies: date, opponent, home/away, decision, shots against, saves, goals against and save% for each game. Built from play-by-play, so time on ice and plus/minus are not available and come back null; goalie time on ice is available only for games the goalie started. Requires player ID from search_players. Costs 5 credits.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max games to return (default 100) |
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl. |
| offset | integer | Pagination offset |
| season | string | Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to the most recent season with stats for this player, which is the current season once it is under way and the previous one before that. The season actually used is echoed back in the response. |
| game_type | string | Which games to include: regular, playoff, preseason, or all. Defaults to regular, matching every other stats tool. |
| player_id* | integer | NHL player ID |
Use for player prop lines by sportsbook: over/under on points, goals, assists, shots on goal, blocked shots, goalie saves and anytime goal scorer, from May 2023 (DraftKings, FanDuel, BetMGM, ESPN BET, Pinnacle and others). Pass game_id for every player's props in one game (10 credits), or player_id with from_date (and to_date) for one player across games (10 credits per game returned, up to 100). Returns the closing line by default (the last before the game starts) or the opening line, with each book's over and under prices. Outside football the archive mostly holds one pre-game capture per line, so the opening and closing lines are usually the same; the opening line differs only where a second capture was taken (live capture from October 2026, and wherever else it is held). Set estimate_only to get the price without being charged. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
| Argument | Type | Description |
|---|---|---|
| market | string | One market: player_points (points), player_goals (goals), player_assists (assists), player_shots_on_goal (shots on goal), player_blocked_shots (blocked shots), player_total_saves (goalie saves), player_goal_scorer_anytime (anytime goal scorer (over = scores)) |
| game_id | string | Game id: every player's props for that game. |
| to_date | string | With player_id: last date (default: no end), YYYY-MM-DD (the game's date). |
| bookmaker | string | Bookmaker key, e.g. draftkings, fanduel, pinnacle. |
| from_date |
Use when you need full details for one player: bio, team, and physical attributes. For skaters, also returns the latest season line (games, goals, assists, points, +/-, PP/SH, shooting%, TOI). For goalies, save%, GAA, GSAX, and trend data. Requires player ID from search_players. Costs 5 credits.
| Argument | Type | Description |
|---|---|---|
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl. |
| player_id* | integer | NHL player ID |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"player_id"
],
"properties": {
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"whl",
"qmjhl",
"echl",
"ahl",
"ushl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
},
"player_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "NHL player ID"
}
}
}Use for play-by-play events: goals, shots, misses, blocks, faceoffs, hits, giveaways, takeaways, penalties, with rink coordinates, strength state (5v5, 5v4), zone, and the players involved. Filter by game, season, team, player (any role), event type, strength, zone, or period. Requires at least one of game_id, season or player_id. Paginate with offset. Costs 10 credits.
| Argument | Type | Description |
|---|---|---|
| team | string | Team abbreviation that owns the event (e.g. BUF) |
| type | string | Event type |
| zone | string | Zone: O offensive, N neutral, D defensive |
| limit | integer | Max events (default 200) |
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl. |
| offset | integer | Pagination offset |
| period | integer | Period number (4+ is overtime) |
| season | string | Season ID, 8-digit (e.g. 20242025). |
| game_id | string |
Use for the model's win probability for each NHL game on the current slate: home and away win probability, the A/B/C confidence grade, start time, plus the model version and when the slate was generated. Takes no arguments (current slate only). Probabilities are the model's own; no odds, prices or goalie and injury notes are included. The accuracy note states the backtest figure and that it is not a live record. An empty slate costs nothing, and a note says why (not generated yet, or no games today); so does a failed call. Costs 5 credits.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Use to see how a player did against his prop line over time: for one market (points, goals, assists, shots on goal, blocked shots, goalie saves or anytime goal scorer), one row per game with the closing line (the median across books, or one book's), the opening line (the same as the close wherever only one capture was taken), the prices, what the player actually recorded from our box scores and the result against the line, plus the over rate. Costs 10 credits for up to 200 games. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Games to return, oldest first (default 50, max 200). next_from_date says where to continue. |
| market* | string | The market: player_points (points), player_goals (goals), player_assists (assists), player_shots_on_goal (shots on goal), player_blocked_shots (blocked shots), player_total_saves (goalie saves), player_goal_scorer_anytime (anytime goal scorer (over = scores)) |
| to_date | string | Last date, YYYY-MM-DD (the game's date). |
| bookmaker | string | One book's closing line instead of the median across books, e.g. draftkings. |
| from_date | string | First date, YYYY-MM-DD (the game's date). |
| player_id* |
Paid plans only (not available on the free plan). Use for the model's projected stat lines for tonight's NHL players: for each game, each skater's projected goals, assists, points and shots with a low-to-high range, and each goalie's projected saves. Skaters also carry over probabilities at the usual half-point lines (goals 0.5 and 1.5, assists 0.5 and 1.5, points 0.5 to 2.5, shots 1.5 to 5.5): goals use the model's own goal distribution, the others are Poisson on the projected rate. Optional team (either side of the game) and player (name fragment) filters. Tonight's slate only; no date argument. Numbers only: no odds, prices or injury notes. An empty slate costs nothing; so does a failed call. Costs 25 credits.
| Argument | Type | Description |
|---|---|---|
| team | string | Team abbreviation, e.g. COL. Keeps the games that team plays in, home or away. |
| player | string | Part of a player's name, e.g. makar. Accents are ignored. Keeps only matching players. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"team": {
"type": "string",
"pattern": "^[A-Za-z]{2,4}$",
"description": "Team abbreviation, e.g. COL. Keeps the games that team plays in, home or away."
},
"player": {
"type": "string",
"maxLength": 64,
"minLength": 2,
"description": "Part of a player's name, e.g. makar. Accents are ignored. Keeps only matching players."
}
}
}Use when checking what games are coming up. Returns only unplayed future games for the next N days (default 7). For past games, use get_games instead. Costs 2 credits.
| Argument | Type | Description |
|---|---|---|
| days | integer | Number of days ahead to look (default 7) |
| team | string | Team abbreviation to filter |
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"days": {
"type": "integer",
"maximum": 30,
"minimum": 1,
"description": "Number of days ahead to look (default 7)"
},
"team": {
"type": "string",
"description": "Team abbreviation to filter"
},
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"whl",
"qmjhl",
"echl",
"ahl",
"ushl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
}
}
}Use for who was on the ice and when: every player's shifts in one NHL game, each with period, start and end (period clock and seconds from the opening faceoff) and duration, plus the official boxscore time on ice and plus/minus. Filter to one team or player. NHL games from 2010-11 on. Costs 10 credits.
| Argument | Type | Description |
|---|---|---|
| team | string | Only this team's players, by abbreviation (e.g. WSH) |
| game_id* | string | NHL game ID, 10 digits (e.g. 2026020084) |
| player_id | integer | Only this player, by NHL player ID |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"game_id"
],
"properties": {
"team": {
"type": "string",
"description": "Only this team's players, by abbreviation (e.g. WSH)"
},
"game_id": {
"type": "string",
"description": "NHL game ID, 10 digits (e.g. 2026020084)"
},
"player_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Only this player, by NHL player ID"
}
}
}Use when you want shot locations rather than a list of events: every shot attempt with rink coordinates, shot type, strength, shooter and goalie. Filter by game, or by season plus a team or player. Paginated: follow next_offset, since a season runs past one page and pages are chronological. Costs 10 credits.
| Argument | Type | Description |
|---|---|---|
| team | string | Team abbreviation; use with season |
| limit | integer | Max shots per page (default 1000) |
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, qmjhl, echl, ahl. |
| offset | integer | Pagination offset; follow next_offset for a full season |
| season | string | Season ID, 8-digit (e.g. 20242025); use with team |
| game_id | string | NHL game ID |
| strength | string | Strength filter, e.g. 5v5 |
| player_id | integer | NHL player ID of the shooter |
Use for exact time at each strength: the seconds each team spent at 5v5, 5v4, 4v5, 4v4, 6v5 with the goalie pulled and every other on-ice state in an NHL game, split into regulation and overtime, from the shift charts. Also even / power-play / shorthanded totals, goalie-pulled seconds, period lengths and a completeness check against the play-by-play. include_players adds each skater's time by strength. One game by game_id (10 credits), or every game on a date (10 credits per game). NHL games from 2010-11 on.
| Argument | Type | Description |
|---|---|---|
| date | string | Every game played on this date, YYYY-MM-DD (instead of game_id) |
| game_id | string | NHL game ID, 10 digits (e.g. 2026020084) |
| include_players | boolean | Add each skater's seconds by strength (default false) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"description": "Every game played on this date, YYYY-MM-DD (instead of game_id)"
},
"game_id": {
"type": "string",
"description": "NHL game ID, 10 digits (e.g. 2026020084)"
},
"include_players": {
"type": "boolean",
"description": "Add each skater's seconds by strength (default false)"
}
}
}Use when ranking skaters or comparing scoring. Returns a leaderboard sorted by points, goals, assists, plus/minus, or shots, with a games-played filter. Includes power play and shorthanded production, shooting%, faceoff%, and average time on ice. Seasons from 2010-11 on. Costs 5 credits.
| Argument | Type | Description |
|---|---|---|
| team | string | Filter by team abbreviation |
| limit | integer | Max results (default 20) |
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl. |
| season | string | Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to the most recent season with stats, which is the current season once it is under way and the previous one before that. The season actually used is echoed in filters.season. |
| sort_by | string | Sort metric (default points) |
| min_games | integer | Minimum games played (default 10; early in a season, half the most games anyone has played so far) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"team": {
"type": "string",
"description": "Filter by team abbreviation"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max results (default 20)"
},
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"whl",
"qmjhl",
"echl",
"ahl",
"ushl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
},
"season": {
"type": "string",
"description": "Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to the most recent season with stats, which is the current season once it is under way and the previous one before that. The season actually used is echoed in filters.season."
},
"sort_by": {
"enum": [
"points",
"goals",
"assists",
"plus_minus",
"shots"
],
"type": "string",
"description": "Sort metric (default points)"
},
"min_games": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Minimum games played (default 10; early in a season, half the most games anyone has played so far)"
}
}
}Use when checking where teams rank in their division or conference. Returns points, wins, losses, OT losses, point%, goal differential, goals for/against per game, and 5v5 possession: Corsi%, Fenwick% and expected goals for and against. The possession columns are 5v5 only, so they will not match a goalie's expected goals against, which covers every strength. Defaults to the most recent season with standings. Costs 2 credits.
| Argument | Type | Description |
|---|---|---|
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl. |
| season | string | Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to current season. |
| division | string | Filter by division (e.g. Atlantic, Metropolitan, Central, Pacific) |
| conference | string | Filter by conference |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"whl",
"qmjhl",
"echl",
"ahl",
"ushl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
},
"season": {
"type": "string",
"description": "Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to current season."
},
"division": {
"type": "string",
"description": "Filter by division (e.g. Atlantic, Metropolitan, Central, Pacific)"
},
"conference": {
"enum": [
"Eastern",
"Western"
],
"type": "string",
"description": "Filter by conference"
}
}
}Use when you need full details for one team: record, goals for and against, league rank, and 5v5 possession (Corsi%, Fenwick%, expected goals for and against). Possession is 5v5 only. Requires a team abbreviation (use list_teams if unsure). Costs 5 credits.
| Argument | Type | Description |
|---|---|---|
| team* | string | Team abbreviation (e.g. BUF, TOR, NYR) |
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl. |
| season | string | Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to current season. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"team"
],
"properties": {
"team": {
"type": "string",
"description": "Team abbreviation (e.g. BUF, TOR, NYR)"
},
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"whl",
"qmjhl",
"echl",
"ahl",
"ushl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
},
"season": {
"type": "string",
"description": "Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to current season."
}
}
}Use when you need team abbreviations, or to see all 32 active NHL teams with city, conference, division, and arena. Excludes historical franchises (ATL, ARI). Cheapest tool at 1 credit.
| Argument | Type | Description |
|---|---|---|
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl. |
| division | string | Filter by division |
| conference | string | Filter by conference |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"whl",
"qmjhl",
"echl",
"ahl",
"ushl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
},
"division": {
"type": "string",
"description": "Filter by division"
},
"conference": {
"enum": [
"Eastern",
"Western"
],
"type": "string",
"description": "Filter by conference"
}
}
}Use when looking up a player by name. Searches 4,900+ players across every season since 2010-11. Returns active players by default; set active=false for retired/historical. Use the returned player ID with get_player_stats for full details. Costs 2 credits.
| Argument | Type | Description |
|---|---|---|
| team | string | Filter by team abbreviation |
| limit | integer | Max results (default 10) |
| query* | string | Player name to search for (partial match supported) |
| active | boolean | Filter by active status (default: true). Set false to search active plus retired/historical players. |
| league | string | League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl. |
| position | string | Filter by position |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"team": {
"type": "string",
"description": "Filter by team abbreviation"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max results (default 10)"
},
"query": {
"type": "string",
"minLength": 1,
"description": "Player name to search for (partial match supported)"
},
"active": {
"type": "boolean",
"description": "Filter by active status (default: true). Set false to search active plus retired/historical players."
},
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"whl",
"qmjhl",
"echl",
"ahl",
"ushl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
},
"position": {
"enum": [
"G",
"D",
"C",
"LW",
"RW"
],
"type": "string",
"description": "Filter by position"
}
}
}| NHL game ID (e.g. 2025020887). Omit and pass season for a whole season. |
| all_books | boolean | With season: every book held (16 to 18 a game from 2020-21 to 2023-24, 8 in 2024-25, more than 60 on about 300 games in 2025-26) instead of DraftKings, FanDuel, BetMGM and ESPN BET. |
| bookmaker | string | Filter by bookmaker key (e.g. draftkings, fanduel, betmgm). Lowercase. |
| estimate_only | boolean | Return what this call would cost, without charging or running it. |
| snapshot_type | string | opening (game-day morning; for a game not yet played, the latest morning line) or closing (final pre-game). Single game: default every snapshot held, including first (each book's first posted line, from October 2026). Season: default closing. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"team": {
"type": "string",
"description": "With season: only this team's games (abbreviation, e.g. BUF)."
},
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "With season: games per page (default 100, max 500)."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "With season: page offset; use next_offset from the previous page."
},
"season": {
"type": "string",
"description": "Season for a whole season of lines, e.g. 2025-26 or 20252026. Used when game_id is not set."
},
"game_id": {
"type": "string",
"description": "NHL game ID (e.g. 2025020887). Omit and pass season for a whole season."
},
"all_books": {
"type": "boolean",
"description": "With season: every book held (16 to 18 a game from 2020-21 to 2023-24, 8 in 2024-25, more than 60 on about 300 games in 2025-26) instead of DraftKings, FanDuel, BetMGM and ESPN BET."
},
"bookmaker": {
"type": "string",
"description": "Filter by bookmaker key (e.g. draftkings, fanduel, betmgm). Lowercase."
},
"estimate_only": {
"type": "boolean",
"description": "Return what this call would cost, without charging or running it."
},
"snapshot_type": {
"enum": [
"opening",
"closing"
],
"type": "string",
"description": "opening (game-day morning; for a game not yet played, the latest morning line) or closing (final pre-game). Single game: default every snapshot held, including first (each book's first posted line, from October 2026). Season: default closing."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"player_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Max games to return (default 100)"
},
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"whl",
"qmjhl",
"echl",
"ahl",
"ushl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Pagination offset"
},
"season": {
"type": "string",
"description": "Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to the most recent season with stats for this player, which is the current season once it is under way and the previous one before that. The season actually used is echoed back in the response."
},
"game_type": {
"enum": [
"regular",
"playoff",
"preseason",
"all"
],
"type": "string",
"description": "Which games to include: regular, playoff, preseason, or all. Defaults to regular, matching every other stats tool."
},
"player_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "NHL player ID"
}
}
}| string |
| With player_id: first date, YYYY-MM-DD (the game's date). |
| player_id | number | string | Player id (e.g. 8478402) from search_players. With from_date: that player's props across games. |
| estimate_only | boolean | Return what this call would cost, without charging or running it. |
| snapshot_type | string | closing (default): the last line before the game starts. opening: the first one captured, which is the same capture as the close wherever only one was taken. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"market": {
"enum": [
"player_points",
"player_goals",
"player_assists",
"player_shots_on_goal",
"player_blocked_shots",
"player_total_saves",
"player_goal_scorer_anytime"
],
"type": "string",
"description": "One market: player_points (points), player_goals (goals), player_assists (assists), player_shots_on_goal (shots on goal), player_blocked_shots (blocked shots), player_total_saves (goalie saves), player_goal_scorer_anytime (anytime goal scorer (over = scores))"
},
"game_id": {
"type": "string",
"description": "Game id: every player's props for that game."
},
"to_date": {
"type": "string",
"description": "With player_id: last date (default: no end), YYYY-MM-DD (the game's date)."
},
"bookmaker": {
"type": "string",
"description": "Bookmaker key, e.g. draftkings, fanduel, pinnacle."
},
"from_date": {
"type": "string",
"description": "With player_id: first date, YYYY-MM-DD (the game's date)."
},
"player_id": {
"type": [
"number",
"string"
],
"description": "Player id (e.g. 8478402) from search_players. With from_date: that player's props across games."
},
"estimate_only": {
"type": "boolean",
"description": "Return what this call would cost, without charging or running it."
},
"snapshot_type": {
"enum": [
"opening",
"closing"
],
"type": "string",
"description": "closing (default): the last line before the game starts. opening: the first one captured, which is the same capture as the close wherever only one was taken."
}
}
}| NHL game ID (e.g. 2025020887) |
| strength | string | Skater strength from the event owner's view, e.g. 5v5, 5v4, 4v5 |
| player_id | integer | NHL player ID; matches the player in any role on the event |
| shot_attempts_only | boolean | Only goals, shots on goal, missed shots and blocked shots (Corsi events) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"team": {
"type": "string",
"description": "Team abbreviation that owns the event (e.g. BUF)"
},
"type": {
"enum": [
"goal",
"shot-on-goal",
"missed-shot",
"blocked-shot",
"faceoff",
"hit",
"giveaway",
"takeaway",
"penalty",
"delayed-penalty",
"stoppage",
"period-start",
"period-end",
"game-end",
"shootout-complete",
"failed-shot-attempt"
],
"type": "string",
"description": "Event type"
},
"zone": {
"enum": [
"O",
"N",
"D"
],
"type": "string",
"description": "Zone: O offensive, N neutral, D defensive"
},
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Max events (default 200)"
},
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"whl",
"qmjhl",
"echl",
"ahl",
"ushl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Pagination offset"
},
"period": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Period number (4+ is overtime)"
},
"season": {
"type": "string",
"description": "Season ID, 8-digit (e.g. 20242025)."
},
"game_id": {
"type": "string",
"description": "NHL game ID (e.g. 2025020887)"
},
"strength": {
"type": "string",
"description": "Skater strength from the event owner's view, e.g. 5v5, 5v4, 4v5"
},
"player_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "NHL player ID; matches the player in any role on the event"
},
"shot_attempts_only": {
"type": "boolean",
"description": "Only goals, shots on goal, missed shots and blocked shots (Corsi events)"
}
}
}| number | string |
| Player id (e.g. 8478402) from search_players. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"player_id",
"market"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Games to return, oldest first (default 50, max 200). next_from_date says where to continue."
},
"market": {
"enum": [
"player_points",
"player_goals",
"player_assists",
"player_shots_on_goal",
"player_blocked_shots",
"player_total_saves",
"player_goal_scorer_anytime"
],
"type": "string",
"description": "The market: player_points (points), player_goals (goals), player_assists (assists), player_shots_on_goal (shots on goal), player_blocked_shots (blocked shots), player_total_saves (goalie saves), player_goal_scorer_anytime (anytime goal scorer (over = scores))"
},
"to_date": {
"type": "string",
"description": "Last date, YYYY-MM-DD (the game's date)."
},
"bookmaker": {
"type": "string",
"description": "One book's closing line instead of the median across books, e.g. draftkings."
},
"from_date": {
"type": "string",
"description": "First date, YYYY-MM-DD (the game's date)."
},
"player_id": {
"type": [
"number",
"string"
],
"description": "Player id (e.g. 8478402) from search_players."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"team": {
"type": "string",
"description": "Team abbreviation; use with season"
},
"limit": {
"type": "integer",
"maximum": 2000,
"minimum": 1,
"description": "Max shots per page (default 1000)"
},
"league": {
"enum": [
"nhl",
"pwhl",
"ohl",
"qmjhl",
"echl",
"ahl"
],
"type": "string",
"description": "League. Defaults to nhl. One of: nhl, pwhl, ohl, qmjhl, echl, ahl."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Pagination offset; follow next_offset for a full season"
},
"season": {
"type": "string",
"description": "Season ID, 8-digit (e.g. 20242025); use with team"
},
"game_id": {
"type": "string",
"description": "NHL game ID"
},
"strength": {
"type": "string",
"description": "Strength filter, e.g. 5v5"
},
"player_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "NHL player ID of the shooter"
}
}
}