API
Free · read-only · no key required
PUL Stats Hub publishes its stats as plain JSON. No API key, no sign-up, no rate limit. Fetch a file, use the data. Start with themanifest — it lists every endpoint that currently exists.
Every response has the same shape: { schemaVersion, generatedAt, league, data }. Your data is in data. generatedAt tells you how fresh it is, and is null for older seasons we have no timestamp for.
Endpoints
- /api/v1/index.jsonThe manifest — every endpoint that exists, per season, with status and freshness.
- /api/v1/games.jsonEvery completed game across every season, with final scores. One request, no pagination.
- /api/v1/teams.jsonTeam directory — the canonical abbreviation, name, and colors for every team in league history.
- /api/v1/{season}/standings.jsonWin/loss records, point differential, and division for one season.
- /api/v1/{season}/schedule.jsonAll scheduled games for one season, including unplayed ones. Cancelled games are flagged to distinguish from null scores.
- /api/v1/{season}/teams.jsonTeam statistical totals for one season. Absent for seasons without game stats.
Each endpoint has a reference page with every field, its type, and worked examples in curl, JavaScript, and Python.
Things worth knowing
This is a snapshot, not an event log.Values change retroactively — scores get corrected and stats get reprocessed as we fix data. Check generatedAt if freshness matters to you.
If an endpoint isn't in the manifest, it doesn't exist.We'd rather 404 than hand you an empty array that looks like real data. Seasons without game stats have no team-totals endpoint at all.
Player stats aren't here yet.Players will get a stable ID before they get an endpoint — we're not publishing an identifier we'd have to change later.
Postseason games carryisPostseason: true and weeks 98 (semifinals) / 99 (finals). Filter on the boolean, not the number.
Stability. Within/api/v1/ changes are additive only — new fields may appear, but existing fields won't change name, type, or meaning. Anything breaking gets a new/api/v2/, and v1 keeps working for at least six months after. Data values changing (a corrected score) isn't a breaking change — that's the snapshot note above.
Using it
Free to use with attribution to PUL Stats Hub. If you build something, we'd love to know — get in touch. It also helps us warn you before anything changes.
