Insights API endpoints
Ranked leaderboards built on top of the stat feeds — per-sport player leaders for a chosen stat, season and view.
1 of 1 endpoints · all categories · get a free API key
GET/api/v1/insights/leadersFree tier
Player stat leaders for one sport and season — a ranked board for a single stat, or a multi-column advanced board for the sports that have one.
Bills 1 credit, and unlike most of the family it sends **no** `x-credits-cost` header — the charge only shows up in `/me/usage` (measured: two `/me/usage` reads a credit apart, then one `limit=2` call, moved the total by exactly 1). A failed read is not an empty board: if the only table the request needed is unreadable you get **503** with `Retry-After` and `meta.failed_sources`, and the credit is refunded; a genuinely empty board is still a plain 200. That degraded answer is never cached — the read result is what the cache stores, so a thin board would otherwise be served for the full TTL after the read recovered. `Cache-Control: private, no-store` with `X-Cache-Age` 600 on the `api` tier (3600 on `free`), `Access-Control-Allow-Origin: *`, `X-Krok-Version: 1`. `view=advanced` currently answers `available` with **`count: 0`** for both `basketball_nba` and `soccer_epl` — an empty advanced board is a 200, not an error, and it returns `columns`/`flavors`/`group_label` with no `players`. `total_players` is the size of the whole board (2000 for `basketball_nba`), not the number of rows you were served, and `truncated` is a length test rather than a real 'more rows exist' flag. The example is the live, unmodified response to `?sport=basketball_nba&limit=1`; it names no data source.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| X-API-Key | string | Yes | – | API key. |
| sport | string | Yes | – | Sport key, lowercased before matching. One of 13: `aussierules_afl`, `rugbyleague_nrl`, `basketball_nba`, `americanfootball_nfl`, `baseball_mlb`, `icehockey_nhl`, `soccer_epl`, `soccer_uefa_champs_league`, `soccer_spain_la_liga`, `soccer_germany_bundesliga`, `soccer_italy_serie_a`, `soccer_france_ligue_one`, `soccer_australia_aleague`. Missing or unknown is a 400 (`Invalid sport. Supported: ...`) that echoes the whole list. |
| stat | string | No | points | Stat to rank by. An unknown value is **not** an error — it silently falls back to the sport's first stat (`points`) and the response echoes the stat it actually used in `data.stat`. Read `data.available_stats` for the valid values on the sport you asked for (18 for `basketball_nba`, including `points`, `rebounds`, `totReb`, `assists`, `threes`, `steals`, `blocks`, `turnovers`, `minutes`, `plus_minus` and the made/attempted shooting splits). |
| season | string | No | – | Season to rank. Omitted, or a value not in `data.available_seasons`, silently falls back to the sport's default season, echoed in `data.season`. Unlike `stat`, this one **does** change the board: `basketball_nba` defaults to `2026` (17 players) while `season=2025` returns 28. Seasons are strings and include split-year forms (`2025-26`); `basketball_nba` currently offers `2026`, `2025-26`, `2025`, `2024-25`, `2024`, `2023-24`, `2023`, `2022-23`. |
| view | string | No | standard | `standard` (one stat, ranked) or `advanced` (multi-column board). `advanced` only takes effect for the sports that have one; for any other sport it is ignored and you get the standard board back. The advanced payload has no `stat` — read `data.columns` for the column keys, labels, formats and descriptions, and each player's `values` object instead of `value`. |
| flavor | string | No | – | Advanced view only — picks a flavour within the board; the options come back in `data.flavors`. |
| limit | integer | No | 100 | Rows returned. Defaults to 100 and is capped at 5000 on the `api` tier (100 on `free`); `limit=99999` returns `meta.limit: 5000` with `meta.requested_limit: 99999`. `data.truncated` is `players.length === limit`, so it is `true` whenever the board is exactly as long as the limit — including when that limit is the whole board. |
curl \
-H "X-API-Key: YOUR_KEY" \
"https://krokodds.com.au/api/v1/insights/leaders?X-API-Key=value&sport=aussierules_afl"{
"success": true,
"data": {
"sport": "basketball_nba",
"view": "standard",
"stat": "points",
"season": "2026",
"available_stats": [
"points",
"rebounds",
"totReb",
"assists",
"threes",
"threes_attempted",
"steals",
"blocks",
"turnovers",
"minutes",
"fouls",
"plus_minus",
"field_goals_made",
"field_goals_attempted",
"free_throws_made",
"free_throws_attempted",
"offensive_rebounds",
"defensive_rebounds"
],
"available_seasons": [
"2026",
"2025-26",
"2025",
"2024-25",
"2024",
"2023-24",
"2023",
"2022-23"
],
"players": [
{
"rank": 1,
"name": "Joel Embiid",
"slug": "joel_embiid",
"team": "Philadelphia 76ers",
"value": 28.24137931034483,
"games_played": 515
}
],
"count": 1,
"truncated": true,
"total_players": 2000
},
"meta": {
"tier": "api",
"limit": 1,
"requested_limit": 1,
"timestamp": "2026-10-22T06:58:24.223Z",
"rate_limit": {
"limit": 500,
"remaining": 438814
}
}
}Other categories
Per-event head-to-head odds, alternate lines, best prices across books, player props, live state and AI-generated summaries.
Krok's built-in scanners — arbitrage, positive EV, middles, low-holds, player props and same-game multi (SGM) picks, already devigged against a blended sharp baseline.
The full Australian racing stack — thoroughbred, harness and greyhound. Meetings and runner fields, form, sectionals, ratings, market movers, exchange arbs, tote pools and results.
Raw per-bookmaker prices as scraped, before any analysis layer. `/scraped-odds/*` paths are aliases of the equivalent `/odds-feed/*` route.
Sport reference data, team form guides, league standings, injury reports and weather-impact analysis.
AI-generated betting tips with confidence scores and historical accuracy tracking.
ATP/WTA rankings, upcoming fixtures, match results, Elo ratings and surface-specific stats.
Deep archives — player and team game logs, shot charts, AFL/NRL historical data. Paid API plan only.
Static lookup data for building your own UI — players, venues, headshots, team logos and sport/league metadata.
Cricket, cycling, esports, Formula 1, golf, MMA, boxing, NFL and soccer coverage beyond the AU staples.
Account and billing endpoints, bulk export, SSE streaming, webhook management and API health.
Odds history, steam-move detection, player prop stats/results, injuries, weather and other supporting feeds.
Polymarket and Kalshi sentiment plus a universal prediction-market catalogue and resolutions feed.