From 047783a15367654d485f6cef2398316889744d8f Mon Sep 17 00:00:00 2001 From: Ravi Prasad Date: Tue, 16 Dec 2025 18:23:12 -0600 Subject: [PATCH] postman code update and import update --- .DS_Store | Bin 30724 -> 30724 bytes .gitignore | 4 +- docs/.DS_Store | Bin 10244 -> 10244 bytes .../NBA Statistics Go.postman_collection.json | 2793 +++++++++++++++-- docs/postman/postman_docs.md | 24 + docs/restore_dump_local.md | 13 + import.go | 28 +- main.go | 18 +- 8 files changed, 2570 insertions(+), 310 deletions(-) create mode 100644 docs/postman/postman_docs.md create mode 100644 docs/restore_dump_local.md diff --git a/.DS_Store b/.DS_Store index 0960bde4d9f16d29c3944c364bb692e1a38ab772..d977ea7ded0338edb9b9cff8b4e176adc915e68a 100644 GIT binary patch delta 86 zcmV-c0IC0k@BxJI0gz7tIk8Z?F98s<3@~d01qTTS3kQ?WPF52M2?z;a5E^@XEi*MV sEFdvBH8+!hI~$TTEeU31b7Nv}Z)^dxAv6IC1OYexz>#s#vkO4^H!@BxJI0gz7tII&Q>F98p;3@~d0lW$sK4H|oUEi*MVEFdvBGB}gvGf1;S PH1!ITA}{H)3qbidK&lio diff --git a/.gitignore b/.gitignore index c45b604..efb132e 100644 --- a/.gitignore +++ b/.gitignore @@ -29,4 +29,6 @@ go.work.sum data/nba.db /data/ /data -/data/* \ No newline at end of file +/data/* +docs/restore_dump_remote.md +./docs/restore_dump_remote.md diff --git a/docs/.DS_Store b/docs/.DS_Store index c6241e57a453c7b4acff0f8d4e9a11ce6779a8f0..a80ce3834a5b76c27eab3855411c346df7749e67 100644 GIT binary patch delta 127 zcmZn(XbIS`Qb25HQbA5;afyM!HAW_87FITPAmC=7yk8*9j}r*u1thDhEewrx6bwx* zjB0fhsx6HSbQDaC&1!2oIYgE9t%KsTb8_?YyBWZMkr6^O@Iq-A)w4NCa0%aLc7-E4!hAV6IXL45B&w^8EDd!O zj4Ui_brh;CjSO@YOwBE8YdJYYmG!NI;", + " .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;", + " }", + "", + "
", + "
NBA Games
", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{#each games}}", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{/each}}", + " ", + "
Game IDDateVisitor TeamVisitor PtsHome TeamHome PtsArenaDuration
{{gameId}}{{date}}{{visitorTeam}}{{visitorPts}}{{homeTeam}}{{homePts}}{{arena}}{{gameDuration}}
", + "
", + "`;", + "", + "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 = `", + "", + "", + "
", + " ", + "
", + "
", + " πŸ“Š Games Summary", + "
", + "
", + "
", + "
", + "
{{totalGames}}
", + "
Total Games
", + "
", + "
", + "
{{avgScore}}
", + "
Avg Total Score
", + "
", + "
", + "
{{highestScore}}
", + "
Highest Team Score
", + "
", + "
", + "
", + "
", + "", + " ", + "
", + "
", + " πŸ€ NBA Games Overview", + "
", + "
", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{#each games}}", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{/each}}", + " ", + "
Game IDDateVisitorScoreHomeScoreArenaDuration
{{gameId}}{{date}}{{visitorTeam}}{{visitorPts}}{{homeTeam}}{{homePts}}{{arena}}{{gameDuration}}
", + "
", + "
", + "", + " ", + "
", + "
", + " πŸ“ˆ Detailed Game Breakdown", + "
", + "
", + " {{#each gamesDetailed}}", + "
", + "
", + "
{{visitorTeam}} {{visitorPts}} @ {{homeTeam}} {{homePts}}
", + "
{{date}} | {{arena}}
", + "
", + "
", + " ", + "

Quarter-by-Quarter Breakdown

", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{#if hasOT}}", + " ", + " ", + " ", + " {{/if}}", + " ", + " ", + " ", + " ", + " {{#each lineScores}}", + " ", + " ", + " ", + " ", + " ", + " ", + " {{#if ../hasOT}}", + " ", + " ", + " ", + " {{/if}}", + " ", + " ", + " {{/each}}", + " ", + "
TeamQ1Q2Q3Q4OT1OT2OT3Total
{{team}}{{q1}}{{q2}}{{q3}}{{q4}}{{ot1}}{{ot2}}{{ot3}}{{total}}
", + "", + " ", + "
", + "
Scoring by Quarter
", + " ", + "
", + "", + " ", + "
", + " {{#each teamStats}}", + "
", + " {{teamName}} Player Statistics", + "
", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{#each players}}", + " ", + " {{#if isDNP}}", + " ", + " ", + " {{else}}", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{/if}}", + " ", + " {{/each}}", + " ", + "
PlayerMINPTSFGFG%3P3P%FTFT%REBASTSTLBLKTOV+/-
{{playerName}}Did Not Play{{playerName}}{{mp}}{{pts}}{{fg}}-{{fga}}{{fgPct}}{{threeP}}-{{threePa}}{{threePPct}}{{ft}}-{{fta}}{{ftPct}}{{trb}}{{ast}}{{stl}}{{blk}}{{tov}}{{plusMinusDisplay}}
", + " {{/each}}", + "
", + "
", + "
", + " {{/each}}", + "
", + "
", + "
", + "", + "", + "", + "`;", + "", + "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": [ @@ -32,10 +1040,6 @@ " pm.expect(responseData.data).to.be.an('array');", " ", " responseData.data.forEach(function(player) {", - " pm.expect(player).to.have.property('ID');", - " pm.expect(player).to.have.property('CreatedAt');", - " pm.expect(player).to.have.property('UpdatedAt');", - " pm.expect(player).to.have.property('DeletedAt');", " pm.expect(player).to.have.property('playerId');", " pm.expect(player).to.have.property('playerName');", " pm.expect(player).to.have.property('position');", @@ -56,100 +1060,128 @@ " pm.expect(responseData.pagination).to.have.property('pages');", " pm.expect(responseData.pagination).to.have.property('total');", "});", + "", + "// Visualization for Player Totals Stats", "var template = `", "", - "", - "", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " {{#each response.data}}", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " {{/each}}", - "
IDCreatedAtUpdatedAtDeletedAtidplayerIdplayerNamepositionagegamesgamesStartedminutesPgfieldGoalsfieldAttemptsfieldPercentthreeFgthreeAttemptsthreePercenttwoFgtwoAttemptstwoPercenteffectFgPercentftftAttemptsftPercentoffensiveRbdefensiveRbtotalRbassistsstealsblocksturnoverspersonalFoulspointsteamseason
{{ID}}{{CreatedAt}}{{UpdatedAt}}{{DeletedAt}}{{id}}{{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}}
", + "
", + "
Player Statistics
", + "
Season {{season}} | Total Players: {{totalPlayers}}
", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{#each players}}", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{/each}}", + " ", + "
PlayerPosGamesPointsAssistsReboundsPPG
{{playerName}}{{position}}{{games}}{{points}}{{assists}}{{totalRb}}{{ppg}}
", + "
", "`;", "", "function constructVisualizerPayload() {", - " return {response: pm.response.json()}", + " 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());" @@ -180,7 +1212,7 @@ } ], "url": { - "raw": "{{base_url}}/api/playertotals?season=2025&team=HOU&page=1&pageSize=35&isPlayoff=False", + "raw": "{{base_url}}/api/playertotals?season=2026&team=HOU&page=1&pageSize=3&isPlayoff=False", "host": [ "{{base_url}}" ], @@ -191,7 +1223,7 @@ "query": [ { "key": "season", - "value": "2025", + "value": "2026", "description": "(Optional) The season year (e.g., 2025 for the 2024-25 season)." }, { @@ -206,7 +1238,7 @@ }, { "key": "pageSize", - "value": "35", + "value": "3", "description": "(Optional) The number of results to return per page. Defaults to 20." }, { @@ -232,7 +1264,7 @@ } ], "url": { - "raw": "{{base_url}}/api/playertotals?season=2025&team=HOU&page=1&pageSize=35&isPlayoff=False", + "raw": "{{base_url}}/api/playertotals?season=2026&team=HOU&page=1&pageSize=20&isPlayoff=False", "host": [ "{{base_url}}" ], @@ -243,7 +1275,7 @@ "query": [ { "key": "season", - "value": "2025", + "value": "2026", "description": "(Optional) The season year (e.g., 2025 for the 2024-25 season)." }, { @@ -258,7 +1290,7 @@ }, { "key": "pageSize", - "value": "35", + "value": "20", "description": "(Optional) The number of results to return per page. Defaults to 20." }, { @@ -271,7 +1303,7 @@ }, "status": "OK", "code": 200, - "_postman_previewlanguage": "json", + "_postman_previewlanguage": null, "header": [ { "key": "Alt-Svc", @@ -287,7 +1319,7 @@ }, { "key": "Date", - "value": "Wed, 02 Jul 2025 01:16:40 GMT" + "value": "Tue, 16 Dec 2025 07:22:18 GMT" }, { "key": "Server", @@ -298,15 +1330,497 @@ "value": "Accept-Encoding" }, { - "key": "Transfer-Encoding", - "value": "chunked" + "key": "Content-Length", + "value": "1390" } ], "cookie": [], - "body": "{\n \"data\": [\n {\n \"ID\": 1648,\n \"id\": 13,\n \"playerId\": \"greenja05\",\n \"playerName\": \"Jalen Green\",\n \"position\": \"SG\",\n \"age\": 22,\n \"games\": 82,\n \"gamesStarted\": 82,\n \"minutesPg\": 2697,\n \"fieldGoals\": 608,\n \"fieldAttempts\": 1437,\n \"fieldPercent\": 0.423,\n \"threeFg\": 234,\n \"threeAttempts\": 661,\n \"threePercent\": 0.354,\n \"twoFg\": 374,\n \"twoAttempts\": 776,\n \"twoPercent\": 0.482,\n \"effectFgPercent\": 0.505,\n \"ft\": 273,\n \"ftAttempts\": 336,\n \"ftPercent\": 0.813,\n \"offensiveRb\": 45,\n \"defensiveRb\": 332,\n \"totalRb\": 377,\n \"assists\": 282,\n \"steals\": 71,\n \"blocks\": 27,\n \"turnovers\": 203,\n \"personalFouls\": 127,\n \"points\": 1723,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:06:56.81977Z\",\n \"UpdatedAt\": \"2025-06-20T01:06:56.81977Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1664,\n \"id\": 27,\n \"playerId\": \"sengual01\",\n \"playerName\": \"Alperen Şengün\",\n \"position\": \"C\",\n \"age\": 22,\n \"games\": 76,\n \"gamesStarted\": 76,\n \"minutesPg\": 2395,\n \"fieldGoals\": 567,\n \"fieldAttempts\": 1143,\n \"fieldPercent\": 0.496,\n \"threeFg\": 21,\n \"threeAttempts\": 90,\n \"threePercent\": 0.233,\n \"twoFg\": 546,\n \"twoAttempts\": 1053,\n \"twoPercent\": 0.519,\n \"effectFgPercent\": 0.505,\n \"ft\": 296,\n \"ftAttempts\": 428,\n \"ftPercent\": 0.692,\n \"offensiveRb\": 262,\n \"defensiveRb\": 524,\n \"totalRb\": 786,\n \"assists\": 372,\n \"steals\": 84,\n \"blocks\": 61,\n \"turnovers\": 194,\n \"personalFouls\": 209,\n \"points\": 1451,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:06:59.072751Z\",\n \"UpdatedAt\": \"2025-06-20T01:06:59.072751Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1725,\n \"id\": 78,\n \"playerId\": \"brookdi01\",\n \"playerName\": \"Dillon Brooks\",\n \"position\": \"SF\",\n \"age\": 29,\n \"games\": 75,\n \"gamesStarted\": 75,\n \"minutesPg\": 2388,\n \"fieldGoals\": 384,\n \"fieldAttempts\": 895,\n \"fieldPercent\": 0.429,\n \"threeFg\": 186,\n \"threeAttempts\": 469,\n \"threePercent\": 0.397,\n \"twoFg\": 198,\n \"twoAttempts\": 426,\n \"twoPercent\": 0.465,\n \"effectFgPercent\": 0.533,\n \"ft\": 99,\n \"ftAttempts\": 121,\n \"ftPercent\": 0.818,\n \"offensiveRb\": 75,\n \"defensiveRb\": 200,\n \"totalRb\": 275,\n \"assists\": 128,\n \"steals\": 60,\n \"blocks\": 16,\n \"turnovers\": 76,\n \"personalFouls\": 242,\n \"points\": 1053,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:07:08.04821Z\",\n \"UpdatedAt\": \"2025-06-20T01:07:08.04821Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1741,\n \"id\": 91,\n \"playerId\": \"thompam01\",\n \"playerName\": \"Amen Thompson\",\n \"position\": \"SF\",\n \"age\": 22,\n \"games\": 69,\n \"gamesStarted\": 42,\n \"minutesPg\": 2225,\n \"fieldGoals\": 388,\n \"fieldAttempts\": 697,\n \"fieldPercent\": 0.557,\n \"threeFg\": 25,\n \"threeAttempts\": 91,\n \"threePercent\": 0.275,\n \"twoFg\": 363,\n \"twoAttempts\": 606,\n \"twoPercent\": 0.599,\n \"effectFgPercent\": 0.575,\n \"ft\": 169,\n \"ftAttempts\": 247,\n \"ftPercent\": 0.684,\n \"offensiveRb\": 192,\n \"defensiveRb\": 372,\n \"totalRb\": 564,\n \"assists\": 265,\n \"steals\": 97,\n \"blocks\": 89,\n \"turnovers\": 138,\n \"personalFouls\": 167,\n \"points\": 970,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:07:10.362164Z\",\n \"UpdatedAt\": \"2025-06-20T01:07:10.362164Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1763,\n \"id\": 109,\n \"playerId\": \"vanvlfr01\",\n \"playerName\": \"Fred VanVleet\",\n \"position\": \"PG\",\n \"age\": 30,\n \"games\": 60,\n \"gamesStarted\": 60,\n \"minutesPg\": 2111,\n \"fieldGoals\": 287,\n \"fieldAttempts\": 759,\n \"fieldPercent\": 0.378,\n \"threeFg\": 159,\n \"threeAttempts\": 461,\n \"threePercent\": 0.345,\n \"twoFg\": 128,\n \"twoAttempts\": 298,\n \"twoPercent\": 0.43,\n \"effectFgPercent\": 0.483,\n \"ft\": 111,\n \"ftAttempts\": 137,\n \"ftPercent\": 0.81,\n \"offensiveRb\": 32,\n \"defensiveRb\": 189,\n \"totalRb\": 221,\n \"assists\": 333,\n \"steals\": 94,\n \"blocks\": 25,\n \"turnovers\": 87,\n \"personalFouls\": 140,\n \"points\": 844,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:07:13.597703Z\",\n \"UpdatedAt\": \"2025-06-20T01:07:13.597703Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1821,\n \"id\": 155,\n \"playerId\": \"smithja05\",\n \"playerName\": \"Jabari Smith Jr.\",\n \"position\": \"PF\",\n \"age\": 21,\n \"games\": 57,\n \"gamesStarted\": 39,\n \"minutesPg\": 1716,\n \"fieldGoals\": 248,\n \"fieldAttempts\": 566,\n \"fieldPercent\": 0.438,\n \"threeFg\": 98,\n \"threeAttempts\": 277,\n \"threePercent\": 0.354,\n \"twoFg\": 150,\n \"twoAttempts\": 289,\n \"twoPercent\": 0.519,\n \"effectFgPercent\": 0.525,\n \"ft\": 104,\n \"ftAttempts\": 126,\n \"ftPercent\": 0.825,\n \"offensiveRb\": 105,\n \"defensiveRb\": 294,\n \"totalRb\": 399,\n \"assists\": 60,\n \"steals\": 25,\n \"blocks\": 41,\n \"turnovers\": 61,\n \"personalFouls\": 123,\n \"points\": 698,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:07:21.954232Z\",\n \"UpdatedAt\": \"2025-06-20T01:07:21.954232Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1825,\n \"id\": 159,\n \"playerId\": \"easonta01\",\n \"playerName\": \"Tari Eason\",\n \"position\": \"PF\",\n \"age\": 23,\n \"games\": 57,\n \"gamesStarted\": 16,\n \"minutesPg\": 1420,\n \"fieldGoals\": 272,\n \"fieldAttempts\": 559,\n \"fieldPercent\": 0.487,\n \"threeFg\": 63,\n \"threeAttempts\": 184,\n \"threePercent\": 0.342,\n \"twoFg\": 209,\n \"twoAttempts\": 375,\n \"twoPercent\": 0.557,\n \"effectFgPercent\": 0.543,\n \"ft\": 79,\n \"ftAttempts\": 104,\n \"ftPercent\": 0.76,\n \"offensiveRb\": 128,\n \"defensiveRb\": 234,\n \"totalRb\": 362,\n \"assists\": 83,\n \"steals\": 97,\n \"blocks\": 50,\n \"turnovers\": 65,\n \"personalFouls\": 136,\n \"points\": 686,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:07:22.520553Z\",\n \"UpdatedAt\": \"2025-06-20T01:07:22.520553Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1919,\n \"id\": 239,\n \"playerId\": \"whitmca01\",\n \"playerName\": \"Cam Whitmore\",\n \"position\": \"SF\",\n \"age\": 20,\n \"games\": 51,\n \"gamesStarted\": 3,\n \"minutesPg\": 827,\n \"fieldGoals\": 179,\n \"fieldAttempts\": 403,\n \"fieldPercent\": 0.444,\n \"threeFg\": 65,\n \"threeAttempts\": 183,\n \"threePercent\": 0.355,\n \"twoFg\": 114,\n \"twoAttempts\": 220,\n \"twoPercent\": 0.518,\n \"effectFgPercent\": 0.525,\n \"ft\": 54,\n \"ftAttempts\": 72,\n \"ftPercent\": 0.75,\n \"offensiveRb\": 36,\n \"defensiveRb\": 115,\n \"totalRb\": 151,\n \"assists\": 49,\n \"steals\": 31,\n \"blocks\": 13,\n \"turnovers\": 46,\n \"personalFouls\": 44,\n \"points\": 477,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:07:36.322627Z\",\n \"UpdatedAt\": \"2025-06-20T01:07:36.322627Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1992,\n \"id\": 292,\n \"playerId\": \"holidaa01\",\n \"playerName\": \"Aaron Holiday\",\n \"position\": \"PG\",\n \"age\": 28,\n \"games\": 62,\n \"gamesStarted\": 3,\n \"minutesPg\": 792,\n \"fieldGoals\": 117,\n \"fieldAttempts\": 268,\n \"fieldPercent\": 0.437,\n \"threeFg\": 72,\n \"threeAttempts\": 181,\n \"threePercent\": 0.398,\n \"twoFg\": 45,\n \"twoAttempts\": 87,\n \"twoPercent\": 0.517,\n \"effectFgPercent\": 0.571,\n \"ft\": 34,\n \"ftAttempts\": 41,\n \"ftPercent\": 0.829,\n \"offensiveRb\": 13,\n \"defensiveRb\": 65,\n \"totalRb\": 78,\n \"assists\": 83,\n \"steals\": 19,\n \"blocks\": 11,\n \"turnovers\": 37,\n \"personalFouls\": 64,\n \"points\": 340,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:07:46.800477Z\",\n \"UpdatedAt\": \"2025-06-20T01:07:46.800477Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2066,\n \"id\": 344,\n \"playerId\": \"sheppre01\",\n \"playerName\": \"Reed Sheppard\",\n \"position\": \"PG\",\n \"age\": 20,\n \"games\": 52,\n \"gamesStarted\": 3,\n \"minutesPg\": 654,\n \"fieldGoals\": 84,\n \"fieldAttempts\": 239,\n \"fieldPercent\": 0.351,\n \"threeFg\": 48,\n \"threeAttempts\": 142,\n \"threePercent\": 0.338,\n \"twoFg\": 36,\n \"twoAttempts\": 97,\n \"twoPercent\": 0.371,\n \"effectFgPercent\": 0.452,\n \"ft\": 13,\n \"ftAttempts\": 16,\n \"ftPercent\": 0.813,\n \"offensiveRb\": 16,\n \"defensiveRb\": 62,\n \"totalRb\": 78,\n \"assists\": 75,\n \"steals\": 35,\n \"blocks\": 17,\n \"turnovers\": 37,\n \"personalFouls\": 53,\n \"points\": 229,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:07:57.495833Z\",\n \"UpdatedAt\": \"2025-06-20T01:07:57.495833Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2068,\n \"id\": 346,\n \"playerId\": \"adamsst01\",\n \"playerName\": \"Steven Adams\",\n \"position\": \"C\",\n \"age\": 31,\n \"games\": 58,\n \"gamesStarted\": 3,\n \"minutesPg\": 794,\n \"fieldGoals\": 91,\n \"fieldAttempts\": 167,\n \"fieldPercent\": 0.545,\n \"threeFg\": 0,\n \"threeAttempts\": 2,\n \"threePercent\": 0,\n \"twoFg\": 91,\n \"twoAttempts\": 165,\n \"twoPercent\": 0.552,\n \"effectFgPercent\": 0.545,\n \"ft\": 43,\n \"ftAttempts\": 93,\n \"ftPercent\": 0.462,\n \"offensiveRb\": 166,\n \"defensiveRb\": 161,\n \"totalRb\": 327,\n \"assists\": 66,\n \"steals\": 22,\n \"blocks\": 28,\n \"turnovers\": 54,\n \"personalFouls\": 60,\n \"points\": 225,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:07:57.793469Z\",\n \"UpdatedAt\": \"2025-06-20T01:07:57.793469Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2080,\n \"id\": 356,\n \"playerId\": \"landajo01\",\n \"playerName\": \"Jock Landale\",\n \"position\": \"C\",\n \"age\": 29,\n \"games\": 42,\n \"gamesStarted\": 3,\n \"minutesPg\": 500,\n \"fieldGoals\": 81,\n \"fieldAttempts\": 152,\n \"fieldPercent\": 0.533,\n \"threeFg\": 11,\n \"threeAttempts\": 26,\n \"threePercent\": 0.423,\n \"twoFg\": 70,\n \"twoAttempts\": 126,\n \"twoPercent\": 0.556,\n \"effectFgPercent\": 0.569,\n \"ft\": 27,\n \"ftAttempts\": 40,\n \"ftPercent\": 0.675,\n \"offensiveRb\": 56,\n \"defensiveRb\": 81,\n \"totalRb\": 137,\n \"assists\": 37,\n \"steals\": 13,\n \"blocks\": 10,\n \"turnovers\": 21,\n \"personalFouls\": 49,\n \"points\": 200,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:07:59.521078Z\",\n \"UpdatedAt\": \"2025-06-20T01:07:59.521078Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2090,\n \"id\": 364,\n \"playerId\": \"tateja01\",\n \"playerName\": \"Jae'Sean Tate\",\n \"position\": \"SF\",\n \"age\": 29,\n \"games\": 52,\n \"gamesStarted\": 2,\n \"minutesPg\": 588,\n \"fieldGoals\": 70,\n \"fieldAttempts\": 148,\n \"fieldPercent\": 0.473,\n \"threeFg\": 16,\n \"threeAttempts\": 46,\n \"threePercent\": 0.348,\n \"twoFg\": 54,\n \"twoAttempts\": 102,\n \"twoPercent\": 0.529,\n \"effectFgPercent\": 0.527,\n \"ft\": 32,\n \"ftAttempts\": 47,\n \"ftPercent\": 0.681,\n \"offensiveRb\": 50,\n \"defensiveRb\": 67,\n \"totalRb\": 117,\n \"assists\": 47,\n \"steals\": 26,\n \"blocks\": 7,\n \"turnovers\": 22,\n \"personalFouls\": 82,\n \"points\": 188,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:08:00.954562Z\",\n \"UpdatedAt\": \"2025-06-20T01:08:00.954562Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2097,\n \"id\": 371,\n \"playerId\": \"greenje02\",\n \"playerName\": \"Jeff Green\",\n \"position\": \"PF\",\n \"age\": 38,\n \"games\": 32,\n \"gamesStarted\": 3,\n \"minutesPg\": 396,\n \"fieldGoals\": 61,\n \"fieldAttempts\": 121,\n \"fieldPercent\": 0.504,\n \"threeFg\": 29,\n \"threeAttempts\": 79,\n \"threePercent\": 0.367,\n \"twoFg\": 32,\n \"twoAttempts\": 42,\n \"twoPercent\": 0.762,\n \"effectFgPercent\": 0.624,\n \"ft\": 21,\n \"ftAttempts\": 26,\n \"ftPercent\": 0.808,\n \"offensiveRb\": 11,\n \"defensiveRb\": 47,\n \"totalRb\": 58,\n \"assists\": 20,\n \"steals\": 6,\n \"blocks\": 4,\n \"turnovers\": 9,\n \"personalFouls\": 32,\n \"points\": 172,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:08:02.008397Z\",\n \"UpdatedAt\": \"2025-06-20T01:08:02.008397Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2242,\n \"id\": 461,\n \"playerId\": \"willije02\",\n \"playerName\": \"Jeenathan Williams\",\n \"position\": \"SG\",\n \"age\": 25,\n \"games\": 20,\n \"gamesStarted\": 0,\n \"minutesPg\": 147,\n \"fieldGoals\": 27,\n \"fieldAttempts\": 62,\n \"fieldPercent\": 0.435,\n \"threeFg\": 6,\n \"threeAttempts\": 26,\n \"threePercent\": 0.231,\n \"twoFg\": 21,\n \"twoAttempts\": 36,\n \"twoPercent\": 0.583,\n \"effectFgPercent\": 0.484,\n \"ft\": 5,\n \"ftAttempts\": 8,\n \"ftPercent\": 0.625,\n \"offensiveRb\": 5,\n \"defensiveRb\": 8,\n \"totalRb\": 13,\n \"assists\": 9,\n \"steals\": 8,\n \"blocks\": 4,\n \"turnovers\": 14,\n \"personalFouls\": 16,\n \"points\": 65,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:08:23.073002Z\",\n \"UpdatedAt\": \"2025-06-20T01:08:23.073002Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2303,\n \"id\": 508,\n \"playerId\": \"nfalyda01\",\n \"playerName\": \"N'Faly Dante\",\n \"position\": \"C\",\n \"age\": 23,\n \"games\": 4,\n \"gamesStarted\": 0,\n \"minutesPg\": 51,\n \"fieldGoals\": 10,\n \"fieldAttempts\": 13,\n \"fieldPercent\": 0.769,\n \"threeFg\": 0,\n \"threeAttempts\": 0,\n \"threePercent\": 0,\n \"twoFg\": 10,\n \"twoAttempts\": 13,\n \"twoPercent\": 0.769,\n \"effectFgPercent\": 0.769,\n \"ft\": 4,\n \"ftAttempts\": 5,\n \"ftPercent\": 0.8,\n \"offensiveRb\": 6,\n \"defensiveRb\": 15,\n \"totalRb\": 21,\n \"assists\": 2,\n \"steals\": 1,\n \"blocks\": 5,\n \"turnovers\": 2,\n \"personalFouls\": 9,\n \"points\": 24,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:08:31.603297Z\",\n \"UpdatedAt\": \"2025-06-20T01:08:31.603297Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2322,\n \"id\": 525,\n \"playerId\": \"mcveija01\",\n \"playerName\": \"Jack McVeigh\",\n \"position\": \"PF\",\n \"age\": 28,\n \"games\": 9,\n \"gamesStarted\": 0,\n \"minutesPg\": 43,\n \"fieldGoals\": 5,\n \"fieldAttempts\": 17,\n \"fieldPercent\": 0.294,\n \"threeFg\": 4,\n \"threeAttempts\": 13,\n \"threePercent\": 0.308,\n \"twoFg\": 1,\n \"twoAttempts\": 4,\n \"twoPercent\": 0.25,\n \"effectFgPercent\": 0.412,\n \"ft\": 0,\n \"ftAttempts\": 0,\n \"ftPercent\": 0,\n \"offensiveRb\": 2,\n \"defensiveRb\": 3,\n \"totalRb\": 5,\n \"assists\": 1,\n \"steals\": 0,\n \"blocks\": 2,\n \"turnovers\": 2,\n \"personalFouls\": 3,\n \"points\": 14,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:08:34.253789Z\",\n \"UpdatedAt\": \"2025-06-20T01:08:34.253789Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2116,\n \"id\": 385,\n \"playerId\": \"roddyda01\",\n \"playerName\": \"David Roddy\",\n \"position\": \"PF\",\n \"age\": 23,\n \"games\": 3,\n \"gamesStarted\": 0,\n \"minutesPg\": 35,\n \"fieldGoals\": 5,\n \"fieldAttempts\": 13,\n \"fieldPercent\": 0.385,\n \"threeFg\": 1,\n \"threeAttempts\": 7,\n \"threePercent\": 0.143,\n \"twoFg\": 4,\n \"twoAttempts\": 6,\n \"twoPercent\": 0.667,\n \"effectFgPercent\": 0.423,\n \"ft\": 2,\n \"ftAttempts\": 4,\n \"ftPercent\": 0.5,\n \"offensiveRb\": 0,\n \"defensiveRb\": 5,\n \"totalRb\": 5,\n \"assists\": 2,\n \"steals\": 0,\n \"blocks\": 1,\n \"turnovers\": 1,\n \"personalFouls\": 1,\n \"points\": 13,\n \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:08:04.73934Z\",\n \"UpdatedAt\": \"2025-06-20T01:08:04.73934Z\",\n \"DeletedAt\": null\n }\n ],\n \"pagination\": {\n \"page\": 1,\n \"pageSize\": 35,\n \"pages\": 1,\n \"total\": 18\n }\n}" + "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 = `", + "", + "
", + "
Player Statistics
", + "
Season {{season}} | Total Players: {{totalPlayers}}
", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{#each players}}", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{/each}}", + " ", + "
PlayerPosGamesPointsAssistsReboundsPPG
{{playerName}}{{position}}{{games}}{{points}}{{assists}}{{totalRb}}{{ppg}}
", + "
", + "`;", + "", + "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 = `", + "", + "
", + "
Player Statistics
", + "
Season {{season}} | Total Players: {{totalPlayers}}
", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{#each players}}", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{/each}}", + " ", + "
PlayerPosGamesPointsAssistsReboundsPPG
{{playerName}}{{position}}{{games}}{{points}}{{assists}}{{totalRb}}{{ppg}}
", + "
", + "`;", + "", + "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": [ @@ -331,10 +1845,6 @@ " pm.expect(responseData.data).to.be.an('array');", " ", " responseData.data.forEach(function(player) {", - " pm.expect(player).to.have.property('ID');", - " pm.expect(player).to.have.property('CreatedAt');", - " pm.expect(player).to.have.property('UpdatedAt');", - " pm.expect(player).to.have.property('DeletedAt');", " pm.expect(player).to.have.property('playerId');", " pm.expect(player).to.have.property('playerName');", " pm.expect(player).to.have.property('position');", @@ -355,106 +1865,262 @@ " pm.expect(responseData.pagination).to.have.property('pages');", " pm.expect(responseData.pagination).to.have.property('total');", "});", + "", + "// Player Statistics Visualization", "var template = `", - "", "", - "", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", + "
", + "
", + "

πŸ€ Player Statistics

", + "

{{subtitle}}

", + "
", " ", - " {{#each response.data}}", - "
", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " {{/each}}", - "
IDCreatedAtUpdatedAtDeletedAtidplayerIdplayerNamepositionagegamesgamesStartedminutesPgfieldGoalsfieldAttemptsfieldPercentthreeFgthreeAttemptsthreePercenttwoFgtwoAttemptstwoPercenteffectFgPercentftftAttemptsftPercentoffensiveRbdefensiveRbtotalRbassistsstealsblocksturnoverspersonalFoulspointsteamseason
{{ID}}{{CreatedAt}}{{UpdatedAt}}{{DeletedAt}}{{id}}{{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}}
", + " {{#if hasData}}", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{#each players}}", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " {{/each}}", + " ", + "
Player NamePositionGamesPointsAssistsReboundsFG%
{{playerName}}{{position}}{{games}}{{points}}{{assists}}{{totalRb}}{{fieldPercent}}
", + " ", + "
", + "
", + " Page:", + " {{pagination.page}} of {{pagination.pages}}", + "
", + "
", + " Showing:", + " {{pagination.pageSize}} players", + "
", + "
", + " Total Players:", + " {{pagination.total}}", + "
", + "
", + " {{else}}", + "
No player data available
", + " {{/if}}", + "", + "", + "", "`;", "", "function constructVisualizerPayload() {", - " return {response: pm.response.json()}", + " 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": {} + "packages": {}, + "requests": {} } }, { @@ -464,7 +2130,8 @@ "" ], "type": "text/javascript", - "packages": {} + "packages": {}, + "requests": {} } } ], @@ -479,7 +2146,7 @@ } ], "url": { - "raw": "{{base_url}}/api/playertotals?season=2019&page=1&pageSize=20&sortBy=assists&isPlayoff=true", + "raw": "{{base_url}}/api/playertotals?team=HOU&page=1&pageSize=10&sortBy=assists&isPlayoff=true&season={{season}}", "host": [ "{{base_url}}" ], @@ -488,16 +2155,10 @@ "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 + "description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL)." }, { "key": "page", @@ -506,7 +2167,7 @@ }, { "key": "pageSize", - "value": "20", + "value": "10", "description": "(Optional) The number of results to return per page. Defaults to 20." }, { @@ -518,6 +2179,10 @@ "key": "isPlayoff", "value": "true", "description": "(Optional) Set to 'true' to retrieve playoff stats, or 'false' for regular season stats." + }, + { + "key": "season", + "value": "{{season}}" } ] }, @@ -537,9 +2202,13 @@ } ], "url": { - "raw": "{{base_url}}/api/playertotals?season=2019&page=1&pageSize=20&sortBy=assists&isPlayoff=true", + "raw": "https://api.server.nbaapi.com/api/playertotals?season=2019&page=1&pageSize=10&sortBy=assists&isPlayoff=true", + "protocol": "https", "host": [ - "{{base_url}}" + "api", + "server", + "nbaapi", + "com" ], "path": [ "api", @@ -564,7 +2233,7 @@ }, { "key": "pageSize", - "value": "20", + "value": "10", "description": "(Optional) The number of results to return per page. Defaults to 20." }, { @@ -642,9 +2311,6 @@ " pm.expect(responseData.data).to.be.an('array').that.is.not.empty;", " ", " responseData.data.forEach(function(playerStats) {", - " pm.expect(playerStats).to.have.property('ID');", - " pm.expect(playerStats).to.have.property('CreatedAt');", - " pm.expect(playerStats).to.have.property('UpdatedAt');", " pm.expect(playerStats).to.have.property('playerId');", " pm.expect(playerStats).to.have.property('playerName');", " pm.expect(playerStats).to.have.property('position');", @@ -675,12 +2341,94 @@ " 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 = `", + "

Top Players by Win Shares

", + "", + "", + "", + "`;", + "", + "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": {} + "packages": {}, + "requests": {} } }, { @@ -690,7 +2438,8 @@ "" ], "type": "text/javascript", - "packages": {} + "packages": {}, + "requests": {} } } ], @@ -705,7 +2454,7 @@ } ], "url": { - "raw": "{{base_url}}/api/playeradvancedstats?season=2025&team=HOU&page=1&pageSize=35&sortBy=vorp&ascending=false&isPlayoff=false", + "raw": "{{base_url}}/api/playeradvancedstats?season=2026&team=HOU&page=1&pageSize=15&ascending=false&isPlayoff=false", "host": [ "{{base_url}}" ], @@ -716,7 +2465,7 @@ "query": [ { "key": "season", - "value": "2025", + "value": "2026", "description": "(Optional) The NBA season year (e.g., 2025 for the 2024-25 season)." }, { @@ -731,13 +2480,14 @@ }, { "key": "pageSize", - "value": "35", + "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'." + "description": "(Optional) The field to sort the results by. Defaults to 'winShares'.", + "disabled": true }, { "key": "ascending", @@ -816,7 +2566,7 @@ }, "status": "OK", "code": 200, - "_postman_previewlanguage": "json", + "_postman_previewlanguage": null, "header": [ { "key": "Alt-Svc", @@ -832,7 +2582,7 @@ }, { "key": "Date", - "value": "Wed, 02 Jul 2025 01:18:43 GMT" + "value": "Tue, 16 Dec 2025 07:39:43 GMT" }, { "key": "Server", @@ -843,12 +2593,12 @@ "value": "Accept-Encoding" }, { - "key": "Transfer-Encoding", - "value": "chunked" + "key": "Content-Length", + "value": "1787" } ], "cookie": [], - "body": "{\n \"data\": [\n {\n \"ID\": 1451,\n \"id\": 35,\n \"playerId\": \"sengual01\",\n \"playerName\": \"Alperen Şengün\",\n \"position\": \"C\",\n \"age\": 22,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T00:59:56.345088Z\",\n \"UpdatedAt\": \"2025-06-20T00:59:56.345088Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1475,\n \"id\": 57,\n \"playerId\": \"thompam01\",\n \"playerName\": \"Amen Thompson\",\n \"position\": \"SF\",\n \"age\": 22,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T00:59:59.812013Z\",\n \"UpdatedAt\": \"2025-06-20T00:59:59.812013Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1643,\n \"id\": 190,\n \"playerId\": \"easonta01\",\n \"playerName\": \"Tari Eason\",\n \"position\": \"PF\",\n \"age\": 23,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:00:25.170944Z\",\n \"UpdatedAt\": \"2025-06-20T01:00:25.170944Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1424,\n \"id\": 10,\n \"playerId\": \"greenja05\",\n \"playerName\": \"Jalen Green\",\n \"position\": \"SG\",\n \"age\": 22,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T00:59:52.368605Z\",\n \"UpdatedAt\": \"2025-06-20T00:59:52.368605Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1494,\n \"id\": 74,\n \"playerId\": \"vanvlfr01\",\n \"playerName\": \"Fred VanVleet\",\n \"position\": \"PG\",\n \"age\": 30,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:00:02.726841Z\",\n \"UpdatedAt\": \"2025-06-20T01:00:02.726841Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1583,\n \"id\": 144,\n \"playerId\": \"smithja05\",\n \"playerName\": \"Jabari Smith Jr.\",\n \"position\": \"PF\",\n \"age\": 21,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:00:16.318994Z\",\n \"UpdatedAt\": \"2025-06-20T01:00:16.318994Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1792,\n \"id\": 301,\n \"playerId\": \"whitmca01\",\n \"playerName\": \"Cam Whitmore\",\n \"position\": \"SF\",\n \"age\": 20,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:00:46.875219Z\",\n \"UpdatedAt\": \"2025-06-20T01:00:46.875219Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1795,\n \"id\": 304,\n \"playerId\": \"adamsst01\",\n \"playerName\": \"Steven Adams\",\n \"position\": \"C\",\n \"age\": 31,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:00:47.313648Z\",\n \"UpdatedAt\": \"2025-06-20T01:00:47.313648Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1452,\n \"id\": 36,\n \"playerId\": \"brookdi01\",\n \"playerName\": \"Dillon Brooks\",\n \"position\": \"SF\",\n \"age\": 29,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T00:59:56.492538Z\",\n \"UpdatedAt\": \"2025-06-20T00:59:56.492538Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1796,\n \"id\": 305,\n \"playerId\": \"holidaa01\",\n \"playerName\": \"Aaron Holiday\",\n \"position\": \"PG\",\n \"age\": 28,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:00:47.482453Z\",\n \"UpdatedAt\": \"2025-06-20T01:00:47.482453Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1888,\n \"id\": 375,\n \"playerId\": \"landajo01\",\n \"playerName\": \"Jock Landale\",\n \"position\": \"C\",\n \"age\": 29,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:01:00.821492Z\",\n \"UpdatedAt\": \"2025-06-20T01:01:00.821492Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1862,\n \"id\": 353,\n \"playerId\": \"tateja01\",\n \"playerName\": \"Jae'Sean Tate\",\n \"position\": \"SF\",\n \"age\": 29,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:00:57.110788Z\",\n \"UpdatedAt\": \"2025-06-20T01:00:57.110788Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1931,\n \"id\": 404,\n \"playerId\": \"greenje02\",\n \"playerName\": \"Jeff Green\",\n \"position\": \"PF\",\n \"age\": 38,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:01:07.235443Z\",\n \"UpdatedAt\": \"2025-06-20T01:01:07.235443Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1837,\n \"id\": 336,\n \"playerId\": \"sheppre01\",\n \"playerName\": \"Reed Sheppard\",\n \"position\": \"PG\",\n \"age\": 20,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:00:53.498684Z\",\n \"UpdatedAt\": \"2025-06-20T01:00:53.498684Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2101,\n \"id\": 523,\n \"playerId\": \"nfalyda01\",\n \"playerName\": \"N'Faly Dante\",\n \"position\": \"C\",\n \"age\": 23,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:01:31.754493Z\",\n \"UpdatedAt\": \"2025-06-20T01:01:31.754493Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 1924,\n \"id\": 397,\n \"playerId\": \"roddyda01\",\n \"playerName\": \"David Roddy\",\n \"position\": \"PF\",\n \"age\": 23,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:01:06.249889Z\",\n \"UpdatedAt\": \"2025-06-20T01:01:06.249889Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2038,\n \"id\": 472,\n \"playerId\": \"willije02\",\n \"playerName\": \"Jeenathan Williams\",\n \"position\": \"SG\",\n \"age\": 25,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:01:22.535279Z\",\n \"UpdatedAt\": \"2025-06-20T01:01:22.535279Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2106,\n \"id\": 528,\n \"playerId\": \"mcveija01\",\n \"playerName\": \"Jack McVeigh\",\n \"position\": \"PF\",\n \"age\": 28,\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 \"team\": \"HOU\",\n \"season\": 2025,\n \"isPlayoff\": false,\n \"CreatedAt\": \"2025-06-20T01:01:32.499427Z\",\n \"UpdatedAt\": \"2025-06-20T01:01:32.499427Z\",\n \"DeletedAt\": null\n }\n ],\n \"pagination\": {\n \"total\": 18,\n \"page\": 1,\n \"pageSize\": 35,\n \"pages\": 1\n }\n}" + "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}" } ] }, @@ -859,62 +2609,127 @@ "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('ID');", - " pm.expect(playerStats).to.have.property('CreatedAt');", - " pm.expect(playerStats).to.have.property('UpdatedAt');", - " 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');", + "// Visualization Script", + "// Visualization Script", + "var template = `", + "

Player Advanced Playoff Stats - Win Shares Comparison

", + "", + "", + "", + "`;", + "", + "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": {} + "packages": {}, + "requests": {} } }, { @@ -924,7 +2739,8 @@ "" ], "type": "text/javascript", - "packages": {} + "packages": {}, + "requests": {} } } ], @@ -939,7 +2755,7 @@ } ], "url": { - "raw": "{{base_url}}/api/playeradvancedstats?season=2025&team=OKC&page=1&pageSize=35&sortBy=defensiveBox&ascending=false&isPlayoff=true", + "raw": "{{base_url}}/api/playeradvancedstats?season=2025&team=HOU&page=1&pageSize=4&sortBy=defensiveBox&ascending=false&isPlayoff=true", "host": [ "{{base_url}}" ], @@ -955,7 +2771,7 @@ }, { "key": "team", - "value": "OKC", + "value": "HOU", "description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL)." }, { @@ -965,7 +2781,7 @@ }, { "key": "pageSize", - "value": "35", + "value": "4", "description": "(Optional) The number of results to return per page. Defaults to 20." }, { @@ -1001,7 +2817,7 @@ } ], "url": { - "raw": "{{base_url}}/api/playeradvancedstats?season=2025&team=OKC&page=1&pageSize=35&sortBy=defensiveBox&ascending=false&isPlayoff=true", + "raw": "{{base_url}}/api/playeradvancedstats?season=2025&team=HOU&page=1&pageSize=4&sortBy=defensiveBox&ascending=false&isPlayoff=true", "host": [ "{{base_url}}" ], @@ -1017,7 +2833,7 @@ }, { "key": "team", - "value": "OKC", + "value": "HOU", "description": "(Optional) The three-letter team abbreviation (e.g., LAL, HOU, MIL)." }, { @@ -1027,7 +2843,7 @@ }, { "key": "pageSize", - "value": "35", + "value": "4", "description": "(Optional) The number of results to return per page. Defaults to 20." }, { @@ -1050,7 +2866,7 @@ }, "status": "OK", "code": 200, - "_postman_previewlanguage": "json", + "_postman_previewlanguage": null, "header": [ { "key": "Alt-Svc", @@ -1066,7 +2882,7 @@ }, { "key": "Date", - "value": "Wed, 02 Jul 2025 01:18:52 GMT" + "value": "Tue, 16 Dec 2025 07:38:58 GMT" }, { "key": "Server", @@ -1078,11 +2894,11 @@ }, { "key": "Content-Length", - "value": "1692" + "value": "611" } ], "cookie": [], - "body": "{\n \"data\": [\n {\n \"ID\": 2612,\n \"id\": 32,\n \"playerId\": \"carusal01\",\n \"playerName\": \"Alex Caruso\",\n \"position\": \"SG\",\n \"age\": 30,\n \"games\": 23,\n \"minutesPlayed\": 562,\n \"per\": 15.1,\n \"tsPercent\": 0.598,\n \"threePAR\": 0.563,\n \"ftr\": 0.244,\n \"offensiveRBPercent\": 3.3,\n \"defensiveRBPercent\": 8.8,\n \"totalRBPercent\": 6,\n \"assistPercent\": 12.6,\n \"stealPercent\": 3.9,\n \"blockPercent\": 2.3,\n \"turnoverPercent\": 9.7,\n \"usagePercent\": 14.8,\n \"offensiveWS\": 0.9,\n \"defensiveWS\": 1.1,\n \"winShares\": 2,\n \"winSharesPer\": 0.169,\n \"offensiveBox\": 0.4,\n \"defensiveBox\": 4.7,\n \"box\": 5,\n \"vorp\": 1,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:02:53.068472Z\",\n \"UpdatedAt\": \"2025-06-20T01:02:53.068472Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2794,\n \"id\": 214,\n \"playerId\": \"willija07\",\n \"playerName\": \"Jaylin Williams\",\n \"position\": \"PF\",\n \"age\": 22,\n \"games\": 17,\n \"minutesPlayed\": 141,\n \"per\": 9.7,\n \"tsPercent\": 0.565,\n \"threePAR\": 0.714,\n \"ftr\": 0.314,\n \"offensiveRBPercent\": 3.1,\n \"defensiveRBPercent\": 21.8,\n \"totalRBPercent\": 12.3,\n \"assistPercent\": 16.2,\n \"stealPercent\": 2.8,\n \"blockPercent\": 1.4,\n \"turnoverPercent\": 23.1,\n \"usagePercent\": 15.6,\n \"offensiveWS\": 0,\n \"defensiveWS\": 0.3,\n \"winShares\": 0.3,\n \"winSharesPer\": 0.091,\n \"offensiveBox\": -4,\n \"defensiveBox\": 4.4,\n \"box\": 0.4,\n \"vorp\": 0.1,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:03:19.343959Z\",\n \"UpdatedAt\": \"2025-06-20T01:03:19.343959Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2683,\n \"id\": 103,\n \"playerId\": \"jonesdi01\",\n \"playerName\": \"Dillon Jones\",\n \"position\": \"SF\",\n \"age\": 23,\n \"games\": 10,\n \"minutesPlayed\": 46,\n \"per\": 19.2,\n \"tsPercent\": 0.968,\n \"threePAR\": 0.364,\n \"ftr\": 0.182,\n \"offensiveRBPercent\": 7,\n \"defensiveRBPercent\": 14.3,\n \"totalRBPercent\": 10.6,\n \"assistPercent\": 16.6,\n \"stealPercent\": 1.1,\n \"blockPercent\": 2.2,\n \"turnoverPercent\": 33.6,\n \"usagePercent\": 16.5,\n \"offensiveWS\": 0.1,\n \"defensiveWS\": 0.1,\n \"winShares\": 0.2,\n \"winSharesPer\": 0.179,\n \"offensiveBox\": 3.4,\n \"defensiveBox\": 4,\n \"box\": 7.5,\n \"vorp\": 0.1,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:03:03.218018Z\",\n \"UpdatedAt\": \"2025-06-20T01:03:03.218018Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2784,\n \"id\": 204,\n \"playerId\": \"wallaca01\",\n \"playerName\": \"Cason Wallace\",\n \"position\": \"SG\",\n \"age\": 21,\n \"games\": 23,\n \"minutesPlayed\": 516,\n \"per\": 10.8,\n \"tsPercent\": 0.52,\n \"threePAR\": 0.521,\n \"ftr\": 0.076,\n \"offensiveRBPercent\": 4.8,\n \"defensiveRBPercent\": 8.1,\n \"totalRBPercent\": 6.4,\n \"assistPercent\": 12.4,\n \"stealPercent\": 3,\n \"blockPercent\": 1.9,\n \"turnoverPercent\": 11.5,\n \"usagePercent\": 11.4,\n \"offensiveWS\": 0.3,\n \"defensiveWS\": 0.8,\n \"winShares\": 1.2,\n \"winSharesPer\": 0.111,\n \"offensiveBox\": -1.7,\n \"defensiveBox\": 3.7,\n \"box\": 2,\n \"vorp\": 0.5,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:03:17.911668Z\",\n \"UpdatedAt\": \"2025-06-20T01:03:17.911668Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2638,\n \"id\": 58,\n \"playerId\": \"gilgesh01\",\n \"playerName\": \"Shai Gilgeous-Alexander\",\n \"position\": \"PG\",\n \"age\": 26,\n \"games\": 23,\n \"minutesPlayed\": 851,\n \"per\": 25.3,\n \"tsPercent\": 0.574,\n \"threePAR\": 0.224,\n \"ftr\": 0.431,\n \"offensiveRBPercent\": 2.9,\n \"defensiveRBPercent\": 12.9,\n \"totalRBPercent\": 7.9,\n \"assistPercent\": 30.6,\n \"stealPercent\": 2.2,\n \"blockPercent\": 2.4,\n \"turnoverPercent\": 9.1,\n \"usagePercent\": 32.9,\n \"offensiveWS\": 2.6,\n \"defensiveWS\": 1.4,\n \"winShares\": 3.9,\n \"winSharesPer\": 0.222,\n \"offensiveBox\": 5.7,\n \"defensiveBox\": 2.6,\n \"box\": 8.3,\n \"vorp\": 2.2,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:02:56.768423Z\",\n \"UpdatedAt\": \"2025-06-20T01:02:56.768423Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2654,\n \"id\": 74,\n \"playerId\": \"harteis01\",\n \"playerName\": \"Isaiah Hartenstein\",\n \"position\": \"C\",\n \"age\": 26,\n \"games\": 23,\n \"minutesPlayed\": 516,\n \"per\": 18.3,\n \"tsPercent\": 0.632,\n \"threePAR\": 0,\n \"ftr\": 0.224,\n \"offensiveRBPercent\": 13.2,\n \"defensiveRBPercent\": 23.4,\n \"totalRBPercent\": 18.2,\n \"assistPercent\": 14.3,\n \"stealPercent\": 1.8,\n \"blockPercent\": 2.3,\n \"turnoverPercent\": 15.5,\n \"usagePercent\": 14.3,\n \"offensiveWS\": 1.1,\n \"defensiveWS\": 1,\n \"winShares\": 2.1,\n \"winSharesPer\": 0.199,\n \"offensiveBox\": 0.9,\n \"defensiveBox\": 2.6,\n \"box\": 3.5,\n \"vorp\": 0.7,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:02:59.067598Z\",\n \"UpdatedAt\": \"2025-06-20T01:02:59.067598Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2678,\n \"id\": 98,\n \"playerId\": \"joeis01\",\n \"playerName\": \"Isaiah Joe\",\n \"position\": \"SG\",\n \"age\": 25,\n \"games\": 21,\n \"minutesPlayed\": 211,\n \"per\": 17.4,\n \"tsPercent\": 0.676,\n \"threePAR\": 0.767,\n \"ftr\": 0.192,\n \"offensiveRBPercent\": 3.6,\n \"defensiveRBPercent\": 11.4,\n \"totalRBPercent\": 7.5,\n \"assistPercent\": 9.8,\n \"stealPercent\": 1.6,\n \"blockPercent\": 0.9,\n \"turnoverPercent\": 8.1,\n \"usagePercent\": 17.3,\n \"offensiveWS\": 0.6,\n \"defensiveWS\": 0.3,\n \"winShares\": 0.8,\n \"winSharesPer\": 0.192,\n \"offensiveBox\": 3.5,\n \"defensiveBox\": 2.1,\n \"box\": 5.6,\n \"vorp\": 0.4,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:03:02.486429Z\",\n \"UpdatedAt\": \"2025-06-20T01:03:02.486429Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2793,\n \"id\": 213,\n \"playerId\": \"willija06\",\n \"playerName\": \"Jalen Williams\",\n \"position\": \"SG\",\n \"age\": 23,\n \"games\": 23,\n \"minutesPlayed\": 796,\n \"per\": 19.1,\n \"tsPercent\": 0.544,\n \"threePAR\": 0.29,\n \"ftr\": 0.323,\n \"offensiveRBPercent\": 3.2,\n \"defensiveRBPercent\": 14.2,\n \"totalRBPercent\": 8.7,\n \"assistPercent\": 22.3,\n \"stealPercent\": 2,\n \"blockPercent\": 1.1,\n \"turnoverPercent\": 8.3,\n \"usagePercent\": 26.3,\n \"offensiveWS\": 1.3,\n \"defensiveWS\": 1.2,\n \"winShares\": 2.5,\n \"winSharesPer\": 0.153,\n \"offensiveBox\": 2.5,\n \"defensiveBox\": 1.7,\n \"box\": 4.2,\n \"vorp\": 1.2,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:03:19.204511Z\",\n \"UpdatedAt\": \"2025-06-20T01:03:19.204511Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2663,\n \"id\": 83,\n \"playerId\": \"holmgch01\",\n \"playerName\": \"Chet Holmgren\",\n \"position\": \"C\",\n \"age\": 22,\n \"games\": 23,\n \"minutesPlayed\": 686,\n \"per\": 18.1,\n \"tsPercent\": 0.565,\n \"threePAR\": 0.342,\n \"ftr\": 0.365,\n \"offensiveRBPercent\": 6.6,\n \"defensiveRBPercent\": 25.1,\n \"totalRBPercent\": 15.8,\n \"assistPercent\": 4.8,\n \"stealPercent\": 1.2,\n \"blockPercent\": 6.3,\n \"turnoverPercent\": 8.3,\n \"usagePercent\": 20.8,\n \"offensiveWS\": 0.9,\n \"defensiveWS\": 1.4,\n \"winShares\": 2.3,\n \"winSharesPer\": 0.161,\n \"offensiveBox\": 0.9,\n \"defensiveBox\": 1.5,\n \"box\": 2.4,\n \"vorp\": 0.8,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:03:00.356697Z\",\n \"UpdatedAt\": \"2025-06-20T01:03:00.356697Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2627,\n \"id\": 47,\n \"playerId\": \"dortlu01\",\n \"playerName\": \"Luguentz Dort\",\n \"position\": \"SF\",\n \"age\": 25,\n \"games\": 23,\n \"minutesPlayed\": 666,\n \"per\": 8.1,\n \"tsPercent\": 0.524,\n \"threePAR\": 0.854,\n \"ftr\": 0.134,\n \"offensiveRBPercent\": 5.2,\n \"defensiveRBPercent\": 9.4,\n \"totalRBPercent\": 7.3,\n \"assistPercent\": 4,\n \"stealPercent\": 2.1,\n \"blockPercent\": 1.5,\n \"turnoverPercent\": 10.3,\n \"usagePercent\": 12.3,\n \"offensiveWS\": 0.2,\n \"defensiveWS\": 1,\n \"winShares\": 1.1,\n \"winSharesPer\": 0.081,\n \"offensiveBox\": -2.3,\n \"defensiveBox\": 1.4,\n \"box\": -0.9,\n \"vorp\": 0.2,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:02:55.202425Z\",\n \"UpdatedAt\": \"2025-06-20T01:02:55.202425Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2623,\n \"id\": 43,\n \"playerId\": \"diengou01\",\n \"playerName\": \"Ousmane Dieng\",\n \"position\": \"C\",\n \"age\": 21,\n \"games\": 9,\n \"minutesPlayed\": 32,\n \"per\": 16.2,\n \"tsPercent\": 0.643,\n \"threePAR\": 0.7,\n \"ftr\": 0.2,\n \"offensiveRBPercent\": 0,\n \"defensiveRBPercent\": 13.7,\n \"totalRBPercent\": 6.8,\n \"assistPercent\": 12.9,\n \"stealPercent\": 0,\n \"blockPercent\": 3.1,\n \"turnoverPercent\": 0,\n \"usagePercent\": 14.4,\n \"offensiveWS\": 0.1,\n \"defensiveWS\": 0,\n \"winShares\": 0.1,\n \"winSharesPer\": 0.202,\n \"offensiveBox\": 4.9,\n \"defensiveBox\": 1.3,\n \"box\": 6.3,\n \"vorp\": 0.1,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:02:54.622461Z\",\n \"UpdatedAt\": \"2025-06-20T01:02:54.622461Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2796,\n \"id\": 216,\n \"playerId\": \"willike04\",\n \"playerName\": \"Kenrich Williams\",\n \"position\": \"PF\",\n \"age\": 30,\n \"games\": 16,\n \"minutesPlayed\": 137,\n \"per\": 9.9,\n \"tsPercent\": 0.457,\n \"threePAR\": 0.5,\n \"ftr\": 0.15,\n \"offensiveRBPercent\": 6.3,\n \"defensiveRBPercent\": 21.6,\n \"totalRBPercent\": 13.9,\n \"assistPercent\": 7,\n \"stealPercent\": 2.5,\n \"blockPercent\": 0.7,\n \"turnoverPercent\": 14.1,\n \"usagePercent\": 15.4,\n \"offensiveWS\": -0.1,\n \"defensiveWS\": 0.3,\n \"winShares\": 0.1,\n \"winSharesPer\": 0.052,\n \"offensiveBox\": -2.6,\n \"defensiveBox\": 0.8,\n \"box\": -1.8,\n \"vorp\": 0,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:03:19.635894Z\",\n \"UpdatedAt\": \"2025-06-20T01:03:19.635894Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2791,\n \"id\": 211,\n \"playerId\": \"wiggiaa01\",\n \"playerName\": \"Aaron Wiggins\",\n \"position\": \"SG\",\n \"age\": 26,\n \"games\": 22,\n \"minutesPlayed\": 303,\n \"per\": 11.8,\n \"tsPercent\": 0.522,\n \"threePAR\": 0.58,\n \"ftr\": 0.143,\n \"offensiveRBPercent\": 5,\n \"defensiveRBPercent\": 13,\n \"totalRBPercent\": 9,\n \"assistPercent\": 9.5,\n \"stealPercent\": 1.6,\n \"blockPercent\": 2,\n \"turnoverPercent\": 11.8,\n \"usagePercent\": 20.1,\n \"offensiveWS\": 0,\n \"defensiveWS\": 0.4,\n \"winShares\": 0.4,\n \"winSharesPer\": 0.071,\n \"offensiveBox\": -0.5,\n \"defensiveBox\": 0.6,\n \"box\": 0.1,\n \"vorp\": 0.2,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:03:18.910441Z\",\n \"UpdatedAt\": \"2025-06-20T01:03:18.910441Z\",\n \"DeletedAt\": null\n },\n {\n \"ID\": 2715,\n \"id\": 135,\n \"playerId\": \"mitchaj01\",\n \"playerName\": \"Ajay Mitchell\",\n \"position\": \"SG\",\n \"age\": 22,\n \"games\": 12,\n \"minutesPlayed\": 84,\n \"per\": 12.2,\n \"tsPercent\": 0.551,\n \"threePAR\": 0.371,\n \"ftr\": 0.143,\n \"offensiveRBPercent\": 3.8,\n \"defensiveRBPercent\": 7.8,\n \"totalRBPercent\": 5.8,\n \"assistPercent\": 16.2,\n \"stealPercent\": 1.2,\n \"blockPercent\": 0,\n \"turnoverPercent\": 13.9,\n \"usagePercent\": 21.8,\n \"offensiveWS\": 0,\n \"defensiveWS\": 0.1,\n \"winShares\": 0.1,\n \"winSharesPer\": 0.067,\n \"offensiveBox\": -1.3,\n \"defensiveBox\": -0.1,\n \"box\": -1.4,\n \"vorp\": 0,\n \"team\": \"OKC\",\n \"season\": 2025,\n \"isPlayoff\": true,\n \"CreatedAt\": \"2025-06-20T01:03:07.867398Z\",\n \"UpdatedAt\": \"2025-06-20T01:03:07.867398Z\",\n \"DeletedAt\": null\n }\n ],\n \"pagination\": {\n \"total\": 14,\n \"page\": 1,\n \"pageSize\": 35,\n \"pages\": 1\n }\n}" + "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}" } ] }, @@ -1541,6 +3357,403 @@ "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 = `", + "", + "", + "
", + "

Player Advanced Stats Comparison

", + "

{{team}} - {{season}} {{playoffLabel}}

", + " ", + "
", + "
", + "
{{totalPlayers}}
", + "
Players
", + "
", + "
", + "
{{avgWinShares}}
", + "
Avg Win Shares
", + "
", + "
", + "
{{avgBox}}
", + "
Avg Box +/-
", + "
", + "
", + "
{{topPlayer}}
", + "
Top Performer
", + "
", + "
", + " ", + "
", + " ", + "
", + " ", + "
", + " ", + "
", + " ", + "

Data sorted by Defensive Box +/- (descending)

", + "
", + "", + "", + "", + "`;", + "", + "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": [ @@ -1591,6 +3804,10 @@ "key": "base_url_2", "value": "https://nbago.server.nbaapi.com", "type": "string" + }, + { + "key": "season", + "value": "2019" } ] } \ No newline at end of file diff --git a/docs/postman/postman_docs.md b/docs/postman/postman_docs.md new file mode 100644 index 0000000..6ebacb2 --- /dev/null +++ b/docs/postman/postman_docs.md @@ -0,0 +1,24 @@ +# Run Collection Button Code + +## HTML + +```html +
+ +``` + +## Markdown + +[Run In Postman](https://god.gw.postman.com/run-collection/25652688-f0cb3c13-063b-490a-aa7f-5af135aacbe6?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D25652688-f0cb3c13-063b-490a-aa7f-5af135aacbe6%26entityType%3Dcollection%26workspaceId%3Dbb6fcb02-8388-4ce0-8623-63480a6dc153) diff --git a/docs/restore_dump_local.md b/docs/restore_dump_local.md new file mode 100644 index 0000000..481de39 --- /dev/null +++ b/docs/restore_dump_local.md @@ -0,0 +1,13 @@ +# Restore to local container + +```bash +docker exec nba_go-postgres-1 pg_dump -U nbago -Fc nba_db > ./2025.12.05_nba_backup.dump +``` + +Copy file into target DB container + +```bash +docker exec nba_postgres psql -U nba_admin -d nba_analytics -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;" + +pg_restore -U nba_admin -d nba_analytics --no-owner --no-acl ./2025.12.05_nba_backup.dump +``` diff --git a/import.go b/import.go index a252895..9007ab2 100644 --- a/import.go +++ b/import.go @@ -10,9 +10,9 @@ import ( "gorm.io/gorm" ) -// importPlayerAdvanced fetches and stores advanced stats for seasons 2017–2025 +// importPlayerAdvanced fetches and stores advanced stats for seasons func importPlayerAdvanced(db *gorm.DB) { - for season := 2003; season <= 2017; season++ { + for season := 2026; season <= 2026; season++ { if err := services.FetchAndStorePlayerAdvancedScrapedStats(db, season, false); err != nil { log.Printf("advanced import failed for %d: %v", season, err) } @@ -22,9 +22,9 @@ func importPlayerAdvanced(db *gorm.DB) { } } -// importPlayerAdvancedPlayoffs fetches and stores advanced stats for playoffs seasons 2023–2025 +// importPlayerAdvancedPlayoffs fetches and stores advanced stats for playoffs seasons func importPlayerAdvancedPlayoffs(db *gorm.DB) { - for season := 2003; season <= 2017; season++ { + for season := 2026; season <= 2026; season++ { if err := services.FetchAndStorePlayerAdvancedScrapedStats(db, season, true); err != nil { log.Printf("advanced import failed for %d: %v", season, err) } @@ -36,7 +36,7 @@ func importPlayerAdvancedPlayoffs(db *gorm.DB) { // importPlayerTotalsScrape fetches & stores scraped regular-season total stats func importPlayerTotalsScrape(db *gorm.DB) { - for season := 2003; season <= 2017; season++ { + for season := 2026; season <= 2026; season++ { if err := services.FetchAndStorePlayerTotalScrapedStats(db, season, false); err != nil { log.Printf("scraped totals import failed for %d: %v", season, err) } @@ -48,7 +48,7 @@ func importPlayerTotalsScrape(db *gorm.DB) { // importPlayerPlayoffsScrape fetches & stores scraped playoff total stats func importPlayerTotalsPlayoffsScrape(db *gorm.DB) { - for season := 2003; season <= 2017; season++ { + for season := 2026; season <= 2026; season++ { if err := services.FetchAndStorePlayerTotalScrapedStats(db, season, true); err != nil { log.Printf("scraped playoffs import failed for %d: %v", season, err) } @@ -62,13 +62,14 @@ func importPlayerTotalsPlayoffsScrape(db *gorm.DB) { func importGameSchedules(db *gorm.DB) { // An NBA season typically runs from October to June months := []string{ - "september", "october", "november", "december", "january", - "february", "march", "april", "may", "june", - + // "september", "october", "november", "december", "january", // "february", "march", "april", "may", "june", + "december", + // "february", "march", "april", "may", "june", + // "october", "november", "december", } - for season := 2015; season <= 2015; season++ { + for season := 2025; season <= 2026; season++ { log.Printf("--- Starting Game Schedule Import for Season: %d ---", season) for _, month := range months { // The service will print a warning and skip if a month has no data (e.g. May/June for a season not yet finished) @@ -88,8 +89,11 @@ func importGameSchedules(db *gorm.DB) { // importBoxScores fetches and stores all box score data (line scores, player/team stats) // for games within a recent date range. func importBoxScores(db *gorm.DB) { - from := time.Date(2025, time.November, 1, 0, 0, 0, 0, time.UTC) - to := time.Date(2025, time.December, 1, 0, 0, 0, 0, time.UTC) + // now := time.Now() + + from := time.Date(2025, time.December, 12, 0, 0, 0, 0, time.UTC) + // from := time.Date(now.Year(), now.Month(), now.Day()-1, 5, 30, 0, 0, time.UTC) + to := time.Date(2025, time.December, 31, 5, 30, 0, 0, time.UTC) dateRangeComment := fmt.Sprintf("--- Starting Box Score Data Import for games between %s and %s ---", from.Format("January 2, 2006"), diff --git a/main.go b/main.go index 535b39b..646c148 100644 --- a/main.go +++ b/main.go @@ -39,7 +39,7 @@ import ( "github.com/nprasad2077/NBA_Go/config" "github.com/nprasad2077/NBA_Go/controllers" - _ "github.com/nprasad2077/NBA_Go/docs" + _"github.com/nprasad2077/NBA_Go/docs" "github.com/nprasad2077/NBA_Go/routes" "github.com/nprasad2077/NBA_Go/utils/middleware" ) @@ -50,20 +50,20 @@ func main() { // Run all DB migrations + import steps exactly once db := config.InitDB(true) - // importPlayerAdvanced(db) - // log.Println("πŸŽ‰ Player Advanced Import completed successfully") + importPlayerAdvanced(db) + log.Println("πŸŽ‰ Player Advanced Import completed successfully") - // importPlayerAdvancedPlayoffs(db) - // log.Println("πŸŽ‰ Player Advanced Playoffs Import completed successfully") + // // importPlayerAdvancedPlayoffs(db) + // // log.Println("πŸŽ‰ Player Advanced Playoffs Import completed successfully") - // importPlayerTotalsScrape(db) - // log.Println("πŸŽ‰ Player Totals (scraped) Import completed successfully") + importPlayerTotalsScrape(db) + log.Println("πŸŽ‰ Player Totals (scraped) Import completed successfully") // importPlayerTotalsPlayoffsScrape(db) // log.Println("πŸŽ‰ Player Playoffs (scraped) Import completed successfully") - // importGameSchedules(db) - // log.Println("πŸŽ‰ Game Imports completed successfully πŸ€") + importGameSchedules(db) + log.Println("πŸŽ‰ Game Imports completed successfully πŸ€") importBoxScores(db) log.Println("πŸŽ‰ Related Box Score Imports completed successfully πŸ“¦")