List a league's games
curl --request GET \
--url https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games \
--header 'Authorization: Bearer <token>'import requests
url = "https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"leagueId": "<string>",
"sport": "<string>",
"startsAt": "2023-11-07T05:31:56Z",
"location": "<string>",
"latitude": 123,
"longitude": 123,
"source": "<string>",
"externalId": "<string>",
"positions": [
{
"id": "<string>",
"label": "<string>",
"payCents": 123,
"payDollars": 123
}
]
}
]
}{
"error": "unauthorized"
}{
"error": "league_not_found"
}Games
List a league's games
Ordered by startsAt ascending, positions included. Not paginated.
GET
/
leagues
/
{leagueId}
/
games
List a league's games
curl --request GET \
--url https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games \
--header 'Authorization: Bearer <token>'import requests
url = "https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://whistle.huddleup-sports.com/api/v1/leagues/{leagueId}/games")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"leagueId": "<string>",
"sport": "<string>",
"startsAt": "2023-11-07T05:31:56Z",
"location": "<string>",
"latitude": 123,
"longitude": 123,
"source": "<string>",
"externalId": "<string>",
"positions": [
{
"id": "<string>",
"label": "<string>",
"payCents": 123,
"payDollars": 123
}
]
}
]
}{
"error": "unauthorized"
}{
"error": "league_not_found"
}Authorizations
Partner API key: Authorization: Bearer whk_…. Keys are issued by the Whistle team (email tommy@huddleup-sports.com), shown once at issuance, and bound to your source namespace — they access only your leagues (plus explicit grants) and your webhook endpoints. Any auth failure returns 401 {"error":"unauthorized"}; the API never returns 403 — out-of-scope resources answer 404 exactly like nonexistent ones.
Path Parameters
Whistle league id (id from league responses).
Response
Array of games
Show child attributes
Show child attributes
Last modified on July 10, 2026
⌘I

