API documentation

The onice API returns the same statistics as the website as JSON: team, skater and goalie tables in every situation, lines, pairs, with-or-without combinations, game reports and more. Everything is calculated by onice from the NHL's play-by-play and shift data.

Base URL: /api/v1/. All endpoints are read-only GET requests. The list of endpoints is also available as JSON at /api/v1/.

Quick start

Ask for the five skaters with the best expected-goals share at 5-on-5 in 2025-26 (at least 100 minutes):

curl "/api/v1/tables/skaters?seasons=20252026&sit=5v5&toi=100&sort=xgf_pct&limit=5"

Use the console under any endpoint below to try it: choose Sample data to see a fixed example response without touching the real data, or Real data to query the real numbers.

Responses

Every response is JSON with two parts:

{
  "meta": {
    "api": "v1",
    "metrics_version": "1",      // changes when the meaning of a metric changes
    "filters": { ... },          // the filters that were applied
    "count": 3, "total": 120, "offset": 0   // for lists
  },
  "data": [ ... ]                // rows (list) or an object, see each endpoint
}

Percentages are 0 to 100. Times on ice are minutes. Numbers are rounded to four decimals. A value that cannot be calculated (for example SV% with no shots against) is null. In the sample data responses meta.sandbox is true.

List endpoints take limit, offset, sort, order and columns. The value meta.total is the number of rows before paging.

Errors

StatusMeaning
400A parameter is wrong, {"error": "..."} says which. Also returned when the sva situation is asked before its coefficients exist.
404The team, player or game does not exist.
405Only GET is supported.

Common parameters

Most table endpoints accept these filters. Each endpoint below lists the ones it uses.

NameTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
pospositionSkaters only: S all skaters, F forwards, C, L, R, D. The position of the player in each game is used.
Values: S, F, C, L, R, D, G
toiminutes0Minimum time on ice, in minutes, in the selected situation. The API applies no default minimum (0). The website uses 100 for skaters.
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.
splittrue | falsetruetrue: a player who played for several teams is one row per team, false: one combined row.
Values: true, false
gamegame idRestrict the tables to one game (then seasons is not needed).
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Situations and metrics

Situations (sit):

  • all every strength
  • ev even strength
  • 5v5 five skaters a side with both goalies in
  • sva 5v5 adjusted for score and venue (the events of the side that gains from the score or home ice are scaled down, method of Micah Blake McCurdy)
  • pp/pk skater advantage/disadvantage
  • 5v4, 4v5, 3v3 exact strengths
  • enf/ena own/opponent goalie pulled

Views (rate):

  • n counts
  • y every count per 60 minutes (time on ice becomes per game)
  • r relative, the player's or combination's per-60 numbers minus the team's numbers when he or they are off the ice

Naming. cf/ca shot attempts for/against (Corsi), ff/fa unblocked attempts (Fenwick), sf/sa shots on goal, gf/ga goals, xgf/xga expected goals, scf scoring chances, hdcf/mdcf/ldcf high/medium/low danger chances. A _pct suffix is the share for / (for + against). Every column is described with its formula in the glossary and at /api/v1/glossary.

Expected goals and chances are onice's own models and rules (a logistic regression on shot location, type, rebound and rush context, with danger points by shot place). They are not the numbers of any other site.

Endpoints

Glossary of metrics

GET/api/v1/glossary

Every column the tables can return: key, label, description, unit, formula, and the tables that contain it.

ParameterTypeDefaultDescription
tabletable nameOnly metrics of one table.
Values: team, skater_oi, skater_std, goalie, pair, line, wowy, shift, bio

Returns: A list of metrics.

Example request: /api/v1/glossary

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 54
  },
  "data": [
    {
      "key": "gp",
      "label": "GP",
      "description": "Games played: games with time on ice in any situation.",
      "unit": "count",
      "tables": [
        "team",
        "skater_oi",
        "skater_std",
        "goalie",
        "pair",
        "line"
      ],
      "formula": "",
      "rate_scaled": false,
      "version": "1"
    },
    {
      "key": "toi",
      "label": "TOI",
      "description": "Time on ice in the selected situation, minutes (per game in rate mode).",
      "unit": "minutes",
      "tables": [
        "team",
        "skater_oi",
        "skater_std",
        "goalie",
        "pair",
        "line"
      ],
      "formula": "",
      "rate_scaled": false,
      "version": "1"
    },
    {
      "key": "toi_per_gp",
      "label": "TOI/GP",
      "description": "Time on ice per game played, minutes (rate and relative modes).",
      "unit": "minutes",
      "tables": [
        "team",
        "skater_oi",
        "skater_std",
        "goalie",
        "pair",
        "line"
      ],
      "formula": "",
      "rate_scaled": false,
      "version": "1"
    },
    {
      "key": "xga",
      "label": "xGA",
      "description": "Expected goals against: sum of the xG of the shots faced.",
      "unit": "ratio",
      "tables": [
        "team",
        "skater_oi",
        "pair",
        "line",
        "wowy",
        "goalie"
  ... (cut for display)

Default minimum time on ice

GET/api/v1/defaults

The minimums the website applies by default per table and situation. The API itself applies none unless you pass toi.

No parameters.

Returns: An object table -> situation -> minutes.

Example request: /api/v1/defaults

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "unit": "minutes"
  },
  "data": {
    "skater": {
      "all": 100,
      "ev": 100,
      "5v5": 100,
      "sva": 100,
      "pp": 20,
      "pk": 20,
      "5v4": 20,
      "4v5": 20,
      "3v3": 20,
      "enf": 20,
      "ena": 20
    },
    "goalie": {
      "all": 600,
      "ev": 600,
      "5v5": 600,
      "sva": 600,
      "pp": 20,
      "pk": 20,
      "5v4": 20,
      "4v5": 20,
      "3v3": 20,
      "enf": 20,
      "ena": 20
    },
    "pair": {
      "all": 100,
      "ev": 100,
      "5v5": 100,
      "sva": 100,
      "pp": 20,
      "pk": 20,
      "5v4": 20,
      "4v5": 20,
      "3v3": 20,
      "enf": 20,
      "ena": 20
    },
    "line": {
      "all": 50,
      "ev": 50,
      "5v5": 50,
      "sva": 50,
      "pp": 20,
      "pk": 20,
      "5v4": 20,
      "4v5": 20,
      "3v3": 20,
      "enf": 20,
      "ena": 20
    }
  }
}

Teams (search by attributes)

GET/api/v1/teams

Teams with their id, current abbreviation and name, franchise and active seasons. Search by any attribute. Abbreviations and names also match the team's historical names (the NHL gives a team a new id when it is renamed or moves). Use the id wherever a team id is needed.

ParameterTypeDefaultDescription
abbrevtextAbbreviation, current or historical (case-insensitive).
nametextPart of the current or a historical name or of the team name.
citytextPart of the city or region of the team in any season.
franchisefranchise idTeams of one franchise (all its ids, past and present).
seasonseason idTeams that played in that season.
activetrue | falseOnly active (true) or defunct/renamed ids (false).
Values: true, false
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per team. Supports limit, offset, sort, order, columns.

Example request: /api/v1/teams?limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 1,
    "total": 1,
    "offset": 0,
    "filters": {
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "team_id": 21,
      "abbrev": "COL",
      "name": "Colorado Avalanche",
      "franchise_id": 27,
      "franchise": "Colorado Avalanche",
      "is_active": true,
      "first_season": 20102011,
      "last_season": 20262027
    }
  ]
}

Standings

GET/api/v1/standings

One row per team: games played (gp), wins (w), losses in regulation (l), overtime and shootout losses (otl), points, point % (0-100), regulation wins (rw), regulation and overtime wins (row), goals for (gf), goals against (ga) and goal differential (gd), ranked by points. Any set of games can be summed (dates, venue). The site charts of this page (where the points come from, goals against chances) are drawn from these columns and from gf_pct and xgf_pct of tables/teams.

ParameterTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per team. Supports limit, offset, sort, order, columns.

Example request: /api/v1/standings?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 3,
    "total": 32,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "team_id": 21,
      "gp": 82,
      "w": 55,
      "l": 16,
      "otl": 11,
      "points": 121,
      "rw": 48,
      "row": 51,
      "gf": 298,
      "ga": 197,
      "gd": 101,
      "point_pct": 73.78,
      "team": "COL"
    },
    {
      "team_id": 12,
      "gp": 82,
      "w": 53,
      "l": 22,
      "otl": 7,
      "points": 113,
      "rw": 39,
      "row": 48,
      "gf": 291,
      "ga": 236,
      "gd": 55,
      "point_pct": 68.9,
      "team": "CAR"
    },
    {
      "team_id": 25,
      "gp": 82,
      "w": 50,
      "l": 20,
      "otl": 12,
      "points": 112,
      "rw": 38,
      "row": 44,
      "gf": 273,
      "ga": 222,
      "gd": 51,
      "point_pct": 68.29,
      "team": "DAL"
    }
  ]
}

Team table

GET/api/v1/tables/teams

One row per team: results and every on-ice column in the selected situation (Corsi, Fenwick, shots, goals, expected goals, scoring chances, high/medium/low danger, PDO, zone faceoffs).

ParameterTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
pospositionSkaters only: S all skaters, F forwards, C, L, R, D. The position of the player in each game is used.
Values: S, F, C, L, R, D, G
toiminutes0Minimum time on ice, in minutes, in the selected situation. The API applies no default minimum (0). The website uses 100 for skaters.
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.
splittrue | falsetruetrue: a player who played for several teams is one row per team, false: one combined row.
Values: true, false
gamegame idRestrict the tables to one game (then seasons is not needed).
vstrue | falsefalsetrue: the VS view, what all opponents together did against each team.
Values: true, false
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per team. Supports limit, offset, sort, order, columns.

