nhl-api-py 3.2.3__tar.gz → 3.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/PKG-INFO +35 -1
  2. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/README.md +34 -0
  3. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/edge.py +195 -0
  4. nhl_api_py-3.4.0/nhlpy/api/game_center.py +214 -0
  5. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/helpers.py +63 -12
  6. nhl_api_py-3.4.0/nhlpy/api/misc.py +108 -0
  7. nhl_api_py-3.4.0/nhlpy/api/players.py +68 -0
  8. nhl_api_py-3.4.0/nhlpy/api/records.py +446 -0
  9. nhl_api_py-3.4.0/nhlpy/api/schedule.py +302 -0
  10. nhl_api_py-3.4.0/nhlpy/api/standings.py +94 -0
  11. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/stats.py +100 -0
  12. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/teams.py +71 -19
  13. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/http_client.py +1 -0
  14. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/nhl_client.py +2 -1
  15. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/pyproject.toml +1 -1
  16. nhl_api_py-3.2.3/nhlpy/api/game_center.py +0 -100
  17. nhl_api_py-3.2.3/nhlpy/api/misc.py +0 -52
  18. nhl_api_py-3.2.3/nhlpy/api/players.py +0 -35
  19. nhl_api_py-3.2.3/nhlpy/api/schedule.py +0 -164
  20. nhl_api_py-3.2.3/nhlpy/api/standings.py +0 -65
  21. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/LICENSE +0 -0
  22. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/__init__.py +0 -0
  23. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/__init__.py +0 -0
  24. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/__init__.py +0 -0
  25. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/builder.py +0 -0
  26. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/__init__.py +0 -0
  27. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/decision.py +0 -0
  28. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/draft.py +0 -0
  29. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/experience.py +0 -0
  30. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/franchise.py +0 -0
  31. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/game_type.py +0 -0
  32. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/home_road.py +0 -0
  33. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/nationality.py +0 -0
  34. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/opponent.py +0 -0
  35. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/position.py +0 -0
  36. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/season.py +0 -0
  37. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/shoot_catch.py +0 -0
  38. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/status.py +0 -0
  39. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/sorting/__init__.py +0 -0
  40. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/sorting/sorting_options.py +0 -0
  41. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/config.py +0 -0
  42. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/data/seasonal_information_manifest.json +0 -0
  43. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/data/team_stat_ids.json +0 -0
  44. {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/data/teams_20232024.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nhl-api-py
3
- Version: 3.2.3
3
+ Version: 3.4.0
4
4
  Summary: NHL API (Updated for 2025/2026) and EDGE Stats. For standings, team stats, outcomes, player information. Contains each individual API endpoint as well as convience methods as well as pythonic query builder for more indepth EDGE stats.
5
5
  Home-page: https://github.com/coreyjs/nhl-api-py
6
6
  License: Apache-2.0
@@ -43,6 +43,7 @@ Description-Content-Type: text/markdown
43
43
  - [Standings](#standings)
44
44
  - [Game Center](#game-center)
45
45
  - [Misc](#misc)
46
+ - [Records](#records)
46
47
  - [Advanced Usage](#advanced-usage)
47
48
  - [Query Builder](#stats-with-querybuilder)
48
49
  - [Examples & Wiki](#examples--wiki)
@@ -59,6 +60,12 @@ Note: I created this to help me with some machine learning
59
60
  projects around the NHL and the NHL data sets. Special thanks to https://github.com/erunion/sport-api-specifications/tree/master/nhl,
60
61
  https://gitlab.com/dword4/nhlapi/-/blob/master/stats-api.md and https://github.com/Zmalski/NHL-API-Reference.
61
62
 
63
+ ### AI Note:
64
+
65
+ This library was written by hand before the advent of agentic coding. Going forward this repo will continue to be
66
+ developed with an engineer first approach. Any agentic tools will be used for architectural reviews or general code reviews.
67
+ AI heavy PRs will not be accepted, but we are open to any discussion that makes this library better for the user.
68
+
62
69
  ### Developer Note: This is being updated with the new, also undocumented, NHL API.
63
70
 
64
71
  This started as a project around the old NHL API, that got deprecated in 2023(?). This project has evolved
@@ -135,6 +142,7 @@ They are grouped by function to make the library easier to navigate and use. Th
135
142
  - **`game_center`**: Contains endpoints related to game center data, including box scores, play-by-play data, and game summaries.
136
143
  - **`misc`**: Contains miscellaneous endpoints that don't fit into the other categories, such as glossary terms, configuration data, and country information.
137
144
  - **`players`**: Get Players by team and prospects.
145
+ - **`records`**: Historical data from the NHL Records API: franchise history, the full draft history, attendance, venues, and hundreds of record lists (streaks, fastest goals, etc.).
138
146
  ### Helpers Module
139
147
  - **`helpers`**: Contains helper functions and utilities for working with the NHL API, such as getting game IDs by season or calculating player statistics. These are experimental and often times make many requests, can return DataFrames or do calculations. Stuff I find myself doing over and over I tend to move into helpers for convenience. They are often cross domain, involve many sub requests, may integrate more machine learning techniques, or just make it easier to get the data you want. These will have built in sleeping to avoid hitting the API too hard, but you can override this by setting the `sleep` parameter to `False` in the function call.
140
148
 
@@ -717,6 +725,32 @@ for term in stat_terms:
717
725
  continue
718
726
  ```
719
727
 
728
+ ---
729
+
730
+ # Records
731
+
732
+ Historical data from the NHL Records API (`records.nhl.com`). Curated methods return a list of rows; `query()` reaches any of the ~445 records endpoints by name. See [docs/records.md](docs/records.md) for every method and the full endpoint catalog.
733
+
734
+ ```python
735
+ # Franchise history
736
+ franchises = client.records.franchises()
737
+ sabres = client.records.franchise_detail(team_id=7)
738
+ totals = client.records.franchise_totals(game_type_id=2, sort="wins")
739
+ seasons = client.records.franchise_season_results(franchise_id=19, game_type_id=2)
740
+
741
+ # Draft history (back to 1963)
742
+ first_round = client.records.draft(draft_year=2024, round_number=1, sort=[("overallPickNumber", "ASC")])
743
+ sabres_picks = client.records.draft_by_team(team_id=7)
744
+
745
+ # Any records endpoint, with Cayenne filters, sorting and pagination
746
+ top_scorers = client.records.query(
747
+ "skater-career-scoring-regular-season", cayenne_exp="franchiseId=19", sort="points", limit=10
748
+ )
749
+ streaks = client.records.query("goalie-shutout-streak", limit=10)
750
+ ```
751
+
752
+ Note: without a `limit`, records endpoints return every row, which can be large (e.g. the full draft is ~8 MB).
753
+
720
754
  ---
721
755
  # Advanced Usage
722
756
 
@@ -15,6 +15,7 @@
15
15
  - [Standings](#standings)
16
16
  - [Game Center](#game-center)
17
17
  - [Misc](#misc)
18
+ - [Records](#records)
18
19
  - [Advanced Usage](#advanced-usage)
19
20
  - [Query Builder](#stats-with-querybuilder)
20
21
  - [Examples & Wiki](#examples--wiki)
@@ -31,6 +32,12 @@ Note: I created this to help me with some machine learning
31
32
  projects around the NHL and the NHL data sets. Special thanks to https://github.com/erunion/sport-api-specifications/tree/master/nhl,
32
33
  https://gitlab.com/dword4/nhlapi/-/blob/master/stats-api.md and https://github.com/Zmalski/NHL-API-Reference.
33
34
 
35
+ ### AI Note:
36
+
37
+ This library was written by hand before the advent of agentic coding. Going forward this repo will continue to be
38
+ developed with an engineer first approach. Any agentic tools will be used for architectural reviews or general code reviews.
39
+ AI heavy PRs will not be accepted, but we are open to any discussion that makes this library better for the user.
40
+
34
41
  ### Developer Note: This is being updated with the new, also undocumented, NHL API.
35
42
 
36
43
  This started as a project around the old NHL API, that got deprecated in 2023(?). This project has evolved
@@ -107,6 +114,7 @@ They are grouped by function to make the library easier to navigate and use. Th
107
114
  - **`game_center`**: Contains endpoints related to game center data, including box scores, play-by-play data, and game summaries.
108
115
  - **`misc`**: Contains miscellaneous endpoints that don't fit into the other categories, such as glossary terms, configuration data, and country information.
109
116
  - **`players`**: Get Players by team and prospects.
117
+ - **`records`**: Historical data from the NHL Records API: franchise history, the full draft history, attendance, venues, and hundreds of record lists (streaks, fastest goals, etc.).
110
118
  ### Helpers Module
111
119
  - **`helpers`**: Contains helper functions and utilities for working with the NHL API, such as getting game IDs by season or calculating player statistics. These are experimental and often times make many requests, can return DataFrames or do calculations. Stuff I find myself doing over and over I tend to move into helpers for convenience. They are often cross domain, involve many sub requests, may integrate more machine learning techniques, or just make it easier to get the data you want. These will have built in sleeping to avoid hitting the API too hard, but you can override this by setting the `sleep` parameter to `False` in the function call.
112
120
 
@@ -689,6 +697,32 @@ for term in stat_terms:
689
697
  continue
690
698
  ```
691
699
 
700
+ ---
701
+
702
+ # Records
703
+
704
+ Historical data from the NHL Records API (`records.nhl.com`). Curated methods return a list of rows; `query()` reaches any of the ~445 records endpoints by name. See [docs/records.md](docs/records.md) for every method and the full endpoint catalog.
705
+
706
+ ```python
707
+ # Franchise history
708
+ franchises = client.records.franchises()
709
+ sabres = client.records.franchise_detail(team_id=7)
710
+ totals = client.records.franchise_totals(game_type_id=2, sort="wins")
711
+ seasons = client.records.franchise_season_results(franchise_id=19, game_type_id=2)
712
+
713
+ # Draft history (back to 1963)
714
+ first_round = client.records.draft(draft_year=2024, round_number=1, sort=[("overallPickNumber", "ASC")])
715
+ sabres_picks = client.records.draft_by_team(team_id=7)
716
+
717
+ # Any records endpoint, with Cayenne filters, sorting and pagination
718
+ top_scorers = client.records.query(
719
+ "skater-career-scoring-regular-season", cayenne_exp="franchiseId=19", sort="points", limit=10
720
+ )
721
+ streaks = client.records.query("goalie-shutout-streak", limit=10)
722
+ ```
723
+
724
+ Note: without a `limit`, records endpoints return every row, which can be large (e.g. the full draft is ~8 MB).
725
+
692
726
  ---
693
727
  # Advanced Usage
694
728
 
@@ -27,6 +27,19 @@ class Edge:
27
27
  Returns:
28
28
  dict: Dictionary containing detailed EDGE statistics for the skater
29
29
 
30
+ Key Response Fields:
31
+ player.firstName.default (str): Player first name
32
+ player.lastName.default (str): Player last name
33
+ player.goals (int): Total goals scored
34
+ player.points (int): Total points
35
+ topShotSpeed.imperial (float): Top shot speed in mph
36
+ skatingSpeed.speedMax.imperial (float): Maximum skating speed in mph
37
+ totalDistanceSkated.imperial (float): Total distance skated in miles
38
+ zoneTimeDetails.offensiveZonePctg (float): Offensive zone time percentage
39
+
40
+ Response Docs:
41
+ docs/edge.md
42
+
30
43
  Example:
31
44
  client.edge.skater_detail(player_id=8478402)
32
45
  client.edge.skater_detail(player_id=8478402, season=20232024, game_type=2)
@@ -47,6 +60,14 @@ class Edge:
47
60
 
48
61
  Returns:
49
62
  dict: Shot speed statistics including maximum and average speeds
63
+
64
+ Key Response Fields:
65
+ shotSpeedData (list): Shot speed entries with percentiles
66
+ topShotSpeed.imperial (float): Top shot speed in mph
67
+ averageShotSpeed.imperial (float): Average shot speed in mph
68
+
69
+ Response Docs:
70
+ docs/edge.md
50
71
  """
51
72
  if season is None:
52
73
  resource = f"edge/skater-shot-speed-detail/{player_id}/now"
@@ -64,6 +85,14 @@ class Edge:
64
85
 
65
86
  Returns:
66
87
  dict: Skating speed statistics including burst speed and average speed
88
+
89
+ Key Response Fields:
90
+ skatingSpeedData (list): Skating speed entries with burst counts
91
+ speedMax.imperial (float): Maximum skating speed in mph
92
+ burstCount (int): Number of speed bursts
93
+
94
+ Response Docs:
95
+ docs/edge.md
67
96
  """
68
97
  if season is None:
69
98
  resource = f"edge/skater-skating-speed-detail/{player_id}/now"
@@ -81,6 +110,14 @@ class Edge:
81
110
 
82
111
  Returns:
83
112
  dict: Shot location data including shooting patterns and heat maps
113
+
114
+ Key Response Fields:
115
+ shotLocations (list): Shot data grouped by area
116
+ area (str): Ice zone identifier
117
+ shotCount (int): Number of shots from each area
118
+
119
+ Response Docs:
120
+ docs/edge.md
84
121
  """
85
122
  if season is None:
86
123
  resource = f"edge/skater-shot-location-detail/{player_id}/now"
@@ -98,6 +135,14 @@ class Edge:
98
135
 
99
136
  Returns:
100
137
  dict: Distance traveled statistics per game and per shift
138
+
139
+ Key Response Fields:
140
+ distanceData (list): Distance entries per game
141
+ totalDistance.imperial (float): Total distance skated in miles
142
+ gameMax.imperial (float): Maximum distance skated in a single game in miles
143
+
144
+ Response Docs:
145
+ docs/edge.md
101
146
  """
102
147
  if season is None:
103
148
  resource = f"edge/skater-skating-distance-detail/{player_id}/now"
@@ -115,6 +160,14 @@ class Edge:
115
160
 
116
161
  Returns:
117
162
  dict: Comparison data relative to league averages
163
+
164
+ Key Response Fields:
165
+ comparisonData (list): Comparison metrics vs league
166
+ leagueAverage (float): League average value for each metric
167
+ playerValue (float): Player value for each metric
168
+
169
+ Response Docs:
170
+ docs/edge.md
118
171
  """
119
172
  if season is None:
120
173
  resource = f"edge/skater-comparison/{player_id}/now"
@@ -132,6 +185,14 @@ class Edge:
132
185
 
133
186
  Returns:
134
187
  dict: Time spent in offensive, defensive, and neutral zones
188
+
189
+ Key Response Fields:
190
+ offensiveZonePctg (float): Offensive zone time percentage
191
+ defensiveZonePctg (float): Defensive zone time percentage
192
+ neutralZonePctg (float): Neutral zone time percentage
193
+
194
+ Response Docs:
195
+ docs/edge.md
135
196
  """
136
197
  if season is None:
137
198
  resource = f"edge/skater-zone-time/{player_id}/now"
@@ -150,6 +211,14 @@ class Edge:
150
211
 
151
212
  Returns:
152
213
  dict: Overview of league-wide skater EDGE statistics
214
+
215
+ Key Response Fields:
216
+ leaders.hardestShot (list): League leaders for hardest shot
217
+ leaders.maxSkatingSpeed (list): League leaders for max skating speed
218
+ leaders.totalDistanceSkated (list): League leaders for total distance skated
219
+
220
+ Response Docs:
221
+ docs/edge.md
153
222
  """
154
223
  if season is None:
155
224
  resource = "edge/skater-landing/now"
@@ -167,6 +236,14 @@ class Edge:
167
236
 
168
237
  Returns:
169
238
  dict: CAT EDGE statistics for the skater
239
+
240
+ Key Response Fields:
241
+ player (dict): Compact player summary with EDGE highlights
242
+ shotSpeed (dict): Condensed shot speed data
243
+ skatingSpeed (dict): Condensed skating speed data
244
+
245
+ Response Docs:
246
+ docs/edge.md
170
247
  """
171
248
  if season is None:
172
249
  resource = f"cat/edge/skater-detail/{player_id}/now"
@@ -194,6 +271,16 @@ class Edge:
194
271
  Returns:
195
272
  dict: Dictionary containing detailed EDGE statistics for the goalie
196
273
 
274
+ Key Response Fields:
275
+ player.wins (int): Total wins
276
+ player.savePctg (float): Overall save percentage
277
+ stats.goalsAgainstAvg.value (float): Goals against average
278
+ stats.gamesAbove900.value (float): Games with save pct above .900
279
+ shotLocationSummary (list): Save data grouped by shot area
280
+
281
+ Response Docs:
282
+ docs/edge.md
283
+
197
284
  Example:
198
285
  client.edge.goalie_detail(player_id=8476945)
199
286
  client.edge.goalie_detail(player_id=8476945, season=20232024, game_type=2)
@@ -214,6 +301,14 @@ class Edge:
214
301
 
215
302
  Returns:
216
303
  dict: Shot location data faced by the goalie including save percentages by zone
304
+
305
+ Key Response Fields:
306
+ shotLocations (list): Save data grouped by shot location
307
+ area (str): Ice zone identifier
308
+ savePctg (float): Save percentage for each area
309
+
310
+ Response Docs:
311
+ docs/edge.md
217
312
  """
218
313
  if season is None:
219
314
  resource = f"edge/goalie-shot-location-detail/{player_id}/now"
@@ -231,6 +326,14 @@ class Edge:
231
326
 
232
327
  Returns:
233
328
  dict: 5-on-5 performance statistics and save percentages
329
+
330
+ Key Response Fields:
331
+ fiveOnFiveStats (dict): 5-on-5 performance metrics
332
+ savePctg5v5 (float): Save percentage at 5-on-5
333
+ goalsAgainstAvg5v5 (float): Goals against average at 5-on-5
334
+
335
+ Response Docs:
336
+ docs/edge.md
234
337
  """
235
338
  if season is None:
236
339
  resource = f"edge/goalie-5v5-detail/{player_id}/now"
@@ -248,6 +351,14 @@ class Edge:
248
351
 
249
352
  Returns:
250
353
  dict: Comparison data relative to league averages
354
+
355
+ Key Response Fields:
356
+ comparisonData (list): Comparison metrics vs league
357
+ leagueAverage (float): League average value for each metric
358
+ playerValue (float): Player value for each metric
359
+
360
+ Response Docs:
361
+ docs/edge.md
251
362
  """
252
363
  if season is None:
253
364
  resource = f"edge/goalie-comparison/{player_id}/now"
@@ -265,6 +376,14 @@ class Edge:
265
376
 
266
377
  Returns:
267
378
  dict: Detailed save percentage breakdowns by situation and location
379
+
380
+ Key Response Fields:
381
+ savePctgBreakdown (list): Save percentage by situation type
382
+ overallSavePctg (float): Overall save percentage
383
+ highDangerSavePctg (float): Save percentage on high-danger chances
384
+
385
+ Response Docs:
386
+ docs/edge.md
268
387
  """
269
388
  if season is None:
270
389
  resource = f"edge/goalie-save-percentage-detail/{player_id}/now"
@@ -283,6 +402,14 @@ class Edge:
283
402
 
284
403
  Returns:
285
404
  dict: Overview of league-wide goalie EDGE statistics
405
+
406
+ Key Response Fields:
407
+ leaders (dict): League leaders for goalie EDGE stats
408
+ topSavePctg (list): Leaders by save percentage
409
+ topGamesAbove900 (list): Leaders by games above .900
410
+
411
+ Response Docs:
412
+ docs/edge.md
286
413
  """
287
414
  if season is None:
288
415
  resource = "edge/goalie-landing/now"
@@ -300,6 +427,14 @@ class Edge:
300
427
 
301
428
  Returns:
302
429
  dict: CAT EDGE statistics for the goalie
430
+
431
+ Key Response Fields:
432
+ player (dict): Compact goalie summary with EDGE highlights
433
+ savePctg (float): Condensed save percentage data
434
+ goalsAgainstAvg (float): Condensed goals against average
435
+
436
+ Response Docs:
437
+ docs/edge.md
303
438
  """
304
439
  if season is None:
305
440
  resource = f"cat/edge/goalie-detail/{player_id}/now"
@@ -327,6 +462,18 @@ class Edge:
327
462
  Returns:
328
463
  dict: Dictionary containing detailed EDGE statistics for the team
329
464
 
465
+ Key Response Fields:
466
+ team.abbrev (str): Team abbreviation
467
+ team.wins (int): Total wins
468
+ team.points (int): Total points
469
+ shotSpeed.topShotSpeed.imperial (float): Top shot speed in mph
470
+ skatingSpeed.speedMax.imperial (float): Maximum skating speed in mph
471
+ distanceSkated.total.imperial (float): Total distance skated in miles
472
+ zoneTimeDetails.offensiveZonePctg (float): Offensive zone time percentage
473
+
474
+ Response Docs:
475
+ docs/edge.md
476
+
330
477
  Example:
331
478
  client.edge.team_detail(team_id=10)
332
479
  client.edge.team_detail(team_id=10, season=20232024, game_type=2)
@@ -347,6 +494,14 @@ class Edge:
347
494
 
348
495
  Returns:
349
496
  dict: Team skating distance statistics per game and per player
497
+
498
+ Key Response Fields:
499
+ distanceData (list): Distance entries per game and per player
500
+ totalDistance.imperial (float): Total team distance skated in miles
501
+ perGameAvg.imperial (float): Average distance per game in miles
502
+
503
+ Response Docs:
504
+ docs/edge.md
350
505
  """
351
506
  if season is None:
352
507
  resource = f"edge/team-skating-distance-detail/{team_id}/now"
@@ -364,6 +519,14 @@ class Edge:
364
519
 
365
520
  Returns:
366
521
  dict: Team time spent in offensive, defensive, and neutral zones
522
+
523
+ Key Response Fields:
524
+ offensiveZonePctg (float): Offensive zone time percentage
525
+ defensiveZonePctg (float): Defensive zone time percentage
526
+ neutralZonePctg (float): Neutral zone time percentage
527
+
528
+ Response Docs:
529
+ docs/edge.md
367
530
  """
368
531
  if season is None:
369
532
  resource = f"edge/team-zone-time-details/{team_id}/now"
@@ -381,6 +544,14 @@ class Edge:
381
544
 
382
545
  Returns:
383
546
  dict: Team shot location data including shooting patterns and heat maps
547
+
548
+ Key Response Fields:
549
+ shotLocations (list): Shot data grouped by area
550
+ area (str): Ice zone identifier
551
+ shotCount (int): Number of shots from each area
552
+
553
+ Response Docs:
554
+ docs/edge.md
384
555
  """
385
556
  if season is None:
386
557
  resource = f"edge/team-shot-location-detail/{team_id}/now"
@@ -399,6 +570,14 @@ class Edge:
399
570
 
400
571
  Returns:
401
572
  dict: Overview of league-wide team EDGE statistics
573
+
574
+ Key Response Fields:
575
+ leaders (dict): Team EDGE leaders across categories
576
+ topShotSpeed (list): Leaders by team shot speed
577
+ topSkatingSpeed (list): Leaders by team skating speed
578
+
579
+ Response Docs:
580
+ docs/edge.md
402
581
  """
403
582
  if season is None:
404
583
  resource = "edge/team-landing/now"
@@ -416,6 +595,14 @@ class Edge:
416
595
 
417
596
  Returns:
418
597
  dict: Team shot speed statistics including maximum and average speeds
598
+
599
+ Key Response Fields:
600
+ shotSpeedData (list): Shot speed entries by player
601
+ topShotSpeed.imperial (float): Top team shot speed in mph
602
+ averageShotSpeed.imperial (float): Average team shot speed in mph
603
+
604
+ Response Docs:
605
+ docs/edge.md
419
606
  """
420
607
  if season is None:
421
608
  resource = f"edge/team-shot-speed-detail/{team_id}/now"
@@ -433,6 +620,14 @@ class Edge:
433
620
 
434
621
  Returns:
435
622
  dict: Team skating speed statistics including burst speed and average speed
623
+
624
+ Key Response Fields:
625
+ skatingSpeedData (list): Skating speed entries by player
626
+ speedMax.imperial (float): Maximum team skating speed in mph
627
+ averageSpeed.imperial (float): Average team skating speed in mph
628
+
629
+ Response Docs:
630
+ docs/edge.md
436
631
  """
437
632
  if season is None:
438
633
  resource = f"edge/team-skating-speed-detail/{team_id}/now"