Rank NHL (coming soon) season leaders
season_player_stats holds one row per player per season. Page through the whole season with the keyset cursor, then sort client-side to build any leaderboard.
1. Fetch the first page
Filter to a season and set a page size. The response envelope wraps the rows with limit and next_from_id.
curl -sS \ -H 'Authorization: Bearer YOUR_API_KEY' \ 'https://api.stat-api.com/api/v1/nhl/season_player_stats?season_id=2025&limit=50'2. Walk the keyset cursor
Pass the previous response's next_from_id back via from_id to get the next page; a null next_from_id marks the final page.
curl -sS \ -H 'Authorization: Bearer YOUR_API_KEY' \ 'https://api.stat-api.com/api/v1/nhl/season_player_stats?season_id=2025&limit=50&from_id=NEXT_FROM_ID'3. Rank by goals
Accumulate every page, then sort by any numeric column — here, goals.
const headers = { Authorization: 'Bearer YOUR_API_KEY' } const base = 'https://api.stat-api.com/api/v1/nhl' // Page through the whole season with the keyset cursor. const rows: any[] = [] let fromId: number | null = null do { const url = new URL(`${base}/season_player_stats`) url.searchParams.set('season_id', '2025') url.searchParams.set('limit', '200') if (fromId) url.searchParams.set('from_id', String(fromId)) const page = await fetch(url, { headers }).then(r => r.json()) rows.push(...page.season_player_stats) fromId = page.next_from_id } while (fromId) // Top of the league by goals. rows.sort((a, b) => b.goals - a.goals)