Example request: /api/v1/tables/teams?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 3,
    "total": 32,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "5v5",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "team_id": 21,
      "team": "COL",
      "cf": 4610,
      "ca": 3518,
      "cf_pct": 56.7175,
      "ff": 3278,
      "fa": 2582,
      "ff_pct": 55.9386,
      "sf": 2196,
      "sa": 1645,
      "sf_pct": 57.1726,
      "gf": 216,
      "ga": 128,
      "gf_pct": 62.7907,
      "xgf": 202.8755,
      "xga": 153.816,
      "xgf_pct": 56.877,
      "scf": 2201,
      "sca": 1616,
      "scf_pct": 57.6631,
      "scsf": 1161,
      "scsa": 807,
      "scsf_pct": 58.9939,
      "scgf": 169,
      "scga": 101,
      "scgf_pct": 62.5926,
      "hdcf": 877,
      "hdca": 704,
      "hdcf_pct": 55.4712,
      "hdsf": 554,
      "hdsa": 428,
      "hdsf_pct": 56.4155,
      "hdgf": 100,
      "hdga": 70,
      "hdgf_pct": 58.8235,
      "mdcf": 1324,
      "mdca": 912,
      "mdcf_pct": 59.2129,
      "mdsf": 607,
      "mdsa": 379,
      "mdsf_pct": 61.5619,
      "mdgf": 69,
      "mdga": 31,
      "mdgf_pct": 69.0,
      "ldcf": 2317,
      "ldca": 1805,
      "ldcf_pct": 56.2106,
      "ldsf": 949,
  ... (cut for display)

Skaters

GET/api/v1/tables/skaters

kind=oi: what the team did while the skater was on the ice, with zone starts and faceoffs. kind=std: the skater's own numbers (goals, assists, shots, expected goals, penalties, hits, faceoffs).

ParameterTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
pospositionSkaters only: S all skaters, F forwards, C, L, R, D. The position of the player in each game is used.
Values: S, F, C, L, R, D, G
toiminutes0Minimum time on ice, in minutes, in the selected situation. The API applies no default minimum (0). The website uses 100 for skaters.
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.
splittrue | falsetruetrue: a player who played for several teams is one row per team, false: one combined row.
Values: true, false
gamegame idRestrict the tables to one game (then seasons is not needed).
kindoi | stdoioi on-ice numbers, std individual numbers.
Values: oi, std
playerlist of player idsOnly these players (NHL player ids, separated by commas).
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per player (and team). Supports limit, offset, sort, order, columns.

