teams.json
/api/v1/teams.json
Team directory — the canonical abbreviation, name, and colors for every team in league history.
Response
Every endpoint returns the same envelope. Your data is indata — data is the array itself — there is no wrapper object inside it.
{
"schemaVersion": "1.0",
"generatedAt": "2026-06-23T14:03:13.152995-04:00",
"league": "PUL",
"data": [ ... ]
}generatedAt is a nullable ISO-8601 timestamp that may or may not carry a UTC offset — parse leniently. It is null for 2022 and 2023, which predate the pipeline that records it.
Fields
| Field | Type | Meaning |
|---|---|---|
| abbrev | string | Canonical abbreviation. This is the join key used by every other endpoint. |
| name | string | Full team name. |
| colors.primary | string | Primary team color as a hex string, e.g. "#7AC5BE". |
| colors.secondary | string | Secondary team color as a hex string. |
Dotted names are nested — colors.primary means{ colors: { primary } }. When the parent is a list of objects (like seasons on the manifest),seasons.season means each entry in that array has its ownseason field — access it as seasons[i].season, not seasons.season.
Examples
curl -s https://pul-stats-hub.pages.dev/api/v1/teams.json// Abbreviation -> name lookup, for joining against other endpoints
const res = await fetch('https://pul-stats-hub.pages.dev/api/v1/teams.json');
const { data } = await res.json();
const names = Object.fromEntries(data.map((t) => [t.abbrev, t.name]));
console.log(names.ATL); // "Atlanta Soul"# Team colors, for charting
import json, urllib.request
URL = "https://pul-stats-hub.pages.dev/api/v1/teams.json"
with urllib.request.urlopen(URL) as response:
teams = json.load(response)["data"]
for team in teams:
print(team["abbrev"], team["colors"]["primary"])Worth knowing
- Includes teams that no longer compete — this is all of league history, not the current season. Use a season's standings endpoint for who played that year.
- Source data sometimes spells abbreviations differently across seasons (INDY/IND, MINN/MIN). Everything the API returns is already normalized to the canonical form listed here.
