mirror of
https://github.com/nprasad2077/NBA_Go.git
synced 2026-09-22 14:05:13 +00:00
3813 lines
272 KiB
JSON
3813 lines
272 KiB
JSON
{
|
|
"info": {
|
|
"_postman_id": "f0cb3c13-063b-490a-aa7f-5af135aacbe6",
|
|
"name": "NBA Statistics Go",
|
|
"description": "# NBA Statistics Go API\n\nThe NBA Statistics Go API provides comprehensive access to NBA player statistics, game data, and shot chart information. This RESTful API allows developers to retrieve historical and current season data for players, teams, and games across both regular season and playoff periods.\n\n## Base URL\n\nAll API requests should be made to the base URL stored in the `{{base_url}}` variable:\n\n``` text\nhttps://api.server.nbaapi.com\n\n ```\n\n## Authentication\n\n**No authentication is currently required** for accessing public endpoints. All endpoints are openly accessible without API keys or tokens.\n\n**Future Considerations:** Upcoming versions may introduce API key authentication via the `x-api-key` header for rate limiting and usage tracking purposes.\n\n## Pagination\n\nThe API implements cursor-based pagination for endpoints that return large datasets. Pagination behavior varies by endpoint:\n\n### Stats Endpoints (`/api/playertotals` and `/api/playeradvancedstats`)\n\nThese endpoints return a `pagination` object in the response containing:\n\n- **`page`** (integer): Current page number\n \n- **`pageSize`** (integer): Number of results per page (configurable via query parameter)\n \n- **`totalPages`** (integer): Total number of pages available\n \n- **`totalResults`** (integer): Total number of records matching the query\n \n\n**Query Parameters:**\n\n- `page` (integer, optional): Page number to retrieve. Defaults to `1`.\n \n- `pageSize` (integer, optional): Number of results per page. Defaults to `20`. Maximum recommended: `100`.\n \n\n### Shot Chart Endpoint (`/api/playershotchart`)\n\nThis endpoint has a **fixed page size of 50 results** per page. Use the `page` parameter to navigate through results.\n\n### Games Endpoint (`/api/games`)\n\nSupports flexible pagination with `page` and `pageSize` parameters similar to stats endpoints.\n\n## Common Query Parameters\n\nMany endpoints share common query parameters for filtering and sorting:\n\n| Parameter | Type | Description | Example |\n| --- | --- | --- | --- |\n| `season` | integer | Four-digit season year (year the season ends) | `2025` for 2024-25 season |\n| `team` | string | Three-letter team abbreviation | `LAL`, `BOS`, `GSW` |\n| `playerId` | string | Unique player identifier (Basketball Reference format) | `jamesle01`, `curryst01` |\n| `page` | integer | Page number for pagination | `1`, `2`, `3` |\n| `pageSize` | integer | Results per page (where applicable) | `20`, `50`, `100` |\n| `isPlayoff` | boolean | Filter for playoff vs regular season data | `true`, `false` |\n| `sortBy` | string | Field name to sort results by | `points`, `assists`, `winShares` |\n| `ascending` | boolean | Sort order direction | `true` (ascending), `false` (descending) |\n\n## Response Format\n\nAll API responses are returned in **JSON format** with the following general structure:\n\n### Successful Response (Games Endpoint)\n\n``` json\n{\n \"data\": [\n {\n \"gameId\": \"202512140POR\",\n \"date\": \"2025-12-14T14:00:00Z\",\n \"isPlayoff\": false,\n \"startTimeET\": \"9:00p\",\n \"arena\": \"Moda Center\",\n \"visitorTeam\": \"GSW\",\n \"visitorPts\": 131,\n \"homeTeam\": \"POR\",\n \"homePts\": 136,\n \"gameDuration\": \"2:23\"\n },\n {\n \"gameId\": \"202512140PHO\",\n \"date\": \"2025-12-14T13:00:00Z\",\n \"isPlayoff\": false,\n \"startTimeET\": \"8:00p\",\n \"arena\": \"Mortgage Matchup Center\",\n \"visitorTeam\": \"LAL\",\n \"visitorPts\": 116,\n \"homeTeam\": \"PHX\",\n \"homePts\": 114,\n \"gameDuration\": \"2:43\"\n },\n {\n \"gameId\": \"202512140CHI\",\n \"date\": \"2025-12-14T12:00:00Z\",\n \"isPlayoff\": false,\n \"startTimeET\": \"7:00p\",\n \"arena\": \"United Center\",\n \"visitorTeam\": \"NOP\",\n \"visitorPts\": 114,\n \"homeTeam\": \"CHI\",\n \"homePts\": 104,\n \"gameDuration\": \"2:14\"\n }\n ],\n \"pagination\": {\n \"total\": 26101,\n \"page\": 1,\n \"pageSize\": 3,\n \"pages\": 8701\n }\n}\n\n ```\n\n### Successful Response (Player Total Stats)\n\n``` json\n{\n \"data\": [\n {\n \"playerId\": \"duranke01\",\n \"playerName\": \"Kevin Durant\",\n \"position\": \"SF\",\n \"age\": 37,\n \"games\": 20,\n \"gamesStarted\": 20,\n \"minutesPg\": 707,\n \"fieldGoals\": 172,\n \"fieldAttempts\": 345,\n \"fieldPercent\": 0.499,\n \"threeFg\": 36,\n \"threeAttempts\": 91,\n \"threePercent\": 0.396,\n \"twoFg\": 136,\n \"twoAttempts\": 254,\n \"twoPercent\": 0.535,\n \"effectFgPercent\": 0.551,\n \"ft\": 116,\n \"ftAttempts\": 130,\n \"ftPercent\": 0.892,\n \"offensiveRb\": 6,\n \"defensiveRb\": 86,\n \"totalRb\": 92,\n \"assists\": 77,\n \"steals\": 19,\n \"blocks\": 12,\n \"turnovers\": 59,\n \"personalFouls\": 48,\n \"points\": 496,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"sengual01\",\n \"playerName\": \"Alperen Şengün\",\n \"position\": \"C\",\n \"age\": 23,\n \"games\": 20,\n \"gamesStarted\": 20,\n \"minutesPg\": 718,\n \"fieldGoals\": 170,\n \"fieldAttempts\": 341,\n \"fieldPercent\": 0.499,\n \"threeFg\": 20,\n \"threeAttempts\": 55,\n \"threePercent\": 0.364,\n \"twoFg\": 150,\n \"twoAttempts\": 286,\n \"twoPercent\": 0.524,\n \"effectFgPercent\": 0.528,\n \"ft\": 100,\n \"ftAttempts\": 136,\n \"ftPercent\": 0.735,\n \"offensiveRb\": 60,\n \"defensiveRb\": 128,\n \"totalRb\": 188,\n \"assists\": 140,\n \"steals\": 29,\n \"blocks\": 19,\n \"turnovers\": 67,\n \"personalFouls\": 69,\n \"points\": 460,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"thompam01\",\n \"playerName\": \"Amen Thompson\",\n \"position\": \"PG\",\n \"age\": 23,\n \"games\": 22,\n \"gamesStarted\": 22,\n \"minutesPg\": 796,\n \"fieldGoals\": 150,\n \"fieldAttempts\": 310,\n \"fieldPercent\": 0.484,\n \"threeFg\": 9,\n \"threeAttempts\": 47,\n \"threePercent\": 0.191,\n \"twoFg\": 141,\n \"twoAttempts\": 263,\n \"twoPercent\": 0.536,\n \"effectFgPercent\": 0.498,\n \"ft\": 76,\n \"ftAttempts\": 94,\n \"ftPercent\": 0.809,\n \"offensiveRb\": 58,\n \"defensiveRb\": 99,\n \"totalRb\": 157,\n \"assists\": 115,\n \"steals\": 30,\n \"blocks\": 11,\n \"turnovers\": 57,\n \"personalFouls\": 56,\n \"points\": 385,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n }\n ],\n \"pagination\": {\n \"total\": 14,\n \"page\": 1,\n \"pageSize\": 3,\n \"pages\": 5\n }\n}\n\n ```\n\n### Error Response\n\n``` json\n{\n \"error\": \"Cannot GET /api/playertotal\"\n}\n\n ```\n\n## Error Handling\n\nThe API uses standard HTTP status codes to indicate success or failure:\n\n| Status Code | Meaning | Common Causes |\n| --- | --- | --- |\n| `200 OK` | Request successful | Valid request with results |\n| `400 Bad Request` | Invalid request parameters | Malformed query parameters, invalid data types |\n| `404 Not Found` | Resource not found | Invalid endpoint or no data matching criteria |\n| `500 Internal Server Error` | Server error | Unexpected server-side issue |\n| `503 Service Unavailable` | Service temporarily unavailable | Maintenance or high load |\n\n**Best Practices:**\n\n- Always check the HTTP status code before processing response data\n \n- Implement retry logic with exponential backoff for 5xx errors\n \n- Validate query parameters before making requests\n \n\n## Rate Limiting\n\n**Current Status:** No rate limiting is enforced on public endpoints.\n\n**Recommendations:**\n\n- Implement client-side throttling to avoid overwhelming the API\n \n- Cache responses when appropriate to reduce redundant requests\n \n- Consider batching requests during off-peak hours for large data pulls\n \n\n## Data Information\n\n### Season Year Format\n\nSeason years are represented by the **year in which the season ends**. For example:\n\n- `2025` represents the 2024-25 NBA season\n \n- `2024` represents the 2023-24 NBA season\n \n\n### Player ID Format\n\nPlayer IDs follow the Basketball Reference naming convention:\n\n- Format: First 5 letters of last name + first 2 letters of first name + `01` (incremented for duplicates)\n \n- Examples: `jamesle01` (LeBron James), `curryst01` (Stephen Curry), `duranke01` (Kevin Durant)\n \n\n### Playoff vs Regular Season Data\n\nUse the `isPlayoff` parameter to distinguish between regular season and playoff statistics:\n\n- `isPlayoff=false` or omitted: Regular season data\n \n- `isPlayoff=true`: Playoff data only\n \n\n**Note:** Playoff data is only available for players/teams that qualified for the playoffs in a given season.\n\n### Data Freshness\n\n- **Historical Data:** Complete data available from the 1946-47 season onwards\n \n- **Current Season:** Data is updated daily, typically within 2-4 hours after games conclude\n \n- **Live Data:** This API does not provide real-time game data\n \n\n### Team Abbreviations\n\nThe API uses standard three-letter NBA team abbreviations. Common examples:\n\n| Team | Abbreviation | Team | Abbreviation |\n| --- | --- | --- | --- |\n| Atlanta Hawks | ATL | Memphis Grizzlies | MEM |\n| Boston Celtics | BOS | Miami Heat | MIA |\n| Brooklyn Nets | BKN | Milwaukee Bucks | MIL |\n| Charlotte Hornets | CHA | Minnesota Timberwolves | MIN |\n| Chicago Bulls | CHI | New Orleans Pelicans | NOP |\n| Cleveland Cavaliers | CLE | New York Knicks | NYK |\n| Dallas Mavericks | DAL | Oklahoma City Thunder | OKC |\n| Denver Nuggets | DEN | Orlando Magic | ORL |\n| Detroit Pistons | DET | Philadelphia 76ers | PHI |\n| Golden State Warriors | GSW | Phoenix Suns | PHX |\n| Houston Rockets | HOU | Portland Trail Blazers | POR |\n| Indiana Pacers | IND | Sacramento Kings | SAC |\n| LA Clippers | LAC | San Antonio Spurs | SAS |\n| Los Angeles Lakers | LAL | Toronto Raptors | TOR |\n| Utah Jazz | UTA | Washington Wizards | WAS |\n\n**Note:** Historical teams use their abbreviations from the respective era (e.g., SEA for Seattle SuperSonics).\n\n## Common Use Cases\n\n### 1\\. Get Current Season Leaders\n\nRetrieve top scorers for the current season:\n\n``` http\nGET /api/playertotals?season=2025&page=1&pageSize=10&sortBy=points&ascending=false\n\n ```\n\n### 2\\. Team Roster Statistics\n\nGet all statistics for a specific team:\n\n``` http\nGET /api/playertotals?season=2025&team=LAL&pageSize=20\n\n ```\n\n### 3\\. Player Career Playoff Performance\n\nRetrieve a player's playoff statistics across multiple seasons:\n\n``` http\nGET /api/playertotals?playerId=jamesle01&isPlayoff=true&pageSize=50\n\n ```\n\n### 4\\. Advanced Analytics Comparison\n\nCompare advanced metrics for multiple players:\n\n``` http\nGET /api/playeradvancedstats?season=2025&sortBy=vorp&ascending=false&pageSize=50\n\n ```\n\n### 5\\. Shot Chart Visualization\n\nGet shot chart data for a specific player and game:\n\n``` http\nGET /api/playershotchart?playerId=curryst01&date=Dec 25,2024&page=1\n\n ```\n\n### 6\\. Historical Game Data\n\nRetrieve games from a specific date range:\n\n``` http\nGET /api/games?page=1&pageSize=20&sortBy=date&ascending=false\n\n ```\n\n## API Endpoints Overview\n\nThis collection includes the following endpoints:\n\n1. **Games** - Retrieve game schedules and results\n \n2. **Player Totals Stats** - Traditional counting statistics (points, rebounds, assists, etc.)\n \n3. **Player Totals Playoffs Stats** - Playoff-specific counting statistics\n \n4. **Player Advanced Stats** - Advanced metrics (PER, Win Shares, VORP, etc.)\n \n5. **Player Advanced Playoff Stats** - Playoff-specific advanced metrics\n \n6. **Shot Chart** - Detailed shot location and outcome data\n \n\n## Additional Resources\n\n- **API Status:** Check service status and uptime at the provider's status page\n \n- **Support:** For questions or issues, contact the API maintainers\n \n- **Updates:** Monitor the changelog for API updates and new features\n \n\n## Tips for Optimal Usage\n\n1. **Use Specific Filters:** Narrow down queries with season, team, or player filters to reduce response size\n \n2. **Implement Caching:** Cache frequently accessed data (e.g., historical statistics) to improve performance\n \n3. **Batch Requests:** When retrieving data for multiple entities, consider batching requests\n \n4. **Monitor Response Times:** Track API response times and adjust `pageSize` if experiencing slowdowns\n \n5. **Handle Empty Results:** Always check if the `data` array is empty before processing results\n \n6. **Validate Player IDs:** Verify player ID format before making requests to avoid 404 errors\n \n\n---\n\n**Version:** 1.0 \n**Last Updated:** 2025",
|
|
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
|
|
"_exporter_id": "25652688",
|
|
"_collection_link": "https://www.postman.com/solar-meadow-682296/workspace/nba-stats/collection/25652688-f0cb3c13-063b-490a-aa7f-5af135aacbe6?action=share&source=collection_link&creator=25652688"
|
|
},
|
|
"item": [
|
|
{
|
|
"name": "Games",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"var template = `",
|
|
"<style>",
|
|
" .games-table {",
|
|
" width: 100%;",
|
|
" border-collapse: collapse;",
|
|
" font-family: Arial, sans-serif;",
|
|
" font-size: 14px;",
|
|
" }",
|
|
" .games-table th {",
|
|
" background-color: #1e4d8c;",
|
|
" color: white;",
|
|
" padding: 12px 8px;",
|
|
" text-align: left;",
|
|
" font-weight: bold;",
|
|
" border-bottom: 2px solid #0d2d5a;",
|
|
" }",
|
|
" .games-table td {",
|
|
" padding: 10px 8px;",
|
|
" border-bottom: 1px solid #ddd;",
|
|
" }",
|
|
" .games-table tr:nth-child(even) {",
|
|
" background-color: #f8f9fa;",
|
|
" }",
|
|
" .games-table tr:nth-child(odd) {",
|
|
" background-color: #ffffff;",
|
|
" }",
|
|
" .games-table tr:hover {",
|
|
" background-color: #e8f4fd;",
|
|
" }",
|
|
" .table-container {",
|
|
" padding: 20px;",
|
|
" }",
|
|
" .table-title {",
|
|
" font-family: Arial, sans-serif;",
|
|
" font-size: 18px;",
|
|
" font-weight: bold;",
|
|
" margin-bottom: 15px;",
|
|
" color: #1e4d8c;",
|
|
" }",
|
|
"</style>",
|
|
"<div class=\"table-container\">",
|
|
" <div class=\"table-title\">NBA Games</div>",
|
|
" <table class=\"games-table\">",
|
|
" <thead>",
|
|
" <tr>",
|
|
" <th>Game ID</th>",
|
|
" <th>Date</th>",
|
|
" <th>Visitor Team</th>",
|
|
" <th>Visitor Pts</th>",
|
|
" <th>Home Team</th>",
|
|
" <th>Home Pts</th>",
|
|
" <th>Arena</th>",
|
|
" <th>Duration</th>",
|
|
" </tr>",
|
|
" </thead>",
|
|
" <tbody>",
|
|
" {{#each games}}",
|
|
" <tr>",
|
|
" <td>{{gameId}}</td>",
|
|
" <td>{{date}}</td>",
|
|
" <td>{{visitorTeam}}</td>",
|
|
" <td>{{visitorPts}}</td>",
|
|
" <td>{{homeTeam}}</td>",
|
|
" <td>{{homePts}}</td>",
|
|
" <td>{{arena}}</td>",
|
|
" <td>{{gameDuration}}</td>",
|
|
" </tr>",
|
|
" {{/each}}",
|
|
" </tbody>",
|
|
" </table>",
|
|
"</div>",
|
|
"`;",
|
|
"",
|
|
"function constructVisualizerPayload() {",
|
|
" var response = pm.response.json();",
|
|
" var games = response.data.map(function(game) {",
|
|
" var dateObj = new Date(game.date);",
|
|
" var formattedDate = dateObj.toLocaleDateString('en-US', {",
|
|
" year: 'numeric',",
|
|
" month: 'short',",
|
|
" day: 'numeric'",
|
|
" });",
|
|
" return {",
|
|
" gameId: game.gameId,",
|
|
" date: formattedDate,",
|
|
" visitorTeam: game.visitorTeam,",
|
|
" visitorPts: game.visitorPts,",
|
|
" homeTeam: game.homeTeam,",
|
|
" homePts: game.homePts,",
|
|
" arena: game.arena,",
|
|
" gameDuration: game.gameDuration || 'N/A'",
|
|
" };",
|
|
" });",
|
|
" return { games: games };",
|
|
"}",
|
|
"",
|
|
"pm.visualizer.set(template, constructVisualizerPayload());"
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "https://api.server.nbaapi.com/api/games?isPlayoff=false&page=1&pageSize=3&sortBy=date&ascending=false",
|
|
"protocol": "https",
|
|
"host": [
|
|
"api",
|
|
"server",
|
|
"nbaapi",
|
|
"com"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"games"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "false"
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1"
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "3"
|
|
},
|
|
{
|
|
"key": "sortBy",
|
|
"value": "date"
|
|
},
|
|
{
|
|
"key": "ascending",
|
|
"value": "false"
|
|
},
|
|
{
|
|
"key": "include",
|
|
"value": "lineScores%2C%20playerGameBasicStats",
|
|
"disabled": true
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"response": [
|
|
{
|
|
"name": "Games",
|
|
"originalRequest": {
|
|
"method": "GET",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "https://api.server.nbaapi.com/api/games?isPlayoff=false&page=1&pageSize=8&sortBy=date&ascending=false",
|
|
"protocol": "https",
|
|
"host": [
|
|
"api",
|
|
"server",
|
|
"nbaapi",
|
|
"com"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"games"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "false"
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1"
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "8"
|
|
},
|
|
{
|
|
"key": "sortBy",
|
|
"value": "date"
|
|
},
|
|
{
|
|
"key": "ascending",
|
|
"value": "false"
|
|
},
|
|
{
|
|
"key": "include",
|
|
"value": "lineScores%2C%20playerGameBasicStats",
|
|
"disabled": true
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"status": "OK",
|
|
"code": 200,
|
|
"_postman_previewlanguage": null,
|
|
"header": [
|
|
{
|
|
"key": "Alt-Svc",
|
|
"value": "h3=\":443\"; ma=2592000"
|
|
},
|
|
{
|
|
"key": "Content-Encoding",
|
|
"value": "br"
|
|
},
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
},
|
|
{
|
|
"key": "Date",
|
|
"value": "Tue, 16 Dec 2025 07:47:19 GMT"
|
|
},
|
|
{
|
|
"key": "Server",
|
|
"value": "nginx/1.28.0"
|
|
},
|
|
{
|
|
"key": "Vary",
|
|
"value": "Accept-Encoding"
|
|
},
|
|
{
|
|
"key": "Content-Length",
|
|
"value": "433"
|
|
}
|
|
],
|
|
"cookie": [],
|
|
"body": "{\n \"data\": [\n {\n \"gameId\": \"202512140POR\",\n \"date\": \"2025-12-14T14:00:00Z\",\n \"isPlayoff\": false,\n \"startTimeET\": \"9:00p\",\n \"arena\": \"Moda Center\",\n \"visitorTeam\": \"GSW\",\n \"visitorPts\": 131,\n \"homeTeam\": \"POR\",\n \"homePts\": 136,\n \"gameDuration\": \"2:23\"\n },\n {\n \"gameId\": \"202512140PHO\",\n \"date\": \"2025-12-14T13:00:00Z\",\n \"isPlayoff\": false,\n \"startTimeET\": \"8:00p\",\n \"arena\": \"Mortgage Matchup Center\",\n \"visitorTeam\": \"LAL\",\n \"visitorPts\": 116,\n \"homeTeam\": \"PHX\",\n \"homePts\": 114,\n \"gameDuration\": \"2:43\"\n },\n {\n \"gameId\": \"202512140CHI\",\n \"date\": \"2025-12-14T12:00:00Z\",\n \"isPlayoff\": false,\n \"startTimeET\": \"7:00p\",\n \"arena\": \"United Center\",\n \"visitorTeam\": \"NOP\",\n \"visitorPts\": 114,\n \"homeTeam\": \"CHI\",\n \"homePts\": 104,\n \"gameDuration\": \"2:14\"\n },\n {\n \"gameId\": \"202512140MIN\",\n \"date\": \"2025-12-14T12:00:00Z\",\n \"isPlayoff\": false,\n \"startTimeET\": \"7:00p\",\n \"arena\": \"Target Center\",\n \"visitorTeam\": \"SAC\",\n \"visitorPts\": 103,\n \"homeTeam\": \"MIN\",\n \"homePts\": 117,\n \"gameDuration\": \"2:11\"\n },\n {\n \"gameId\": \"202512140ATL\",\n \"date\": \"2025-12-14T11:00:00Z\",\n \"isPlayoff\": false,\n \"startTimeET\": \"6:00p\",\n \"arena\": \"State Farm Arena\",\n \"visitorTeam\": \"PHI\",\n \"visitorPts\": 117,\n \"homeTeam\": \"ATL\",\n \"homePts\": 120,\n \"gameDuration\": \"2:21\"\n },\n {\n \"gameId\": \"202512140BRK\",\n \"date\": \"2025-12-14T11:00:00Z\",\n \"isPlayoff\": false,\n \"startTimeET\": \"6:00p\",\n \"arena\": \"Barclays Center\",\n \"visitorTeam\": \"MIL\",\n \"visitorPts\": 82,\n \"homeTeam\": \"BKN\",\n \"homePts\": 127,\n \"gameDuration\": \"2:05\"\n },\n {\n \"gameId\": \"202512140CLE\",\n \"date\": \"2025-12-14T08:30:00Z\",\n \"isPlayoff\": false,\n \"startTimeET\": \"3:30p\",\n \"arena\": \"Rocket Arena\",\n \"visitorTeam\": \"CHA\",\n \"visitorPts\": 119,\n \"homeTeam\": \"CLE\",\n \"homePts\": 111,\n \"gameDuration\": \"\"\n },\n {\n \"gameId\": \"202512140IND\",\n \"date\": \"2025-12-14T08:00:00Z\",\n \"isPlayoff\": false,\n \"startTimeET\": \"3:00p\",\n \"arena\": \"Gainbridge Fieldhouse\",\n \"visitorTeam\": \"WAS\",\n \"visitorPts\": 108,\n \"homeTeam\": \"IND\",\n \"homePts\": 89,\n \"gameDuration\": \"2:20\"\n }\n ],\n \"pagination\": {\n \"total\": 26101,\n \"page\": 1,\n \"pageSize\": 8,\n \"pages\": 3263\n }\n}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Games Detail",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"var template = `",
|
|
"<style>",
|
|
" * {",
|
|
" box-sizing: border-box;",
|
|
" }",
|
|
" body {",
|
|
" font-family: 'Segoe UI', Arial, sans-serif;",
|
|
" background-color: #f0f2f5;",
|
|
" margin: 0;",
|
|
" padding: 0;",
|
|
" }",
|
|
" .container {",
|
|
" max-width: 1400px;",
|
|
" margin: 0 auto;",
|
|
" padding: 20px;",
|
|
" }",
|
|
" .section {",
|
|
" background: white;",
|
|
" border-radius: 12px;",
|
|
" box-shadow: 0 2px 8px rgba(0,0,0,0.1);",
|
|
" margin-bottom: 24px;",
|
|
" overflow: hidden;",
|
|
" }",
|
|
" .section-header {",
|
|
" background: linear-gradient(135deg, #1e4d8c 0%, #2d6bb5 100%);",
|
|
" color: white;",
|
|
" padding: 16px 20px;",
|
|
" font-size: 18px;",
|
|
" font-weight: 600;",
|
|
" display: flex;",
|
|
" align-items: center;",
|
|
" gap: 10px;",
|
|
" }",
|
|
" .section-content {",
|
|
" padding: 20px;",
|
|
" }",
|
|
" ",
|
|
" /* Games Table Styles */",
|
|
" .games-table {",
|
|
" width: 100%;",
|
|
" border-collapse: collapse;",
|
|
" font-size: 14px;",
|
|
" }",
|
|
" .games-table th {",
|
|
" background-color: #f8f9fa;",
|
|
" color: #1e4d8c;",
|
|
" padding: 14px 12px;",
|
|
" text-align: left;",
|
|
" font-weight: 600;",
|
|
" border-bottom: 2px solid #e0e0e0;",
|
|
" text-transform: uppercase;",
|
|
" font-size: 12px;",
|
|
" letter-spacing: 0.5px;",
|
|
" }",
|
|
" .games-table td {",
|
|
" padding: 12px;",
|
|
" border-bottom: 1px solid #eee;",
|
|
" vertical-align: middle;",
|
|
" }",
|
|
" .games-table tr:hover {",
|
|
" background-color: #f0f7ff;",
|
|
" }",
|
|
" .games-table .score {",
|
|
" font-weight: 700;",
|
|
" font-size: 16px;",
|
|
" }",
|
|
" .games-table .winner {",
|
|
" color: #28a745;",
|
|
" }",
|
|
" .games-table .loser {",
|
|
" color: #6c757d;",
|
|
" }",
|
|
" .team-name {",
|
|
" font-weight: 600;",
|
|
" color: #1e4d8c;",
|
|
" }",
|
|
" .game-id {",
|
|
" font-family: monospace;",
|
|
" font-size: 12px;",
|
|
" color: #666;",
|
|
" background: #f0f0f0;",
|
|
" padding: 4px 8px;",
|
|
" border-radius: 4px;",
|
|
" }",
|
|
" .arena-badge {",
|
|
" background: #e8f4fd;",
|
|
" color: #1e4d8c;",
|
|
" padding: 4px 10px;",
|
|
" border-radius: 20px;",
|
|
" font-size: 12px;",
|
|
" }",
|
|
" .duration-badge {",
|
|
" background: #fff3cd;",
|
|
" color: #856404;",
|
|
" padding: 4px 10px;",
|
|
" border-radius: 20px;",
|
|
" font-size: 12px;",
|
|
" }",
|
|
" ",
|
|
" /* Game Card Styles */",
|
|
" .game-card {",
|
|
" border: 1px solid #e0e0e0;",
|
|
" border-radius: 10px;",
|
|
" margin-bottom: 30px;",
|
|
" overflow: hidden;",
|
|
" }",
|
|
" .game-card-header {",
|
|
" background: linear-gradient(135deg, #2d3748 0%, #4a5568 100%);",
|
|
" color: white;",
|
|
" padding: 15px 20px;",
|
|
" display: flex;",
|
|
" justify-content: space-between;",
|
|
" align-items: center;",
|
|
" }",
|
|
" .game-card-header .matchup {",
|
|
" font-size: 20px;",
|
|
" font-weight: 700;",
|
|
" }",
|
|
" .game-card-header .game-info {",
|
|
" font-size: 13px;",
|
|
" opacity: 0.9;",
|
|
" }",
|
|
" .game-card-body {",
|
|
" padding: 20px;",
|
|
" }",
|
|
" ",
|
|
" /* Line Scores Table */",
|
|
" .line-scores-table {",
|
|
" width: 100%;",
|
|
" border-collapse: collapse;",
|
|
" margin-bottom: 20px;",
|
|
" }",
|
|
" .line-scores-table th {",
|
|
" background: #f8f9fa;",
|
|
" padding: 10px 15px;",
|
|
" text-align: center;",
|
|
" font-weight: 600;",
|
|
" color: #495057;",
|
|
" border-bottom: 2px solid #dee2e6;",
|
|
" font-size: 13px;",
|
|
" }",
|
|
" .line-scores-table th:first-child {",
|
|
" text-align: left;",
|
|
" }",
|
|
" .line-scores-table td {",
|
|
" padding: 12px 15px;",
|
|
" text-align: center;",
|
|
" border-bottom: 1px solid #eee;",
|
|
" }",
|
|
" .line-scores-table td:first-child {",
|
|
" text-align: left;",
|
|
" font-weight: 600;",
|
|
" color: #1e4d8c;",
|
|
" }",
|
|
" .line-scores-table .total-col {",
|
|
" background: #e8f4fd;",
|
|
" font-weight: 700;",
|
|
" font-size: 16px;",
|
|
" color: #1e4d8c;",
|
|
" }",
|
|
" .line-scores-table tr:last-child td {",
|
|
" border-bottom: none;",
|
|
" }",
|
|
" ",
|
|
" /* Player Stats Table */",
|
|
" .player-stats-section {",
|
|
" margin-top: 20px;",
|
|
" }",
|
|
" .player-stats-title {",
|
|
" font-size: 16px;",
|
|
" font-weight: 600;",
|
|
" color: #2d3748;",
|
|
" margin-bottom: 12px;",
|
|
" padding-bottom: 8px;",
|
|
" border-bottom: 2px solid #e0e0e0;",
|
|
" display: flex;",
|
|
" align-items: center;",
|
|
" gap: 8px;",
|
|
" }",
|
|
" .team-badge {",
|
|
" background: #1e4d8c;",
|
|
" color: white;",
|
|
" padding: 4px 12px;",
|
|
" border-radius: 20px;",
|
|
" font-size: 12px;",
|
|
" font-weight: 600;",
|
|
" }",
|
|
" .player-stats-table {",
|
|
" width: 100%;",
|
|
" border-collapse: collapse;",
|
|
" font-size: 12px;",
|
|
" margin-bottom: 25px;",
|
|
" }",
|
|
" .player-stats-table th {",
|
|
" background: #f8f9fa;",
|
|
" padding: 10px 6px;",
|
|
" text-align: center;",
|
|
" font-weight: 600;",
|
|
" color: #495057;",
|
|
" border-bottom: 2px solid #dee2e6;",
|
|
" font-size: 11px;",
|
|
" text-transform: uppercase;",
|
|
" }",
|
|
" .player-stats-table th:first-child {",
|
|
" text-align: left;",
|
|
" padding-left: 12px;",
|
|
" }",
|
|
" .player-stats-table td {",
|
|
" padding: 8px 6px;",
|
|
" text-align: center;",
|
|
" border-bottom: 1px solid #f0f0f0;",
|
|
" }",
|
|
" .player-stats-table td:first-child {",
|
|
" text-align: left;",
|
|
" padding-left: 12px;",
|
|
" font-weight: 500;",
|
|
" }",
|
|
" .player-stats-table tr:hover {",
|
|
" background-color: #f8f9fa;",
|
|
" }",
|
|
" .player-stats-table .highlight-pts {",
|
|
" font-weight: 700;",
|
|
" color: #1e4d8c;",
|
|
" }",
|
|
" .player-stats-table .dnp {",
|
|
" color: #999;",
|
|
" font-style: italic;",
|
|
" }",
|
|
" .player-stats-table .positive {",
|
|
" color: #28a745;",
|
|
" }",
|
|
" .player-stats-table .negative {",
|
|
" color: #dc3545;",
|
|
" }",
|
|
" .stat-highlight {",
|
|
" background: linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%);",
|
|
" font-weight: 700;",
|
|
" }",
|
|
" ",
|
|
" /* Chart Container */",
|
|
" .chart-container {",
|
|
" margin: 20px 0;",
|
|
" padding: 15px;",
|
|
" background: #fafafa;",
|
|
" border-radius: 8px;",
|
|
" }",
|
|
" .chart-title {",
|
|
" text-align: center;",
|
|
" font-weight: 600;",
|
|
" color: #2d3748;",
|
|
" margin-bottom: 15px;",
|
|
" }",
|
|
" ",
|
|
" /* Tabs */",
|
|
" .tabs {",
|
|
" display: flex;",
|
|
" border-bottom: 2px solid #e0e0e0;",
|
|
" margin-bottom: 20px;",
|
|
" }",
|
|
" .tab {",
|
|
" padding: 12px 24px;",
|
|
" cursor: pointer;",
|
|
" font-weight: 500;",
|
|
" color: #666;",
|
|
" border-bottom: 3px solid transparent;",
|
|
" margin-bottom: -2px;",
|
|
" transition: all 0.2s;",
|
|
" }",
|
|
" .tab:hover {",
|
|
" color: #1e4d8c;",
|
|
" background: #f8f9fa;",
|
|
" }",
|
|
" .tab.active {",
|
|
" color: #1e4d8c;",
|
|
" border-bottom-color: #1e4d8c;",
|
|
" }",
|
|
" .tab-content {",
|
|
" display: none;",
|
|
" }",
|
|
" .tab-content.active {",
|
|
" display: block;",
|
|
" }",
|
|
" ",
|
|
" /* Summary Stats */",
|
|
" .summary-row {",
|
|
" display: flex;",
|
|
" gap: 15px;",
|
|
" margin-bottom: 20px;",
|
|
" flex-wrap: wrap;",
|
|
" }",
|
|
" .summary-card {",
|
|
" flex: 1;",
|
|
" min-width: 120px;",
|
|
" background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);",
|
|
" color: white;",
|
|
" padding: 15px;",
|
|
" border-radius: 10px;",
|
|
" text-align: center;",
|
|
" }",
|
|
" .summary-card.alt {",
|
|
" background: linear-gradient(135deg, #11998e 0%, #38ef7d 100%);",
|
|
" }",
|
|
" .summary-card.alt2 {",
|
|
" background: linear-gradient(135deg, #ee0979 0%, #ff6a00 100%);",
|
|
" }",
|
|
" .summary-card .value {",
|
|
" font-size: 28px;",
|
|
" font-weight: 700;",
|
|
" }",
|
|
" .summary-card .label {",
|
|
" font-size: 12px;",
|
|
" opacity: 0.9;",
|
|
" margin-top: 4px;",
|
|
" }",
|
|
"</style>",
|
|
"",
|
|
"<div class=\"container\">",
|
|
" <!-- Summary Section -->",
|
|
" <div class=\"section\">",
|
|
" <div class=\"section-header\">",
|
|
" 📊 Games Summary",
|
|
" </div>",
|
|
" <div class=\"section-content\">",
|
|
" <div class=\"summary-row\">",
|
|
" <div class=\"summary-card\">",
|
|
" <div class=\"value\">{{totalGames}}</div>",
|
|
" <div class=\"label\">Total Games</div>",
|
|
" </div>",
|
|
" <div class=\"summary-card alt\">",
|
|
" <div class=\"value\">{{avgScore}}</div>",
|
|
" <div class=\"label\">Avg Total Score</div>",
|
|
" </div>",
|
|
" <div class=\"summary-card alt2\">",
|
|
" <div class=\"value\">{{highestScore}}</div>",
|
|
" <div class=\"label\">Highest Team Score</div>",
|
|
" </div>",
|
|
" </div>",
|
|
" </div>",
|
|
" </div>",
|
|
"",
|
|
" <!-- Games Table Section -->",
|
|
" <div class=\"section\">",
|
|
" <div class=\"section-header\">",
|
|
" 🏀 NBA Games Overview",
|
|
" </div>",
|
|
" <div class=\"section-content\">",
|
|
" <table class=\"games-table\">",
|
|
" <thead>",
|
|
" <tr>",
|
|
" <th>Game ID</th>",
|
|
" <th>Date</th>",
|
|
" <th>Visitor</th>",
|
|
" <th>Score</th>",
|
|
" <th>Home</th>",
|
|
" <th>Score</th>",
|
|
" <th>Arena</th>",
|
|
" <th>Duration</th>",
|
|
" </tr>",
|
|
" </thead>",
|
|
" <tbody>",
|
|
" {{#each games}}",
|
|
" <tr>",
|
|
" <td><span class=\"game-id\">{{gameId}}</span></td>",
|
|
" <td>{{date}}</td>",
|
|
" <td class=\"team-name\">{{visitorTeam}}</td>",
|
|
" <td class=\"score {{visitorClass}}\">{{visitorPts}}</td>",
|
|
" <td class=\"team-name\">{{homeTeam}}</td>",
|
|
" <td class=\"score {{homeClass}}\">{{homePts}}</td>",
|
|
" <td><span class=\"arena-badge\">{{arena}}</span></td>",
|
|
" <td><span class=\"duration-badge\">{{gameDuration}}</span></td>",
|
|
" </tr>",
|
|
" {{/each}}",
|
|
" </tbody>",
|
|
" </table>",
|
|
" </div>",
|
|
" </div>",
|
|
"",
|
|
" <!-- Detailed Game Breakdown -->",
|
|
" <div class=\"section\">",
|
|
" <div class=\"section-header\">",
|
|
" 📈 Detailed Game Breakdown",
|
|
" </div>",
|
|
" <div class=\"section-content\">",
|
|
" {{#each gamesDetailed}}",
|
|
" <div class=\"game-card\">",
|
|
" <div class=\"game-card-header\">",
|
|
" <div class=\"matchup\">{{visitorTeam}} {{visitorPts}} @ {{homeTeam}} {{homePts}}</div>",
|
|
" <div class=\"game-info\">{{date}} | {{arena}}</div>",
|
|
" </div>",
|
|
" <div class=\"game-card-body\">",
|
|
" <!-- Line Scores -->",
|
|
" <h4 style=\"margin: 0 0 15px 0; color: #2d3748;\">Quarter-by-Quarter Breakdown</h4>",
|
|
" <table class=\"line-scores-table\">",
|
|
" <thead>",
|
|
" <tr>",
|
|
" <th>Team</th>",
|
|
" <th>Q1</th>",
|
|
" <th>Q2</th>",
|
|
" <th>Q3</th>",
|
|
" <th>Q4</th>",
|
|
" {{#if hasOT}}",
|
|
" <th>OT1</th>",
|
|
" <th>OT2</th>",
|
|
" <th>OT3</th>",
|
|
" {{/if}}",
|
|
" <th>Total</th>",
|
|
" </tr>",
|
|
" </thead>",
|
|
" <tbody>",
|
|
" {{#each lineScores}}",
|
|
" <tr>",
|
|
" <td>{{team}}</td>",
|
|
" <td>{{q1}}</td>",
|
|
" <td>{{q2}}</td>",
|
|
" <td>{{q3}}</td>",
|
|
" <td>{{q4}}</td>",
|
|
" {{#if ../hasOT}}",
|
|
" <td>{{ot1}}</td>",
|
|
" <td>{{ot2}}</td>",
|
|
" <td>{{ot3}}</td>",
|
|
" {{/if}}",
|
|
" <td class=\"total-col\">{{total}}</td>",
|
|
" </tr>",
|
|
" {{/each}}",
|
|
" </tbody>",
|
|
" </table>",
|
|
"",
|
|
" <!-- Chart for Line Scores -->",
|
|
" <div class=\"chart-container\">",
|
|
" <div class=\"chart-title\">Scoring by Quarter</div>",
|
|
" <canvas id=\"chart-{{gameIndex}}\" height=\"80\"></canvas>",
|
|
" </div>",
|
|
"",
|
|
" <!-- Player Stats -->",
|
|
" <div class=\"player-stats-section\">",
|
|
" {{#each teamStats}}",
|
|
" <div class=\"player-stats-title\">",
|
|
" <span class=\"team-badge\">{{teamName}}</span> Player Statistics",
|
|
" </div>",
|
|
" <table class=\"player-stats-table\">",
|
|
" <thead>",
|
|
" <tr>",
|
|
" <th>Player</th>",
|
|
" <th>MIN</th>",
|
|
" <th>PTS</th>",
|
|
" <th>FG</th>",
|
|
" <th>FG%</th>",
|
|
" <th>3P</th>",
|
|
" <th>3P%</th>",
|
|
" <th>FT</th>",
|
|
" <th>FT%</th>",
|
|
" <th>REB</th>",
|
|
" <th>AST</th>",
|
|
" <th>STL</th>",
|
|
" <th>BLK</th>",
|
|
" <th>TOV</th>",
|
|
" <th>+/-</th>",
|
|
" </tr>",
|
|
" </thead>",
|
|
" <tbody>",
|
|
" {{#each players}}",
|
|
" <tr>",
|
|
" {{#if isDNP}}",
|
|
" <td class=\"dnp\">{{playerName}}</td>",
|
|
" <td colspan=\"14\" class=\"dnp\">Did Not Play</td>",
|
|
" {{else}}",
|
|
" <td>{{playerName}}</td>",
|
|
" <td>{{mp}}</td>",
|
|
" <td class=\"highlight-pts\">{{pts}}</td>",
|
|
" <td>{{fg}}-{{fga}}</td>",
|
|
" <td>{{fgPct}}</td>",
|
|
" <td>{{threeP}}-{{threePa}}</td>",
|
|
" <td>{{threePPct}}</td>",
|
|
" <td>{{ft}}-{{fta}}</td>",
|
|
" <td>{{ftPct}}</td>",
|
|
" <td>{{trb}}</td>",
|
|
" <td>{{ast}}</td>",
|
|
" <td>{{stl}}</td>",
|
|
" <td>{{blk}}</td>",
|
|
" <td>{{tov}}</td>",
|
|
" <td class=\"{{plusMinusClass}}\">{{plusMinusDisplay}}</td>",
|
|
" {{/if}}",
|
|
" </tr>",
|
|
" {{/each}}",
|
|
" </tbody>",
|
|
" </table>",
|
|
" {{/each}}",
|
|
" </div>",
|
|
" </div>",
|
|
" </div>",
|
|
" {{/each}}",
|
|
" </div>",
|
|
" </div>",
|
|
"</div>",
|
|
"",
|
|
"<script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js\"></script>",
|
|
"<script>",
|
|
" pm.getData(function (err, value) {",
|
|
" if (err) {",
|
|
" console.error(err);",
|
|
" return;",
|
|
" }",
|
|
" ",
|
|
" // Create charts for each game",
|
|
" value.gamesDetailed.forEach(function(game, index) {",
|
|
" var ctx = document.getElementById('chart-' + index);",
|
|
" if (ctx && game.lineScores && game.lineScores.length >= 2) {",
|
|
" var labels = ['Q1', 'Q2', 'Q3', 'Q4'];",
|
|
" if (game.hasOT) {",
|
|
" labels.push('OT1', 'OT2', 'OT3');",
|
|
" }",
|
|
" ",
|
|
" var team1Data = [game.lineScores[0].q1, game.lineScores[0].q2, game.lineScores[0].q3, game.lineScores[0].q4];",
|
|
" var team2Data = [game.lineScores[1].q1, game.lineScores[1].q2, game.lineScores[1].q3, game.lineScores[1].q4];",
|
|
" ",
|
|
" if (game.hasOT) {",
|
|
" team1Data.push(game.lineScores[0].ot1, game.lineScores[0].ot2, game.lineScores[0].ot3);",
|
|
" team2Data.push(game.lineScores[1].ot1, game.lineScores[1].ot2, game.lineScores[1].ot3);",
|
|
" }",
|
|
" ",
|
|
" new Chart(ctx, {",
|
|
" type: 'bar',",
|
|
" data: {",
|
|
" labels: labels,",
|
|
" datasets: [{",
|
|
" label: game.lineScores[0].team,",
|
|
" data: team1Data,",
|
|
" backgroundColor: 'rgba(30, 77, 140, 0.7)',",
|
|
" borderColor: 'rgba(30, 77, 140, 1)',",
|
|
" borderWidth: 1",
|
|
" }, {",
|
|
" label: game.lineScores[1].team,",
|
|
" data: team2Data,",
|
|
" backgroundColor: 'rgba(220, 53, 69, 0.7)',",
|
|
" borderColor: 'rgba(220, 53, 69, 1)',",
|
|
" borderWidth: 1",
|
|
" }]",
|
|
" },",
|
|
" options: {",
|
|
" responsive: true,",
|
|
" legend: {",
|
|
" position: 'top'",
|
|
" },",
|
|
" scales: {",
|
|
" yAxes: [{",
|
|
" ticks: {",
|
|
" beginAtZero: true",
|
|
" },",
|
|
" scaleLabel: {",
|
|
" display: true,",
|
|
" labelString: 'Points'",
|
|
" }",
|
|
" }],",
|
|
" xAxes: [{",
|
|
" scaleLabel: {",
|
|
" display: true,",
|
|
" labelString: 'Quarter'",
|
|
" }",
|
|
" }]",
|
|
" }",
|
|
" }",
|
|
" });",
|
|
" }",
|
|
" });",
|
|
" });",
|
|
"</script>",
|
|
"`;",
|
|
"",
|
|
"function constructVisualizerPayload() {",
|
|
" var response = pm.response.json();",
|
|
" var data = response.data || [];",
|
|
" ",
|
|
" // Calculate summary stats",
|
|
" var totalGames = data.length;",
|
|
" var totalScores = data.map(function(g) { return g.visitorPts + g.homePts; });",
|
|
" var avgScore = totalGames > 0 ? Math.round(totalScores.reduce(function(a, b) { return a + b; }, 0) / totalGames) : 0;",
|
|
" var allScores = [];",
|
|
" data.forEach(function(g) {",
|
|
" allScores.push(g.visitorPts);",
|
|
" allScores.push(g.homePts);",
|
|
" });",
|
|
" var highestScore = allScores.length > 0 ? Math.max.apply(null, allScores) : 0;",
|
|
" ",
|
|
" // Format games for overview table",
|
|
" var games = data.map(function(game) {",
|
|
" var dateObj = new Date(game.date);",
|
|
" var formattedDate = dateObj.toLocaleDateString('en-US', { ",
|
|
" month: 'short', ",
|
|
" day: 'numeric', ",
|
|
" year: 'numeric' ",
|
|
" });",
|
|
" ",
|
|
" var visitorWon = game.visitorPts > game.homePts;",
|
|
" ",
|
|
" return {",
|
|
" gameId: game.gameId,",
|
|
" date: formattedDate,",
|
|
" visitorTeam: game.visitorTeam,",
|
|
" visitorPts: game.visitorPts,",
|
|
" visitorClass: visitorWon ? 'winner' : 'loser',",
|
|
" homeTeam: game.homeTeam,",
|
|
" homePts: game.homePts,",
|
|
" homeClass: visitorWon ? 'loser' : 'winner',",
|
|
" arena: game.arena,",
|
|
" gameDuration: game.gameDuration",
|
|
" };",
|
|
" });",
|
|
" ",
|
|
" // Format detailed game data",
|
|
" var gamesDetailed = data.map(function(game, index) {",
|
|
" var dateObj = new Date(game.date);",
|
|
" var formattedDate = dateObj.toLocaleDateString('en-US', { ",
|
|
" weekday: 'short',",
|
|
" month: 'short', ",
|
|
" day: 'numeric', ",
|
|
" year: 'numeric' ",
|
|
" });",
|
|
" ",
|
|
" // Check if overtime was played",
|
|
" var hasOT = false;",
|
|
" if (game.lineScores && game.lineScores.length > 0) {",
|
|
" game.lineScores.forEach(function(ls) {",
|
|
" if (ls.ot1 > 0 || ls.ot2 > 0 || ls.ot3 > 0) {",
|
|
" hasOT = true;",
|
|
" }",
|
|
" });",
|
|
" }",
|
|
" ",
|
|
" // Group players by team",
|
|
" var teamStatsMap = {};",
|
|
" if (game.playerGameBasicStats) {",
|
|
" game.playerGameBasicStats.forEach(function(player) {",
|
|
" if (!teamStatsMap[player.team]) {",
|
|
" teamStatsMap[player.team] = [];",
|
|
" }",
|
|
" ",
|
|
" var isDNP = player.status === 'Did Not Play' || player.mp === '';",
|
|
" var plusMinusVal = player.plusMinus || 0;",
|
|
" ",
|
|
" teamStatsMap[player.team].push({",
|
|
" playerName: player.playerName,",
|
|
" mp: player.mp || '-',",
|
|
" pts: player.pts,",
|
|
" fg: player.fg,",
|
|
" fga: player.fga,",
|
|
" fgPct: player.fgPercent ? (player.fgPercent * 100).toFixed(1) + '%' : '-',",
|
|
" threeP: player.threeP,",
|
|
" threePa: player.threePa,",
|
|
" threePPct: player.threePPercent ? (player.threePPercent * 100).toFixed(1) + '%' : '-',",
|
|
" ft: player.ft,",
|
|
" fta: player.fta,",
|
|
" ftPct: player.ftPercent ? (player.ftPercent * 100).toFixed(1) + '%' : '-',",
|
|
" trb: player.trb,",
|
|
" ast: player.ast,",
|
|
" stl: player.stl,",
|
|
" blk: player.blk,",
|
|
" tov: player.tov,",
|
|
" plusMinus: plusMinusVal,",
|
|
" plusMinusDisplay: plusMinusVal > 0 ? '+' + plusMinusVal : plusMinusVal.toString(),",
|
|
" plusMinusClass: plusMinusVal > 0 ? 'positive' : (plusMinusVal < 0 ? 'negative' : ''),",
|
|
" isDNP: isDNP",
|
|
" });",
|
|
" });",
|
|
" }",
|
|
" ",
|
|
" // Convert to array and sort by points",
|
|
" var teamStats = Object.keys(teamStatsMap).map(function(teamName) {",
|
|
" var players = teamStatsMap[teamName].sort(function(a, b) {",
|
|
" return b.pts - a.pts;",
|
|
" });",
|
|
" return {",
|
|
" teamName: teamName,",
|
|
" players: players",
|
|
" };",
|
|
" });",
|
|
" ",
|
|
" return {",
|
|
" gameIndex: index,",
|
|
" gameId: game.gameId,",
|
|
" date: formattedDate,",
|
|
" visitorTeam: game.visitorTeam,",
|
|
" visitorPts: game.visitorPts,",
|
|
" homeTeam: game.homeTeam,",
|
|
" homePts: game.homePts,",
|
|
" arena: game.arena,",
|
|
" gameDuration: game.gameDuration,",
|
|
" hasOT: hasOT,",
|
|
" lineScores: game.lineScores || [],",
|
|
" teamStats: teamStats",
|
|
" };",
|
|
" });",
|
|
" ",
|
|
" return {",
|
|
" totalGames: totalGames,",
|
|
" avgScore: avgScore,",
|
|
" highestScore: highestScore,",
|
|
" games: games,",
|
|
" gamesDetailed: gamesDetailed",
|
|
" };",
|
|
"}",
|
|
"",
|
|
"pm.visualizer.set(template, constructVisualizerPayload());"
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
}
|
|
],
|
|
"protocolProfileBehavior": {
|
|
"disableCookies": true
|
|
},
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "https://api.server.nbaapi.com/api/games?isPlayoff=false&page=1&pageSize=5&sortBy=date&ascending=false&include=lineScores%2C%20playerGameBasicStats",
|
|
"protocol": "https",
|
|
"host": [
|
|
"api",
|
|
"server",
|
|
"nbaapi",
|
|
"com"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"games"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "false"
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1"
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "5"
|
|
},
|
|
{
|
|
"key": "sortBy",
|
|
"value": "date"
|
|
},
|
|
{
|
|
"key": "ascending",
|
|
"value": "false"
|
|
},
|
|
{
|
|
"key": "include",
|
|
"value": "lineScores%2C%20playerGameBasicStats"
|
|
}
|
|
]
|
|
},
|
|
"description": "### Game Information with additional details"
|
|
},
|
|
"response": []
|
|
},
|
|
{
|
|
"name": "Player Totals Stats",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"pm.test(\"Response status code is 200\", function () {",
|
|
" pm.response.to.have.status(200);",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Response time is less than 200ms\", function () {",
|
|
" pm.expect(pm.response.responseTime).to.be.below(200);",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Response has the required fields\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('object');",
|
|
" pm.expect(responseData.data).to.be.an('array');",
|
|
" ",
|
|
" responseData.data.forEach(function(player) {",
|
|
" pm.expect(player).to.have.property('playerId');",
|
|
" pm.expect(player).to.have.property('playerName');",
|
|
" pm.expect(player).to.have.property('position');",
|
|
" pm.expect(player).to.have.property('age');",
|
|
" pm.expect(player).to.have.property('games');",
|
|
" });",
|
|
"});",
|
|
"",
|
|
"",
|
|
"",
|
|
"pm.test(\"Pagination object is present and contains expected fields\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('object');",
|
|
" pm.expect(responseData.pagination).to.exist;",
|
|
" pm.expect(responseData.pagination).to.have.property('page');",
|
|
" pm.expect(responseData.pagination).to.have.property('pageSize');",
|
|
" pm.expect(responseData.pagination).to.have.property('pages');",
|
|
" pm.expect(responseData.pagination).to.have.property('total');",
|
|
"});",
|
|
"",
|
|
"// Visualization for Player Totals Stats",
|
|
"var template = `",
|
|
"<style type=\"text/css\">",
|
|
" .player-stats-container {",
|
|
" font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;",
|
|
" padding: 20px;",
|
|
" background-color: #f8f9fa;",
|
|
" }",
|
|
" .stats-header {",
|
|
" font-size: 24px;",
|
|
" font-weight: 600;",
|
|
" color: #1a1a2e;",
|
|
" margin-bottom: 8px;",
|
|
" }",
|
|
" .stats-subtitle {",
|
|
" font-size: 14px;",
|
|
" color: #6c757d;",
|
|
" margin-bottom: 20px;",
|
|
" }",
|
|
" .stats-table {",
|
|
" width: 100%;",
|
|
" border-collapse: collapse;",
|
|
" background-color: #ffffff;",
|
|
" border-radius: 8px;",
|
|
" overflow: hidden;",
|
|
" box-shadow: 0 2px 8px rgba(0,0,0,0.1);",
|
|
" }",
|
|
" .stats-table th {",
|
|
" background-color: #1a1a2e;",
|
|
" color: #ffffff;",
|
|
" font-weight: 600;",
|
|
" padding: 14px 12px;",
|
|
" text-align: left;",
|
|
" font-size: 13px;",
|
|
" text-transform: uppercase;",
|
|
" letter-spacing: 0.5px;",
|
|
" }",
|
|
" .stats-table td {",
|
|
" padding: 12px;",
|
|
" border-bottom: 1px solid #e9ecef;",
|
|
" font-size: 14px;",
|
|
" color: #333;",
|
|
" }",
|
|
" .stats-table tr:last-child td {",
|
|
" border-bottom: none;",
|
|
" }",
|
|
" .stats-table tr:hover {",
|
|
" background-color: #f1f3f5;",
|
|
" }",
|
|
" .player-name {",
|
|
" font-weight: 600;",
|
|
" color: #1a1a2e;",
|
|
" }",
|
|
" .position-badge {",
|
|
" display: inline-block;",
|
|
" padding: 4px 8px;",
|
|
" background-color: #e7f1ff;",
|
|
" color: #0066cc;",
|
|
" border-radius: 4px;",
|
|
" font-size: 12px;",
|
|
" font-weight: 600;",
|
|
" }",
|
|
" .stat-value {",
|
|
" font-weight: 500;",
|
|
" }",
|
|
" .stat-highlight {",
|
|
" color: #28a745;",
|
|
" font-weight: 600;",
|
|
" }",
|
|
"</style>",
|
|
"<div class=\"player-stats-container\">",
|
|
" <div class=\"stats-header\">Player Statistics</div>",
|
|
" <div class=\"stats-subtitle\">Season {{season}} | Total Players: {{totalPlayers}}</div>",
|
|
" <table class=\"stats-table\">",
|
|
" <thead>",
|
|
" <tr>",
|
|
" <th>Player</th>",
|
|
" <th>Pos</th>",
|
|
" <th>Games</th>",
|
|
" <th>Points</th>",
|
|
" <th>Assists</th>",
|
|
" <th>Rebounds</th>",
|
|
" <th>PPG</th>",
|
|
" </tr>",
|
|
" </thead>",
|
|
" <tbody>",
|
|
" {{#each players}}",
|
|
" <tr>",
|
|
" <td class=\"player-name\">{{playerName}}</td>",
|
|
" <td><span class=\"position-badge\">{{position}}</span></td>",
|
|
" <td class=\"stat-value\">{{games}}</td>",
|
|
" <td class=\"stat-value stat-highlight\">{{points}}</td>",
|
|
" <td class=\"stat-value\">{{assists}}</td>",
|
|
" <td class=\"stat-value\">{{totalRb}}</td>",
|
|
" <td class=\"stat-value\">{{ppg}}</td>",
|
|
" </tr>",
|
|
" {{/each}}",
|
|
" </tbody>",
|
|
" </table>",
|
|
"</div>",
|
|
"`;",
|
|
"",
|
|
"function constructVisualizerPayload() {",
|
|
" var response = pm.response.json();",
|
|
" var players = response.data.map(function(player) {",
|
|
" return {",
|
|
" playerName: player.playerName || 'N/A',",
|
|
" position: player.position || 'N/A',",
|
|
" games: player.games || 0,",
|
|
" points: player.points || 0,",
|
|
" assists: player.assists || 0,",
|
|
" totalRb: player.totalRb || 0,",
|
|
" ppg: player.games > 0 ? (player.points / player.games).toFixed(1) : '0.0'",
|
|
" };",
|
|
" });",
|
|
" ",
|
|
" return {",
|
|
" players: players,",
|
|
" season: response.data.length > 0 ? response.data[0].season : 'N/A',",
|
|
" totalPlayers: response.pagination ? response.pagination.total : players.length",
|
|
" };",
|
|
"}",
|
|
"",
|
|
"pm.visualizer.set(template, constructVisualizerPayload());"
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {}
|
|
}
|
|
},
|
|
{
|
|
"listen": "prerequest",
|
|
"script": {
|
|
"exec": [
|
|
""
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {}
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playertotals?season=2026&team=HOU&page=1&pageSize=3&isPlayoff=False",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playertotals"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "season",
|
|
"value": "2026",
|
|
"description": "(Optional) The season year (e.g., 2025 for the 2024-25 season)."
|
|
},
|
|
{
|
|
"key": "team",
|
|
"value": "HOU",
|
|
"description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL)."
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1."
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "3",
|
|
"description": "(Optional) The number of results to return per page. Defaults to 20."
|
|
},
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "False",
|
|
"description": "(Optional) Set to 'true' to retrieve playoff stats, or 'false' for regular season stats."
|
|
}
|
|
]
|
|
},
|
|
"description": "### Get Player Total Stats\n\nReturns a paginated and filterable list of traditional player statistics (totals) for a given season. You can retrieve either regular season or playoff data.\n\n### Usage\n\nThis endpoint supports filtering by `season`, `team`, and `playerId`. Results can be paginated using `page` and `pageSize`, and sorted using `sortBy` and `ascending`.\n\n#### **Query Parameters**\n\n- **`season`** (integer, optional): The season year (e.g., 2000).\n \n- **`team`** (string, optional): Team abbreviation (e.g., LAL).\n \n- **`playerId`** (string, optional): The player's unique ID (e.g., `greenac01`).\n \n- **`page`** (integer, optional): Page number. Defaults to `1`.\n \n- **`pageSize`** (integer, optional): Number of results per page. Defaults to `20`.\n \n- **`isPlayoff`** (boolean, optional): Set to `true` for playoff stats. The filter is only applied if the parameter is provided.\n \n- **`sortBy`** (string, optional): Field to sort by. Defaults to `points`.\n \n- **`ascending`** (boolean, optional): Use `true` for ascending order. Defaults to `false`.\n \n\n#### **Available** **`sortBy`** **Fields:**\n\n`playerId`, `playerName`, `position`, `age`, `games`, `gamesStarted`, `minutesPg`, `fieldGoals`, `fieldAttempts`, `fieldPercent`, `threeFg`, `threeAttempts`, `threePercent`, `twoFg`, `twoAttempts`, `twoPercent`, `effectFgPercent`, `ft`, `ftAttempts`, `ftPercent`, `offensiveRb`, `defensiveRb`, `totalRb`, `assists`, `steals`, `blocks`, `turnovers`, `personalFouls`, `points`, `team`, `season`"
|
|
},
|
|
"response": [
|
|
{
|
|
"name": "Player Totals Stats",
|
|
"originalRequest": {
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playertotals?season=2026&team=HOU&page=1&pageSize=20&isPlayoff=False",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playertotals"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "season",
|
|
"value": "2026",
|
|
"description": "(Optional) The season year (e.g., 2025 for the 2024-25 season)."
|
|
},
|
|
{
|
|
"key": "team",
|
|
"value": "HOU",
|
|
"description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL)."
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1."
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "20",
|
|
"description": "(Optional) The number of results to return per page. Defaults to 20."
|
|
},
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "False",
|
|
"description": "(Optional) Set to 'true' to retrieve playoff stats, or 'false' for regular season stats."
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"status": "OK",
|
|
"code": 200,
|
|
"_postman_previewlanguage": null,
|
|
"header": [
|
|
{
|
|
"key": "Alt-Svc",
|
|
"value": "h3=\":443\"; ma=2592000"
|
|
},
|
|
{
|
|
"key": "Content-Encoding",
|
|
"value": "br"
|
|
},
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
},
|
|
{
|
|
"key": "Date",
|
|
"value": "Tue, 16 Dec 2025 07:22:18 GMT"
|
|
},
|
|
{
|
|
"key": "Server",
|
|
"value": "nginx/1.28.0"
|
|
},
|
|
{
|
|
"key": "Vary",
|
|
"value": "Accept-Encoding"
|
|
},
|
|
{
|
|
"key": "Content-Length",
|
|
"value": "1390"
|
|
}
|
|
],
|
|
"cookie": [],
|
|
"body": "{\n \"data\": [\n {\n \"playerId\": \"duranke01\",\n \"playerName\": \"Kevin Durant\",\n \"position\": \"SF\",\n \"age\": 37,\n \"games\": 20,\n \"gamesStarted\": 20,\n \"minutesPg\": 707,\n \"fieldGoals\": 172,\n \"fieldAttempts\": 345,\n \"fieldPercent\": 0.499,\n \"threeFg\": 36,\n \"threeAttempts\": 91,\n \"threePercent\": 0.396,\n \"twoFg\": 136,\n \"twoAttempts\": 254,\n \"twoPercent\": 0.535,\n \"effectFgPercent\": 0.551,\n \"ft\": 116,\n \"ftAttempts\": 130,\n \"ftPercent\": 0.892,\n \"offensiveRb\": 6,\n \"defensiveRb\": 86,\n \"totalRb\": 92,\n \"assists\": 77,\n \"steals\": 19,\n \"blocks\": 12,\n \"turnovers\": 59,\n \"personalFouls\": 48,\n \"points\": 496,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"sengual01\",\n \"playerName\": \"Alperen Şengün\",\n \"position\": \"C\",\n \"age\": 23,\n \"games\": 20,\n \"gamesStarted\": 20,\n \"minutesPg\": 718,\n \"fieldGoals\": 170,\n \"fieldAttempts\": 341,\n \"fieldPercent\": 0.499,\n \"threeFg\": 20,\n \"threeAttempts\": 55,\n \"threePercent\": 0.364,\n \"twoFg\": 150,\n \"twoAttempts\": 286,\n \"twoPercent\": 0.524,\n \"effectFgPercent\": 0.528,\n \"ft\": 100,\n \"ftAttempts\": 136,\n \"ftPercent\": 0.735,\n \"offensiveRb\": 60,\n \"defensiveRb\": 128,\n \"totalRb\": 188,\n \"assists\": 140,\n \"steals\": 29,\n \"blocks\": 19,\n \"turnovers\": 67,\n \"personalFouls\": 69,\n \"points\": 460,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"thompam01\",\n \"playerName\": \"Amen Thompson\",\n \"position\": \"PG\",\n \"age\": 23,\n \"games\": 22,\n \"gamesStarted\": 22,\n \"minutesPg\": 796,\n \"fieldGoals\": 150,\n \"fieldAttempts\": 310,\n \"fieldPercent\": 0.484,\n \"threeFg\": 9,\n \"threeAttempts\": 47,\n \"threePercent\": 0.191,\n \"twoFg\": 141,\n \"twoAttempts\": 263,\n \"twoPercent\": 0.536,\n \"effectFgPercent\": 0.498,\n \"ft\": 76,\n \"ftAttempts\": 94,\n \"ftPercent\": 0.809,\n \"offensiveRb\": 58,\n \"defensiveRb\": 99,\n \"totalRb\": 157,\n \"assists\": 115,\n \"steals\": 30,\n \"blocks\": 11,\n \"turnovers\": 57,\n \"personalFouls\": 56,\n \"points\": 385,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"smithja05\",\n \"playerName\": \"Jabari Smith Jr.\",\n \"position\": \"PF\",\n \"age\": 22,\n \"games\": 21,\n \"gamesStarted\": 21,\n \"minutesPg\": 704,\n \"fieldGoals\": 115,\n \"fieldAttempts\": 253,\n \"fieldPercent\": 0.455,\n \"threeFg\": 42,\n \"threeAttempts\": 118,\n \"threePercent\": 0.356,\n \"twoFg\": 73,\n \"twoAttempts\": 135,\n \"twoPercent\": 0.541,\n \"effectFgPercent\": 0.538,\n \"ft\": 51,\n \"ftAttempts\": 64,\n \"ftPercent\": 0.797,\n \"offensiveRb\": 30,\n \"defensiveRb\": 108,\n \"totalRb\": 138,\n \"assists\": 41,\n \"steals\": 16,\n \"blocks\": 16,\n \"turnovers\": 28,\n \"personalFouls\": 64,\n \"points\": 323,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"sheppre01\",\n \"playerName\": \"Reed Sheppard\",\n \"position\": \"SG\",\n \"age\": 21,\n \"games\": 22,\n \"gamesStarted\": 4,\n \"minutesPg\": 548,\n \"fieldGoals\": 106,\n \"fieldAttempts\": 223,\n \"fieldPercent\": 0.475,\n \"threeFg\": 56,\n \"threeAttempts\": 126,\n \"threePercent\": 0.444,\n \"twoFg\": 50,\n \"twoAttempts\": 97,\n \"twoPercent\": 0.515,\n \"effectFgPercent\": 0.601,\n \"ft\": 15,\n \"ftAttempts\": 21,\n \"ftPercent\": 0.714,\n \"offensiveRb\": 8,\n \"defensiveRb\": 61,\n \"totalRb\": 69,\n \"assists\": 71,\n \"steals\": 34,\n \"blocks\": 12,\n \"turnovers\": 29,\n \"personalFouls\": 45,\n \"points\": 283,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"holidaa01\",\n \"playerName\": \"Aaron Holiday\",\n \"position\": \"PG\",\n \"age\": 29,\n \"games\": 17,\n \"gamesStarted\": 0,\n \"minutesPg\": 291,\n \"fieldGoals\": 50,\n \"fieldAttempts\": 110,\n \"fieldPercent\": 0.455,\n \"threeFg\": 33,\n \"threeAttempts\": 74,\n \"threePercent\": 0.446,\n \"twoFg\": 17,\n \"twoAttempts\": 36,\n \"twoPercent\": 0.472,\n \"effectFgPercent\": 0.605,\n \"ft\": 25,\n \"ftAttempts\": 29,\n \"ftPercent\": 0.862,\n \"offensiveRb\": 2,\n \"defensiveRb\": 15,\n \"totalRb\": 17,\n \"assists\": 19,\n \"steals\": 8,\n \"blocks\": 3,\n \"turnovers\": 16,\n \"personalFouls\": 23,\n \"points\": 158,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"okogijo01\",\n \"playerName\": \"Josh Okogie\",\n \"position\": \"SG\",\n \"age\": 27,\n \"games\": 22,\n \"gamesStarted\": 16,\n \"minutesPg\": 460,\n \"fieldGoals\": 49,\n \"fieldAttempts\": 109,\n \"fieldPercent\": 0.45,\n \"threeFg\": 23,\n \"threeAttempts\": 58,\n \"threePercent\": 0.397,\n \"twoFg\": 26,\n \"twoAttempts\": 51,\n \"twoPercent\": 0.51,\n \"effectFgPercent\": 0.555,\n \"ft\": 24,\n \"ftAttempts\": 33,\n \"ftPercent\": 0.727,\n \"offensiveRb\": 30,\n \"defensiveRb\": 34,\n \"totalRb\": 64,\n \"assists\": 22,\n \"steals\": 30,\n \"blocks\": 5,\n \"turnovers\": 18,\n \"personalFouls\": 41,\n \"points\": 145,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"easonta01\",\n \"playerName\": \"Tari Eason\",\n \"position\": \"PF\",\n \"age\": 24,\n \"games\": 11,\n \"gamesStarted\": 1,\n \"minutesPg\": 255,\n \"fieldGoals\": 47,\n \"fieldAttempts\": 95,\n \"fieldPercent\": 0.495,\n \"threeFg\": 27,\n \"threeAttempts\": 53,\n \"threePercent\": 0.509,\n \"twoFg\": 20,\n \"twoAttempts\": 42,\n \"twoPercent\": 0.476,\n \"effectFgPercent\": 0.637,\n \"ft\": 5,\n \"ftAttempts\": 7,\n \"ftPercent\": 0.714,\n \"offensiveRb\": 16,\n \"defensiveRb\": 41,\n \"totalRb\": 57,\n \"assists\": 18,\n \"steals\": 9,\n \"blocks\": 5,\n \"turnovers\": 19,\n \"personalFouls\": 18,\n \"points\": 126,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"adamsst01\",\n \"playerName\": \"Steven Adams\",\n \"position\": \"C\",\n \"age\": 32,\n \"games\": 18,\n \"gamesStarted\": 5,\n \"minutesPg\": 389,\n \"fieldGoals\": 42,\n \"fieldAttempts\": 79,\n \"fieldPercent\": 0.532,\n \"threeFg\": 0,\n \"threeAttempts\": 0,\n \"threePercent\": 0,\n \"twoFg\": 42,\n \"twoAttempts\": 79,\n \"twoPercent\": 0.532,\n \"effectFgPercent\": 0.532,\n \"ft\": 32,\n \"ftAttempts\": 42,\n \"ftPercent\": 0.762,\n \"offensiveRb\": 85,\n \"defensiveRb\": 78,\n \"totalRb\": 163,\n \"assists\": 28,\n \"steals\": 14,\n \"blocks\": 13,\n \"turnovers\": 20,\n \"personalFouls\": 34,\n \"points\": 116,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"capelca01\",\n \"playerName\": \"Clint Capela\",\n \"position\": \"C\",\n \"age\": 31,\n \"games\": 21,\n \"gamesStarted\": 1,\n \"minutesPg\": 245,\n \"fieldGoals\": 35,\n \"fieldAttempts\": 62,\n \"fieldPercent\": 0.565,\n \"threeFg\": 0,\n \"threeAttempts\": 0,\n \"threePercent\": 0,\n \"twoFg\": 35,\n \"twoAttempts\": 62,\n \"twoPercent\": 0.565,\n \"effectFgPercent\": 0.565,\n \"ft\": 10,\n \"ftAttempts\": 15,\n \"ftPercent\": 0.667,\n \"offensiveRb\": 55,\n \"defensiveRb\": 45,\n \"totalRb\": 100,\n \"assists\": 9,\n \"steals\": 9,\n \"blocks\": 16,\n \"turnovers\": 10,\n \"personalFouls\": 21,\n \"points\": 80,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"tateja01\",\n \"playerName\": \"Jae'Sean Tate\",\n \"position\": \"SF\",\n \"age\": 30,\n \"games\": 14,\n \"gamesStarted\": 0,\n \"minutesPg\": 116,\n \"fieldGoals\": 17,\n \"fieldAttempts\": 32,\n \"fieldPercent\": 0.531,\n \"threeFg\": 5,\n \"threeAttempts\": 12,\n \"threePercent\": 0.417,\n \"twoFg\": 12,\n \"twoAttempts\": 20,\n \"twoPercent\": 0.6,\n \"effectFgPercent\": 0.609,\n \"ft\": 2,\n \"ftAttempts\": 2,\n \"ftPercent\": 1,\n \"offensiveRb\": 8,\n \"defensiveRb\": 14,\n \"totalRb\": 22,\n \"assists\": 7,\n \"steals\": 4,\n \"blocks\": 0,\n \"turnovers\": 4,\n \"personalFouls\": 20,\n \"points\": 41,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"greenje02\",\n \"playerName\": \"Jeff Green\",\n \"position\": \"PF\",\n \"age\": 39,\n \"games\": 10,\n \"gamesStarted\": 0,\n \"minutesPg\": 48,\n \"fieldGoals\": 8,\n \"fieldAttempts\": 16,\n \"fieldPercent\": 0.5,\n \"threeFg\": 5,\n \"threeAttempts\": 12,\n \"threePercent\": 0.417,\n \"twoFg\": 3,\n \"twoAttempts\": 4,\n \"twoPercent\": 0.75,\n \"effectFgPercent\": 0.656,\n \"ft\": 0,\n \"ftAttempts\": 0,\n \"ftPercent\": 0,\n \"offensiveRb\": 1,\n \"defensiveRb\": 3,\n \"totalRb\": 4,\n \"assists\": 1,\n \"steals\": 0,\n \"blocks\": 1,\n \"turnovers\": 0,\n \"personalFouls\": 4,\n \"points\": 21,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"davisjd01\",\n \"playerName\": \"JD Davison\",\n \"position\": \"PG\",\n \"age\": 23,\n \"games\": 11,\n \"gamesStarted\": 0,\n \"minutesPg\": 74,\n \"fieldGoals\": 8,\n \"fieldAttempts\": 17,\n \"fieldPercent\": 0.471,\n \"threeFg\": 4,\n \"threeAttempts\": 9,\n \"threePercent\": 0.444,\n \"twoFg\": 4,\n \"twoAttempts\": 8,\n \"twoPercent\": 0.5,\n \"effectFgPercent\": 0.588,\n \"ft\": 0,\n \"ftAttempts\": 2,\n \"ftPercent\": 0,\n \"offensiveRb\": 1,\n \"defensiveRb\": 3,\n \"totalRb\": 4,\n \"assists\": 10,\n \"steals\": 3,\n \"blocks\": 1,\n \"turnovers\": 1,\n \"personalFouls\": 4,\n \"points\": 20,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"crawfis01\",\n \"playerName\": \"Isaiah Crawford\",\n \"position\": \"SF\",\n \"age\": 24,\n \"games\": 2,\n \"gamesStarted\": 0,\n \"minutesPg\": 5,\n \"fieldGoals\": 0,\n \"fieldAttempts\": 1,\n \"fieldPercent\": 0,\n \"threeFg\": 0,\n \"threeAttempts\": 1,\n \"threePercent\": 0,\n \"twoFg\": 0,\n \"twoAttempts\": 0,\n \"twoPercent\": 0,\n \"effectFgPercent\": 0,\n \"ft\": 0,\n \"ftAttempts\": 0,\n \"ftPercent\": 0,\n \"offensiveRb\": 0,\n \"defensiveRb\": 0,\n \"totalRb\": 0,\n \"assists\": 0,\n \"steals\": 0,\n \"blocks\": 0,\n \"turnovers\": 0,\n \"personalFouls\": 0,\n \"points\": 0,\n \"team\": \"HOU\",\n \"season\": 2026,\n \"isPlayoff\": false\n }\n ],\n \"pagination\": {\n \"total\": 14,\n \"page\": 1,\n \"pageSize\": 20,\n \"pages\": 1\n }\n}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Player Totals Stats",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"pm.test(\"Response status code is 200\", function () {",
|
|
" pm.response.to.have.status(200);",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Response time is less than 200ms\", function () {",
|
|
" pm.expect(pm.response.responseTime).to.be.below(200);",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Response has the required fields\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('object');",
|
|
" pm.expect(responseData.data).to.be.an('array');",
|
|
" ",
|
|
" responseData.data.forEach(function(player) {",
|
|
" pm.expect(player).to.have.property('playerId');",
|
|
" pm.expect(player).to.have.property('minutesPg');",
|
|
" pm.expect(player).to.have.property('fieldGoals');",
|
|
" pm.expect(player).to.have.property('threeAttempts');",
|
|
" pm.expect(player).to.have.property('team');",
|
|
" pm.expect(player).to.have.property('playerName');",
|
|
" pm.expect(player).to.have.property('position');",
|
|
" pm.expect(player).to.have.property('season');",
|
|
" pm.expect(player).to.have.property('games');",
|
|
" });",
|
|
"});",
|
|
"",
|
|
"",
|
|
"",
|
|
"pm.test(\"Pagination object is present and contains expected fields\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('object');",
|
|
" pm.expect(responseData.pagination).to.exist;",
|
|
" pm.expect(responseData.pagination).to.have.property('page');",
|
|
" pm.expect(responseData.pagination).to.have.property('pageSize');",
|
|
" pm.expect(responseData.pagination).to.have.property('pages');",
|
|
" pm.expect(responseData.pagination).to.have.property('total');",
|
|
"});",
|
|
"",
|
|
"// Visualization for Player Totals Stats",
|
|
"var template = `",
|
|
"<style type=\"text/css\">",
|
|
" .player-stats-container {",
|
|
" font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;",
|
|
" padding: 20px;",
|
|
" background-color: #f8f9fa;",
|
|
" }",
|
|
" .stats-header {",
|
|
" font-size: 24px;",
|
|
" font-weight: 600;",
|
|
" color: #1a1a2e;",
|
|
" margin-bottom: 8px;",
|
|
" }",
|
|
" .stats-subtitle {",
|
|
" font-size: 14px;",
|
|
" color: #6c757d;",
|
|
" margin-bottom: 20px;",
|
|
" }",
|
|
" .stats-table {",
|
|
" width: 100%;",
|
|
" border-collapse: collapse;",
|
|
" background-color: #ffffff;",
|
|
" border-radius: 8px;",
|
|
" overflow: hidden;",
|
|
" box-shadow: 0 2px 8px rgba(0,0,0,0.1);",
|
|
" }",
|
|
" .stats-table th {",
|
|
" background-color: #1a1a2e;",
|
|
" color: #ffffff;",
|
|
" font-weight: 600;",
|
|
" padding: 14px 12px;",
|
|
" text-align: left;",
|
|
" font-size: 13px;",
|
|
" text-transform: uppercase;",
|
|
" letter-spacing: 0.5px;",
|
|
" }",
|
|
" .stats-table td {",
|
|
" padding: 12px;",
|
|
" border-bottom: 1px solid #e9ecef;",
|
|
" font-size: 14px;",
|
|
" color: #333;",
|
|
" }",
|
|
" .stats-table tr:last-child td {",
|
|
" border-bottom: none;",
|
|
" }",
|
|
" .stats-table tr:hover {",
|
|
" background-color: #f1f3f5;",
|
|
" }",
|
|
" .player-name {",
|
|
" font-weight: 600;",
|
|
" color: #1a1a2e;",
|
|
" }",
|
|
" .position-badge {",
|
|
" display: inline-block;",
|
|
" padding: 4px 8px;",
|
|
" background-color: #e7f1ff;",
|
|
" color: #0066cc;",
|
|
" border-radius: 4px;",
|
|
" font-size: 12px;",
|
|
" font-weight: 600;",
|
|
" }",
|
|
" .stat-value {",
|
|
" font-weight: 500;",
|
|
" }",
|
|
" .stat-highlight {",
|
|
" color: #28a745;",
|
|
" font-weight: 600;",
|
|
" }",
|
|
"</style>",
|
|
"<div class=\"player-stats-container\">",
|
|
" <div class=\"stats-header\">Player Statistics</div>",
|
|
" <div class=\"stats-subtitle\">Season {{season}} | Total Players: {{totalPlayers}}</div>",
|
|
" <table class=\"stats-table\">",
|
|
" <thead>",
|
|
" <tr>",
|
|
" <th>Player</th>",
|
|
" <th>Pos</th>",
|
|
" <th>Games</th>",
|
|
" <th>Points</th>",
|
|
" <th>Assists</th>",
|
|
" <th>Rebounds</th>",
|
|
" <th>PPG</th>",
|
|
" </tr>",
|
|
" </thead>",
|
|
" <tbody>",
|
|
" {{#each players}}",
|
|
" <tr>",
|
|
" <td class=\"player-name\">{{playerName}}</td>",
|
|
" <td><span class=\"position-badge\">{{position}}</span></td>",
|
|
" <td class=\"stat-value\">{{games}}</td>",
|
|
" <td class=\"stat-value stat-highlight\">{{points}}</td>",
|
|
" <td class=\"stat-value\">{{assists}}</td>",
|
|
" <td class=\"stat-value\">{{totalRb}}</td>",
|
|
" <td class=\"stat-value\">{{ppg}}</td>",
|
|
" </tr>",
|
|
" {{/each}}",
|
|
" </tbody>",
|
|
" </table>",
|
|
"</div>",
|
|
"`;",
|
|
"",
|
|
"function constructVisualizerPayload() {",
|
|
" var response = pm.response.json();",
|
|
" var players = response.data.map(function(player) {",
|
|
" return {",
|
|
" playerName: player.playerName || 'N/A',",
|
|
" position: player.position || 'N/A',",
|
|
" games: player.games || 0,",
|
|
" points: player.points || 0,",
|
|
" assists: player.assists || 0,",
|
|
" totalRb: player.totalRb || 0,",
|
|
" ppg: player.games > 0 ? (player.points / player.games).toFixed(1) : '0.0'",
|
|
" };",
|
|
" });",
|
|
" ",
|
|
" return {",
|
|
" players: players,",
|
|
" season: response.data.length > 0 ? response.data[0].season : 'N/A',",
|
|
" totalPlayers: response.pagination ? response.pagination.total : players.length",
|
|
" };",
|
|
"}",
|
|
"",
|
|
"pm.visualizer.set(template, constructVisualizerPayload());"
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
},
|
|
{
|
|
"listen": "prerequest",
|
|
"script": {
|
|
"exec": [
|
|
""
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playertotals?season=2026&team=HOU&page=1&pageSize=20&isPlayoff=False",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playertotals"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "season",
|
|
"value": "2026",
|
|
"description": "(Optional) The season year (e.g., 2025 for the 2024-25 season)."
|
|
},
|
|
{
|
|
"key": "team",
|
|
"value": "HOU",
|
|
"description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL)."
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1."
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "20",
|
|
"description": "(Optional) The number of results to return per page. Defaults to 20."
|
|
},
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "False",
|
|
"description": "(Optional) Set to 'true' to retrieve playoff stats, or 'false' for regular season stats."
|
|
}
|
|
]
|
|
},
|
|
"description": "### Player Totals Houston Rockets"
|
|
},
|
|
"response": []
|
|
},
|
|
{
|
|
"name": "Player Totals Stats",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"pm.test(\"Response status code is 200\", function () {",
|
|
" pm.response.to.have.status(200);",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Response time is less than 200ms\", function () {",
|
|
" pm.expect(pm.response.responseTime).to.be.below(200);",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Response has the required fields\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('object');",
|
|
" pm.expect(responseData.data).to.be.an('array');",
|
|
" ",
|
|
" responseData.data.forEach(function(player) {",
|
|
" pm.expect(player).to.have.property('playerId');",
|
|
" pm.expect(player).to.have.property('playerName');",
|
|
" pm.expect(player).to.have.property('position');",
|
|
" pm.expect(player).to.have.property('age');",
|
|
" pm.expect(player).to.have.property('games');",
|
|
" });",
|
|
"});",
|
|
"",
|
|
"",
|
|
"",
|
|
"pm.test(\"Pagination object is present and contains expected fields\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('object');",
|
|
" pm.expect(responseData.pagination).to.exist;",
|
|
" pm.expect(responseData.pagination).to.have.property('page');",
|
|
" pm.expect(responseData.pagination).to.have.property('pageSize');",
|
|
" pm.expect(responseData.pagination).to.have.property('pages');",
|
|
" pm.expect(responseData.pagination).to.have.property('total');",
|
|
"});",
|
|
"",
|
|
"// Visualization for Player Totals Stats",
|
|
"var template = `",
|
|
"<style type=\"text/css\">",
|
|
" .player-stats-container {",
|
|
" font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;",
|
|
" padding: 20px;",
|
|
" background-color: #f8f9fa;",
|
|
" }",
|
|
" .stats-header {",
|
|
" font-size: 24px;",
|
|
" font-weight: 600;",
|
|
" color: #1a1a2e;",
|
|
" margin-bottom: 8px;",
|
|
" }",
|
|
" .stats-subtitle {",
|
|
" font-size: 14px;",
|
|
" color: #6c757d;",
|
|
" margin-bottom: 20px;",
|
|
" }",
|
|
" .stats-table {",
|
|
" width: 100%;",
|
|
" border-collapse: collapse;",
|
|
" background-color: #ffffff;",
|
|
" border-radius: 8px;",
|
|
" overflow: hidden;",
|
|
" box-shadow: 0 2px 8px rgba(0,0,0,0.1);",
|
|
" }",
|
|
" .stats-table th {",
|
|
" background-color: #1a1a2e;",
|
|
" color: #ffffff;",
|
|
" font-weight: 600;",
|
|
" padding: 14px 12px;",
|
|
" text-align: left;",
|
|
" font-size: 13px;",
|
|
" text-transform: uppercase;",
|
|
" letter-spacing: 0.5px;",
|
|
" }",
|
|
" .stats-table td {",
|
|
" padding: 12px;",
|
|
" border-bottom: 1px solid #e9ecef;",
|
|
" font-size: 14px;",
|
|
" color: #333;",
|
|
" }",
|
|
" .stats-table tr:last-child td {",
|
|
" border-bottom: none;",
|
|
" }",
|
|
" .stats-table tr:hover {",
|
|
" background-color: #f1f3f5;",
|
|
" }",
|
|
" .player-name {",
|
|
" font-weight: 600;",
|
|
" color: #1a1a2e;",
|
|
" }",
|
|
" .position-badge {",
|
|
" display: inline-block;",
|
|
" padding: 4px 8px;",
|
|
" background-color: #e7f1ff;",
|
|
" color: #0066cc;",
|
|
" border-radius: 4px;",
|
|
" font-size: 12px;",
|
|
" font-weight: 600;",
|
|
" }",
|
|
" .stat-value {",
|
|
" font-weight: 500;",
|
|
" }",
|
|
" .stat-highlight {",
|
|
" color: #28a745;",
|
|
" font-weight: 600;",
|
|
" }",
|
|
"</style>",
|
|
"<div class=\"player-stats-container\">",
|
|
" <div class=\"stats-header\">Player Statistics</div>",
|
|
" <div class=\"stats-subtitle\">Season {{season}} | Total Players: {{totalPlayers}}</div>",
|
|
" <table class=\"stats-table\">",
|
|
" <thead>",
|
|
" <tr>",
|
|
" <th>Player</th>",
|
|
" <th>Pos</th>",
|
|
" <th>Games</th>",
|
|
" <th>Points</th>",
|
|
" <th>Assists</th>",
|
|
" <th>Rebounds</th>",
|
|
" <th>PPG</th>",
|
|
" </tr>",
|
|
" </thead>",
|
|
" <tbody>",
|
|
" {{#each players}}",
|
|
" <tr>",
|
|
" <td class=\"player-name\">{{playerName}}</td>",
|
|
" <td><span class=\"position-badge\">{{position}}</span></td>",
|
|
" <td class=\"stat-value\">{{games}}</td>",
|
|
" <td class=\"stat-value stat-highlight\">{{points}}</td>",
|
|
" <td class=\"stat-value\">{{assists}}</td>",
|
|
" <td class=\"stat-value\">{{totalRb}}</td>",
|
|
" <td class=\"stat-value\">{{ppg}}</td>",
|
|
" </tr>",
|
|
" {{/each}}",
|
|
" </tbody>",
|
|
" </table>",
|
|
"</div>",
|
|
"`;",
|
|
"",
|
|
"function constructVisualizerPayload() {",
|
|
" var response = pm.response.json();",
|
|
" var players = response.data.map(function(player) {",
|
|
" return {",
|
|
" playerName: player.playerName || 'N/A',",
|
|
" position: player.position || 'N/A',",
|
|
" games: player.games || 0,",
|
|
" points: player.points || 0,",
|
|
" assists: player.assists || 0,",
|
|
" totalRb: player.totalRb || 0,",
|
|
" ppg: player.games > 0 ? (player.points / player.games).toFixed(1) : '0.0'",
|
|
" };",
|
|
" });",
|
|
" ",
|
|
" return {",
|
|
" players: players,",
|
|
" season: response.data.length > 0 ? response.data[0].season : 'N/A',",
|
|
" totalPlayers: response.pagination ? response.pagination.total : players.length",
|
|
" };",
|
|
"}",
|
|
"",
|
|
"pm.visualizer.set(template, constructVisualizerPayload());"
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
},
|
|
{
|
|
"listen": "prerequest",
|
|
"script": {
|
|
"exec": [
|
|
""
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"auth": {
|
|
"type": "noauth"
|
|
},
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playertotals?season=2026&team=OKC&page=1&pageSize=12&isPlayoff=False",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playertotals"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "season",
|
|
"value": "2026",
|
|
"description": "(Optional) The season year (e.g., 2025 for the 2024-25 season)."
|
|
},
|
|
{
|
|
"key": "team",
|
|
"value": "OKC",
|
|
"description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL)."
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1."
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "12",
|
|
"description": "(Optional) The number of results to return per page. Defaults to 20."
|
|
},
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "False",
|
|
"description": "(Optional) Set to 'true' to retrieve playoff stats, or 'false' for regular season stats."
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"response": []
|
|
},
|
|
{
|
|
"name": "Player Totals Playoffs Stats",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"pm.test(\"Response status code is 200\", function () {",
|
|
" pm.response.to.have.status(200);",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Response time is less than 200ms\", function () {",
|
|
" pm.expect(pm.response.responseTime).to.be.below(200);",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Response has the required fields\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('object');",
|
|
" pm.expect(responseData.data).to.be.an('array');",
|
|
" ",
|
|
" responseData.data.forEach(function(player) {",
|
|
" pm.expect(player).to.have.property('playerId');",
|
|
" pm.expect(player).to.have.property('playerName');",
|
|
" pm.expect(player).to.have.property('position');",
|
|
" pm.expect(player).to.have.property('age');",
|
|
" pm.expect(player).to.have.property('games');",
|
|
" });",
|
|
"});",
|
|
"",
|
|
"",
|
|
"",
|
|
"pm.test(\"Pagination object is present and contains expected fields\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('object');",
|
|
" pm.expect(responseData.pagination).to.exist;",
|
|
" pm.expect(responseData.pagination).to.have.property('page');",
|
|
" pm.expect(responseData.pagination).to.have.property('pageSize');",
|
|
" pm.expect(responseData.pagination).to.have.property('pages');",
|
|
" pm.expect(responseData.pagination).to.have.property('total');",
|
|
"});",
|
|
"",
|
|
"// Player Statistics Visualization",
|
|
"var template = `",
|
|
"<style>",
|
|
" .stats-container {",
|
|
" font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;",
|
|
" padding: 20px;",
|
|
" background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);",
|
|
" min-height: 100vh;",
|
|
" color: #fff;",
|
|
" }",
|
|
" .stats-header {",
|
|
" text-align: center;",
|
|
" margin-bottom: 25px;",
|
|
" }",
|
|
" .stats-header h1 {",
|
|
" color: #00d4ff;",
|
|
" font-size: 28px;",
|
|
" margin: 0 0 10px 0;",
|
|
" text-shadow: 0 0 10px rgba(0, 212, 255, 0.5);",
|
|
" }",
|
|
" .stats-header p {",
|
|
" color: #a0a0a0;",
|
|
" font-size: 14px;",
|
|
" margin: 0;",
|
|
" }",
|
|
" .stats-table {",
|
|
" width: 100%;",
|
|
" border-collapse: collapse;",
|
|
" background: rgba(255, 255, 255, 0.05);",
|
|
" border-radius: 12px;",
|
|
" overflow: hidden;",
|
|
" box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);",
|
|
" }",
|
|
" .stats-table th {",
|
|
" background: linear-gradient(90deg, #0f3460 0%, #16213e 100%);",
|
|
" color: #00d4ff;",
|
|
" padding: 15px 12px;",
|
|
" text-align: left;",
|
|
" font-weight: 600;",
|
|
" font-size: 13px;",
|
|
" text-transform: uppercase;",
|
|
" letter-spacing: 0.5px;",
|
|
" cursor: pointer;",
|
|
" transition: background 0.3s ease;",
|
|
" border-bottom: 2px solid #00d4ff;",
|
|
" }",
|
|
" .stats-table th:hover {",
|
|
" background: linear-gradient(90deg, #1a4a7a 0%, #1e3a5f 100%);",
|
|
" }",
|
|
" .stats-table th::after {",
|
|
" content: ' ↕';",
|
|
" opacity: 0.4;",
|
|
" font-size: 10px;",
|
|
" }",
|
|
" .stats-table td {",
|
|
" padding: 14px 12px;",
|
|
" border-bottom: 1px solid rgba(255, 255, 255, 0.1);",
|
|
" font-size: 14px;",
|
|
" }",
|
|
" .stats-table tr:hover {",
|
|
" background: rgba(0, 212, 255, 0.1);",
|
|
" }",
|
|
" .stats-table tr:nth-child(even) {",
|
|
" background: rgba(255, 255, 255, 0.02);",
|
|
" }",
|
|
" .stats-table tr:nth-child(even):hover {",
|
|
" background: rgba(0, 212, 255, 0.1);",
|
|
" }",
|
|
" .player-name {",
|
|
" font-weight: 600;",
|
|
" color: #fff;",
|
|
" }",
|
|
" .position-badge {",
|
|
" display: inline-block;",
|
|
" padding: 4px 10px;",
|
|
" border-radius: 20px;",
|
|
" font-size: 11px;",
|
|
" font-weight: 600;",
|
|
" text-transform: uppercase;",
|
|
" }",
|
|
" .pos-PG { background: #e74c3c; }",
|
|
" .pos-SG { background: #3498db; }",
|
|
" .pos-SF { background: #2ecc71; }",
|
|
" .pos-PF { background: #f39c12; }",
|
|
" .pos-C { background: #9b59b6; }",
|
|
" .stat-highlight {",
|
|
" color: #00d4ff;",
|
|
" font-weight: 600;",
|
|
" }",
|
|
" .fg-percent {",
|
|
" display: inline-block;",
|
|
" padding: 3px 8px;",
|
|
" border-radius: 4px;",
|
|
" font-weight: 600;",
|
|
" }",
|
|
" .fg-high { background: rgba(46, 204, 113, 0.3); color: #2ecc71; }",
|
|
" .fg-mid { background: rgba(241, 196, 15, 0.3); color: #f1c40f; }",
|
|
" .fg-low { background: rgba(231, 76, 60, 0.3); color: #e74c3c; }",
|
|
" .pagination-info {",
|
|
" margin-top: 20px;",
|
|
" padding: 15px 20px;",
|
|
" background: rgba(255, 255, 255, 0.05);",
|
|
" border-radius: 8px;",
|
|
" display: flex;",
|
|
" justify-content: space-between;",
|
|
" align-items: center;",
|
|
" flex-wrap: wrap;",
|
|
" gap: 10px;",
|
|
" }",
|
|
" .pagination-stat {",
|
|
" display: flex;",
|
|
" align-items: center;",
|
|
" gap: 8px;",
|
|
" }",
|
|
" .pagination-label {",
|
|
" color: #a0a0a0;",
|
|
" font-size: 13px;",
|
|
" }",
|
|
" .pagination-value {",
|
|
" color: #00d4ff;",
|
|
" font-weight: 600;",
|
|
" font-size: 14px;",
|
|
" }",
|
|
" .no-data {",
|
|
" text-align: center;",
|
|
" padding: 40px;",
|
|
" color: #a0a0a0;",
|
|
" font-size: 16px;",
|
|
" }",
|
|
"</style>",
|
|
"",
|
|
"<div class=\"stats-container\">",
|
|
" <div class=\"stats-header\">",
|
|
" <h1>🏀 Player Statistics</h1>",
|
|
" <p>{{subtitle}}</p>",
|
|
" </div>",
|
|
" ",
|
|
" {{#if hasData}}",
|
|
" <table class=\"stats-table\" id=\"playerTable\">",
|
|
" <thead>",
|
|
" <tr>",
|
|
" <th onclick=\"sortTable(0)\">Player Name</th>",
|
|
" <th onclick=\"sortTable(1)\">Position</th>",
|
|
" <th onclick=\"sortTable(2)\">Games</th>",
|
|
" <th onclick=\"sortTable(3)\">Points</th>",
|
|
" <th onclick=\"sortTable(4)\">Assists</th>",
|
|
" <th onclick=\"sortTable(5)\">Rebounds</th>",
|
|
" <th onclick=\"sortTable(6)\">FG%</th>",
|
|
" </tr>",
|
|
" </thead>",
|
|
" <tbody>",
|
|
" {{#each players}}",
|
|
" <tr>",
|
|
" <td class=\"player-name\">{{playerName}}</td>",
|
|
" <td><span class=\"position-badge pos-{{position}}\">{{position}}</span></td>",
|
|
" <td>{{games}}</td>",
|
|
" <td class=\"stat-highlight\">{{points}}</td>",
|
|
" <td>{{assists}}</td>",
|
|
" <td>{{totalRb}}</td>",
|
|
" <td><span class=\"fg-percent {{fgClass}}\">{{fieldPercent}}</span></td>",
|
|
" </tr>",
|
|
" {{/each}}",
|
|
" </tbody>",
|
|
" </table>",
|
|
" ",
|
|
" <div class=\"pagination-info\">",
|
|
" <div class=\"pagination-stat\">",
|
|
" <span class=\"pagination-label\">Page:</span>",
|
|
" <span class=\"pagination-value\">{{pagination.page}} of {{pagination.pages}}</span>",
|
|
" </div>",
|
|
" <div class=\"pagination-stat\">",
|
|
" <span class=\"pagination-label\">Showing:</span>",
|
|
" <span class=\"pagination-value\">{{pagination.pageSize}} players</span>",
|
|
" </div>",
|
|
" <div class=\"pagination-stat\">",
|
|
" <span class=\"pagination-label\">Total Players:</span>",
|
|
" <span class=\"pagination-value\">{{pagination.total}}</span>",
|
|
" </div>",
|
|
" </div>",
|
|
" {{else}}",
|
|
" <div class=\"no-data\">No player data available</div>",
|
|
" {{/if}}",
|
|
"</div>",
|
|
"",
|
|
"<script>",
|
|
" let sortDirection = {};",
|
|
" ",
|
|
" function sortTable(columnIndex) {",
|
|
" const table = document.getElementById('playerTable');",
|
|
" const tbody = table.querySelector('tbody');",
|
|
" const rows = Array.from(tbody.querySelectorAll('tr'));",
|
|
" ",
|
|
" sortDirection[columnIndex] = !sortDirection[columnIndex];",
|
|
" const direction = sortDirection[columnIndex] ? 1 : -1;",
|
|
" ",
|
|
" rows.sort((a, b) => {",
|
|
" let aVal = a.cells[columnIndex].textContent.trim();",
|
|
" let bVal = b.cells[columnIndex].textContent.trim();",
|
|
" ",
|
|
" // Check if numeric",
|
|
" const aNum = parseFloat(aVal.replace('%', ''));",
|
|
" const bNum = parseFloat(bVal.replace('%', ''));",
|
|
" ",
|
|
" if (!isNaN(aNum) && !isNaN(bNum)) {",
|
|
" return (aNum - bNum) * direction;",
|
|
" }",
|
|
" return aVal.localeCompare(bVal) * direction;",
|
|
" });",
|
|
" ",
|
|
" rows.forEach(row => tbody.appendChild(row));",
|
|
" }",
|
|
"</script>",
|
|
"`;",
|
|
"",
|
|
"function constructVisualizerPayload() {",
|
|
" const response = pm.response.json();",
|
|
" const data = response.data || [];",
|
|
" const pagination = response.pagination || { page: 1, pageSize: 0, pages: 1, total: 0 };",
|
|
" ",
|
|
" const players = data.map(player => {",
|
|
" const fgPercent = player.fieldPercent || 0;",
|
|
" let fgClass = 'fg-low';",
|
|
" if (fgPercent >= 0.5) {",
|
|
" fgClass = 'fg-high';",
|
|
" } else if (fgPercent >= 0.4) {",
|
|
" fgClass = 'fg-mid';",
|
|
" }",
|
|
" ",
|
|
" return {",
|
|
" playerName: player.playerName || 'Unknown',",
|
|
" position: player.position || 'N/A',",
|
|
" games: player.games || 0,",
|
|
" points: player.points || 0,",
|
|
" assists: player.assists || 0,",
|
|
" totalRb: player.totalRb || 0,",
|
|
" fieldPercent: (fgPercent * 100).toFixed(1) + '%',",
|
|
" fgClass: fgClass",
|
|
" };",
|
|
" });",
|
|
" ",
|
|
" const subtitle = 'Playoff Statistics | Team: ' + (data[0]?.team || 'N/A') + ' | Season: ' + (data[0]?.season || 'N/A');",
|
|
" ",
|
|
" return {",
|
|
" players: players,",
|
|
" pagination: pagination,",
|
|
" hasData: players.length > 0,",
|
|
" subtitle: subtitle",
|
|
" };",
|
|
"}",
|
|
"",
|
|
"pm.visualizer.set(template, constructVisualizerPayload());"
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
},
|
|
{
|
|
"listen": "prerequest",
|
|
"script": {
|
|
"exec": [
|
|
""
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playertotals?team=HOU&page=1&pageSize=10&sortBy=assists&isPlayoff=true&season={{season}}",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playertotals"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "team",
|
|
"value": "HOU",
|
|
"description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL)."
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1."
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "10",
|
|
"description": "(Optional) The number of results to return per page. Defaults to 20."
|
|
},
|
|
{
|
|
"key": "sortBy",
|
|
"value": "assists",
|
|
"description": "(Optional) The field to sort the results by. Defaults to 'points'."
|
|
},
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "true",
|
|
"description": "(Optional) Set to 'true' to retrieve playoff stats, or 'false' for regular season stats."
|
|
},
|
|
{
|
|
"key": "season",
|
|
"value": "{{season}}"
|
|
}
|
|
]
|
|
},
|
|
"description": "### Get Player Total Stats (Playoffs)\n\nReturns a paginated and filterable list of traditional player statistics (totals) for the playoffs. This is an example request that sets `isPlayoff=true`.\n\n### Usage\n\nThis endpoint supports filtering by `season`, `team`, and `playerId`. Results can be paginated using `page` and `pageSize`, and sorted using `sortBy` and `ascending`.\n\n#### **Query Parameters**\n\n* **`season`** (integer, optional): The season year (e.g., 2000).\n* **`team`** (string, optional): Team abbreviation (e.g., LAL).\n* **`playerId`** (string, optional): The player's unique ID (e.g., `greenac01`).\n* **`page`** (integer, optional): Page number. Defaults to `1`.\n* **`pageSize`** (integer, optional): Number of results per page. Defaults to `20`.\n* **`isPlayoff`** (boolean, optional): Set to `true` for playoff stats. The filter is only applied if the parameter is provided.\n* **`sortBy`** (string, optional): Field to sort by. Defaults to `points`.\n* **`ascending`** (boolean, optional): Use `true` for ascending order. Defaults to `false`.\n\n#### **Available `sortBy` Fields:**\n`playerId`, `playerName`, `position`, `age`, `games`, `gamesStarted`, `minutesPg`, `fieldGoals`, `fieldAttempts`, `fieldPercent`, `threeFg`, `threeAttempts`, `threePercent`, `twoFg`, `twoAttempts`, `twoPercent`, `effectFgPercent`, `ft`, `ftAttempts`, `ftPercent`, `offensiveRb`, `defensiveRb`, `totalRb`, `assists`, `steals`, `blocks`, `turnovers`, `personalFouls`, `points`, `team`, `season`"
|
|
},
|
|
"response": [
|
|
{
|
|
"name": "Player Totals Playoffs Stats",
|
|
"originalRequest": {
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "https://api.server.nbaapi.com/api/playertotals?season=2019&page=1&pageSize=10&sortBy=assists&isPlayoff=true",
|
|
"protocol": "https",
|
|
"host": [
|
|
"api",
|
|
"server",
|
|
"nbaapi",
|
|
"com"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playertotals"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "season",
|
|
"value": "2019",
|
|
"description": "(Optional) The season year (e.g., 2025 for the 2024-25 season)."
|
|
},
|
|
{
|
|
"key": "team",
|
|
"value": "HOU",
|
|
"description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL).",
|
|
"disabled": true
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1."
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "10",
|
|
"description": "(Optional) The number of results to return per page. Defaults to 20."
|
|
},
|
|
{
|
|
"key": "sortBy",
|
|
"value": "assists",
|
|
"description": "(Optional) The field to sort the results by. Defaults to 'points'."
|
|
},
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "true",
|
|
"description": "(Optional) Set to 'true' to retrieve playoff stats, or 'false' for regular season stats."
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"status": "OK",
|
|
"code": 200,
|
|
"_postman_previewlanguage": "json",
|
|
"header": [
|
|
{
|
|
"key": "Alt-Svc",
|
|
"value": "h3=\":443\"; ma=2592000"
|
|
},
|
|
{
|
|
"key": "Content-Encoding",
|
|
"value": "br"
|
|
},
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
},
|
|
{
|
|
"key": "Date",
|
|
"value": "Wed, 02 Jul 2025 01:17:12 GMT"
|
|
},
|
|
{
|
|
"key": "Server",
|
|
"value": "nginx/1.28.0"
|
|
},
|
|
{
|
|
"key": "Vary",
|
|
"value": "Accept-Encoding"
|
|
},
|
|
{
|
|
"key": "Transfer-Encoding",
|
|
"value": "chunked"
|
|
}
|
|
],
|
|
"cookie": [],
|
|
"body": "{\n \"data\": [\n {\n \"ID\": 7355,\n \"id\": 76,\n \"playerId\": \"greendr01\",\n \"playerName\": \"Draymond Green\",\n \"position\": \"PF\",\n \"age\": 28,\n \"games\": 22,\n \"gamesStarted\": 22,\n \"minutesPg\": 851,\n \"fieldGoals\": 114,\n \"fieldAttempts\": 229,\n \"fieldPercent\": 0.498,\n \"threeFg\": 13,\n \"threeAttempts\": 57,\n \"threePercent\": 0.228,\n \"twoFg\": 101,\n \"twoAttempts\": 172,\n \"twoPercent\": 0.587,\n \"effectFgPercent\": 0.526,\n \"ft\": 51,\n \"ftAttempts\": 71,\n \"ftPercent\": 0.718,\n \"offensiveRb\": 41,\n \"defensiveRb\": 182,\n \"totalRb\": 223,\n \"assists\": 187,\n \"steals\": 32,\n \"blocks\": 33,\n \"turnovers\": 83,\n \"personalFouls\": 85,\n \"points\": 292,\n \"team\": \"GSW\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:33.196486Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:33.196486Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7404,\n \"id\": 125,\n \"playerId\": \"lowryky01\",\n \"playerName\": \"Kyle Lowry\",\n \"position\": \"PG\",\n \"age\": 32,\n \"games\": 24,\n \"gamesStarted\": 24,\n \"minutesPg\": 901,\n \"fieldGoals\": 122,\n \"fieldAttempts\": 277,\n \"fieldPercent\": 0.44,\n \"threeFg\": 52,\n \"threeAttempts\": 145,\n \"threePercent\": 0.359,\n \"twoFg\": 70,\n \"twoAttempts\": 132,\n \"twoPercent\": 0.53,\n \"effectFgPercent\": 0.534,\n \"ft\": 65,\n \"ftAttempts\": 81,\n \"ftPercent\": 0.802,\n \"offensiveRb\": 21,\n \"defensiveRb\": 96,\n \"totalRb\": 117,\n \"assists\": 159,\n \"steals\": 31,\n \"blocks\": 7,\n \"turnovers\": 54,\n \"personalFouls\": 96,\n \"points\": 361,\n \"team\": \"TOR\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:42.589209Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:42.589209Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7321,\n \"id\": 42,\n \"playerId\": \"curryst01\",\n \"playerName\": \"Stephen Curry\",\n \"position\": \"PG\",\n \"age\": 30,\n \"games\": 22,\n \"gamesStarted\": 22,\n \"minutesPg\": 846,\n \"fieldGoals\": 190,\n \"fieldAttempts\": 431,\n \"fieldPercent\": 0.441,\n \"threeFg\": 92,\n \"threeAttempts\": 244,\n \"threePercent\": 0.377,\n \"twoFg\": 98,\n \"twoAttempts\": 187,\n \"twoPercent\": 0.524,\n \"effectFgPercent\": 0.548,\n \"ft\": 148,\n \"ftAttempts\": 157,\n \"ftPercent\": 0.943,\n \"offensiveRb\": 17,\n \"defensiveRb\": 115,\n \"totalRb\": 132,\n \"assists\": 126,\n \"steals\": 24,\n \"blocks\": 4,\n \"turnovers\": 66,\n \"personalFouls\": 68,\n \"points\": 620,\n \"team\": \"GSW\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:26.755237Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:26.755237Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7385,\n \"id\": 106,\n \"playerId\": \"jokicni01\",\n \"playerName\": \"Nikola Jokić\",\n \"position\": \"C\",\n \"age\": 23,\n \"games\": 14,\n \"gamesStarted\": 14,\n \"minutesPg\": 557,\n \"fieldGoals\": 132,\n \"fieldAttempts\": 261,\n \"fieldPercent\": 0.506,\n \"threeFg\": 22,\n \"threeAttempts\": 56,\n \"threePercent\": 0.393,\n \"twoFg\": 110,\n \"twoAttempts\": 205,\n \"twoPercent\": 0.537,\n \"effectFgPercent\": 0.548,\n \"ft\": 66,\n \"ftAttempts\": 78,\n \"ftPercent\": 0.846,\n \"offensiveRb\": 54,\n \"defensiveRb\": 128,\n \"totalRb\": 182,\n \"assists\": 118,\n \"steals\": 16,\n \"blocks\": 13,\n \"turnovers\": 36,\n \"personalFouls\": 54,\n \"points\": 352,\n \"team\": \"DEN\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:38.912453Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:38.912453Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7399,\n \"id\": 120,\n \"playerId\": \"lillada01\",\n \"playerName\": \"Damian Lillard\",\n \"position\": \"PG\",\n \"age\": 28,\n \"games\": 16,\n \"gamesStarted\": 16,\n \"minutesPg\": 650,\n \"fieldGoals\": 138,\n \"fieldAttempts\": 330,\n \"fieldPercent\": 0.418,\n \"threeFg\": 59,\n \"threeAttempts\": 158,\n \"threePercent\": 0.373,\n \"twoFg\": 79,\n \"twoAttempts\": 172,\n \"twoPercent\": 0.459,\n \"effectFgPercent\": 0.508,\n \"ft\": 95,\n \"ftAttempts\": 114,\n \"ftPercent\": 0.833,\n \"offensiveRb\": 8,\n \"defensiveRb\": 68,\n \"totalRb\": 76,\n \"assists\": 106,\n \"steals\": 27,\n \"blocks\": 5,\n \"turnovers\": 60,\n \"personalFouls\": 40,\n \"points\": 430,\n \"team\": \"POR\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:41.632205Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:41.632205Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7395,\n \"id\": 116,\n \"playerId\": \"leonaka01\",\n \"playerName\": \"Kawhi Leonard\",\n \"position\": \"SF\",\n \"age\": 27,\n \"games\": 24,\n \"gamesStarted\": 24,\n \"minutesPg\": 939,\n \"fieldGoals\": 243,\n \"fieldAttempts\": 496,\n \"fieldPercent\": 0.49,\n \"threeFg\": 55,\n \"threeAttempts\": 145,\n \"threePercent\": 0.379,\n \"twoFg\": 188,\n \"twoAttempts\": 351,\n \"twoPercent\": 0.536,\n \"effectFgPercent\": 0.545,\n \"ft\": 191,\n \"ftAttempts\": 216,\n \"ftPercent\": 0.884,\n \"offensiveRb\": 54,\n \"defensiveRb\": 164,\n \"totalRb\": 218,\n \"assists\": 94,\n \"steals\": 40,\n \"blocks\": 17,\n \"turnovers\": 74,\n \"personalFouls\": 56,\n \"points\": 732,\n \"team\": \"TOR\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:40.895323Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:40.895323Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7376,\n \"id\": 97,\n \"playerId\": \"iguodan01\",\n \"playerName\": \"Andre Iguodala\",\n \"position\": \"SF\",\n \"age\": 35,\n \"games\": 21,\n \"gamesStarted\": 15,\n \"minutesPg\": 629,\n \"fieldGoals\": 82,\n \"fieldAttempts\": 166,\n \"fieldPercent\": 0.494,\n \"threeFg\": 28,\n \"threeAttempts\": 80,\n \"threePercent\": 0.35,\n \"twoFg\": 54,\n \"twoAttempts\": 86,\n \"twoPercent\": 0.628,\n \"effectFgPercent\": 0.578,\n \"ft\": 14,\n \"ftAttempts\": 37,\n \"ftPercent\": 0.378,\n \"offensiveRb\": 27,\n \"defensiveRb\": 64,\n \"totalRb\": 91,\n \"assists\": 83,\n \"steals\": 24,\n \"blocks\": 23,\n \"turnovers\": 21,\n \"personalFouls\": 43,\n \"points\": 206,\n \"team\": \"GSW\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:37.278972Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:37.278972Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7285,\n \"id\": 6,\n \"playerId\": \"antetgi01\",\n \"playerName\": \"Giannis Antetokounmpo\",\n \"position\": \"PF\",\n \"age\": 24,\n \"games\": 15,\n \"gamesStarted\": 15,\n \"minutesPg\": 514,\n \"fieldGoals\": 129,\n \"fieldAttempts\": 261,\n \"fieldPercent\": 0.494,\n \"threeFg\": 18,\n \"threeAttempts\": 55,\n \"threePercent\": 0.327,\n \"twoFg\": 111,\n \"twoAttempts\": 206,\n \"twoPercent\": 0.539,\n \"effectFgPercent\": 0.529,\n \"ft\": 107,\n \"ftAttempts\": 168,\n \"ftPercent\": 0.637,\n \"offensiveRb\": 36,\n \"defensiveRb\": 147,\n \"totalRb\": 183,\n \"assists\": 73,\n \"steals\": 18,\n \"blocks\": 30,\n \"turnovers\": 50,\n \"personalFouls\": 48,\n \"points\": 383,\n \"team\": \"MIL\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:19.819646Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:19.819646Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7344,\n \"id\": 65,\n \"playerId\": \"gasolma01\",\n \"playerName\": \"Marc Gasol\",\n \"position\": \"C\",\n \"age\": 34,\n \"games\": 24,\n \"gamesStarted\": 24,\n \"minutesPg\": 735,\n \"fieldGoals\": 76,\n \"fieldAttempts\": 180,\n \"fieldPercent\": 0.422,\n \"threeFg\": 34,\n \"threeAttempts\": 89,\n \"threePercent\": 0.382,\n \"twoFg\": 42,\n \"twoAttempts\": 91,\n \"twoPercent\": 0.462,\n \"effectFgPercent\": 0.517,\n \"ft\": 40,\n \"ftAttempts\": 46,\n \"ftPercent\": 0.87,\n \"offensiveRb\": 16,\n \"defensiveRb\": 138,\n \"totalRb\": 154,\n \"assists\": 73,\n \"steals\": 21,\n \"blocks\": 26,\n \"turnovers\": 21,\n \"personalFouls\": 84,\n \"points\": 226,\n \"team\": \"TOR\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:31.095854Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:31.095854Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7359,\n \"id\": 80,\n \"playerId\": \"hardeja01\",\n \"playerName\": \"James Harden\",\n \"position\": \"PG\",\n \"age\": 29,\n \"games\": 11,\n \"gamesStarted\": 11,\n \"minutesPg\": 424,\n \"fieldGoals\": 109,\n \"fieldAttempts\": 264,\n \"fieldPercent\": 0.413,\n \"threeFg\": 48,\n \"threeAttempts\": 137,\n \"threePercent\": 0.35,\n \"twoFg\": 61,\n \"twoAttempts\": 127,\n \"twoPercent\": 0.48,\n \"effectFgPercent\": 0.504,\n \"ft\": 82,\n \"ftAttempts\": 98,\n \"ftPercent\": 0.837,\n \"offensiveRb\": 9,\n \"defensiveRb\": 66,\n \"totalRb\": 75,\n \"assists\": 73,\n \"steals\": 24,\n \"blocks\": 10,\n \"turnovers\": 51,\n \"personalFouls\": 41,\n \"points\": 348,\n \"team\": \"HOU\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:33.976424Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:33.976424Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7460,\n \"id\": 181,\n \"playerId\": \"simmobe01\",\n \"playerName\": \"Ben Simmons\",\n \"position\": \"PG\",\n \"age\": 22,\n \"games\": 12,\n \"gamesStarted\": 12,\n \"minutesPg\": 421,\n \"fieldGoals\": 72,\n \"fieldAttempts\": 116,\n \"fieldPercent\": 0.621,\n \"threeFg\": 0,\n \"threeAttempts\": 0,\n \"threePercent\": 0,\n \"twoFg\": 72,\n \"twoAttempts\": 116,\n \"twoPercent\": 0.621,\n \"effectFgPercent\": 0.621,\n \"ft\": 23,\n \"ftAttempts\": 40,\n \"ftPercent\": 0.575,\n \"offensiveRb\": 23,\n \"defensiveRb\": 61,\n \"totalRb\": 84,\n \"assists\": 72,\n \"steals\": 15,\n \"blocks\": 12,\n \"turnovers\": 32,\n \"personalFouls\": 45,\n \"points\": 167,\n \"team\": \"PHI\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:53.424036Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:53.424036Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7416,\n \"id\": 137,\n \"playerId\": \"middlkh01\",\n \"playerName\": \"Khris Middleton\",\n \"position\": \"SF\",\n \"age\": 27,\n \"games\": 15,\n \"gamesStarted\": 15,\n \"minutesPg\": 515,\n \"fieldGoals\": 84,\n \"fieldAttempts\": 201,\n \"fieldPercent\": 0.418,\n \"threeFg\": 40,\n \"threeAttempts\": 92,\n \"threePercent\": 0.435,\n \"twoFg\": 44,\n \"twoAttempts\": 109,\n \"twoPercent\": 0.404,\n \"effectFgPercent\": 0.517,\n \"ft\": 46,\n \"ftAttempts\": 52,\n \"ftPercent\": 0.885,\n \"offensiveRb\": 9,\n \"defensiveRb\": 86,\n \"totalRb\": 95,\n \"assists\": 66,\n \"steals\": 9,\n \"blocks\": 0,\n \"turnovers\": 29,\n \"personalFouls\": 44,\n \"points\": 254,\n \"team\": \"MIL\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:44.932463Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:44.932463Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7428,\n \"id\": 149,\n \"playerId\": \"murraja01\",\n \"playerName\": \"Jamal Murray\",\n \"position\": \"PG\",\n \"age\": 21,\n \"games\": 14,\n \"gamesStarted\": 14,\n \"minutesPg\": 508,\n \"fieldGoals\": 107,\n \"fieldAttempts\": 252,\n \"fieldPercent\": 0.425,\n \"threeFg\": 28,\n \"threeAttempts\": 83,\n \"threePercent\": 0.337,\n \"twoFg\": 79,\n \"twoAttempts\": 169,\n \"twoPercent\": 0.467,\n \"effectFgPercent\": 0.48,\n \"ft\": 56,\n \"ftAttempts\": 62,\n \"ftPercent\": 0.903,\n \"offensiveRb\": 19,\n \"defensiveRb\": 42,\n \"totalRb\": 61,\n \"assists\": 66,\n \"steals\": 14,\n \"blocks\": 2,\n \"turnovers\": 22,\n \"personalFouls\": 24,\n \"points\": 298,\n \"team\": \"DEN\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:47.284827Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:47.284827Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7459,\n \"id\": 180,\n \"playerId\": \"siakapa01\",\n \"playerName\": \"Pascal Siakam\",\n \"position\": \"PF\",\n \"age\": 24,\n \"games\": 24,\n \"gamesStarted\": 24,\n \"minutesPg\": 891,\n \"fieldGoals\": 180,\n \"fieldAttempts\": 383,\n \"fieldPercent\": 0.47,\n \"threeFg\": 29,\n \"threeAttempts\": 104,\n \"threePercent\": 0.279,\n \"twoFg\": 151,\n \"twoAttempts\": 279,\n \"twoPercent\": 0.541,\n \"effectFgPercent\": 0.508,\n \"ft\": 66,\n \"ftAttempts\": 87,\n \"ftPercent\": 0.759,\n \"offensiveRb\": 40,\n \"defensiveRb\": 131,\n \"totalRb\": 171,\n \"assists\": 66,\n \"steals\": 24,\n \"blocks\": 17,\n \"turnovers\": 33,\n \"personalFouls\": 67,\n \"points\": 455,\n \"team\": \"TOR\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:53.175678Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:53.175678Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7295,\n \"id\": 16,\n \"playerId\": \"bledser01\",\n \"playerName\": \"Eric Bledsoe\",\n \"position\": \"PG\",\n \"age\": 29,\n \"games\": 15,\n \"gamesStarted\": 15,\n \"minutesPg\": 423,\n \"fieldGoals\": 76,\n \"fieldAttempts\": 185,\n \"fieldPercent\": 0.411,\n \"threeFg\": 17,\n \"threeAttempts\": 72,\n \"threePercent\": 0.236,\n \"twoFg\": 59,\n \"twoAttempts\": 113,\n \"twoPercent\": 0.522,\n \"effectFgPercent\": 0.457,\n \"ft\": 36,\n \"ftAttempts\": 51,\n \"ftPercent\": 0.706,\n \"offensiveRb\": 20,\n \"defensiveRb\": 36,\n \"totalRb\": 56,\n \"assists\": 64,\n \"steals\": 16,\n \"blocks\": 6,\n \"turnovers\": 32,\n \"personalFouls\": 28,\n \"points\": 205,\n \"team\": \"MIL\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:21.702841Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:21.702841Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7379,\n \"id\": 100,\n \"playerId\": \"irvinky01\",\n \"playerName\": \"Kyrie Irving\",\n \"position\": \"PG\",\n \"age\": 26,\n \"games\": 9,\n \"gamesStarted\": 9,\n \"minutesPg\": 330,\n \"fieldGoals\": 69,\n \"fieldAttempts\": 179,\n \"fieldPercent\": 0.385,\n \"threeFg\": 18,\n \"threeAttempts\": 58,\n \"threePercent\": 0.31,\n \"twoFg\": 51,\n \"twoAttempts\": 121,\n \"twoPercent\": 0.421,\n \"effectFgPercent\": 0.436,\n \"ft\": 36,\n \"ftAttempts\": 40,\n \"ftPercent\": 0.9,\n \"offensiveRb\": 5,\n \"defensiveRb\": 34,\n \"totalRb\": 39,\n \"assists\": 63,\n \"steals\": 13,\n \"blocks\": 4,\n \"turnovers\": 28,\n \"personalFouls\": 26,\n \"points\": 192,\n \"team\": \"BOS\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:37.814543Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:37.814543Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7305,\n \"id\": 26,\n \"playerId\": \"butleji01\",\n \"playerName\": \"Jimmy Butler\",\n \"position\": \"SF\",\n \"age\": 29,\n \"games\": 12,\n \"gamesStarted\": 12,\n \"minutesPg\": 421,\n \"fieldGoals\": 79,\n \"fieldAttempts\": 175,\n \"fieldPercent\": 0.451,\n \"threeFg\": 12,\n \"threeAttempts\": 45,\n \"threePercent\": 0.267,\n \"twoFg\": 67,\n \"twoAttempts\": 130,\n \"twoPercent\": 0.515,\n \"effectFgPercent\": 0.486,\n \"ft\": 63,\n \"ftAttempts\": 72,\n \"ftPercent\": 0.875,\n \"offensiveRb\": 22,\n \"defensiveRb\": 50,\n \"totalRb\": 72,\n \"assists\": 62,\n \"steals\": 18,\n \"blocks\": 7,\n \"turnovers\": 22,\n \"personalFouls\": 20,\n \"points\": 233,\n \"team\": \"PHI\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:23.708252Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:23.708252Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7479,\n \"id\": 200,\n \"playerId\": \"vanvlfr01\",\n \"playerName\": \"Fred VanVleet\",\n \"position\": \"PG\",\n \"age\": 24,\n \"games\": 24,\n \"gamesStarted\": 0,\n \"minutesPg\": 592,\n \"fieldGoals\": 65,\n \"fieldAttempts\": 166,\n \"fieldPercent\": 0.392,\n \"threeFg\": 38,\n \"threeAttempts\": 98,\n \"threePercent\": 0.388,\n \"twoFg\": 27,\n \"twoAttempts\": 68,\n \"twoPercent\": 0.397,\n \"effectFgPercent\": 0.506,\n \"ft\": 24,\n \"ftAttempts\": 31,\n \"ftPercent\": 0.774,\n \"offensiveRb\": 7,\n \"defensiveRb\": 33,\n \"totalRb\": 40,\n \"assists\": 62,\n \"steals\": 18,\n \"blocks\": 6,\n \"turnovers\": 21,\n \"personalFouls\": 49,\n \"points\": 192,\n \"team\": \"TOR\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:57.203361Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:57.203361Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7439,\n \"id\": 160,\n \"playerId\": \"paulch01\",\n \"playerName\": \"Chris Paul\",\n \"position\": \"PG\",\n \"age\": 33,\n \"games\": 11,\n \"gamesStarted\": 11,\n \"minutesPg\": 397,\n \"fieldGoals\": 66,\n \"fieldAttempts\": 148,\n \"fieldPercent\": 0.446,\n \"threeFg\": 17,\n \"threeAttempts\": 63,\n \"threePercent\": 0.27,\n \"twoFg\": 49,\n \"twoAttempts\": 85,\n \"twoPercent\": 0.576,\n \"effectFgPercent\": 0.503,\n \"ft\": 38,\n \"ftAttempts\": 45,\n \"ftPercent\": 0.844,\n \"offensiveRb\": 14,\n \"defensiveRb\": 56,\n \"totalRb\": 70,\n \"assists\": 60,\n \"steals\": 24,\n \"blocks\": 7,\n \"turnovers\": 37,\n \"personalFouls\": 36,\n \"points\": 187,\n \"team\": \"HOU\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:49.350696Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:49.350696Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 7411,\n \"id\": 132,\n \"playerId\": \"mccolcj01\",\n \"playerName\": \"CJ McCollum\",\n \"position\": \"SG\",\n \"age\": 27,\n \"games\": 16,\n \"gamesStarted\": 16,\n \"minutesPg\": 635,\n \"fieldGoals\": 154,\n \"fieldAttempts\": 350,\n \"fieldPercent\": 0.44,\n \"threeFg\": 46,\n \"threeAttempts\": 117,\n \"threePercent\": 0.393,\n \"twoFg\": 108,\n \"twoAttempts\": 233,\n \"twoPercent\": 0.464,\n \"effectFgPercent\": 0.506,\n \"ft\": 41,\n \"ftAttempts\": 56,\n \"ftPercent\": 0.732,\n \"offensiveRb\": 14,\n \"defensiveRb\": 66,\n \"totalRb\": 80,\n \"assists\": 59,\n \"steals\": 13,\n \"blocks\": 10,\n \"turnovers\": 30,\n \"personalFouls\": 34,\n \"points\": 395,\n \"team\": \"POR\",\n \"season\": 2019,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T02:54:43.98991Z\",\n \"UpdatedAt\": \"2025-06-20T02:54:43.98991Z\",\n \"DeletedAt\": null\n }\n ],\n \"pagination\": {\n \"page\": 1,\n \"pageSize\": 20,\n \"pages\": 11,\n \"total\": 212\n }\n}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Player Advanced Stats",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"pm.test(\"Response status code is 200\", function () {",
|
|
" pm.response.to.have.status(200);",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Response time is within acceptable range\", function () {",
|
|
" pm.expect(pm.response.responseTime).to.be.below(200);",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Response schema matches the expected structure\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('object');",
|
|
" pm.expect(responseData.data).to.be.an('array').that.is.not.empty;",
|
|
" ",
|
|
" responseData.data.forEach(function(playerStats) {",
|
|
" pm.expect(playerStats).to.have.property('playerId');",
|
|
" pm.expect(playerStats).to.have.property('playerName');",
|
|
" pm.expect(playerStats).to.have.property('position');",
|
|
" pm.expect(playerStats).to.have.property('age');",
|
|
" pm.expect(playerStats).to.have.property('games');",
|
|
" pm.expect(playerStats).to.have.property('minutesPlayed');",
|
|
" pm.expect(playerStats).to.have.property('per');",
|
|
" pm.expect(playerStats).to.have.property('tsPercent');",
|
|
" pm.expect(playerStats).to.have.property('threePAR');",
|
|
" pm.expect(playerStats).to.have.property('ftr');",
|
|
" pm.expect(playerStats).to.have.property('offensiveRBPercent');",
|
|
" pm.expect(playerStats).to.have.property('defensiveRBPercent');",
|
|
" pm.expect(playerStats).to.have.property('totalRBPercent');",
|
|
" pm.expect(playerStats).to.have.property('assistPercent');",
|
|
" pm.expect(playerStats).to.have.property('stealPercent');",
|
|
" pm.expect(playerStats).to.have.property('blockPercent');",
|
|
" pm.expect(playerStats).to.have.property('turnoverPercent');",
|
|
" pm.expect(playerStats).to.have.property('usagePercent');",
|
|
" pm.expect(playerStats).to.have.property('offensiveWS');",
|
|
" pm.expect(playerStats).to.have.property('defensiveWS');",
|
|
" pm.expect(playerStats).to.have.property('winShares');",
|
|
" pm.expect(playerStats).to.have.property('winSharesPer');",
|
|
" pm.expect(playerStats).to.have.property('offensiveBox');",
|
|
" pm.expect(playerStats).to.have.property('defensiveBox');",
|
|
" pm.expect(playerStats).to.have.property('box');",
|
|
" pm.expect(playerStats).to.have.property('vorp');",
|
|
" pm.expect(playerStats).to.have.property('team');",
|
|
" pm.expect(playerStats).to.have.property('season');",
|
|
" });",
|
|
"});",
|
|
"",
|
|
"pm.test(\"Response time is within acceptable range\", function () {",
|
|
" pm.expect(pm.response.responseTime).to.be.below(200);",
|
|
"});",
|
|
"",
|
|
"// Visualization: Top Players by Win Shares Bar Chart",
|
|
"var template = `",
|
|
"<h2 style=\"text-align: center; font-family: Arial, sans-serif; color: #333;\">Top Players by Win Shares</h2>",
|
|
"<canvas id=\"winSharesChart\" height=\"100\"></canvas>",
|
|
"<script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js\"></script>",
|
|
"<script>",
|
|
" var ctx = document.getElementById(\"winSharesChart\").getContext(\"2d\");",
|
|
" var winSharesChart = new Chart(ctx, {",
|
|
" type: \"bar\",",
|
|
" data: {",
|
|
" labels: [],",
|
|
" datasets: [{",
|
|
" label: \"Win Shares\",",
|
|
" data: [],",
|
|
" backgroundColor: \"rgba(54, 162, 235, 0.7)\",",
|
|
" borderColor: \"rgba(54, 162, 235, 1)\",",
|
|
" borderWidth: 1",
|
|
" }]",
|
|
" },",
|
|
" options: {",
|
|
" responsive: true,",
|
|
" legend: {",
|
|
" display: true,",
|
|
" position: \"top\"",
|
|
" },",
|
|
" title: {",
|
|
" display: false",
|
|
" },",
|
|
" scales: {",
|
|
" xAxes: [{",
|
|
" display: true,",
|
|
" scaleLabel: {",
|
|
" display: true,",
|
|
" labelString: \"Player Name\"",
|
|
" },",
|
|
" ticks: {",
|
|
" autoSkip: false,",
|
|
" maxRotation: 45,",
|
|
" minRotation: 45",
|
|
" }",
|
|
" }],",
|
|
" yAxes: [{",
|
|
" display: true,",
|
|
" scaleLabel: {",
|
|
" display: true,",
|
|
" labelString: \"Win Shares\"",
|
|
" },",
|
|
" ticks: {",
|
|
" beginAtZero: true",
|
|
" }",
|
|
" }]",
|
|
" }",
|
|
" }",
|
|
" });",
|
|
"",
|
|
" pm.getData(function (err, value) {",
|
|
" winSharesChart.data.labels = value.playerNames;",
|
|
" winSharesChart.data.datasets[0].data = value.winShares;",
|
|
" winSharesChart.update();",
|
|
" });",
|
|
"</script>",
|
|
"`;",
|
|
"",
|
|
"function constructVisualizerPayload() {",
|
|
" var response = pm.response.json();",
|
|
" var players = response.data || [];",
|
|
" ",
|
|
" // Sort by winShares descending and take top players",
|
|
" var sortedPlayers = players.slice().sort(function(a, b) {",
|
|
" return b.winShares - a.winShares;",
|
|
" });",
|
|
" ",
|
|
" return {",
|
|
" playerNames: sortedPlayers.map(function(player) { return player.playerName; }),",
|
|
" winShares: sortedPlayers.map(function(player) { return player.winShares; })",
|
|
" };",
|
|
"}",
|
|
"",
|
|
"pm.visualizer.set(template, constructVisualizerPayload());"
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
},
|
|
{
|
|
"listen": "prerequest",
|
|
"script": {
|
|
"exec": [
|
|
""
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playeradvancedstats?season=2026&team=HOU&page=1&pageSize=15&ascending=false&isPlayoff=false",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playeradvancedstats"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "season",
|
|
"value": "2026",
|
|
"description": "(Optional) The NBA season year (e.g., 2025 for the 2024-25 season)."
|
|
},
|
|
{
|
|
"key": "team",
|
|
"value": "HOU",
|
|
"description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL)."
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1."
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "15",
|
|
"description": "(Optional) The number of results to return per page. Defaults to 20."
|
|
},
|
|
{
|
|
"key": "sortBy",
|
|
"value": "vorp",
|
|
"description": "(Optional) The field to sort the results by. Defaults to 'winShares'.",
|
|
"disabled": true
|
|
},
|
|
{
|
|
"key": "ascending",
|
|
"value": "false",
|
|
"description": "(Optional) If true, sorts the results in ascending order. Defaults to false (descending)."
|
|
},
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "false",
|
|
"description": "(Optional) Set to 'true' to retrieve playoff stats, or 'false' for regular season stats."
|
|
}
|
|
]
|
|
},
|
|
"description": "### Get Player Advanced Stats\n\nReturns a paginated and filterable list of advanced player statistics for a given season. You can retrieve either regular season or playoff data.\n\n### Usage\n\nThis endpoint supports filtering by `season`, `team`, and `playerId`. Results can be paginated using `page` and `pageSize`, and sorted using `sortBy` and `ascending`.\n\n#### **Query Parameters**\n\n* **`season`** (integer, optional): The season year (e.g., 2025).\n* **`team`** (string, optional): Team abbreviation (e.g., MIL).\n* **`playerId`** (string, optional): The player's unique ID (e.g., `greenaj01`).\n* **`page`** (integer, optional): Page number. Defaults to `1`.\n* **`pageSize`** (integer, optional): Number of results per page. Defaults to `20`.\n* **`isPlayoff`** (boolean, optional): Set to `true` for playoff stats, `false` for regular season. The filter is only applied if the parameter is provided.\n* **`sortBy`** (string, optional): Field to sort by. Defaults to `winShares`.\n* **`ascending`** (boolean, optional): Use `true` for ascending order. Defaults to `false`.\n\n#### **Available `sortBy` Fields:**\n`playerId`, `playerName`, `position`, `age`, `games`, `minutesPlayed`, `per`, `tsPercent`, `threePAR`, `ftr`, `offensiveRBPercent`, `defensiveRBPercent`, `totalRBPercent`, `assistPercent`, `stealPercent`, `blockPercent`, `turnoverPercent`, `usagePercent`, `offensiveWS`, `defensiveWS`, `winShares`, `winSharesPer`, `offensiveBox`, `defensiveBox`, `box`, `vorp`, `team`, `season`"
|
|
},
|
|
"response": [
|
|
{
|
|
"name": "Player Advanced Stats",
|
|
"originalRequest": {
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playeradvancedstats?season=2025&team=HOU&page=1&pageSize=35&sortBy=vorp&ascending=false&isPlayoff=false",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playeradvancedstats"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "season",
|
|
"value": "2025",
|
|
"description": "(Optional) The NBA season year (e.g., 2025 for the 2024-25 season)."
|
|
},
|
|
{
|
|
"key": "team",
|
|
"value": "HOU",
|
|
"description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL)."
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1."
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "35",
|
|
"description": "(Optional) The number of results to return per page. Defaults to 20."
|
|
},
|
|
{
|
|
"key": "sortBy",
|
|
"value": "vorp",
|
|
"description": "(Optional) The field to sort the results by. Defaults to 'winShares'."
|
|
},
|
|
{
|
|
"key": "ascending",
|
|
"value": "false",
|
|
"description": "(Optional) If true, sorts the results in ascending order. Defaults to false (descending)."
|
|
},
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "false",
|
|
"description": "(Optional) Set to 'true' to retrieve playoff stats, or 'false' for regular season stats."
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"status": "OK",
|
|
"code": 200,
|
|
"_postman_previewlanguage": null,
|
|
"header": [
|
|
{
|
|
"key": "Alt-Svc",
|
|
"value": "h3=\":443\"; ma=2592000"
|
|
},
|
|
{
|
|
"key": "Content-Encoding",
|
|
"value": "br"
|
|
},
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
},
|
|
{
|
|
"key": "Date",
|
|
"value": "Tue, 16 Dec 2025 07:39:43 GMT"
|
|
},
|
|
{
|
|
"key": "Server",
|
|
"value": "nginx/1.28.0"
|
|
},
|
|
{
|
|
"key": "Vary",
|
|
"value": "Accept-Encoding"
|
|
},
|
|
{
|
|
"key": "Content-Length",
|
|
"value": "1787"
|
|
}
|
|
],
|
|
"cookie": [],
|
|
"body": "{\n \"data\": [\n {\n \"playerId\": \"sengual01\",\n \"playerName\": \"Alperen Şengün\",\n \"position\": \"C\",\n \"age\": 22,\n \"team\": \"HOU\",\n \"games\": 76,\n \"minutesPlayed\": 2395,\n \"per\": 21.4,\n \"tsPercent\": 0.545,\n \"threePAR\": 0.079,\n \"ftr\": 0.374,\n \"offensiveRBPercent\": 11.4,\n \"defensiveRBPercent\": 23.8,\n \"totalRBPercent\": 17.5,\n \"assistPercent\": 24.1,\n \"stealPercent\": 1.7,\n \"blockPercent\": 2.3,\n \"turnoverPercent\": 12.7,\n \"usagePercent\": 26.2,\n \"offensiveWS\": 4.1,\n \"defensiveWS\": 4.2,\n \"winShares\": 8.3,\n \"winSharesPer\": 0.166,\n \"offensiveBox\": 2.6,\n \"defensiveBox\": 1.8,\n \"box\": 4.4,\n \"vorp\": 3.9,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"thompam01\",\n \"playerName\": \"Amen Thompson\",\n \"position\": \"SF\",\n \"age\": 22,\n \"team\": \"HOU\",\n \"games\": 69,\n \"minutesPlayed\": 2225,\n \"per\": 18.7,\n \"tsPercent\": 0.602,\n \"threePAR\": 0.131,\n \"ftr\": 0.354,\n \"offensiveRBPercent\": 9,\n \"defensiveRBPercent\": 18.2,\n \"totalRBPercent\": 13.5,\n \"assistPercent\": 16.9,\n \"stealPercent\": 2.1,\n \"blockPercent\": 3.6,\n \"turnoverPercent\": 14.6,\n \"usagePercent\": 17.5,\n \"offensiveWS\": 4.1,\n \"defensiveWS\": 3.9,\n \"winShares\": 8,\n \"winSharesPer\": 0.172,\n \"offensiveBox\": 1.4,\n \"defensiveBox\": 2.6,\n \"box\": 4.1,\n \"vorp\": 3.4,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"easonta01\",\n \"playerName\": \"Tari Eason\",\n \"position\": \"PF\",\n \"age\": 23,\n \"team\": \"HOU\",\n \"games\": 57,\n \"minutesPlayed\": 1420,\n \"per\": 18.5,\n \"tsPercent\": 0.567,\n \"threePAR\": 0.329,\n \"ftr\": 0.186,\n \"offensiveRBPercent\": 9.4,\n \"defensiveRBPercent\": 17.9,\n \"totalRBPercent\": 13.6,\n \"assistPercent\": 8.5,\n \"stealPercent\": 3.3,\n \"blockPercent\": 3.2,\n \"turnoverPercent\": 9.7,\n \"usagePercent\": 19.4,\n \"offensiveWS\": 2.1,\n \"defensiveWS\": 2.9,\n \"winShares\": 5,\n \"winSharesPer\": 0.169,\n \"offensiveBox\": 1,\n \"defensiveBox\": 2.6,\n \"box\": 3.6,\n \"vorp\": 2,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"greenja05\",\n \"playerName\": \"Jalen Green\",\n \"position\": \"SG\",\n \"age\": 22,\n \"team\": \"HOU\",\n \"games\": 82,\n \"minutesPlayed\": 2697,\n \"per\": 15.1,\n \"tsPercent\": 0.544,\n \"threePAR\": 0.46,\n \"ftr\": 0.234,\n \"offensiveRBPercent\": 1.7,\n \"defensiveRBPercent\": 13.4,\n \"totalRBPercent\": 7.4,\n \"assistPercent\": 16,\n \"stealPercent\": 1.3,\n \"blockPercent\": 0.9,\n \"turnoverPercent\": 11.4,\n \"usagePercent\": 27.3,\n \"offensiveWS\": 1.9,\n \"defensiveWS\": 3.2,\n \"winShares\": 5.1,\n \"winSharesPer\": 0.092,\n \"offensiveBox\": 1.1,\n \"defensiveBox\": -0.5,\n \"box\": 0.5,\n \"vorp\": 1.7,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"vanvlfr01\",\n \"playerName\": \"Fred VanVleet\",\n \"position\": \"PG\",\n \"age\": 30,\n \"team\": \"HOU\",\n \"games\": 60,\n \"minutesPlayed\": 2111,\n \"per\": 12.8,\n \"tsPercent\": 0.515,\n \"threePAR\": 0.607,\n \"ftr\": 0.181,\n \"offensiveRBPercent\": 1.6,\n \"defensiveRBPercent\": 9.7,\n \"totalRBPercent\": 5.6,\n \"assistPercent\": 21.2,\n \"stealPercent\": 2.2,\n \"blockPercent\": 1.1,\n \"turnoverPercent\": 9.6,\n \"usagePercent\": 17.7,\n \"offensiveWS\": 2.4,\n \"defensiveWS\": 2.8,\n \"winShares\": 5.2,\n \"winSharesPer\": 0.119,\n \"offensiveBox\": -0.4,\n \"defensiveBox\": 1.3,\n \"box\": 0.9,\n \"vorp\": 1.5,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"smithja05\",\n \"playerName\": \"Jabari Smith Jr.\",\n \"position\": \"PF\",\n \"age\": 21,\n \"team\": \"HOU\",\n \"games\": 57,\n \"minutesPlayed\": 1716,\n \"per\": 12.6,\n \"tsPercent\": 0.562,\n \"threePAR\": 0.489,\n \"ftr\": 0.223,\n \"offensiveRBPercent\": 6.4,\n \"defensiveRBPercent\": 18.6,\n \"totalRBPercent\": 12.4,\n \"assistPercent\": 4.7,\n \"stealPercent\": 0.7,\n \"blockPercent\": 2.1,\n \"turnoverPercent\": 8.9,\n \"usagePercent\": 16.4,\n \"offensiveWS\": 1.9,\n \"defensiveWS\": 2.2,\n \"winShares\": 4.2,\n \"winSharesPer\": 0.117,\n \"offensiveBox\": -0.8,\n \"defensiveBox\": 0.1,\n \"box\": -0.7,\n \"vorp\": 0.6,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"whitmca01\",\n \"playerName\": \"Cam Whitmore\",\n \"position\": \"SF\",\n \"age\": 20,\n \"team\": \"HOU\",\n \"games\": 51,\n \"minutesPlayed\": 827,\n \"per\": 15.5,\n \"tsPercent\": 0.549,\n \"threePAR\": 0.454,\n \"ftr\": 0.179,\n \"offensiveRBPercent\": 4.5,\n \"defensiveRBPercent\": 15.1,\n \"totalRBPercent\": 9.7,\n \"assistPercent\": 8.9,\n \"stealPercent\": 1.8,\n \"blockPercent\": 1.4,\n \"turnoverPercent\": 9.6,\n \"usagePercent\": 23.9,\n \"offensiveWS\": 0.6,\n \"defensiveWS\": 1.2,\n \"winShares\": 1.8,\n \"winSharesPer\": 0.106,\n \"offensiveBox\": 0.7,\n \"defensiveBox\": -0.4,\n \"box\": 0.3,\n \"vorp\": 0.5,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"adamsst01\",\n \"playerName\": \"Steven Adams\",\n \"position\": \"C\",\n \"age\": 31,\n \"team\": \"HOU\",\n \"games\": 58,\n \"minutesPlayed\": 794,\n \"per\": 16.6,\n \"tsPercent\": 0.541,\n \"threePAR\": 0.012,\n \"ftr\": 0.557,\n \"offensiveRBPercent\": 21.8,\n \"defensiveRBPercent\": 22,\n \"totalRBPercent\": 21.9,\n \"assistPercent\": 10.9,\n \"stealPercent\": 1.3,\n \"blockPercent\": 3.2,\n \"turnoverPercent\": 20.6,\n \"usagePercent\": 13.6,\n \"offensiveWS\": 1,\n \"defensiveWS\": 1.3,\n \"winShares\": 2.3,\n \"winSharesPer\": 0.137,\n \"offensiveBox\": 0,\n \"defensiveBox\": 0.3,\n \"box\": 0.3,\n \"vorp\": 0.5,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"brookdi01\",\n \"playerName\": \"Dillon Brooks\",\n \"position\": \"SF\",\n \"age\": 29,\n \"team\": \"HOU\",\n \"games\": 75,\n \"minutesPlayed\": 2388,\n \"per\": 11,\n \"tsPercent\": 0.555,\n \"threePAR\": 0.524,\n \"ftr\": 0.135,\n \"offensiveRBPercent\": 3.3,\n \"defensiveRBPercent\": 9.1,\n \"totalRBPercent\": 6.1,\n \"assistPercent\": 7.4,\n \"stealPercent\": 1.2,\n \"blockPercent\": 0.6,\n \"turnoverPercent\": 7.4,\n \"usagePercent\": 17.7,\n \"offensiveWS\": 2.7,\n \"defensiveWS\": 2.5,\n \"winShares\": 5.1,\n \"winSharesPer\": 0.103,\n \"offensiveBox\": -1.4,\n \"defensiveBox\": 0,\n \"box\": -1.4,\n \"vorp\": 0.4,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"holidaa01\",\n \"playerName\": \"Aaron Holiday\",\n \"position\": \"PG\",\n \"age\": 28,\n \"team\": \"HOU\",\n \"games\": 62,\n \"minutesPlayed\": 792,\n \"per\": 12.2,\n \"tsPercent\": 0.594,\n \"threePAR\": 0.675,\n \"ftr\": 0.153,\n \"offensiveRBPercent\": 1.7,\n \"defensiveRBPercent\": 8.9,\n \"totalRBPercent\": 5.2,\n \"assistPercent\": 14.3,\n \"stealPercent\": 1.2,\n \"blockPercent\": 1.2,\n \"turnoverPercent\": 11.5,\n \"usagePercent\": 16.8,\n \"offensiveWS\": 1.2,\n \"defensiveWS\": 0.8,\n \"winShares\": 2,\n \"winSharesPer\": 0.122,\n \"offensiveBox\": -0.4,\n \"defensiveBox\": 0.1,\n \"box\": -0.2,\n \"vorp\": 0.3,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"landajo01\",\n \"playerName\": \"Jock Landale\",\n \"position\": \"C\",\n \"age\": 29,\n \"team\": \"HOU\",\n \"games\": 42,\n \"minutesPlayed\": 500,\n \"per\": 16,\n \"tsPercent\": 0.59,\n \"threePAR\": 0.171,\n \"ftr\": 0.263,\n \"offensiveRBPercent\": 11.7,\n \"defensiveRBPercent\": 17.6,\n \"totalRBPercent\": 14.6,\n \"assistPercent\": 10.3,\n \"stealPercent\": 1.3,\n \"blockPercent\": 1.8,\n \"turnoverPercent\": 11,\n \"usagePercent\": 15.7,\n \"offensiveWS\": 1,\n \"defensiveWS\": 0.7,\n \"winShares\": 1.7,\n \"winSharesPer\": 0.159,\n \"offensiveBox\": 0,\n \"defensiveBox\": 0.4,\n \"box\": 0.4,\n \"vorp\": 0.3,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"tateja01\",\n \"playerName\": \"Jae'Sean Tate\",\n \"position\": \"SF\",\n \"age\": 29,\n \"team\": \"HOU\",\n \"games\": 52,\n \"minutesPlayed\": 588,\n \"per\": 12.3,\n \"tsPercent\": 0.557,\n \"threePAR\": 0.311,\n \"ftr\": 0.318,\n \"offensiveRBPercent\": 8.9,\n \"defensiveRBPercent\": 12.4,\n \"totalRBPercent\": 10.6,\n \"assistPercent\": 10.5,\n \"stealPercent\": 2.2,\n \"blockPercent\": 1.1,\n \"turnoverPercent\": 11.5,\n \"usagePercent\": 13.3,\n \"offensiveWS\": 0.8,\n \"defensiveWS\": 0.8,\n \"winShares\": 1.6,\n \"winSharesPer\": 0.133,\n \"offensiveBox\": -2.1,\n \"defensiveBox\": 1.4,\n \"box\": -0.7,\n \"vorp\": 0.2,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"greenje02\",\n \"playerName\": \"Jeff Green\",\n \"position\": \"PF\",\n \"age\": 38,\n \"team\": \"HOU\",\n \"games\": 32,\n \"minutesPlayed\": 396,\n \"per\": 13.6,\n \"tsPercent\": 0.649,\n \"threePAR\": 0.653,\n \"ftr\": 0.215,\n \"offensiveRBPercent\": 2.9,\n \"defensiveRBPercent\": 12.9,\n \"totalRBPercent\": 7.8,\n \"assistPercent\": 7,\n \"stealPercent\": 0.7,\n \"blockPercent\": 0.9,\n \"turnoverPercent\": 6.4,\n \"usagePercent\": 14.7,\n \"offensiveWS\": 0.9,\n \"defensiveWS\": 0.4,\n \"winShares\": 1.3,\n \"winSharesPer\": 0.159,\n \"offensiveBox\": 0.3,\n \"defensiveBox\": 0,\n \"box\": 0.4,\n \"vorp\": 0.2,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"sheppre01\",\n \"playerName\": \"Reed Sheppard\",\n \"position\": \"PG\",\n \"age\": 20,\n \"team\": \"HOU\",\n \"games\": 52,\n \"minutesPlayed\": 654,\n \"per\": 9.7,\n \"tsPercent\": 0.465,\n \"threePAR\": 0.594,\n \"ftr\": 0.067,\n \"offensiveRBPercent\": 2.6,\n \"defensiveRBPercent\": 10.3,\n \"totalRBPercent\": 6.4,\n \"assistPercent\": 15.2,\n \"stealPercent\": 2.6,\n \"blockPercent\": 2.3,\n \"turnoverPercent\": 13.1,\n \"usagePercent\": 17.8,\n \"offensiveWS\": -0.3,\n \"defensiveWS\": 1,\n \"winShares\": 0.8,\n \"winSharesPer\": 0.055,\n \"offensiveBox\": -3,\n \"defensiveBox\": 1.3,\n \"box\": -1.7,\n \"vorp\": 0.1,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"nfalyda01\",\n \"playerName\": \"N'Faly Dante\",\n \"position\": \"C\",\n \"age\": 23,\n \"team\": \"HOU\",\n \"games\": 4,\n \"minutesPlayed\": 51,\n \"per\": 24,\n \"tsPercent\": 0.789,\n \"threePAR\": 0,\n \"ftr\": 0.385,\n \"offensiveRBPercent\": 12.3,\n \"defensiveRBPercent\": 32,\n \"totalRBPercent\": 21.9,\n \"assistPercent\": 5.7,\n \"stealPercent\": 1,\n \"blockPercent\": 8.8,\n \"turnoverPercent\": 11.6,\n \"usagePercent\": 13.9,\n \"offensiveWS\": 0.2,\n \"defensiveWS\": 0.1,\n \"winShares\": 0.3,\n \"winSharesPer\": 0.283,\n \"offensiveBox\": 0.7,\n \"defensiveBox\": 1.7,\n \"box\": 2.4,\n \"vorp\": 0.1,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"willije02\",\n \"playerName\": \"Jeenathan Williams\",\n \"position\": \"SG\",\n \"age\": 25,\n \"team\": \"HOU\",\n \"games\": 20,\n \"minutesPlayed\": 147,\n \"per\": 8.6,\n \"tsPercent\": 0.496,\n \"threePAR\": 0.419,\n \"ftr\": 0.129,\n \"offensiveRBPercent\": 3.6,\n \"defensiveRBPercent\": 5.9,\n \"totalRBPercent\": 4.7,\n \"assistPercent\": 8.8,\n \"stealPercent\": 2.6,\n \"blockPercent\": 2.4,\n \"turnoverPercent\": 17.6,\n \"usagePercent\": 22.3,\n \"offensiveWS\": -0.2,\n \"defensiveWS\": 0.2,\n \"winShares\": 0,\n \"winSharesPer\": -0.007,\n \"offensiveBox\": -5.5,\n \"defensiveBox\": -0.2,\n \"box\": -5.7,\n \"vorp\": -0.1,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"mcveija01\",\n \"playerName\": \"Jack McVeigh\",\n \"position\": \"PF\",\n \"age\": 28,\n \"team\": \"HOU\",\n \"games\": 9,\n \"minutesPlayed\": 43,\n \"per\": 4,\n \"tsPercent\": 0.412,\n \"threePAR\": 0.765,\n \"ftr\": 0,\n \"offensiveRBPercent\": 4.9,\n \"defensiveRBPercent\": 7.6,\n \"totalRBPercent\": 6.2,\n \"assistPercent\": 3,\n \"stealPercent\": 0,\n \"blockPercent\": 4.2,\n \"turnoverPercent\": 10.5,\n \"usagePercent\": 18.2,\n \"offensiveWS\": -0.1,\n \"defensiveWS\": 0,\n \"winShares\": 0,\n \"winSharesPer\": -0.031,\n \"offensiveBox\": -4.8,\n \"defensiveBox\": -3,\n \"box\": -7.7,\n \"vorp\": -0.1,\n \"season\": 2025,\n \"isPlayoff\": false\n },\n {\n \"playerId\": \"roddyda01\",\n \"playerName\": \"David Roddy\",\n \"position\": \"PF\",\n \"age\": 23,\n \"team\": \"HOU\",\n \"games\": 3,\n \"minutesPlayed\": 35,\n \"per\": 7.2,\n \"tsPercent\": 0.44,\n \"threePAR\": 0.538,\n \"ftr\": 0.308,\n \"offensiveRBPercent\": 0,\n \"defensiveRBPercent\": 15.5,\n \"totalRBPercent\": 7.6,\n \"assistPercent\": 7.7,\n \"stealPercent\": 0,\n \"blockPercent\": 2.6,\n \"turnoverPercent\": 6.3,\n \"usagePercent\": 18.5,\n \"offensiveWS\": 0,\n \"defensiveWS\": 0,\n \"winShares\": 0,\n \"winSharesPer\": 0.007,\n \"offensiveBox\": -5.1,\n \"defensiveBox\": -3.2,\n \"box\": -8.3,\n \"vorp\": -0.1,\n \"season\": 2025,\n \"isPlayoff\": false\n }\n ],\n \"pagination\": {\n \"total\": 18,\n \"page\": 1,\n \"pageSize\": 35,\n \"pages\": 1\n }\n}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Player Advanced Playoff Stats",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"// Visualization Script",
|
|
"// Visualization Script",
|
|
"var template = `",
|
|
"<h2 style=\"text-align: center; font-family: Arial, sans-serif; color: #333;\">Player Advanced Playoff Stats - Win Shares Comparison</h2>",
|
|
"<canvas id=\"playerChart\" height=\"100\"></canvas>",
|
|
"<script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js\"></script>",
|
|
"<script>",
|
|
" var ctx = document.getElementById(\"playerChart\");",
|
|
" var myChart = new Chart(ctx, {",
|
|
" type: \"bar\",",
|
|
" data: {",
|
|
" labels: [],",
|
|
" datasets: [",
|
|
" {",
|
|
" label: 'Win Shares',",
|
|
" backgroundColor: 'rgba(54, 162, 235, 0.7)',",
|
|
" borderColor: 'rgba(54, 162, 235, 1)',",
|
|
" borderWidth: 1,",
|
|
" data: []",
|
|
" },",
|
|
" {",
|
|
" label: 'PER',",
|
|
" backgroundColor: 'rgba(255, 99, 132, 0.7)',",
|
|
" borderColor: 'rgba(255, 99, 132, 1)',",
|
|
" borderWidth: 1,",
|
|
" data: []",
|
|
" },",
|
|
" {",
|
|
" label: 'Box +/-',",
|
|
" backgroundColor: 'rgba(75, 192, 192, 0.7)',",
|
|
" borderColor: 'rgba(75, 192, 192, 1)',",
|
|
" borderWidth: 1,",
|
|
" data: []",
|
|
" }",
|
|
" ]",
|
|
" },",
|
|
" options: {",
|
|
" responsive: true,",
|
|
" legend: { ",
|
|
" display: true,",
|
|
" position: 'top'",
|
|
" },",
|
|
" title: {",
|
|
" display: true,",
|
|
" text: '2025 Playoff Advanced Stats by Player'",
|
|
" },",
|
|
" scales: {",
|
|
" xAxes: [{",
|
|
" display: true,",
|
|
" scaleLabel: {",
|
|
" display: true,",
|
|
" labelString: 'Player'",
|
|
" },",
|
|
" ticks: {",
|
|
" autoSkip: false,",
|
|
" maxRotation: 45,",
|
|
" minRotation: 45",
|
|
" }",
|
|
" }],",
|
|
" yAxes: [{",
|
|
" display: true,",
|
|
" scaleLabel: {",
|
|
" display: true,",
|
|
" labelString: 'Value'",
|
|
" },",
|
|
" ticks: {",
|
|
" beginAtZero: true",
|
|
" }",
|
|
" }]",
|
|
" },",
|
|
" tooltips: {",
|
|
" mode: 'index',",
|
|
" intersect: false",
|
|
" }",
|
|
" }",
|
|
" });",
|
|
"",
|
|
" pm.getData(function (err, value) {",
|
|
" myChart.data.labels = value.players.map(function(p) { return p.name; });",
|
|
" myChart.data.datasets[0].data = value.players.map(function(p) { return p.winShares; });",
|
|
" myChart.data.datasets[1].data = value.players.map(function(p) { return p.per; });",
|
|
" myChart.data.datasets[2].data = value.players.map(function(p) { return p.box; });",
|
|
" myChart.update();",
|
|
" });",
|
|
"</script>",
|
|
"`;",
|
|
"",
|
|
"function createPayload() {",
|
|
" var response = pm.response.json();",
|
|
" var data = response.data || [];",
|
|
" ",
|
|
" // Sort players by win shares descending for better visualization",
|
|
" var sortedPlayers = data.slice().sort(function(a, b) {",
|
|
" return b.winShares - a.winShares;",
|
|
" });",
|
|
" ",
|
|
" var players = sortedPlayers.map(function(player) {",
|
|
" // Get last name for shorter labels",
|
|
" var nameParts = player.playerName.split(' ');",
|
|
" var shortName = nameParts.length > 1 ? nameParts[nameParts.length - 1] : player.playerName;",
|
|
" ",
|
|
" return {",
|
|
" name: shortName,",
|
|
" fullName: player.playerName,",
|
|
" winShares: player.winShares || 0,",
|
|
" per: player.per || 0,",
|
|
" box: player.box || 0,",
|
|
" vorp: player.vorp || 0,",
|
|
" team: player.team || 'N/A',",
|
|
" position: player.position || 'N/A'",
|
|
" };",
|
|
" });",
|
|
" ",
|
|
" return { players: players };",
|
|
"}",
|
|
"",
|
|
"pm.visualizer.set(template, createPayload());"
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
},
|
|
{
|
|
"listen": "prerequest",
|
|
"script": {
|
|
"exec": [
|
|
""
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playeradvancedstats?season=2025&team=HOU&page=1&pageSize=4&sortBy=defensiveBox&ascending=false&isPlayoff=true",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playeradvancedstats"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "season",
|
|
"value": "2025",
|
|
"description": "(Optional) The NBA season year (e.g., 2025 for the 2024-25 season)."
|
|
},
|
|
{
|
|
"key": "team",
|
|
"value": "HOU",
|
|
"description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL)."
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1."
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "4",
|
|
"description": "(Optional) The number of results to return per page. Defaults to 20."
|
|
},
|
|
{
|
|
"key": "sortBy",
|
|
"value": "defensiveBox",
|
|
"description": "(Optional) The field to sort the results by. Defaults to 'winShares'."
|
|
},
|
|
{
|
|
"key": "ascending",
|
|
"value": "false",
|
|
"description": "(Optional) If true, sorts the results in ascending order. Defaults to false (descending)."
|
|
},
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "true",
|
|
"description": "(Optional) Set to 'true' to retrieve playoff stats, or 'false' for regular season stats."
|
|
}
|
|
]
|
|
},
|
|
"description": "### Get Player Advanced Stats (Playoffs)\n\nReturns a paginated and filterable list of advanced player statistics for the playoffs. This is an example request that sets `isPlayoff=true`.\n\n### Usage\n\nThis endpoint supports filtering by `season`, `team`, and `playerId`. Results can be paginated using `page` and `pageSize`, and sorted using `sortBy` and `ascending`.\n\n#### **Query Parameters**\n\n* **`season`** (integer, optional): The season year (e.g., 2025).\n* **`team`** (string, optional): Team abbreviation (e.g., MIL).\n* **`playerId`** (string, optional): The player's unique ID (e.g., `greenaj01`).\n* **`page`** (integer, optional): Page number. Defaults to `1`.\n* **`pageSize`** (integer, optional): Number of results per page. Defaults to `20`.\n* **`isPlayoff`** (boolean, optional): Set to `true` for playoff stats, `false` for regular season. The filter is only applied if the parameter is provided.\n* **`sortBy`** (string, optional): Field to sort by. Defaults to `winShares`.\n* **`ascending`** (boolean, optional): Use `true` for ascending order. Defaults to `false`.\n\n#### **Available `sortBy` Fields:**\n`playerId`, `playerName`, `position`, `age`, `games`, `minutesPlayed`, `per`, `tsPercent`, `threePAR`, `ftr`, `offensiveRBPercent`, `defensiveRBPercent`, `totalRBPercent`, `assistPercent`, `stealPercent`, `blockPercent`, `turnoverPercent`, `usagePercent`, `offensiveWS`, `defensiveWS`, `winShares`, `winSharesPer`, `offensiveBox`, `defensiveBox`, `box`, `vorp`, `team`, `season`"
|
|
},
|
|
"response": [
|
|
{
|
|
"name": "Player Advanced Playoff Stats",
|
|
"originalRequest": {
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playeradvancedstats?season=2025&team=HOU&page=1&pageSize=4&sortBy=defensiveBox&ascending=false&isPlayoff=true",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playeradvancedstats"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "season",
|
|
"value": "2025",
|
|
"description": "(Optional) The NBA season year (e.g., 2025 for the 2024-25 season)."
|
|
},
|
|
{
|
|
"key": "team",
|
|
"value": "HOU",
|
|
"description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL)."
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1."
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "4",
|
|
"description": "(Optional) The number of results to return per page. Defaults to 20."
|
|
},
|
|
{
|
|
"key": "sortBy",
|
|
"value": "defensiveBox",
|
|
"description": "(Optional) The field to sort the results by. Defaults to 'winShares'."
|
|
},
|
|
{
|
|
"key": "ascending",
|
|
"value": "false",
|
|
"description": "(Optional) If true, sorts the results in ascending order. Defaults to false (descending)."
|
|
},
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "true",
|
|
"description": "(Optional) Set to 'true' to retrieve playoff stats, or 'false' for regular season stats."
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"status": "OK",
|
|
"code": 200,
|
|
"_postman_previewlanguage": null,
|
|
"header": [
|
|
{
|
|
"key": "Alt-Svc",
|
|
"value": "h3=\":443\"; ma=2592000"
|
|
},
|
|
{
|
|
"key": "Content-Encoding",
|
|
"value": "br"
|
|
},
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
},
|
|
{
|
|
"key": "Date",
|
|
"value": "Tue, 16 Dec 2025 07:38:58 GMT"
|
|
},
|
|
{
|
|
"key": "Server",
|
|
"value": "nginx/1.28.0"
|
|
},
|
|
{
|
|
"key": "Vary",
|
|
"value": "Accept-Encoding"
|
|
},
|
|
{
|
|
"key": "Content-Length",
|
|
"value": "611"
|
|
}
|
|
],
|
|
"cookie": [],
|
|
"body": "{\n \"data\": [\n {\n \"playerId\": \"sheppre01\",\n \"playerName\": \"Reed Sheppard\",\n \"position\": \"PG\",\n \"age\": 20,\n \"team\": \"HOU\",\n \"games\": 3,\n \"minutesPlayed\": 10,\n \"per\": 4.3,\n \"tsPercent\": 0,\n \"threePAR\": 1,\n \"ftr\": 0,\n \"offensiveRBPercent\": 0,\n \"defensiveRBPercent\": 10.9,\n \"totalRBPercent\": 5.6,\n \"assistPercent\": 13.1,\n \"stealPercent\": 10.3,\n \"blockPercent\": 11,\n \"turnoverPercent\": 33.3,\n \"usagePercent\": 13.3,\n \"offensiveWS\": -0.1,\n \"defensiveWS\": 0,\n \"winShares\": 0,\n \"winSharesPer\": -0.116,\n \"offensiveBox\": -7.8,\n \"defensiveBox\": 9.1,\n \"box\": 1.3,\n \"vorp\": 0,\n \"season\": 2025,\n \"isPlayoff\": true\n },\n {\n \"playerId\": \"easonta01\",\n \"playerName\": \"Tari Eason\",\n \"position\": \"PF\",\n \"age\": 23,\n \"team\": \"HOU\",\n \"games\": 7,\n \"minutesPlayed\": 132,\n \"per\": 14.7,\n \"tsPercent\": 0.558,\n \"threePAR\": 0.432,\n \"ftr\": 0.182,\n \"offensiveRBPercent\": 6,\n \"defensiveRBPercent\": 19.1,\n \"totalRBPercent\": 12.6,\n \"assistPercent\": 6.3,\n \"stealPercent\": 3.1,\n \"blockPercent\": 5.8,\n \"turnoverPercent\": 17.4,\n \"usagePercent\": 19.3,\n \"offensiveWS\": 0,\n \"defensiveWS\": 0.2,\n \"winShares\": 0.2,\n \"winSharesPer\": 0.078,\n \"offensiveBox\": -0.8,\n \"defensiveBox\": 3.1,\n \"box\": 2.3,\n \"vorp\": 0.1,\n \"season\": 2025,\n \"isPlayoff\": true\n },\n {\n \"playerId\": \"sengual01\",\n \"playerName\": \"Alperen Şengün\",\n \"position\": \"C\",\n \"age\": 22,\n \"team\": \"HOU\",\n \"games\": 7,\n \"minutesPlayed\": 256,\n \"per\": 20.8,\n \"tsPercent\": 0.491,\n \"threePAR\": 0.061,\n \"ftr\": 0.305,\n \"offensiveRBPercent\": 9.2,\n \"defensiveRBPercent\": 26.5,\n \"totalRBPercent\": 18,\n \"assistPercent\": 27,\n \"stealPercent\": 2.6,\n \"blockPercent\": 1.3,\n \"turnoverPercent\": 9.2,\n \"usagePercent\": 28.3,\n \"offensiveWS\": 0.3,\n \"defensiveWS\": 0.4,\n \"winShares\": 0.7,\n \"winSharesPer\": 0.139,\n \"offensiveBox\": 2.3,\n \"defensiveBox\": 2.4,\n \"box\": 4.7,\n \"vorp\": 0.4,\n \"season\": 2025,\n \"isPlayoff\": true\n },\n {\n \"playerId\": \"thompam01\",\n \"playerName\": \"Amen Thompson\",\n \"position\": \"SF\",\n \"age\": 22,\n \"team\": \"HOU\",\n \"games\": 7,\n \"minutesPlayed\": 231,\n \"per\": 19.3,\n \"tsPercent\": 0.545,\n \"threePAR\": 0.047,\n \"ftr\": 0.424,\n \"offensiveRBPercent\": 9.3,\n \"defensiveRBPercent\": 13.7,\n \"totalRBPercent\": 11.5,\n \"assistPercent\": 17.1,\n \"stealPercent\": 2.7,\n \"blockPercent\": 2.9,\n \"turnoverPercent\": 10.6,\n \"usagePercent\": 21.6,\n \"offensiveWS\": 0.4,\n \"defensiveWS\": 0.3,\n \"winShares\": 0.7,\n \"winSharesPer\": 0.148,\n \"offensiveBox\": 1.5,\n \"defensiveBox\": 2.2,\n \"box\": 3.7,\n \"vorp\": 0.3,\n \"season\": 2025,\n \"isPlayoff\": true\n }\n ],\n \"pagination\": {\n \"total\": 14,\n \"page\": 1,\n \"pageSize\": 4,\n \"pages\": 4\n }\n}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Shot Chart",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"// Test to check if the response time is less than 200ms",
|
|
"pm.test(\"Response time is less than 200ms\", function () {",
|
|
" pm.expect(pm.response.responseTime).to.be.below(200);",
|
|
"});",
|
|
"",
|
|
"pm.test(\"Response status code is 200\", function () {",
|
|
" pm.expect(pm.response.code).to.eql(200);",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Response is an array with at least one element\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('array').that.is.not.empty;",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Validate the schema of the objects in the array\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
"",
|
|
" pm.expect(responseData).to.be.an('array').that.is.not.empty;",
|
|
"",
|
|
" responseData.forEach(function(item) {",
|
|
" pm.expect(item).to.be.an('object');",
|
|
" pm.expect(item).to.have.all.keys('id', 'playerId', 'season', 'date', 'qtr', 'timeRemaining', 'top', 'left', 'playerName', 'result', 'shotType', 'distanceFt', 'lead', 'teamScore', 'opponentTeamScore', 'opponent', 'team', 'ID', 'CreatedAt', 'UpdatedAt', 'DeletedAt');",
|
|
" ",
|
|
" pm.expect(item.id).to.be.a('number');",
|
|
" pm.expect(item.playerId).to.be.a('string');",
|
|
" pm.expect(item.season).to.be.a('number');",
|
|
" pm.expect(item.date).to.be.a('string');",
|
|
" pm.expect(item.qtr).to.be.a('string');",
|
|
" pm.expect(item.timeRemaining).to.be.a('string');",
|
|
" pm.expect(item.top).to.be.a('number');",
|
|
" pm.expect(item.left).to.be.a('number');",
|
|
" pm.expect(item.playerName).to.be.a('string');",
|
|
" pm.expect(item.result).to.be.a('boolean');",
|
|
" pm.expect(item.shotType).to.be.a('string');",
|
|
" pm.expect(item.distanceFt).to.be.a('number');",
|
|
" pm.expect(item.lead).to.be.a('boolean');",
|
|
" pm.expect(item.teamScore).to.be.a('number');",
|
|
" pm.expect(item.opponentTeamScore).to.be.a('number');",
|
|
" pm.expect(item.opponent).to.be.a('string');",
|
|
" pm.expect(item.team).to.be.a('string');",
|
|
" pm.expect(item.ID).to.be.a('number');",
|
|
" pm.expect(item.CreatedAt).to.be.a('string');",
|
|
" pm.expect(item.UpdatedAt).to.be.a('string');",
|
|
" pm.expect(item.DeletedAt).to.satisfy(val => val === null || typeof val === 'object');",
|
|
" });",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Player ID is a non-empty string\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('array').that.is.not.empty;",
|
|
" responseData.forEach(function(item) {",
|
|
" pm.expect(item.playerId).to.exist.and.to.be.a('string').and.to.have.lengthOf.at.least(1, \"Player ID should not be empty\");",
|
|
" });",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Season is a positive integer\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('array').that.is.not.empty;",
|
|
" responseData.forEach(function(item) {",
|
|
" pm.expect(item.season).to.be.a('number').and.to.be.above(0);",
|
|
" });",
|
|
"});",
|
|
"",
|
|
""
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {}
|
|
}
|
|
},
|
|
{
|
|
"listen": "prerequest",
|
|
"script": {
|
|
"exec": [
|
|
""
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {}
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playershotchart?page=1&playerId=hardeja01&date=Dec%2017%2C2018",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playershotchart"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1. Each page returns a maximum of 50 results."
|
|
},
|
|
{
|
|
"key": "playerId",
|
|
"value": "hardeja01",
|
|
"description": "(Optional) The unique ID for the player (e.g., hardeja01)."
|
|
},
|
|
{
|
|
"key": "date",
|
|
"value": "Dec%2017%2C2018",
|
|
"description": "(Optional) The date of the game (e.g., 'Dec 17, 2018')."
|
|
},
|
|
{
|
|
"key": "season",
|
|
"value": "2024",
|
|
"description": "(Optional) The season year (e.g., 2024 for the 2023-24 season).",
|
|
"disabled": true
|
|
}
|
|
]
|
|
},
|
|
"description": "### Get Player Shot Chart Data\n\nReturns a paginated list of shot chart data points for a player. The data can be filtered by a variety of parameters to narrow down the results.\n\n### Usage\n\nThis endpoint is ideal for visualizing player shooting performance. You can filter by a specific player, season, game date, quarter, and more.\n\n**Note:** Pagination is available via the `page` parameter, but the number of results per page is fixed at **50**.\n\n#### **Query Parameters**\n\n* **`page`** (integer, optional): The page number for pagination. Defaults to `1`.\n* **`playerId`** (string, optional): The player's unique ID (e.g., `hardeja01`).\n* **`season`** (integer, optional): The season year (e.g., `2023`).\n* **`date`** (string, optional): The specific game date (e.g., `Oct 17, 2018`).\n* **`qtr`** (string, optional): The quarter of the game (e.g., `1st Qtr`).\n* **`result`** (boolean, optional): Filter by shot outcome (`true` for made shots, `false` for missed).\n* **`shot_type`** (string, optional): The type of shot (e.g., `2-pointer`, `3-pointer`).\n* **`opponent`** (string, optional): The three-letter abbreviation for the opponent team (e.g., `NOP`)."
|
|
},
|
|
"response": [
|
|
{
|
|
"name": "Shot Chart",
|
|
"originalRequest": {
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playershotchart?page=1&playerId=hardeja01&date=Dec%2017%2C2018",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playershotchart"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1. Each page returns a maximum of 50 results."
|
|
},
|
|
{
|
|
"key": "playerId",
|
|
"value": "hardeja01",
|
|
"description": "(Optional) The unique ID for the player (e.g., hardeja01)."
|
|
},
|
|
{
|
|
"key": "date",
|
|
"value": "Dec%2017%2C2018",
|
|
"description": "(Optional) The date of the game (e.g., 'Dec 17, 2018')."
|
|
},
|
|
{
|
|
"key": "season",
|
|
"value": "2024",
|
|
"description": "(Optional) The season year (e.g., 2024 for the 2023-24 season).",
|
|
"disabled": true
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"status": "OK",
|
|
"code": 200,
|
|
"_postman_previewlanguage": "json",
|
|
"header": [
|
|
{
|
|
"key": "Alt-Svc",
|
|
"value": "h3=\":443\"; ma=2592000"
|
|
},
|
|
{
|
|
"key": "Content-Encoding",
|
|
"value": "br"
|
|
},
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
},
|
|
{
|
|
"key": "Date",
|
|
"value": "Wed, 02 Jul 2025 01:18:59 GMT"
|
|
},
|
|
{
|
|
"key": "Server",
|
|
"value": "nginx/1.28.0"
|
|
},
|
|
{
|
|
"key": "Vary",
|
|
"value": "Accept-Encoding"
|
|
},
|
|
{
|
|
"key": "Content-Length",
|
|
"value": "813"
|
|
}
|
|
],
|
|
"cookie": [],
|
|
"body": "[\n {\n \"id\": 510,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"11:09\",\n \"top\": 305,\n \"left\": 161,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 26,\n \"lead\": true,\n \"teamScore\": 3,\n \"opponentTeamScore\": 0,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 511,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"8:27\",\n \"top\": 130,\n \"left\": 291,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 9,\n \"lead\": true,\n \"teamScore\": 8,\n \"opponentTeamScore\": 4,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 512,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"7:54\",\n \"top\": 130,\n \"left\": 263,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 8,\n \"lead\": true,\n \"teamScore\": 10,\n \"opponentTeamScore\": 6,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 513,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"5:45\",\n \"top\": 218,\n \"left\": 53,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": true,\n \"teamScore\": 16,\n \"opponentTeamScore\": 12,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 514,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"4:25\",\n \"top\": 323,\n \"left\": 202,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 16,\n \"opponentTeamScore\": 15,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 515,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"4:18\",\n \"top\": 68,\n \"left\": 220,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 3,\n \"lead\": true,\n \"teamScore\": 18,\n \"opponentTeamScore\": 15,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 516,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"3:50\",\n \"top\": 269,\n \"left\": 362,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": true,\n \"teamScore\": 18,\n \"opponentTeamScore\": 17,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 517,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"3:15\",\n \"top\": 64,\n \"left\": 233,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 1,\n \"lead\": true,\n \"teamScore\": 20,\n \"opponentTeamScore\": 19,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 518,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"2:42\",\n \"top\": 56,\n \"left\": 232,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 1,\n \"lead\": true,\n \"teamScore\": 22,\n \"opponentTeamScore\": 19,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 519,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"8:05\",\n \"top\": 59,\n \"left\": 222,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 2,\n \"lead\": true,\n \"teamScore\": 32,\n \"opponentTeamScore\": 23,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 520,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"5:37\",\n \"top\": 68,\n \"left\": 218,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 3,\n \"lead\": true,\n \"teamScore\": 37,\n \"opponentTeamScore\": 30,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 521,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"3:44\",\n \"top\": 77,\n \"left\": 226,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 3,\n \"lead\": true,\n \"teamScore\": 44,\n \"opponentTeamScore\": 32,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 522,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"0:48\",\n \"top\": 164,\n \"left\": 217,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 11,\n \"lead\": true,\n \"teamScore\": 50,\n \"opponentTeamScore\": 35,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 523,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"11:22\",\n \"top\": 66,\n \"left\": 243,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 1,\n \"lead\": true,\n \"teamScore\": 52,\n \"opponentTeamScore\": 40,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 524,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"9:30\",\n \"top\": 149,\n \"left\": 242,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 10,\n \"lead\": true,\n \"teamScore\": 52,\n \"opponentTeamScore\": 45,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 525,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"6:26\",\n \"top\": 62,\n \"left\": 246,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 1,\n \"lead\": true,\n \"teamScore\": 59,\n \"opponentTeamScore\": 58,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 526,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"5:59\",\n \"top\": 64,\n \"left\": 232,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 1,\n \"lead\": true,\n \"teamScore\": 62,\n \"opponentTeamScore\": 60,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 527,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"5:40\",\n \"top\": 277,\n \"left\": 111,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 26,\n \"lead\": true,\n \"teamScore\": 66,\n \"opponentTeamScore\": 60,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 528,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"4:55\",\n \"top\": 78,\n \"left\": 237,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 3,\n \"lead\": true,\n \"teamScore\": 66,\n \"opponentTeamScore\": 62,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 529,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"4:24\",\n \"top\": 61,\n \"left\": 248,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 1,\n \"lead\": true,\n \"teamScore\": 70,\n \"opponentTeamScore\": 64,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 530,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"1:55\",\n \"top\": 299,\n \"left\": 313,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 26,\n \"lead\": true,\n \"teamScore\": 78,\n \"opponentTeamScore\": 68,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 531,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"11:41\",\n \"top\": 293,\n \"left\": 351,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 26,\n \"lead\": true,\n \"teamScore\": 83,\n \"opponentTeamScore\": 73,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 532,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"8:42\",\n \"top\": 213,\n \"left\": 48,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": true,\n \"teamScore\": 90,\n \"opponentTeamScore\": 79,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 533,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"7:53\",\n \"top\": 108,\n \"left\": 212,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 6,\n \"lead\": true,\n \"teamScore\": 90,\n \"opponentTeamScore\": 81,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 534,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"7:31\",\n \"top\": 350,\n \"left\": 176,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 30,\n \"lead\": true,\n \"teamScore\": 90,\n \"opponentTeamScore\": 81,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 535,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"6:33\",\n \"top\": 133,\n \"left\": 252,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 8,\n \"lead\": true,\n \"teamScore\": 90,\n \"opponentTeamScore\": 83,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 536,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"5:07\",\n \"top\": 90,\n \"left\": 363,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 13,\n \"lead\": true,\n \"teamScore\": 92,\n \"opponentTeamScore\": 88,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 537,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"4:00\",\n \"top\": 325,\n \"left\": 343,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 29,\n \"lead\": true,\n \"teamScore\": 92,\n \"opponentTeamScore\": 88,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 538,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"3:24\",\n \"top\": 58,\n \"left\": 228,\n \"playerName\": \"hardeja01\",\n \"result\": false,\n \"shotType\": \"2-pointer\",\n \"distanceFt\": 1,\n \"lead\": true,\n \"teamScore\": 92,\n \"opponentTeamScore\": 90,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 539,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"1:44\",\n \"top\": 323,\n \"left\": 323,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 28,\n \"lead\": true,\n \"teamScore\": 97,\n \"opponentTeamScore\": 94,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 540,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Dec 17,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"0:13\",\n \"top\": 287,\n \"left\": 135,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 26,\n \"lead\": true,\n \"teamScore\": 102,\n \"opponentTeamScore\": 97,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n }\n]"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Shot Chart 2",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"// Test to check if the response time is less than 200ms",
|
|
"pm.test(\"Response time is less than 200ms\", function () {",
|
|
" pm.expect(pm.response.responseTime).to.be.below(200);",
|
|
"});",
|
|
"",
|
|
"pm.test(\"Response status code is 200\", function () {",
|
|
" pm.expect(pm.response.code).to.eql(200);",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Response is an array with at least one element\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('array').that.is.not.empty;",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Validate the schema of the objects in the array\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
"",
|
|
" pm.expect(responseData).to.be.an('array').that.is.not.empty;",
|
|
"",
|
|
" responseData.forEach(function(item) {",
|
|
" pm.expect(item).to.be.an('object');",
|
|
" pm.expect(item).to.have.all.keys('id', 'playerId', 'season', 'date', 'qtr', 'timeRemaining', 'top', 'left', 'playerName', 'result', 'shotType', 'distanceFt', 'lead', 'teamScore', 'opponentTeamScore', 'opponent', 'team', 'ID', 'CreatedAt', 'UpdatedAt', 'DeletedAt');",
|
|
" ",
|
|
" pm.expect(item.id).to.be.a('number');",
|
|
" pm.expect(item.playerId).to.be.a('string');",
|
|
" pm.expect(item.season).to.be.a('number');",
|
|
" pm.expect(item.date).to.be.a('string');",
|
|
" pm.expect(item.qtr).to.be.a('string');",
|
|
" pm.expect(item.timeRemaining).to.be.a('string');",
|
|
" pm.expect(item.top).to.be.a('number');",
|
|
" pm.expect(item.left).to.be.a('number');",
|
|
" pm.expect(item.playerName).to.be.a('string');",
|
|
" pm.expect(item.result).to.be.a('boolean');",
|
|
" pm.expect(item.shotType).to.be.a('string');",
|
|
" pm.expect(item.distanceFt).to.be.a('number');",
|
|
" pm.expect(item.lead).to.be.a('boolean');",
|
|
" pm.expect(item.teamScore).to.be.a('number');",
|
|
" pm.expect(item.opponentTeamScore).to.be.a('number');",
|
|
" pm.expect(item.opponent).to.be.a('string');",
|
|
" pm.expect(item.team).to.be.a('string');",
|
|
" pm.expect(item.ID).to.be.a('number');",
|
|
" pm.expect(item.CreatedAt).to.be.a('string');",
|
|
" pm.expect(item.UpdatedAt).to.be.a('string');",
|
|
" pm.expect(item.DeletedAt).to.satisfy(val => val === null || typeof val === 'object');",
|
|
" });",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Player ID is a non-empty string\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('array').that.is.not.empty;",
|
|
" responseData.forEach(function(item) {",
|
|
" pm.expect(item.playerId).to.exist.and.to.be.a('string').and.to.have.lengthOf.at.least(1, \"Player ID should not be empty\");",
|
|
" });",
|
|
"});",
|
|
"",
|
|
"",
|
|
"pm.test(\"Season is a positive integer\", function () {",
|
|
" const responseData = pm.response.json();",
|
|
" ",
|
|
" pm.expect(responseData).to.be.an('array').that.is.not.empty;",
|
|
" responseData.forEach(function(item) {",
|
|
" pm.expect(item.season).to.be.a('number').and.to.be.above(0);",
|
|
" });",
|
|
"});",
|
|
"",
|
|
""
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {}
|
|
}
|
|
},
|
|
{
|
|
"listen": "prerequest",
|
|
"script": {
|
|
"exec": [
|
|
""
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {}
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playershotchart?page=1&playerId=hardeja01&season=2019&result=true&shot_type=3-pointer",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playershotchart"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1. Each page returns a maximum of 50 results."
|
|
},
|
|
{
|
|
"key": "playerId",
|
|
"value": "hardeja01",
|
|
"description": "(Optional) The unique ID for the player (e.g., hardeja01)."
|
|
},
|
|
{
|
|
"key": "season",
|
|
"value": "2019",
|
|
"description": "(Optional) The season year (e.g., 2024 for the 2023-24 season)."
|
|
},
|
|
{
|
|
"key": "result",
|
|
"value": "true",
|
|
"description": "(Optional) Filter by shot outcome (true for made, false for missed)."
|
|
},
|
|
{
|
|
"key": "shot_type",
|
|
"value": "3-pointer",
|
|
"description": "(Optional) The type of shot (e.g., '2-pointer', '3-pointer')."
|
|
}
|
|
]
|
|
},
|
|
"description": "### Get Player Shot Chart Data\n\nReturns a paginated list of shot chart data points for a player. The data can be filtered by a variety of parameters to narrow down the results.\n\n### Usage\n\nThis endpoint is ideal for visualizing player shooting performance. You can filter by a specific player, season, game date, quarter, and more.\n\n**Note:** Pagination is available via the `page` parameter, but the number of results per page is fixed at **50**.\n\n#### **Query Parameters**\n\n* **`page`** (integer, optional): The page number for pagination. Defaults to `1`.\n* **`playerId`** (string, optional): The player's unique ID (e.g., `hardeja01`).\n* **`season`** (integer, optional): The season year (e.g., `2023`).\n* **`date`** (string, optional): The specific game date (e.g., `Oct 17, 2018`).\n* **`qtr`** (string, optional): The quarter of the game (e.g., `1st Qtr`).\n* **`result`** (boolean, optional): Filter by shot outcome (`true` for made shots, `false` for missed).\n* **`shot_type`** (string, optional): The type of shot (e.g., `2-pointer`, `3-pointer`).\n* **`opponent`** (string, optional): The three-letter abbreviation for the opponent team (e.g., `NOP`)."
|
|
},
|
|
"response": [
|
|
{
|
|
"name": "Shot Chart 2",
|
|
"originalRequest": {
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playershotchart?page=1&playerId=hardeja01&season=2019&result=true&shot_type=3-pointer",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playershotchart"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1. Each page returns a maximum of 50 results."
|
|
},
|
|
{
|
|
"key": "playerId",
|
|
"value": "hardeja01",
|
|
"description": "(Optional) The unique ID for the player (e.g., hardeja01)."
|
|
},
|
|
{
|
|
"key": "season",
|
|
"value": "2019",
|
|
"description": "(Optional) The season year (e.g., 2024 for the 2023-24 season)."
|
|
},
|
|
{
|
|
"key": "result",
|
|
"value": "true",
|
|
"description": "(Optional) Filter by shot outcome (true for made, false for missed)."
|
|
},
|
|
{
|
|
"key": "shot_type",
|
|
"value": "3-pointer",
|
|
"description": "(Optional) The type of shot (e.g., '2-pointer', '3-pointer')."
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"status": "OK",
|
|
"code": 200,
|
|
"_postman_previewlanguage": "json",
|
|
"header": [
|
|
{
|
|
"key": "Alt-Svc",
|
|
"value": "h3=\":443\"; ma=2592000"
|
|
},
|
|
{
|
|
"key": "Content-Encoding",
|
|
"value": "br"
|
|
},
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
},
|
|
{
|
|
"key": "Date",
|
|
"value": "Wed, 02 Jul 2025 01:19:06 GMT"
|
|
},
|
|
{
|
|
"key": "Server",
|
|
"value": "nginx/1.28.0"
|
|
},
|
|
{
|
|
"key": "Vary",
|
|
"value": "Accept-Encoding"
|
|
},
|
|
{
|
|
"key": "Content-Length",
|
|
"value": "1291"
|
|
}
|
|
],
|
|
"cookie": [],
|
|
"body": "[\n {\n \"id\": 4,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 17,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"4:12\",\n \"top\": 284,\n \"left\": 121,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 26,\n \"lead\": false,\n \"teamScore\": 18,\n \"opponentTeamScore\": 22,\n \"opponent\": \"NOP\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 12,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 17,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"6:18\",\n \"top\": 288,\n \"left\": 318,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": false,\n \"teamScore\": 95,\n \"opponentTeamScore\": 113,\n \"opponent\": \"NOP\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 15,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 17,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"3:27\",\n \"top\": 284,\n \"left\": 343,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": false,\n \"teamScore\": 102,\n \"opponentTeamScore\": 121,\n \"opponent\": \"NOP\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 17,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 20,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"7:48\",\n \"top\": 316,\n \"left\": 332,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 28,\n \"lead\": true,\n \"teamScore\": 14,\n \"opponentTeamScore\": 10,\n \"opponent\": \"LAL\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 23,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 20,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"6:25\",\n \"top\": 293,\n \"left\": 147,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 26,\n \"lead\": true,\n \"teamScore\": 47,\n \"opponentTeamScore\": 44,\n \"opponent\": \"LAL\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 28,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 20,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"0:45\",\n \"top\": 321,\n \"left\": 199,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 63,\n \"opponentTeamScore\": 62,\n \"opponent\": \"LAL\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 32,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 20,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"6:24\",\n \"top\": 253,\n \"left\": 409,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 26,\n \"lead\": true,\n \"teamScore\": 109,\n \"opponentTeamScore\": 104,\n \"opponent\": \"LAL\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 33,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 20,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"1:12\",\n \"top\": 270,\n \"left\": 404,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 120,\n \"opponentTeamScore\": 113,\n \"opponent\": \"LAL\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 43,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 21,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"6:11\",\n \"top\": 327,\n \"left\": 170,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 28,\n \"lead\": true,\n \"teamScore\": 42,\n \"opponentTeamScore\": 39,\n \"opponent\": \"LAC\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 47,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 21,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"1:44\",\n \"top\": 232,\n \"left\": 418,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": true,\n \"teamScore\": 51,\n \"opponentTeamScore\": 50,\n \"opponent\": \"LAC\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 55,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 21,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"2:47\",\n \"top\": 241,\n \"left\": 407,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": false,\n \"teamScore\": 106,\n \"opponentTeamScore\": 110,\n \"opponent\": \"LAC\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 59,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 21,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"0:29\",\n \"top\": 288,\n \"left\": 162,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": false,\n \"teamScore\": 111,\n \"opponentTeamScore\": 115,\n \"opponent\": \"LAC\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 62,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 24,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"9:53\",\n \"top\": 271,\n \"left\": 395,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 7,\n \"opponentTeamScore\": 2,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 64,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 24,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"0:51\",\n \"top\": 253,\n \"left\": 95,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": true,\n \"teamScore\": 29,\n \"opponentTeamScore\": 24,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 76,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Oct 24,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"5:50\",\n \"top\": 328,\n \"left\": 285,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 28,\n \"lead\": false,\n \"teamScore\": 52,\n \"opponentTeamScore\": 64,\n \"opponent\": \"UTA\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 84,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 3,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"3:34\",\n \"top\": 303,\n \"left\": 150,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": false,\n \"teamScore\": 47,\n \"opponentTeamScore\": 47,\n \"opponent\": \"CHI\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 85,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 3,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"2:52\",\n \"top\": 138,\n \"left\": 471,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": true,\n \"teamScore\": 50,\n \"opponentTeamScore\": 47,\n \"opponent\": \"CHI\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 89,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 3,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"5:57\",\n \"top\": 313,\n \"left\": 238,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 26,\n \"lead\": true,\n \"teamScore\": 63,\n \"opponentTeamScore\": 59,\n \"opponent\": \"CHI\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 90,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 3,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"4:47\",\n \"top\": 307,\n \"left\": 323,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 66,\n \"opponentTeamScore\": 59,\n \"opponent\": \"CHI\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 91,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 3,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"3:59\",\n \"top\": 299,\n \"left\": 182,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": true,\n \"teamScore\": 71,\n \"opponentTeamScore\": 59,\n \"opponent\": \"CHI\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 98,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 5,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"9:13\",\n \"top\": 321,\n \"left\": 262,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 11,\n \"opponentTeamScore\": 6,\n \"opponent\": \"IND\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 99,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 5,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"7:27\",\n \"top\": 282,\n \"left\": 104,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 16,\n \"opponentTeamScore\": 10,\n \"opponent\": \"IND\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 101,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 5,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"4:06\",\n \"top\": 78,\n \"left\": 477,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 24,\n \"lead\": true,\n \"teamScore\": 24,\n \"opponentTeamScore\": 18,\n \"opponent\": \"IND\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 106,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 5,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"0:09\",\n \"top\": 328,\n \"left\": 309,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 28,\n \"lead\": false,\n \"teamScore\": 53,\n \"opponentTeamScore\": 55,\n \"opponent\": \"IND\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 111,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 5,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"0:36\",\n \"top\": 267,\n \"left\": 77,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 93,\n \"opponentTeamScore\": 90,\n \"opponent\": \"IND\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 114,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 8,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"6:32\",\n \"top\": 252,\n \"left\": 390,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": false,\n \"teamScore\": 12,\n \"opponentTeamScore\": 15,\n \"opponent\": \"OKC\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 120,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 8,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"3:14\",\n \"top\": 292,\n \"left\": 337,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 26,\n \"lead\": false,\n \"teamScore\": 43,\n \"opponentTeamScore\": 47,\n \"opponent\": \"OKC\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 123,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 8,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"7:03\",\n \"top\": 202,\n \"left\": 445,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": false,\n \"teamScore\": 55,\n \"opponentTeamScore\": 66,\n \"opponent\": \"OKC\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 125,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 8,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"8:24\",\n \"top\": 287,\n \"left\": 331,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": false,\n \"teamScore\": 67,\n \"opponentTeamScore\": 86,\n \"opponent\": \"OKC\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 140,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 10,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"1:35\",\n \"top\": 313,\n \"left\": 234,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 26,\n \"lead\": true,\n \"teamScore\": 48,\n \"opponentTeamScore\": 47,\n \"opponent\": \"SAS\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 160,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 11,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"5:13\",\n \"top\": 277,\n \"left\": 88,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 20,\n \"opponentTeamScore\": 16,\n \"opponent\": \"IND\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 163,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 11,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"6:26\",\n \"top\": 305,\n \"left\": 151,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 49,\n \"opponentTeamScore\": 39,\n \"opponent\": \"IND\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 164,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 11,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"5:00\",\n \"top\": 289,\n \"left\": 120,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 55,\n \"opponentTeamScore\": 44,\n \"opponent\": \"IND\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 165,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 11,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"2:29\",\n \"top\": 297,\n \"left\": 348,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 67,\n \"opponentTeamScore\": 50,\n \"opponent\": \"IND\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 166,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 11,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"2:07\",\n \"top\": 344,\n \"left\": 238,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 29,\n \"lead\": true,\n \"teamScore\": 70,\n \"opponentTeamScore\": 50,\n \"opponent\": \"IND\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 170,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 11,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"4:27\",\n \"top\": 289,\n \"left\": 105,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 87,\n \"opponentTeamScore\": 74,\n \"opponent\": \"IND\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 172,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 11,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"3:35\",\n \"top\": 310,\n \"left\": 132,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 28,\n \"lead\": true,\n \"teamScore\": 91,\n \"opponentTeamScore\": 75,\n \"opponent\": \"IND\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 174,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 11,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"7:04\",\n \"top\": 313,\n \"left\": 298,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 107,\n \"opponentTeamScore\": 92,\n \"opponent\": \"IND\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 186,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 13,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"3:40\",\n \"top\": 277,\n \"left\": 348,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": true,\n \"teamScore\": 79,\n \"opponentTeamScore\": 74,\n \"opponent\": \"DEN\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 190,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 13,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"4:50\",\n \"top\": 248,\n \"left\": 397,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": true,\n \"teamScore\": 102,\n \"opponentTeamScore\": 91,\n \"opponent\": \"DEN\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 199,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 15,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"2:50\",\n \"top\": 264,\n \"left\": 376,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": true,\n \"teamScore\": 16,\n \"opponentTeamScore\": 15,\n \"opponent\": \"GSW\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 208,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 15,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"0:29\",\n \"top\": 330,\n \"left\": 204,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 28,\n \"lead\": true,\n \"teamScore\": 47,\n \"opponentTeamScore\": 39,\n \"opponent\": \"GSW\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 210,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 15,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"11:37\",\n \"top\": 274,\n \"left\": 64,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 28,\n \"lead\": true,\n \"teamScore\": 50,\n \"opponentTeamScore\": 41,\n \"opponent\": \"GSW\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 213,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 15,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"5:30\",\n \"top\": 231,\n \"left\": 38,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 63,\n \"opponentTeamScore\": 47,\n \"opponent\": \"GSW\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 227,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 17,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"7:44\",\n \"top\": 313,\n \"left\": 213,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 26,\n \"lead\": true,\n \"teamScore\": 83,\n \"opponentTeamScore\": 69,\n \"opponent\": \"SAC\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 229,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 17,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"4:24\",\n \"top\": 313,\n \"left\": 299,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 95,\n \"opponentTeamScore\": 74,\n \"opponent\": \"SAC\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 230,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 17,2018\",\n \"qtr\": \"3rd Qtr\",\n \"timeRemaining\": \"4:06\",\n \"top\": 295,\n \"left\": 369,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 27,\n \"lead\": true,\n \"teamScore\": 98,\n \"opponentTeamScore\": 74,\n \"opponent\": \"SAC\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 233,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 17,2018\",\n \"qtr\": \"4th Qtr\",\n \"timeRemaining\": \"3:46\",\n \"top\": 154,\n \"left\": 7,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": true,\n \"teamScore\": 126,\n \"opponentTeamScore\": 103,\n \"opponent\": \"SAC\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 238,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 21,2018\",\n \"qtr\": \"1st Qtr\",\n \"timeRemaining\": \"4:40\",\n \"top\": 261,\n \"left\": 384,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 25,\n \"lead\": true,\n \"teamScore\": 15,\n \"opponentTeamScore\": 14,\n \"opponent\": \"DET\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n },\n {\n \"id\": 241,\n \"playerId\": \"hardeja01\",\n \"season\": 2019,\n \"date\": \"Nov 21,2018\",\n \"qtr\": \"2nd Qtr\",\n \"timeRemaining\": \"6:38\",\n \"top\": 243,\n \"left\": 415,\n \"playerName\": \"hardeja01\",\n \"result\": true,\n \"shotType\": \"3-pointer\",\n \"distanceFt\": 26,\n \"lead\": true,\n \"teamScore\": 45,\n \"opponentTeamScore\": 44,\n \"opponent\": \"DET\",\n \"team\": \"HOU\",\n \"ID\": 0,\n \"CreatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"UpdatedAt\": \"2025-06-20T22:48:34.764255Z\",\n \"DeletedAt\": null\n }\n]"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Player Advanced Playoff Stats",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"// Tests",
|
|
"pm.test(\"Response time is less than 200ms\", function () {",
|
|
" pm.expect(pm.response.responseTime).to.be.below(200);",
|
|
"});",
|
|
"",
|
|
"pm.test(\"Response status code is 200\", function () {",
|
|
" pm.response.to.have.status(200);",
|
|
"});",
|
|
"",
|
|
"pm.test(\"Response has data array with at least one element\", function () {",
|
|
" const jsonData = pm.response.json();",
|
|
" pm.expect(jsonData).to.have.property('data');",
|
|
" pm.expect(jsonData.data).to.be.an('array').that.is.not.empty;",
|
|
"});",
|
|
"",
|
|
"pm.test(\"Validate the schema of the objects in the array\", function () {",
|
|
" const jsonData = pm.response.json();",
|
|
" jsonData.data.forEach(function(item) {",
|
|
" pm.expect(item).to.have.property('playerId');",
|
|
" pm.expect(item).to.have.property('playerName');",
|
|
" pm.expect(item).to.have.property('position');",
|
|
" pm.expect(item).to.have.property('defensiveBox');",
|
|
" pm.expect(item).to.have.property('offensiveBox');",
|
|
" pm.expect(item).to.have.property('winShares');",
|
|
" });",
|
|
"});",
|
|
"",
|
|
"pm.test(\"Player ID is a non-empty string\", function () {",
|
|
" const jsonData = pm.response.json();",
|
|
" jsonData.data.forEach(function(item) {",
|
|
" pm.expect(item.playerId).to.be.a('string').that.is.not.empty;",
|
|
" });",
|
|
"});",
|
|
"",
|
|
"pm.test(\"Season is a positive integer\", function () {",
|
|
" const jsonData = pm.response.json();",
|
|
" jsonData.data.forEach(function(item) {",
|
|
" pm.expect(item.season).to.be.a('number').that.is.above(0);",
|
|
" });",
|
|
"});",
|
|
"",
|
|
"// Player Advanced Stats Chart Visualization",
|
|
"var template = `",
|
|
"<style>",
|
|
" .chart-container {",
|
|
" font-family: Arial, sans-serif;",
|
|
" padding: 20px;",
|
|
" max-width: 1000px;",
|
|
" margin: 0 auto;",
|
|
" background: #f9f9f9;",
|
|
" border-radius: 10px;",
|
|
" }",
|
|
" .chart-title {",
|
|
" text-align: center;",
|
|
" color: #333;",
|
|
" margin-bottom: 5px;",
|
|
" font-size: 24px;",
|
|
" }",
|
|
" .chart-subtitle {",
|
|
" text-align: center;",
|
|
" color: #666;",
|
|
" font-size: 14px;",
|
|
" margin-bottom: 20px;",
|
|
" }",
|
|
" .stats-summary {",
|
|
" display: flex;",
|
|
" justify-content: space-around;",
|
|
" margin-bottom: 20px;",
|
|
" flex-wrap: wrap;",
|
|
" gap: 10px;",
|
|
" }",
|
|
" .stat-box {",
|
|
" background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);",
|
|
" color: white;",
|
|
" padding: 15px 25px;",
|
|
" border-radius: 10px;",
|
|
" text-align: center;",
|
|
" min-width: 120px;",
|
|
" }",
|
|
" .stat-box .value {",
|
|
" font-size: 24px;",
|
|
" font-weight: bold;",
|
|
" }",
|
|
" .stat-box .label {",
|
|
" font-size: 12px;",
|
|
" opacity: 0.9;",
|
|
" }",
|
|
" .chart-wrapper {",
|
|
" background: white;",
|
|
" padding: 20px;",
|
|
" border-radius: 10px;",
|
|
" margin-bottom: 20px;",
|
|
" box-shadow: 0 2px 10px rgba(0,0,0,0.1);",
|
|
" }",
|
|
" .legend-info {",
|
|
" text-align: center;",
|
|
" font-size: 12px;",
|
|
" color: #888;",
|
|
" margin-top: 10px;",
|
|
" }",
|
|
"</style>",
|
|
"",
|
|
"<div class=\"chart-container\">",
|
|
" <h2 class=\"chart-title\">Player Advanced Stats Comparison</h2>",
|
|
" <p class=\"chart-subtitle\">{{team}} - {{season}} {{playoffLabel}}</p>",
|
|
" ",
|
|
" <div class=\"stats-summary\">",
|
|
" <div class=\"stat-box\">",
|
|
" <div class=\"value\">{{totalPlayers}}</div>",
|
|
" <div class=\"label\">Players</div>",
|
|
" </div>",
|
|
" <div class=\"stat-box\">",
|
|
" <div class=\"value\">{{avgWinShares}}</div>",
|
|
" <div class=\"label\">Avg Win Shares</div>",
|
|
" </div>",
|
|
" <div class=\"stat-box\">",
|
|
" <div class=\"value\">{{avgBox}}</div>",
|
|
" <div class=\"label\">Avg Box +/-</div>",
|
|
" </div>",
|
|
" <div class=\"stat-box\">",
|
|
" <div class=\"value\">{{topPlayer}}</div>",
|
|
" <div class=\"label\">Top Performer</div>",
|
|
" </div>",
|
|
" </div>",
|
|
" ",
|
|
" <div class=\"chart-wrapper\">",
|
|
" <canvas id=\"boxScoreChart\" height=\"120\"></canvas>",
|
|
" </div>",
|
|
" ",
|
|
" <div class=\"chart-wrapper\">",
|
|
" <canvas id=\"winSharesChart\" height=\"100\"></canvas>",
|
|
" </div>",
|
|
" ",
|
|
" <p class=\"legend-info\">Data sorted by Defensive Box +/- (descending)</p>",
|
|
"</div>",
|
|
"",
|
|
"<script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js\"></script>",
|
|
"<script>",
|
|
" pm.getData(function (err, value) {",
|
|
" if (err) {",
|
|
" console.error(err);",
|
|
" return;",
|
|
" }",
|
|
" ",
|
|
" var players = value.players;",
|
|
" var playerNames = players.map(function(p) { return p.name; });",
|
|
" var defensiveBox = players.map(function(p) { return p.defensiveBox; });",
|
|
" var offensiveBox = players.map(function(p) { return p.offensiveBox; });",
|
|
" var totalBox = players.map(function(p) { return p.box; });",
|
|
" var winShares = players.map(function(p) { return p.winShares; });",
|
|
" var vorp = players.map(function(p) { return p.vorp; });",
|
|
" ",
|
|
" // Box Score Chart (Bar Chart)",
|
|
" var ctx1 = document.getElementById(\"boxScoreChart\").getContext(\"2d\");",
|
|
" new Chart(ctx1, {",
|
|
" type: \"bar\",",
|
|
" data: {",
|
|
" labels: playerNames,",
|
|
" datasets: [",
|
|
" {",
|
|
" label: \"Defensive Box +/-\",",
|
|
" data: defensiveBox,",
|
|
" backgroundColor: \"rgba(102, 126, 234, 0.8)\",",
|
|
" borderColor: \"rgba(102, 126, 234, 1)\",",
|
|
" borderWidth: 1",
|
|
" },",
|
|
" {",
|
|
" label: \"Offensive Box +/-\",",
|
|
" data: offensiveBox,",
|
|
" backgroundColor: \"rgba(118, 75, 162, 0.8)\",",
|
|
" borderColor: \"rgba(118, 75, 162, 1)\",",
|
|
" borderWidth: 1",
|
|
" },",
|
|
" {",
|
|
" label: \"Total Box +/-\",",
|
|
" data: totalBox,",
|
|
" backgroundColor: \"rgba(76, 175, 80, 0.8)\",",
|
|
" borderColor: \"rgba(76, 175, 80, 1)\",",
|
|
" borderWidth: 1",
|
|
" }",
|
|
" ]",
|
|
" },",
|
|
" options: {",
|
|
" responsive: true,",
|
|
" legend: { display: true, position: \"top\" },",
|
|
" title: {",
|
|
" display: true,",
|
|
" text: \"Box Plus/Minus Comparison\",",
|
|
" fontSize: 16",
|
|
" },",
|
|
" scales: {",
|
|
" xAxes: [{",
|
|
" display: true,",
|
|
" scaleLabel: {",
|
|
" display: true,",
|
|
" labelString: \"Player\"",
|
|
" }",
|
|
" }],",
|
|
" yAxes: [{",
|
|
" display: true,",
|
|
" scaleLabel: {",
|
|
" display: true,",
|
|
" labelString: \"Box +/-\"",
|
|
" },",
|
|
" ticks: {",
|
|
" beginAtZero: true",
|
|
" }",
|
|
" }]",
|
|
" }",
|
|
" }",
|
|
" });",
|
|
" ",
|
|
" // Win Shares & VORP Chart (Horizontal Bar)",
|
|
" var ctx2 = document.getElementById(\"winSharesChart\").getContext(\"2d\");",
|
|
" new Chart(ctx2, {",
|
|
" type: \"horizontalBar\",",
|
|
" data: {",
|
|
" labels: playerNames,",
|
|
" datasets: [",
|
|
" {",
|
|
" label: \"Win Shares\",",
|
|
" data: winShares,",
|
|
" backgroundColor: \"rgba(255, 152, 0, 0.8)\",",
|
|
" borderColor: \"rgba(255, 152, 0, 1)\",",
|
|
" borderWidth: 1",
|
|
" },",
|
|
" {",
|
|
" label: \"VORP\",",
|
|
" data: vorp,",
|
|
" backgroundColor: \"rgba(33, 150, 243, 0.8)\",",
|
|
" borderColor: \"rgba(33, 150, 243, 1)\",",
|
|
" borderWidth: 1",
|
|
" }",
|
|
" ]",
|
|
" },",
|
|
" options: {",
|
|
" responsive: true,",
|
|
" legend: { display: true, position: \"top\" },",
|
|
" title: {",
|
|
" display: true,",
|
|
" text: \"Win Shares & Value Over Replacement\",",
|
|
" fontSize: 16",
|
|
" },",
|
|
" scales: {",
|
|
" xAxes: [{",
|
|
" display: true,",
|
|
" scaleLabel: {",
|
|
" display: true,",
|
|
" labelString: \"Value\"",
|
|
" },",
|
|
" ticks: {",
|
|
" beginAtZero: true",
|
|
" }",
|
|
" }],",
|
|
" yAxes: [{",
|
|
" display: true,",
|
|
" scaleLabel: {",
|
|
" display: true,",
|
|
" labelString: \"Player\"",
|
|
" }",
|
|
" }]",
|
|
" }",
|
|
" }",
|
|
" });",
|
|
" });",
|
|
"</script>",
|
|
"`;",
|
|
"",
|
|
"function constructVisualizerPayload() {",
|
|
" var response = pm.response.json();",
|
|
" var data = response.data || [];",
|
|
" ",
|
|
" var players = data.map(function(player) {",
|
|
" return {",
|
|
" name: player.playerName,",
|
|
" defensiveBox: player.defensiveBox,",
|
|
" offensiveBox: player.offensiveBox,",
|
|
" box: player.box,",
|
|
" winShares: player.winShares,",
|
|
" vorp: player.vorp",
|
|
" };",
|
|
" });",
|
|
" ",
|
|
" var totalWinShares = data.reduce(function(sum, p) { return sum + p.winShares; }, 0);",
|
|
" var totalBox = data.reduce(function(sum, p) { return sum + p.box; }, 0);",
|
|
" var avgWinShares = data.length > 0 ? (totalWinShares / data.length).toFixed(2) : \"0\";",
|
|
" var avgBox = data.length > 0 ? (totalBox / data.length).toFixed(1) : \"0\";",
|
|
" ",
|
|
" var topPlayer = data.length > 0 ? data.reduce(function(top, p) {",
|
|
" return p.box > top.box ? p : top;",
|
|
" }, data[0]).playerName : \"N/A\";",
|
|
" ",
|
|
" var team = data.length > 0 ? data[0].team : \"N/A\";",
|
|
" var season = data.length > 0 ? data[0].season : \"N/A\";",
|
|
" var isPlayoff = data.length > 0 && data[0].isPlayoff;",
|
|
" ",
|
|
" return {",
|
|
" players: players,",
|
|
" totalPlayers: data.length,",
|
|
" avgWinShares: avgWinShares,",
|
|
" avgBox: avgBox,",
|
|
" topPlayer: topPlayer,",
|
|
" team: team,",
|
|
" season: season,",
|
|
" playoffLabel: isPlayoff ? \"Playoffs\" : \"Regular Season\"",
|
|
" };",
|
|
"}",
|
|
"",
|
|
"pm.visualizer.set(template, constructVisualizerPayload());"
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
},
|
|
{
|
|
"listen": "prerequest",
|
|
"script": {
|
|
"exec": [
|
|
""
|
|
],
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"requests": {}
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"auth": {
|
|
"type": "noauth"
|
|
},
|
|
"method": "GET",
|
|
"header": [
|
|
{
|
|
"key": "x-api-key",
|
|
"value": "{{api-key}}",
|
|
"type": "text",
|
|
"disabled": true
|
|
}
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/api/playeradvancedstats?season=2025&team=NYK&page=1&pageSize=4&sortBy=defensiveBox&ascending=false&isPlayoff=true",
|
|
"host": [
|
|
"{{base_url}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"playeradvancedstats"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "season",
|
|
"value": "2025",
|
|
"description": "(Optional) The NBA season year (e.g., 2025 for the 2024-25 season)."
|
|
},
|
|
{
|
|
"key": "team",
|
|
"value": "NYK",
|
|
"description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL)."
|
|
},
|
|
{
|
|
"key": "page",
|
|
"value": "1",
|
|
"description": "(Optional) The page number for pagination. Defaults to 1."
|
|
},
|
|
{
|
|
"key": "pageSize",
|
|
"value": "4",
|
|
"description": "(Optional) The number of results to return per page. Defaults to 20."
|
|
},
|
|
{
|
|
"key": "sortBy",
|
|
"value": "defensiveBox",
|
|
"description": "(Optional) The field to sort the results by. Defaults to 'winShares'."
|
|
},
|
|
{
|
|
"key": "ascending",
|
|
"value": "false",
|
|
"description": "(Optional) If true, sorts the results in ascending order. Defaults to false (descending)."
|
|
},
|
|
{
|
|
"key": "isPlayoff",
|
|
"value": "true",
|
|
"description": "(Optional) Set to 'true' to retrieve playoff stats, or 'false' for regular season stats."
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"response": []
|
|
}
|
|
],
|
|
"event": [
|
|
{
|
|
"listen": "prerequest",
|
|
"script": {
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"exec": [
|
|
""
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"type": "text/javascript",
|
|
"packages": {},
|
|
"exec": [
|
|
""
|
|
]
|
|
}
|
|
}
|
|
],
|
|
"variable": [
|
|
{
|
|
"key": "api-key",
|
|
"value": "",
|
|
"type": "string",
|
|
"disabled": true
|
|
},
|
|
{
|
|
"key": "x-secret",
|
|
"value": "",
|
|
"type": "string",
|
|
"disabled": true
|
|
},
|
|
{
|
|
"key": "shot_player",
|
|
"value": "jokicni01"
|
|
},
|
|
{
|
|
"key": "base_url",
|
|
"value": "https://api.server.nbaapi.com",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"key": "base_url_2",
|
|
"value": "https://nbago.server.nbaapi.com",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"key": "season",
|
|
"value": "2019"
|
|
}
|
|
]
|
|
} |