Example request: /api/v1/tables/skaters?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 3,
    "total": 844,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "5v5",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 100.0,
      "split": true
    }
  },
  "data": [
    {
      "player_id": 8481606,
      "player": "Jordan Spence",
      "position": "D",
      "team_id": 9,
      "team": "OTT",
      "cf": 1371,
      "ca": 906,
      "cf_pct": 60.2108,
      "ff": 1005,
      "fa": 653,
      "ff_pct": 60.6152,
      "sf": 625,
      "sa": 432,
      "sf_pct": 59.1296,
      "gf": 58,
      "ga": 43,
      "gf_pct": 57.4257,
      "xgf": 64.0123,
      "xga": 38.8411,
      "xgf_pct": 62.2364,
      "scf": 667,
      "sca": 404,
      "scf_pct": 62.2782,
      "scsf": 341,
      "scsa": 217,
      "scsf_pct": 61.1111,
      "scgf": 52,
      "scga": 35,
      "scgf_pct": 59.7701,
      "hdcf": 298,
      "hdca": 184,
      "hdcf_pct": 61.8257,
      "hdsf": 183,
      "hdsa": 120,
      "hdsf_pct": 60.396,
      "hdgf": 34,
      "hdga": 27,
      "hdgf_pct": 55.7377,
      "mdcf": 369,
      "mdca": 220,
      "mdcf_pct": 62.6486,
      "mdsf": 158,
      "mdsa": 97,
      "mdsf_pct": 61.9608,
      "mdgf": 18,
      "mdga": 8,
      "mdgf_pct": 69.2308,
      "ldcf": 680,
  ... (cut for display)

Goalies

GET/api/v1/tables/goalies

Shots against, saves, goals against, SV%, GAA, goals saved above average (GSAA) and above expected (GSAx), by shot danger, with shot distances.

ParameterTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
pospositionSkaters only: S all skaters, F forwards, C, L, R, D. The position of the player in each game is used.
Values: S, F, C, L, R, D, G
toiminutes0Minimum time on ice, in minutes, in the selected situation. The API applies no default minimum (0). The website uses 100 for skaters.
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.
splittrue | falsetruetrue: a player who played for several teams is one row per team, false: one combined row.
Values: true, false
gamegame idRestrict the tables to one game (then seasons is not needed).
playerlist of player idsOnly these players (NHL player ids, separated by commas).
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per goalie (and team). Supports limit, offset, sort, order, columns.

Example request: /api/v1/tables/goalies?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 3,
    "total": 73,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 600.0,
      "split": true
    }
  },
  "data": [
    {
      "player_id": 8478872,
      "player": "Karel Vejmelka",
      "position": "G",
      "team_id": 68,
      "team": "UTA",
      "shots_against": 1627,
      "goals_against": 169,
      "saves": 1458,
      "sv_pct": 89.6128,
      "gaa": 2.7459,
      "xga": 180.8115,
      "gsaa": 0.9459,
      "gsax": 11.8115,
      "xsv_pct": 88.8868,
      "sv_above_expected": 0.726,
      "xgsaa_pct": 6.5325,
      "hd_shots_against": 443,
      "hd_saves": 353,
      "hd_goals_against": 90,
      "hdsv_pct": 79.684,
      "hdgaa": 1.4623,
      "hdgsaa": -6.9416,
      "md_shots_against": 424,
      "md_saves": 371,
      "md_goals_against": 53,
      "mdsv_pct": 87.5,
      "mdgaa": 0.8611,
      "mdgsaa": 1.7557,
      "ld_shots_against": 660,
      "ld_saves": 634,
      "ld_goals_against": 26,
      "ldsv_pct": 96.0606,
      "ldgaa": 0.4224,
      "ldgsaa": 2.9217,
      "rebounds_allowed": 165,
      "xrebounds_allowed": 157.7745,
      "rebounds_saved_above_expected": -7.2255,
      "rebound_pct": 11.3169,
      "xrebound_pct": 10.8213,
      "freezes": 331,
      "xfreezes": 306.3533,
      "freezes_above_expected": 24.6467,
      "freeze_pct": 22.7023,
      "rush_attempts_against": 54,
      "rebound_attempts_against": 349,
      "avg_shot_distance": 36.4745,
      "avg_goal_distance": 19.4689,
      "rapm_xgf60": null,
  ... (cut for display)

Team games

GET/api/v1/tables/games

One row per team and game (two rows per game): the date, who played whom and where, the result, and the on-ice columns of the whole game in the selected situation and score state (Corsi, Fenwick, shots, goals, expected goals, scoring chances, high, medium and low danger, PDO, plus-minus). The same rows as the Games page. Attendance is not in the data we collect.

ParameterTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per team and game. Supports limit, offset, sort, order, columns.

Example request: /api/v1/tables/games?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 4,
    "total": 82,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "5v5",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "team": [
        21
      ],
      "split": true
    }
  },
  "data": [
    {
      "game_id": 2025021312,
      "game_date": "2026-04-16",
      "team_id": 21,
      "team": "COL",
      "opponent": "SEA",
      "game": "2026-04-16 COL vs SEA",
      "result": "W 2\u20130",
      "cf": 58,
      "ca": 27,
      "cf_pct": 68.2353,
      "ff": 44,
      "fa": 20,
      "ff_pct": 68.75,
      "sf": 29,
      "sa": 14,
      "sf_pct": 67.4419,
      "gf": 2,
      "ga": 0,
      "gf_pct": 100.0,
      "xgf": 2.1596,
      "xga": 0.4649,
      "xgf_pct": 82.2879,
      "scf": 24,
      "sca": 4,
      "scf_pct": 85.7143,
      "scsf": 12,
      "scsa": 1,
      "scsf_pct": 92.3077,
      "scgf": 1,
      "scga": 0,
      "scgf_pct": 100.0,
      "hdcf": 9,
      "hdca": 3,
      "hdcf_pct": 75.0,
      "hdsf": 3,
      "hdsa": 0,
      "hdsf_pct": 100.0,
      "hdgf": 0,
      "hdga": 0,
      "hdgf_pct": null,
      "mdcf": 15,
      "mdca": 1,
      "mdcf_pct": 93.75,
      "mdsf": 9,
      "mdsa": 1,
  ... (cut for display)

Player bios

GET/api/v1/tables/bios

The players who played in the selected games (season, game type, team, position, dates) with games played and time on ice, age, date of birth, birth city, state or province and country, height in inches, weight in pounds, shooting or catching hand and the draft (year, team, round, pick in round, overall pick). The same rows as the Bios view of the Player season totals page.

ParameterTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.
pospositionSkaters only: S all skaters, F forwards, C, L, R, D. The position of the player in each game is used.
Values: S, F, C, L, R, D, G
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per player (and team). Supports limit, offset, sort, order, columns.

Example request: /api/v1/tables/bios?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 3,
    "total": 36,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "team": [
        21
      ],
      "split": true
    }
  },
  "data": [
    {
      "player_id": 8475809,
      "player": "Scott Wedgewood",
      "position": "G",
      "birth_date": "1992-08-14",
      "gp": 45,
      "toi": 2549.0667,
      "team_id": 21,
      "team": "COL",
      "age": 34,
      "birth_city": "Brampton",
      "birth_state_province": "Ontario",
      "birth_country": "CAN",
      "height_in": 74,
      "weight_lbs": 201,
      "shoots_catches": "L",
      "draft_year": 2010,
      "draft_team": "NJD",
      "draft_round": 3,
      "draft_pick": 24,
      "draft_overall": 84
    },
    {
      "player_id": 8478406,
      "player": "Mackenzie Blackwood",
      "position": "G",
      "birth_date": "1996-12-09",
      "gp": 38,
      "toi": 2155.6667,
      "team_id": 21,
      "team": "COL",
      "age": 29,
      "birth_city": "Thunder Bay",
      "birth_state_province": "Ontario",
      "birth_country": "CAN",
      "height_in": 76,
      "weight_lbs": 225,
      "shoots_catches": "L",
      "draft_year": 2015,
      "draft_team": "NJD",
      "draft_round": 2,
      "draft_pick": 12,
      "draft_overall": 42
    },
    {
      "player_id": 8480069,
  ... (cut for display)

Defensive pairs

GET/api/v1/tables/pairs

Two defensemen who were the only two defensemen on the ice, in any situation, with the full set of on-ice columns.

ParameterTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
pospositionSkaters only: S all skaters, F forwards, C, L, R, D. The position of the player in each game is used.
Values: S, F, C, L, R, D, G
toiminutes0Minimum time on ice, in minutes, in the selected situation. The API applies no default minimum (0). The website uses 100 for skaters.
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.
splittrue | falsetruetrue: a player who played for several teams is one row per team, false: one combined row.
Values: true, false
gamegame idRestrict the tables to one game (then seasons is not needed).
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per pair. Supports limit, offset, sort, order, columns.

Example request: /api/v1/tables/pairs?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 3,
    "total": 322,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "5v5",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 100.0,
      "split": true
    }
  },
  "data": [
    {
      "team_id": 55,
      "team": "SEA",
      "player_1_id": 8476457,
      "player_1": "Adam Larsson",
      "player_2_id": 8478407,
      "player_2": "Vince Dunn",
      "cf": 1063,
      "ca": 1304,
      "cf_pct": 44.9092,
      "ff": 761,
      "fa": 932,
      "ff_pct": 44.9498,
      "sf": 494,
      "sa": 576,
      "sf_pct": 46.1682,
      "gf": 48,
      "ga": 53,
      "gf_pct": 47.5248,
      "xgf": 44.8532,
      "xga": 55.7229,
      "xgf_pct": 44.5963,
      "scf": 484,
      "sca": 585,
      "scf_pct": 45.276,
      "scsf": 237,
      "scsa": 284,
      "scsf_pct": 45.4894,
      "scgf": 40,
      "scga": 39,
      "scgf_pct": 50.6329,
      "hdcf": 187,
      "hdca": 269,
      "hdcf_pct": 41.0088,
      "hdsf": 105,
      "hdsa": 153,
      "hdsf_pct": 40.6977,
      "hdgf": 25,
      "hdga": 22,
      "hdgf_pct": 53.1915,
      "mdcf": 297,
      "mdca": 316,
      "mdcf_pct": 48.4502,
      "mdsf": 132,
      "mdsa": 131,
      "mdsf_pct": 50.1901,
      "mdgf": 15,
      "mdga": 17,
      "mdgf_pct": 46.875,
  ... (cut for display)

Forward lines

GET/api/v1/tables/lines

Three forwards who were the only three forwards on the ice at 5v5 and took at least two faceoffs together in a game, with on-ice columns and rush/rebound attempts.

ParameterTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
pospositionSkaters only: S all skaters, F forwards, C, L, R, D. The position of the player in each game is used.
Values: S, F, C, L, R, D, G
toiminutes0Minimum time on ice, in minutes, in the selected situation. The API applies no default minimum (0). The website uses 100 for skaters.
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.
splittrue | falsetruetrue: a player who played for several teams is one row per team, false: one combined row.
Values: true, false
gamegame idRestrict the tables to one game (then seasons is not needed).
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per line. Supports limit, offset, sort, order, columns.

Example request: /api/v1/tables/lines?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 3,
    "total": 467,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "5v5",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 50.0,
      "split": true
    }
  },
  "data": [
    {
      "team_id": 52,
      "team": "WPG",
      "player_1_id": 8480014,
      "player_1": "Gabriel Vilardi",
      "player_1_pos": "C",
      "player_2_id": 8476460,
      "player_2": "Mark Scheifele",
      "player_2_pos": "C",
      "player_3_id": 8478398,
      "player_3": "Kyle Connor",
      "player_3_pos": "L",
      "cf": 579,
      "ca": 611,
      "cf_pct": 48.6555,
      "ff": 439,
      "fa": 474,
      "ff_pct": 48.0832,
      "sf": 285,
      "sa": 334,
      "sf_pct": 46.042,
      "gf": 40,
      "ga": 38,
      "gf_pct": 51.2821,
      "xgf": 30.2237,
      "xga": 33.2209,
      "xgf_pct": 47.6379,
      "scf": 326,
      "sca": 307,
      "scf_pct": 51.5008,
      "scsf": 163,
      "scsa": 176,
      "scsf_pct": 48.0826,
      "scgf": 35,
      "scga": 36,
      "scgf_pct": 49.2958,
      "hdcf": 121,
      "hdca": 138,
      "hdcf_pct": 46.7181,
      "hdsf": 67,
      "hdsa": 94,
      "hdsf_pct": 41.6149,
      "hdgf": 16,
      "hdga": 25,
      "hdgf_pct": 39.0244,
      "mdcf": 205,
      "mdca": 169,
      "mdcf_pct": 54.8128,
      "mdsf": 96,
  ... (cut for display)

Shift report

GET/api/v1/tables/shifts

Number of shifts, average length, standard deviation, and shifts that are short or long for the player (more than one or two standard deviations from his own average). A shift counts in the situation it began in.

ParameterTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
pospositionSkaters only: S all skaters, F forwards, C, L, R, D. The position of the player in each game is used.
Values: S, F, C, L, R, D, G
toiminutes0Minimum time on ice, in minutes, in the selected situation. The API applies no default minimum (0). The website uses 100 for skaters.
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.
splittrue | falsetruetrue: a player who played for several teams is one row per team, false: one combined row.
Values: true, false
gamegame idRestrict the tables to one game (then seasons is not needed).
playerlist of player idsOnly these players (NHL player ids, separated by commas).
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per skater. Supports limit, offset, sort, order, columns.

Example request: /api/v1/tables/shifts?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 3,
    "total": 33,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "team": [
        21
      ],
      "split": true
    }
  },
  "data": [
    {
      "player_id": 8480069,
      "player": "Cale Makar",
      "position": "D",
      "team_id": 21,
      "team": "COL",
      "shifts": 1938,
      "avg_shift": 57.6956,
      "std_dev": 27.7873,
      "short_shifts": 207,
      "long_shifts": 252,
      "extra_short": 2,
      "extra_long": 77,
      "toi": 1863.5667
    },
    {
      "player_id": 8477492,
      "player": "Nathan MacKinnon",
      "position": "C",
      "team_id": 21,
      "team": "COL",
      "shifts": 1866,
      "avg_shift": 57.2653,
      "std_dev": 28.3363,
      "short_shifts": 175,
      "long_shifts": 232,
      "extra_short": 0,
      "extra_long": 103,
      "toi": 1780.95
    },
    {
      "player_id": 8480039,
      "player": "Martin Necas",
      "position": "C",
      "team_id": 21,
      "team": "COL",
      "shifts": 1746,
      "avg_shift": 57.6237,
      "std_dev": 27.4371,
      "short_shifts": 207,
      "long_shifts": 216,
      "extra_short": 1,
      "extra_long": 80,
      "toi": 1676.85
    }
  ]
  ... (cut for display)

Team overview by situation

GET/api/v1/teams/{team_id}/overview

One row per situation (all, ev, 5v5, sva when available, 5v4, 4v5) with games, time and the on-ice columns.

ParameterTypeDefaultDescription
team_id required, in the pathidFor the sample: 21.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).

Returns: A list of situation rows.

Example request: /api/v1/teams/21/overview?seasons=20252026

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "situation": "all",
      "cf": 5709,
      "ca": 4480,
      "cf_pct": 56.031,
      "ff": 4141,
      "fa": 3320,
      "ff_pct": 55.5019,
      "sf": 2768,
      "sa": 2144,
      "sf_pct": 56.3518,
      "gf": 298,
      "ga": 197,
      "gf_pct": 60.202,
      "xgf": 299.9141,
      "xga": 231.3871,
      "xgf_pct": 56.449,
      "scf": 2767,
      "sca": 2134,
      "scf_pct": 56.4579,
      "scsf": 1479,
      "scsa": 1112,
      "scsf_pct": 57.0822,
      "scgf": 220,
      "scga": 152,
      "scgf_pct": 59.1398,
      "hdcf": 1104,
      "hdca": 931,
      "hdcf_pct": 54.2506,
      "hdsf": 701,
      "hdsa": 573,
      "hdsf_pct": 55.0235,
      "hdgf": 131,
      "hdga": 96,
      "hdgf_pct": 57.7093,
      "mdcf": 1663,
      "mdca": 1203,
      "mdcf_pct": 58.0251,
      "mdsf": 778,
      "mdsa": 539,
      "mdsf_pct": 59.0737,
      "mdgf": 89,
      "mdga": 56,
      "mdgf_pct": 61.3793,
      "ldcf": 2790,
      "ldca": 2205,
      "ldcf_pct": 55.8559,
      "ldsf": 1171,
      "ldsa": 908,
      "ldsf_pct": 56.3252,
      "ldgf": 70,
      "ldga": 39,
  ... (cut for display)

Head to head

GET/api/v1/teams/{team_id}/head-to-head

Results against each opponent (wins, losses, overtime losses, points) and the on-ice columns of the selected situation in those games. By default the rows come in the order of the Natural Stat Trick report: the opponents of the division, then the rest of the conference, then the other conference, each group followed by a subtotal row (subtotal true: vs Division, vs Rest of Conference, vs Out of Conference). Every row has its group. Pass groups=0 for a plain list of opponents.

ParameterTypeDefaultDescription
team_id required, in the pathidFor the sample: 21.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).
groupsnumber11 (default): group the opponents with subtotals, 0: a plain list.
Values: 0, 1
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per opponent. Supports limit, offset, sort, order, columns.

Example request: /api/v1/teams/21/head-to-head?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 3,
    "total": 34,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "5v5",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "opponent_id": 16,
      "opponent": "CHI",
      "group": "Division",
      "w": 3,
      "l": 0,
      "otl": 0,
      "row": 3,
      "points": 6,
      "point_pct": 100.0,
      "cf": 181,
      "ca": 107,
      "cf_pct": 62.8472,
      "ff": 136,
      "fa": 80,
      "ff_pct": 62.963,
      "sf": 91,
      "sa": 48,
      "sf_pct": 65.4676,
      "gf": 5,
      "ga": 1,
      "gf_pct": 83.3333,
      "xgf": 7.5273,
      "xga": 5.0745,
      "xgf_pct": 59.7316,
      "scf": 86,
      "sca": 50,
      "scf_pct": 63.2353,
      "scsf": 48,
      "scsa": 27,
      "scsf_pct": 64.0,
      "scgf": 5,
      "scga": 1,
      "scgf_pct": 83.3333,
      "hdcf": 34,
      "hdca": 25,
      "hdcf_pct": 57.6271,
      "hdsf": 23,
      "hdsa": 14,
      "hdsf_pct": 62.1622,
      "hdgf": 2,
      "hdga": 1,
      "hdgf_pct": 66.6667,
      "mdcf": 52,
      "mdca": 25,
      "mdcf_pct": 67.5325,
      "mdsf": 25,
      "mdsa": 13,
      "mdsf_pct": 65.7895,
  ... (cut for display)

Rolling averages

GET/api/v1/teams/{team_id}/rolling

Sums over the last 10 or 25 games after every game: shot attempts and expected goals for and against, goals for above expected, goals saved above expected, save percentage.

ParameterTypeDefaultDescription
team_id required, in the pathidFor the sample: 21.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
window10 | 2510Number of games in the window.
Values: 10, 25

Returns: One row per game once the window is full.

Example request: /api/v1/teams/21/rolling?seasons=20252026

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "window": 10,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "5v5",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "game_id": 2025020140,
      "game_date": "2025-10-26",
      "opponent": "NJD",
      "cf": 590,
      "ca": 418,
      "cf_pct": 58.5317,
      "xgf": 24.4674,
      "xga": 16.6235,
      "xgf_pct": 59.5445,
      "gf_above_expected": 0.5326,
      "ga_saved_above_expected": -1.3765,
      "sv_pct": 90.4762
    },
    {
      "game_id": 2025020161,
      "game_date": "2025-10-28",
      "opponent": "NJD",
      "cf": 600,
      "ca": 422,
      "cf_pct": 58.7084,
      "xgf": 25.3244,
      "xga": 17.516,
      "xgf_pct": 59.1134,
      "gf_above_expected": 0.6756,
      "ga_saved_above_expected": -4.484,
      "sv_pct": 88.8325
    },
    {
      "game_id": 2025020178,
      "game_date": "2025-10-31",
      "opponent": "VGK",
      "cf": 593,
      "ca": 419,
      "cf_pct": 58.5968,
      "xgf": 26.7134,
      "xga": 16.9418,
      "xgf_pct": 61.1918,
      "gf_above_expected": 1.2866,
      "ga_saved_above_expected": -6.0582,
      "sv_pct": 87.8307
    },
    {
      "game_id": 2025020184,
      "game_date": "2025-11-01",
      "opponent": "SJS",
      "cf": 594,
      "ca": 423,
      "cf_pct": 58.4071,
      "xgf": 26.7691,
      "xga": 16.2808,
  ... (cut for display)

Team NHL EDGE tracking

GET/api/v1/teams/{team_id}/edge

NHL EDGE tracking numbers of a team, one row per season and game type (from 2021-22): shot speed and speed bands, top skating speed and bursts, distance skated, share of time by zone (all situations and by strength), shot attempt and shots-on-goal differential per game, and shots and goals by 17 ice areas.

ParameterTypeDefaultDescription
team_id required, in the pathidFor the sample: 21.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3

Returns: A list of rows, one per season.

Example request: /api/v1/teams/21/edge?seasons=20252026

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "game_type": 2,
      "gp": 82,
      "top_shot_speed": 99.2,
      "avg_shot_speed": 56.9464,
      "shots_100_plus": 0,
      "shots_90_100": 33,
      "shots_80_90": 339,
      "shots_70_80": 942,
      "top_skating_speed": 23.3719,
      "bursts_22_plus": 61,
      "bursts_20_22": 1520,
      "bursts_18_20": 7731,
      "distance_total": 3772.3996,
      "distance_per_60": 9.2637,
      "distance_max_game": 49.4242,
      "oz_time_pct": 0.4089,
      "nz_time_pct": 0.1812,
      "dz_time_pct": 0.4098,
      "shot_attempt_differential": 2.1951,
      "sog_differential": 0.0403,
      "shot_locations": [
        {
          "sog": 20,
          "area": "Behind the Net",
          "goals": 0
        },
        {
          "sog": 63,
          "area": "Beyond Red Line",
          "goals": 6
        },
        {
          "sog": 216,
          "area": "Center Point",
          "goals": 6
        },
        {
          "sog": 75,
          "area": "Crease",
          "goals": 22
        },
        {
          "sog": 231,
          "area": "High Slot",
          "goals": 28
        },
        {
          "sog": 224,
          "area": "L Circle",
          "goals": 26
        }
  ... (cut for display)

Team profile

GET/api/v1/teams/{team_id}

Attributes of a team, the other ids of its franchise, its name, city and abbreviation season by season and its regular-season record (games, wins, losses, overtime losses, points) for every season.

ParameterTypeDefaultDescription
team_id required, in the pathidFor the sample: 21.

Returns: An object.

Example request: /api/v1/teams/21

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1"
  },
  "data": {
    "team_id": 21,
    "abbrev": "COL",
    "name": "Colorado Avalanche",
    "is_active": true,
    "franchise_id": 27,
    "franchise": "Colorado Avalanche",
    "franchise_team_ids": [
      21
    ],
    "seasons": [
      {
        "season": 20262027,
        "name": "Colorado Avalanche",
        "city": "Colorado",
        "team_name": "Avalanche",
        "abbrev": "COL",
        "record": {
          "gp": 7,
          "w": 4,
          "l": 2,
          "otl": 1,
          "points": 9,
          "row": 4
        }
      },
      {
        "season": 20252026,
        "name": "Colorado Avalanche",
        "city": "Colorado",
        "team_name": "Avalanche",
        "abbrev": "COL",
        "record": {
          "gp": 82,
          "w": 55,
          "l": 16,
          "otl": 11,
          "points": 121,
          "row": 51
        }
      },
      {
        "season": 20242025,
        "name": "Colorado Avalanche",
        "city": "Colorado",
        "team_name": "Avalanche",
        "abbrev": "COL",
        "record": {
          "gp": 82,
          "w": 49,
          "l": 29,
          "otl": 4,
          "points": 102,
          "row": 45
        }
      },
      {
        "season": 20232024,
        "name": "Colorado Avalanche",
        "city": "Colorado",
        "team_name": "Avalanche",
        "abbrev": "COL",
        "record": {
          "gp": 82,
          "w": 50,
  ... (cut for display)

Team game log

GET/api/v1/teams/{team_id}/games

One row per game of the team in date order: opponent, venue, score, result, points and every on-ice column of the selected situation and score state in that game.

ParameterTypeDefaultDescription
team_id required, in the pathidFor the sample: 21.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per game. Supports limit, offset, sort, order, columns.

Example request: /api/v1/teams/21/games?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 3,
    "total": 82,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "5v5",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "game_id": 2025020003,
      "game_date": "2025-10-07",
      "season": 20252026,
      "game_type": 2,
      "decided_in": "REG",
      "team_id": 21,
      "is_home": false,
      "opponent_id": 26,
      "opponent": "LAK",
      "goals_for": 4,
      "goals_against": 1,
      "result": "W",
      "points": 2,
      "cf": 38,
      "ca": 48,
      "cf_pct": 44.186,
      "ff": 25,
      "fa": 29,
      "ff_pct": 46.2963,
      "sf": 17,
      "sa": 15,
      "sf_pct": 53.125,
      "gf": 3,
      "ga": 0,
      "gf_pct": 100.0,
      "xgf": 1.4262,
      "xga": 1.4239,
      "xgf_pct": 50.0404,
      "scf": 17,
      "sca": 18,
      "scf_pct": 48.5714,
      "scsf": 10,
      "scsa": 7,
      "scsf_pct": 58.8235,
      "scgf": 2,
      "scga": 0,
      "scgf_pct": 100.0,
      "hdcf": 8,
      "hdca": 7,
      "hdcf_pct": 53.3333,
      "hdsf": 4,
      "hdsa": 5,
      "hdsf_pct": 44.4444,
      "hdgf": 1,
      "hdga": 0,
      "hdgf_pct": 100.0,
      "mdcf": 9,
      "mdca": 11,
  ... (cut for display)

Team roster

GET/api/v1/teams/{team_id}/roster

Everyone who played for the team in the seasons: skaters with their individual numbers (goals, assists, points, shots, expected goals, penalties, hits ...) and goalies with theirs (SV%, GAA, GSAA, GSAx ...).

ParameterTypeDefaultDescription
team_id required, in the pathidFor the sample: 21.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
toiminutes0Minimum time on ice, in minutes, in the selected situation. The API applies no default minimum (0). The website uses 100 for skaters.
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).

Returns: An object: skaters, goalies.

Example request: /api/v1/teams/21/roster?seasons=20252026

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": {
    "skaters": [
      {
        "player_id": 8480069,
        "player": "Cale Makar",
        "position": "D",
        "team_id": 21,
        "team": "COL",
        "goals": 20,
        "assists1": 33,
        "assists2": 26,
        "shots": 199,
        "icf": 546,
        "iff": 326,
        "ixg": 15.8444,
        "isc": 195,
        "ihdcf": 21,
        "rush_attempts": 2,
        "rebounds_created": 33,
        "created_xg": 4.3378,
        "penalties": 12,
        "minor": 12,
        "major": 0,
        "misconduct": 0,
        "pim": 24,
        "penalties_drawn": 23,
        "giveaways": 86,
        "dz_giveaways": 52,
        "takeaways": 40,
        "hits": 35,
        "hits_taken": 42,
        "shots_blocked": 118,
        "faceoffs_won": 0,
        "faceoffs_lost": 0,
        "assists": 59,
        "points": 79,
        "ipp": 57.2464,
        "sh_pct": 10.0503,
        "faceoff_pct": null,
        "ithru_pct": 59.707,
        "shooting_talent_pct": null,
        "talent_ixg": null,
        "gar": 10.876,
        "war": 1.8127,
        "spar": 3.6253,
        "gar_evo": -1.7142,
        "gar_evd": 0.7443,
        "gar_finishing": 4.1556,
        "gar_take": 2.1838,
        "gar_draw": 0.4899,
        "edge_top_shot_speed": null,
        "edge_avg_shot_speed": null,
        "edge_top_skating_speed": null,
  ... (cut for display)

Teammates (with or without)

GET/api/v1/players/{player_id}/teammates

For each teammate: ice time together and the numbers with him, the player's numbers without him, and the teammate's numbers without the player.

ParameterTypeDefaultDescription
player_id required, in the pathidFor the sample: 8477492.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
team requiredid or abbreviationThe player's team in those seasons (one id or abbreviation).

Returns: One row per teammate.

Example request: /api/v1/players/8477492/teammates?seasons=20252026&team=COL

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "5v5",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "player_id": 8480039,
      "player": "Martin Necas",
      "position": "C",
      "team": "COL",
      "team_id": 21,
      "toi_with": 1052.7833,
      "toi_without": 201.6333,
      "with": {
        "cf": 1331,
        "ca": 995,
        "cf_pct": 57.2227,
        "ff": 938,
        "fa": 756,
        "ff_pct": 55.3719,
        "sf": 640,
        "sa": 481,
        "sf_pct": 57.0919,
        "gf": 84,
        "ga": 36,
        "gf_pct": 70.0,
        "xgf": 63.1011,
        "xga": 47.9138,
        "xgf_pct": 56.8402,
        "scf": 689,
        "sca": 489,
        "scf_pct": 58.489,
        "scsf": 371,
        "scsa": 249,
        "scsf_pct": 59.8387,
        "scgf": 66,
        "scga": 32,
        "scgf_pct": 67.3469,
        "hdcf": 254,
        "hdca": 222,
        "hdcf_pct": 53.3613,
        "hdsf": 163,
        "hdsa": 134,
        "hdsf_pct": 54.8822,
        "hdgf": 38,
        "hdga": 22,
        "hdgf_pct": 63.3333,
        "mdcf": 435,
        "mdca": 267,
        "mdcf_pct": 61.9658,
        "mdsf": 208,
        "mdsa": 115,
        "mdsf_pct": 64.3963,
        "mdgf": 28,
        "mdga": 10,
        "mdgf_pct": 73.6842,
        "ldcf": 623,
  ... (cut for display)

Opposition

GET/api/v1/players/{player_id}/opposition

For each opponent: the player's numbers while that opponent was on the ice.

ParameterTypeDefaultDescription
player_id required, in the pathidFor the sample: 8477492.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
team requiredid or abbreviationThe player's team in those seasons (one id or abbreviation).

Returns: One row per opponent.

Example request: /api/v1/players/8477492/opposition?seasons=20252026&team=COL

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "5v5",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "player_id": 8476945,
      "player": "Connor Hellebuyck",
      "position": "G",
      "team": "COL",
      "team_id": 21,
      "toi_with": 73.25,
      "toi_without": null,
      "with": {
        "cf": 81,
        "ca": 58,
        "cf_pct": 58.2734,
        "ff": 56,
        "fa": 45,
        "ff_pct": 55.4455,
        "sf": 36,
        "sa": 32,
        "sf_pct": 52.9412,
        "gf": 2,
        "ga": 4,
        "gf_pct": 33.3333,
        "xgf": 3.7086,
        "xga": 1.9607,
        "xgf_pct": 65.4157,
        "scf": 42,
        "sca": 28,
        "scf_pct": 60.0,
        "scsf": 22,
        "scsa": 15,
        "scsf_pct": 59.4595,
        "scgf": 2,
        "scga": 4,
        "scgf_pct": 33.3333,
        "hdcf": 17,
        "hdca": 7,
        "hdcf_pct": 70.8333,
        "hdsf": 11,
        "hdsa": 4,
        "hdsf_pct": 73.3333,
        "hdgf": 2,
        "hdga": 2,
        "hdgf_pct": 50.0,
        "mdcf": 25,
        "mdca": 21,
        "mdcf_pct": 54.3478,
        "mdsf": 11,
        "mdsa": 11,
        "mdsf_pct": 50.0,
        "mdgf": 0,
        "mdga": 2,
        "mdgf_pct": 0.0,
        "ldcf": 39,
  ... (cut for display)

Scoring links

GET/api/v1/players/{player_id}/scoring

Who assisted on his goals, whom he assisted, with whom he assisted together, and who else was on the ice for his points.

ParameterTypeDefaultDescription
player_id required, in the pathidFor the sample: 8477492.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
teamid or abbreviationRestrict to games for this team.

Returns: An object with four lists.

Example request: /api/v1/players/8477492/scoring?seasons=20252026

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "team": [
        21
      ],
      "split": true
    }
  },
  "data": {
    "goals": 53,
    "assists": 74,
    "assisted_by": [
      {
        "player_id": 8480039,
        "player": "Martin Necas",
        "total": 22,
        "first": 16,
        "second": 6
      },
      {
        "player_id": 8480069,
        "player": "Cale Makar",
        "total": 15,
        "first": 9,
        "second": 6
      },
      {
        "player_id": 8477476,
        "player": "Artturi Lehkonen",
        "total": 11,
        "first": 10,
        "second": 1
      },
      {
        "player_id": 8476455,
        "player": "Gabriel Landeskog",
        "total": 9,
        "first": 2,
        "second": 7
      },
      {
        "player_id": 8478038,
        "player": "Devon Toews",
        "total": 7,
        "first": 3,
        "second": 4
      },
      {
        "player_id": 8484258,
        "player": "Sam Malinski",
        "total": 5,
        "first": 1,
        "second": 4
      }
    ],
    "assisted_for": [
      {
        "player_id": 8480039,
  ... (cut for display)

Shift performance

GET/api/v1/players/{player_id}/shift-performance

Shot attempts (or expected goals) for and against per 60 minutes by the second of the shift, for the player, his team's other players at the same position and the league at that position.

ParameterTypeDefaultDescription
player_id required, in the pathidFor the sample: 8477492.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
startOZ | NZ | DZ | OTFOnly shifts that began this way: faceoff in the offensive, neutral or defensive zone, or on the fly.
Values: OZ, NZ, DZ, OTF
metricc | xgcc shot attempts, xg expected goals.
Values: c, xg
five_on_fivetrue | false | alltrueCount only seconds played at 5v5 (true), the others, or all.
Values: true, false, all

Returns: Three curves of 61 points (seconds 0 to 60).

Example request: /api/v1/players/8477492/shift-performance?seasons=20252026

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": {
    "player_id": 8477492,
    "position": "C",
    "metric": "c",
    "player": [
      {
        "second": 0,
        "toi": 4676,
        "for_per60": 66.9803,
        "against_per60": 35.4149
      },
      {
        "second": 1,
        "toi": 6244,
        "for_per60": 73.7988,
        "against_per60": 33.4401
      },
      {
        "second": 2,
        "toi": 7812,
        "for_per60": 71.8894,
        "against_per60": 35.9447
      },
      {
        "second": 3,
        "toi": 7825,
        "for_per60": 78.2109,
        "against_per60": 35.885
      },
      {
        "second": 4,
        "toi": 7835,
        "for_per60": 74.4352,
        "against_per60": 38.1366
      },
      {
        "second": 5,
        "toi": 7844,
        "for_per60": 70.2193,
        "against_per60": 44.0592
      }
    ],
    "team": [
      {
        "second": 0,
        "toi": 41417,
        "for_per60": 46.068,
        "against_per60": 36.7675
      },
      {
        "second": 1,
        "toi": 55205,
        "for_per60": 47.6696,
  ... (cut for display)

Line tool (with or without)

GET/api/v1/wowy

Every with/without combination of up to five teammates: for two players four rows (both, only the first, only the second, neither). view=log gives the combination game by game.

ParameterTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).
team requiredid or abbreviationThe player's team in those seasons (one id or abbreviation).
p requiredlist of player idsOne to five player ids of the team, separated by commas.
strictincl | exclinclincl: rows without a player also cover games he missed, excl: only games in which all selected players played.
Values: incl, excl
viewwowy | logwowywowy all combinations, log the all-with combination by game.
Values: wowy, log
vteamid or abbreviationOnly games against this team.

Returns: One row per combination (or per game).

Example request: /api/v1/wowy?seasons=20252026&team=COL&p=8477492,8480069

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "players": [
      8477492,
      8480069
    ],
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "5v5",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "team": [
        21
      ],
      "split": true
    }
  },
  "data": [
    {
      "with": [
        8477492,
        8480069
      ],
      "without": [],
      "members": [
        {
          "player_id": 8477492,
          "player": "MacKinnon",
          "on": true
        },
        {
          "player_id": 8480069,
          "player": "Makar",
          "on": true
        }
      ],
      "label": "MacKinnon + Makar",
      "cf": 958,
      "ca": 720,
      "cf_pct": 57.0918,
      "ff": 671,
      "fa": 548,
      "ff_pct": 55.0451,
      "sf": 451,
      "sa": 354,
      "sf_pct": 56.0248,
      "gf": 53,
      "ga": 25,
      "gf_pct": 67.9487,
      "xgf": 44.0296,
      "xga": 33.1596,
      "xgf_pct": 57.0411,
      "scf": 518,
      "sca": 353,
      "scf_pct": 59.4719,
      "scsf": 276,
      "scsa": 189,
      "scsf_pct": 59.3548,
      "scgf": 39,
      "scga": 22,
      "scgf_pct": 63.9344,
      "hdcf": 187,
      "hdca": 163,
  ... (cut for display)

Player NHL EDGE tracking

GET/api/v1/players/{player_id}/edge

NHL EDGE puck and player tracking numbers of a skater or goalie, one row per season and game type (seasons from 2021-22 on, imperial units: miles and miles per hour). Skaters: top and average shot speed and the number of shots by speed band, top skating speed and bursts by speed band, distance skated (total, per 60 minutes, best game), share of time in the offensive, neutral and defensive zone and of zone starts, shots and goals by 17 ice areas, time by zone and distance by strength (all, es, pp, pk). Goalies: save percentage, GAA, 5v5 save percentage (all and in close games), shots against per 60 at 5v5, games above .900 and shots, goals and saves by area and by danger. Only players whose EDGE documents have been collected have rows.

ParameterTypeDefaultDescription
player_id required, in the pathidFor the sample: 8477492.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3

Returns: A list of rows, one per season.

Example request: /api/v1/players/8477492/edge?seasons=20252026

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "game_type": 2,
      "team_abbrev": "COL",
      "gp": 80,
      "top_shot_speed": 90.99,
      "avg_shot_speed": 58.5965,
      "shots_100_plus": 0,
      "shots_90_100": 1,
      "shots_80_90": 62,
      "shots_70_80": 121,
      "top_skating_speed": 24.7795,
      "bursts_22_plus": 45,
      "bursts_20_22": 410,
      "bursts_18_20": 819,
      "distance_total": 283.3627,
      "distance_per_60": 9.5465,
      "distance_max_game": 4.8913,
      "oz_time_pct": 0.4661,
      "nz_time_pct": 0.181,
      "dz_time_pct": 0.3529,
      "oz_start_pct": 0.4581,
      "nz_start_pct": 0.3024,
      "dz_start_pct": 0.2395,
      "shot_locations": [
        {
          "sog": 3,
          "area": "Behind the Net",
          "goals": 0
        },
        {
          "sog": 3,
          "area": "Beyond Red Line",
          "goals": 1
        },
        {
          "sog": 16,
          "area": "Center Point",
          "goals": 4
        },
        {
          "sog": 11,
          "area": "Crease",
          "goals": 3
        },
        {
          "sog": 42,
          "area": "High Slot",
          "goals": 8
        },
        {
          "sog": 77,
          "area": "L Circle",
  ... (cut for display)

Compare two players

GET/api/v1/compare

Two skaters side by side in one season, as on the Compare page: individual numbers in all situations (scoring, shooting, expected goals, GAR and WAR with components, hits, takeaways, giveaways, penalties, faceoffs), on-ice numbers at 5v5 (Corsi, expected goals, scoring chances, PDO, plus-minus, RAPM, quality of teammates and competition, zone starts) and NHL EDGE. Every row has both raw values and which side is better (for giveaways, penalties and RAPM xGA the smaller value is better). Goalies are not compared.

ParameterTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
playersstring8477492,8478402Two NHL player ids, comma separated.

Returns: An object with the two players and the comparison blocks.

Example request: /api/v1/compare?seasons=20252026

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": {
    "players": [
      {
        "player_id": 8477492,
        "player": "Nathan MacKinnon",
        "team_id": 21,
        "goalie": false
      },
      {
        "player_id": 8478402,
        "player": "Connor McDavid",
        "team_id": 22,
        "goalie": false
      }
    ],
    "blocks": [
      {
        "title": "Player",
        "rows": [
          {
            "key": "team",
            "label": "Team",
            "a": "COL",
            "b": "EDM",
            "better": null
          },
          {
            "key": "position",
            "label": "Position",
            "a": "C",
            "b": "C",
            "better": null
          },
          {
            "key": "gp",
            "label": "GP",
            "a": 80,
            "b": 82,
            "better": null
          }
        ]
      },
      {
        "title": "Individual, all situations",
        "rows": [
          {
            "key": "toi",
            "label": "TOI",
            "a": 1780.95,
            "b": 1884.8,
            "better": null
          },
          {
  ... (cut for display)

Similar players

GET/api/v1/players/{player_id}/similar

The skaters of one season whose numbers are closest to the player's, within his position group (forwards or defensemen): per-60 shots, attempts, expected goals, goals, assists, hits, blocks, giveaways, takeaways, penalties, plus 5v5 CF%, xGF%, zone-start share and ice time. Similarity is 100 for identical numbers. It describes how alike the numbers are, not how the players play.

ParameterTypeDefaultDescription
player_id required, in the pathidFor the sample: 8477492.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
limitnumber10How many players (1 to 50).

Returns: A list of players with a similarity score.

Example request: /api/v1/players/8477492/similar?seasons=20252026

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "player_id": 8478403,
      "player": "Jack Eichel",
      "similarity": 62.3,
      "distance": 2.646
    },
    {
      "player_id": 8476453,
      "player": "Nikita Kucherov",
      "similarity": 60.2,
      "distance": 2.789
    },
    {
      "player_id": 8478402,
      "player": "Connor McDavid",
      "similarity": 52.0,
      "distance": 3.366
    },
    {
      "player_id": 8481559,
      "player": "Jack Hughes",
      "similarity": 49.2,
      "distance": 3.565
    },
    {
      "player_id": 8480027,
      "player": "Jason Robertson",
      "similarity": 46.2,
      "distance": 3.772
    }
  ]
}

Players (list)

GET/api/v1/players

Players who played in the seasons, with games played and time on ice. Filter by team, position and dates. This is how to find player ids (there is no search by name: players are identified by their NHL id).

ParameterTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
pospositionSkaters only: S all skaters, F forwards, C, L, R, D. The position of the player in each game is used.
Values: S, F, C, L, R, D, G
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.
splittrue | falsetruetrue: a player who played for several teams is one row per team, false: one combined row.
Values: true, false
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per player (and team). Supports limit, offset, sort, order, columns.

Example request: /api/v1/players?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 3,
    "total": 36,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "team": [
        21
      ],
      "split": true
    }
  },
  "data": [
    {
      "player_id": 8475809,
      "player": "Scott Wedgewood",
      "position": "G",
      "birth_date": "1992-08-14",
      "gp": 45,
      "toi": 2549.0667,
      "team_id": 21,
      "team": "COL"
    },
    {
      "player_id": 8478406,
      "player": "Mackenzie Blackwood",
      "position": "G",
      "birth_date": "1996-12-09",
      "gp": 38,
      "toi": 2155.6667,
      "team_id": 21,
      "team": "COL"
    },
    {
      "player_id": 8480069,
      "player": "Cale Makar",
      "position": "D",
      "birth_date": "1998-10-30",
      "gp": 75,
      "toi": 1863.5667,
      "team_id": 21,
      "team": "COL"
    }
  ]
}

Player profile

GET/api/v1/players/{player_id}

Biography (name, position, handedness, birth date, height, weight, current team) and, season by season (team by team for a traded player), the individual numbers and the 5v5 on-ice numbers. For a goalie, the goalie columns.

ParameterTypeDefaultDescription
player_id required, in the pathidFor the sample: 8477492.
seasonslist of season idsSeasons to include, e.g. 20252026 or 20242025,20252026. Without it, every season the player played.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3

Returns: An object with the biography and a list of seasons.

Example request: /api/v1/players/8477492

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": {
    "player_id": 8477492,
    "first_name": "Nathan",
    "last_name": "MacKinnon",
    "position": "C",
    "shoots_catches": "R",
    "birth_date": "1995-09-01",
    "height_cm": 183,
    "weight_kg": 91,
    "current_team_id": null,
    "current_team": null,
    "seasons": [
      {
        "season": 20252026,
        "team_id": 21,
        "team": "COL",
        "individual": {
          "player_id": 8477492,
          "player": "Nathan MacKinnon",
          "position": "C",
          "team_id": 21,
          "team": "COL",
          "goals": 53,
          "assists1": 50,
          "assists2": 24,
          "shots": 352,
          "icf": 600,
          "iff": 471,
          "ixg": 42.7172,
          "isc": 323,
          "ihdcf": 116,
          "rush_attempts": 9,
          "rebounds_created": 45,
          "created_xg": 5.4234,
          "penalties": 15,
          "minor": 12,
          "major": 1,
          "misconduct": 0,
          "pim": 39,
          "penalties_drawn": 21,
          "giveaways": 165,
          "dz_giveaways": 36,
          "takeaways": 25,
          "hits": 64,
          "hits_taken": 75,
          "shots_blocked": 35,
          "faceoffs_won": 681,
          "faceoffs_lost": 653,
          "assists": 74,
          "points": 127,
          "ipp": 75.1479,
          "sh_pct": 15.0568,
          "faceoff_pct": 51.0495,
  ... (cut for display)

Player game log

GET/api/v1/players/{player_id}/games

One row per game of the player in date order: opponent, venue, score, result, and all his numbers in that game: on-ice columns with zone starts, and individual columns (a goalie: goalie columns), in the selected situation and score state.

ParameterTypeDefaultDescription
player_id required, in the pathidFor the sample: 8477492.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
sitsituationallGame situation: all strengths, even strength, 5v5, 5v5 adjusted for score and venue (sva), power play, penalty kill, exact strengths, empty net (enf: own net empty, ena: against an empty net).
Values: 3v3, 4v5, 5v4, 5v5, all, ena, enf, ev, pk, pp, sva
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.
raten | ynn counts, y per 60 minutes.
Values: n, y
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per game. Supports limit, offset, sort, order, columns.

Example request: /api/v1/players/8477492/games?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 3,
    "total": 80,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "5v5",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "game_id": 2025020003,
      "game_date": "2025-10-07",
      "season": 20252026,
      "game_type": 2,
      "decided_in": "REG",
      "team_id": 21,
      "is_home": false,
      "opponent_id": 26,
      "opponent": "LAK",
      "goals_for": 4,
      "goals_against": 1,
      "result": "W",
      "points": 2,
      "team": "COL",
      "on_ice": {
        "cf": 10,
        "ca": 18,
        "cf_pct": 35.7143,
        "ff": 9,
        "fa": 13,
        "ff_pct": 40.9091,
        "sf": 6,
        "sa": 7,
        "sf_pct": 46.1538,
        "gf": 2,
        "ga": 0,
        "gf_pct": 100.0,
        "xgf": 0.8431,
        "xga": 0.8442,
        "xgf_pct": 49.9663,
        "scf": 7,
        "sca": 7,
        "scf_pct": 50.0,
        "scsf": 5,
        "scsa": 2,
        "scsf_pct": 71.4286,
        "scgf": 2,
        "scga": 0,
        "scgf_pct": 100.0,
        "hdcf": 4,
        "hdca": 4,
        "hdcf_pct": 50.0,
        "hdsf": 2,
        "hdsa": 2,
        "hdsf_pct": 50.0,
        "hdgf": 1,
        "hdga": 0,
        "hdgf_pct": 100.0,
  ... (cut for display)

Player by situation

GET/api/v1/players/{player_id}/situations

One row per situation (all strengths, even strength, 5v5, sva when available, power play, penalty kill, 5v4, 4v5, 3v3, empty net): the on-ice and individual numbers, or the goalie columns.

ParameterTypeDefaultDescription
player_id required, in the pathidFor the sample: 8477492.
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
scorescore stateallScore state from the team's point of view: tied, leading (u), trailing (d), within 1, up 1 (u1), down 1 (d1).
Values: all, d, d1, tied, u, u1, w1
raten | y | rnn counts, y rates per 60 minutes, r relative (on ice minus off ice, per 60).
Values: n, y, r
locB | H | ABVenue: B home and away, H home games only, A away games only.
Values: B, H, A
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
lastnumberOnly the last N games of each team (1 to 200).
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.

Returns: One row per situation.

Example request: /api/v1/players/8477492/situations?seasons=20252026

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "situation": "all",
      "on_ice": {
        "player_id": 8477492,
        "player": "Nathan MacKinnon",
        "position": "C",
        "team_id": 21,
        "team": "COL",
        "cf": 2473,
        "ca": 1431,
        "cf_pct": 63.3453,
        "ff": 1820,
        "fa": 1094,
        "ff_pct": 62.4571,
        "sf": 1227,
        "sa": 721,
        "sf_pct": 62.9877,
        "gf": 169,
        "ga": 69,
        "gf_pct": 71.0084,
        "xgf": 153.9418,
        "xga": 81.7982,
        "xgf_pct": 65.3015,
        "scf": 1306,
        "sca": 697,
        "scf_pct": 65.2022,
        "scsf": 726,
        "scsa": 375,
        "scsf_pct": 65.9401,
        "scgf": 122,
        "scga": 54,
        "scgf_pct": 69.3182,
        "hdcf": 503,
        "hdca": 310,
        "hdcf_pct": 61.8696,
        "hdsf": 326,
        "hdsa": 192,
        "hdsf_pct": 62.9344,
        "hdgf": 69,
        "hdga": 35,
        "hdgf_pct": 66.3462,
        "mdcf": 803,
        "mdca": 387,
        "mdcf_pct": 67.479,
        "mdsf": 400,
        "mdsa": 183,
        "mdsf_pct": 68.6106,
        "mdgf": 53,
        "mdga": 19,
        "mdgf_pct": 73.6111,
        "ldcf": 1125,
        "ldca": 671,
  ... (cut for display)

Game report

GET/api/v1/games/{game_id}

Header, numbers by team, situation (all, ev, 5v5, 5v4, 4v5) and period (1, 2, 3, OT and Final), and every power play of the game with its events (goals, shots, misses, blocks, faceoffs, giveaways, takeaways, hits, each by the power-play team or its opponent). The player tables of the game page are the ordinary tables with the game parameter: tables/skaters (kind=std for individual numbers, kind=oi with rate=r for on ice with the relative columns), tables/goalies, tables/shifts, tables/lines, and players/{id}/teammates and players/{id}/opposition for the linemates and the opposition.

ParameterTypeDefaultDescription
game_id required, in the pathidFor the sample: 2025020001.

Returns: An object: header, overview, power_plays.

Example request: /api/v1/games/2025020001

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1"
  },
  "data": {
    "header": {
      "game_id": 2025020001,
      "date": "2025-10-07",
      "type": 2,
      "venue": "Amerant Bank Arena",
      "home": {
        "team_id": 13,
        "team": "FLA",
        "score": 3
      },
      "away": {
        "team_id": 16,
        "team": "CHI",
        "score": 2
      },
      "decided_in": "REG"
    },
    "overview": [
      {
        "team_id": 16,
        "situation": "4v5",
        "period": "1",
        "cf": 0,
        "ca": 8,
        "cf_pct": 0.0,
        "ff": 0,
        "fa": 6,
        "ff_pct": 0.0,
        "sf": 0,
        "sa": 5,
        "sf_pct": 0.0,
        "gf": 0,
        "ga": 1,
        "gf_pct": 0.0,
        "xgf": 0,
        "xga": 0.6607,
        "xgf_pct": 0.0,
        "scf": 0,
        "sca": 5,
        "scf_pct": 0.0,
        "scsf": 0,
        "scsa": 4,
        "scsf_pct": 0.0,
        "scgf": 0,
        "scga": 1,
        "scgf_pct": 0.0,
        "hdcf": 0,
        "hdca": 3,
        "hdcf_pct": 0.0,
        "hdsf": 0,
        "hdsa": 2,
        "hdsf_pct": 0.0,
        "hdgf": 0,
        "hdga": 0,
        "hdgf_pct": null,
        "mdcf": 0,
        "mdca": 2,
        "mdcf_pct": 0.0,
        "mdsf": 0,
        "mdsa": 2,
        "mdsf_pct": 0.0,
        "mdgf": 0,
        "mdga": 1,
        "mdgf_pct": 0.0,
  ... (cut for display)

Shift chart

GET/api/v1/games/{game_id}/shifts

Every shift of the game with the way it began and the shot attempts for and against during it.

ParameterTypeDefaultDescription
game_id required, in the pathidFor the sample: 2025020001.

Returns: One row per shift.

Example request: /api/v1/games/2025020001/shifts

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1"
  },
  "data": [
    {
      "player_id": 8481519,
      "team_id": 16,
      "period": 1,
      "start": 0,
      "end": 1200,
      "duration": 1200,
      "start_type": "NZ",
      "cf": 0,
      "ca": 0
    },
    {
      "player_id": 8482807,
      "team_id": 16,
      "period": 1,
      "start": 0,
      "end": 34,
      "duration": 34,
      "start_type": "NZ",
      "cf": 0,
      "ca": 1
    },
    {
      "player_id": 8477450,
      "team_id": 16,
      "period": 1,
      "start": 0,
      "end": 39,
      "duration": 39,
      "start_type": "NZ",
      "cf": 0,
      "ca": 1
    },
    {
      "player_id": 8482703,
      "team_id": 16,
      "period": 1,
      "start": 0,
      "end": 34,
      "duration": 34,
      "start_type": "NZ",
      "cf": 0,
      "ca": 1
    },
    {
      "player_id": 8475683,
      "team_id": 13,
      "period": 1,
      "start": 0,
      "end": 1200,
      "duration": 1200,
      "start_type": "NZ",
      "cf": 0,
      "ca": 0
    },
    {
      "player_id": 8481624,
      "team_id": 16,
      "period": 1,
      "start": 0,
      "end": 34,
      "duration": 34,
      "start_type": "NZ",
      "cf": 0,
  ... (cut for display)

Shot map

GET/api/v1/games/{game_id}/shots

Every shot attempt of the game: place (normalized so the shooting team attacks the positive x direction, feet), type, danger, rush and rebound flags, expected goals.

ParameterTypeDefaultDescription
game_id required, in the pathidFor the sample: 2025020001.

Returns: One row per attempt.

Example request: /api/v1/games/2025020001/shots

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1"
  },
  "data": [
    {
      "event_id": 897960,
      "period": 1,
      "second": 22,
      "team_id": 13,
      "shooter_id": 8473419,
      "result": "block",
      "shot_type": "",
      "reason": "blocked",
      "x": 61,
      "y": -3,
      "distance": 28.1603,
      "angle": 6.1155,
      "danger": "LD",
      "rush": false,
      "rebound": false,
      "empty_net": false,
      "xg": 0.0,
      "strength": "5v5"
    },
    {
      "event_id": 897965,
      "period": 1,
      "second": 73,
      "team_id": 13,
      "shooter_id": 8482713,
      "result": "block",
      "shot_type": "",
      "reason": "blocked",
      "x": 64,
      "y": 16,
      "distance": 29.6816,
      "angle": 32.6192,
      "danger": "MD",
      "rush": true,
      "rebound": false,
      "empty_net": false,
      "xg": 0.0,
      "strength": "5v5"
    },
    {
      "event_id": 897968,
      "period": 1,
      "second": 76,
      "team_id": 13,
      "shooter_id": 8478542,
      "result": "shot",
      "shot_type": "wrist",
      "reason": "",
      "x": 58,
      "y": 22,
      "distance": 38.0132,
      "angle": 35.3625,
      "danger": "MD",
      "rush": false,
      "rebound": false,
      "empty_net": false,
      "xg": 0.0357,
      "strength": "5v5"
    },
    {
      "event_id": 897973,
      "period": 1,
      "second": 95,
  ... (cut for display)

Games (list)

GET/api/v1/games

Games with date, teams, score, how the game ended and whether its shift chart is available. Filter by seasons, type, team and dates. Newest first.

ParameterTypeDefaultDescription
seasons requiredlist of season idsOne or more seasons, separated by commas: 20252026 or 20242025,20252026. A season id is the start year followed by the end year.
stype1 | 2 | 32Games: 1 preseason, 2 regular season, 3 playoffs.
Values: 1, 2, 3
fddateFirst game date, YYYY-MM-DD.
tddateLast game date, YYYY-MM-DD.
teamids or abbreviationsTeam ids or current abbreviations, separated by commas: COL or 21,22. Abbreviations that are not unique are refused: use the id.
limitnumber100Rows to return (1 to 1000).
offsetnumber0Rows to skip.
sortcolumnColumn to sort by. It must be a column of the table.
orderasc | descdescSort order. Rows without a value for the column come last.
Values: asc, desc
columnslist of columnsReturn only these columns (identity columns are always returned).

Returns: One row per game. Supports limit, offset, sort, order, columns.

Example request: /api/v1/games?seasons=20252026&limit=3

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "count": 3,
    "total": 82,
    "offset": 0,
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "team": [
        21
      ],
      "split": true
    }
  },
  "data": [
    {
      "game_id": 2025021312,
      "season": 20252026,
      "game_type": 2,
      "game_date": "2026-04-16",
      "state": "OFF",
      "home_team_id": 21,
      "home": "COL",
      "home_score": 2,
      "away_team_id": 55,
      "away": "SEA",
      "away_score": 0,
      "decided_in": "REG",
      "venue": "Ball Arena",
      "has_shifts": true,
      "analyzed": true
    },
    {
      "game_id": 2025021298,
      "season": 20252026,
      "game_type": 2,
      "game_date": "2026-04-14",
      "state": "OFF",
      "home_team_id": 20,
      "home": "CGY",
      "home_score": 1,
      "away_team_id": 21,
      "away": "COL",
      "away_score": 3,
      "decided_in": "REG",
      "venue": "Scotiabank Saddledome",
      "has_shifts": true,
      "analyzed": true
    },
    {
      "game_id": 2025021289,
      "season": 20252026,
      "game_type": 2,
      "game_date": "2026-04-13",
      "state": "OFF",
      "home_team_id": 22,
      "home": "EDM",
      "home_score": 1,
      "away_team_id": 21,
      "away": "COL",
      "away_score": 2,
  ... (cut for display)

Alternate standings

GET/api/v1/trivia/alternate-standings

The games of one season ranked under another points system, as on the Alternate Standings page: games, wins, losses, overtime or shootout losses, points, point % (0-100 of the points a team could take), regulation wins, regulation and overtime wins, goals for and against and the difference, with the division and conference of each team. Systems: official (2 points for a win, 1 for an overtime or shootout loss), 3pt (the 3-2-1 system: 3 for a regulation win, 2 for an overtime or shootout win, 1 for an overtime or shootout loss), ties (a shootout decides nothing: both teams get 1 point). Views: wildcard (the three best of each division, then the rest of each conference), division, conference, league.

ParameterTypeDefaultDescription
seasons requiredseason idOne season.
stypenumber21 preseason, 2 regular season (default), 3 playoffs.
Values: 1, 2, 3
systemtext3ptPoints system.
Values: official, 3pt, ties
viewtextwildcardHow the rows are cut into tables.
Values: wildcard, division, conference, league

Returns: A list of tables, each with a title and its rows.

Example request: /api/v1/trivia/alternate-standings?seasons=20252026

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "title": "Atlantic",
      "rows": [
        {
          "team_id": 7,
          "team": "BUF",
          "name": "Buffalo Sabres",
          "division": "Atlantic",
          "conference": "East",
          "gp": 82,
          "w": 50,
          "l": 23,
          "otl": 9,
          "ties": 0,
          "rw": 42,
          "row": 45,
          "points": 151,
          "gf": 283,
          "ga": 240,
          "gd": 43,
          "point_pct": 61.3821
        },
        {
          "team_id": 14,
          "team": "TBL",
          "name": "Tampa Bay Lightning",
          "division": "Atlantic",
          "conference": "East",
          "gp": 82,
          "w": 50,
          "l": 26,
          "otl": 6,
          "ties": 0,
          "rw": 40,
          "row": 46,
          "points": 146,
          "gf": 286,
          "ga": 229,
          "gd": 57,
          "point_pct": 59.3496
        },
        {
          "team_id": 8,
          "team": "MTL",
          "name": "Montr\u00e9al Canadiens",
          "division": "Atlantic",
          "conference": "East",
          "gp": 82,
          "w": 48,
          "l": 24,
          "otl": 10,
          "ties": 0,
  ... (cut for display)

Team streaks

GET/api/v1/trivia/streaks

Season highs and active streaks of every team (wins, points, losses, regulation losses) over all games and over home games only and away games only, as on the Streaks page.

ParameterTypeDefaultDescription
seasons requiredseason idOne season.
stypenumber21 preseason, 2 regular season (default), 3 playoffs.
Values: 1, 2, 3

Returns: An object: the columns and one row per team with its season highs and active streaks.

Example request: /api/v1/trivia/streaks?seasons=20252026

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": {
    "columns": [
      {
        "key": "all_wins",
        "label": "Wins"
      },
      {
        "key": "all_points",
        "label": "Points"
      },
      {
        "key": "all_losses",
        "label": "Losses"
      },
      {
        "key": "all_reg_losses",
        "label": "Reg. Losses"
      },
      {
        "key": "home_wins",
        "label": "Home Wins"
      },
      {
        "key": "home_points",
        "label": "Home Points"
      }
    ],
    "teams": [
      {
        "team_id": 24,
        "team": "ANA",
        "name": "Anaheim Ducks",
        "high": {
          "all_wins": 7,
          "all_points": 7,
          "all_losses": 9,
          "all_reg_losses": 5,
          "home_wins": 8,
          "home_points": 8,
          "home_losses": 4,
          "home_reg_losses": 3,
          "road_wins": 4,
          "road_points": 4,
          "road_losses": 6,
          "road_reg_losses": 5
        },
        "active": {
          "all_wins": 1,
          "all_points": 1,
          "all_losses": 0,
          "all_reg_losses": 0,
          "home_wins": 0,
          "home_points": 2,
  ... (cut for display)

Sweater numbers

GET/api/v1/trivia/player-numbers

Every sweater number worn in a season with the players who wore it (a player who changed teams appears with each team): name, position, team and games, as on the Player numbers page. With a number only that number.

ParameterTypeDefaultDescription
seasons requiredseason idOne season.
numbernumberA sweater number: the players who wore it.

Returns: A list: one item per number with its players.

Example request: /api/v1/trivia/player-numbers?seasons=20252026

Example response
{
  "meta": {
    "api": "v1",
    "metrics_version": "1",
    "filters": {
      "seasons": [
        20252026
      ],
      "stype": 2,
      "sit": "all",
      "score": "all",
      "rate": "n",
      "loc": "B",
      "toi": 0.0,
      "split": true
    }
  },
  "data": [
    {
      "number": 97,
      "players": [
        {
          "player_id": 8478402,
          "player": "Connor McDavid",
          "position": "C",
          "team_id": 22,
          "team": "Edmonton Oilers",
          "abbrev": "EDM",
          "gp": 88
        },
        {
          "player_id": 8478864,
          "player": "Kirill Kaprizov",
          "position": "L",
          "team_id": 30,
          "team": "Minnesota Wild",
          "abbrev": "MIN",
          "gp": 89
        }
      ]
    }
  ]
}