{"openapi":"3.0.3","info":{"title":"CSG Fantasy Football public API","version":"1.0.0","description":"Every number on csgfantasy.com, as JSON or CSV.\n\nThe data is computed from ESPN's public league pages for all eight CSG leagues and refreshes about every ten minutes. Add `?season=YYYY` to any endpoint for a past season and `?format=csv` to any list endpoint for a spreadsheet.\n\n**Not official.** The CSG Fantasy Football commissioner has final say on every result, tiebreaker, bracket, and payout.","contact":{"name":"CSG Fantasy Football","url":"https://csgfantasy.com"},"x-otter":"https://riverotterlabs.net"},"servers":[{"url":"https://csgfantasy.com/api/v1"}],"tags":[{"name":"Season","description":"What season it is, what week it is, and the rules."},{"name":"Leagues","description":"Each of the eight leagues: standings, schedule, scores, teams, rosters."},{"name":"Everyone","description":"All 80 teams at once. Built for spreadsheets."},{"name":"Money","description":"Weekly top score winners and who has been paid."},{"name":"Super Bowl","description":"The cross-league race, the field, and the published bracket."},{"name":"Calendar","description":"Subscribable iCalendar feeds. Paste the link into Outlook or Google Calendar and the season lives on your calendar."},{"name":"NFL","description":"The real NFL schedule: kickoff, network, where it streams, venue, live score."},{"name":"Feedback","description":"What changed lately, and a quiet way to tell us something looks wrong. You found the secret bug box. Open \"Report a problem\", press Try it out, fill in the text, and press Execute."}],"paths":{"/":{"get":{"tags":["Season"],"summary":"API index","description":"Links to everything.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Index"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/seasons":{"get":{"tags":["Season"],"summary":"Seasons available","description":"Every season with data, and which one is current.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Seasons"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/season":{"get":{"tags":["Season"],"summary":"Season summary","description":"Current week, last finalized week, counts, and when the data was last refreshed.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Season"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/rules":{"get":{"tags":["Season"],"summary":"Rules and payouts","description":"The rules as the page states them.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rules"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/leagues":{"get":{"tags":["Leagues"],"summary":"List the eight leagues","description":"Ids, labels, names, and which weeks are final.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Leagues"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/leagues/{league}":{"get":{"tags":["Leagues"],"summary":"One league","description":"Summary, full standings, and the league playoff picture.","parameters":[{"name":"league","in":"path","required":true,"description":"League label (CSG1 to CSG8) or ESPN league id.","schema":{"type":"string","example":"CSG2"}},{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/League"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/leagues/{league}/standings":{"get":{"tags":["Leagues"],"summary":"Standings","description":"Record, points for and against, average, streak, all-play, playoff seed, waiver rank.","parameters":[{"name":"league","in":"path","required":true,"description":"League label (CSG1 to CSG8) or ESPN league id.","schema":{"type":"string","example":"CSG2"}},{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Standings"}},"text/csv":{"schema":{"type":"string"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/leagues/{league}/schedule":{"get":{"tags":["Leagues"],"summary":"Schedule and results","description":"Every matchup, with points, projections, and bench points once played.","parameters":[{"name":"league","in":"path","required":true,"description":"League label (CSG1 to CSG8) or ESPN league id.","schema":{"type":"string","example":"CSG2"}},{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"week","in":"query","description":"Limit to one week.","schema":{"type":"integer","minimum":1,"maximum":18}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}},"text/csv":{"schema":{"type":"string"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/leagues/{league}/scores":{"get":{"tags":["Leagues"],"summary":"Scores, one row per team per week","description":"Long format for one league.","parameters":[{"name":"league","in":"path","required":true,"description":"League label (CSG1 to CSG8) or ESPN league id.","schema":{"type":"string","example":"CSG2"}},{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"week","in":"query","description":"Limit to one week.","schema":{"type":"integer","minimum":1,"maximum":18}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Scores"}},"text/csv":{"schema":{"type":"string"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/leagues/{league}/teams/{team}":{"get":{"tags":["Leagues"],"summary":"One team","description":"Standing, week-by-week results, and the current roster.","parameters":[{"name":"league","in":"path","required":true,"description":"League label (CSG1 to CSG8) or ESPN league id.","schema":{"type":"string","example":"CSG2"}},{"name":"team","in":"path","required":true,"description":"Team id, abbreviation, or exact team name.","schema":{"type":"string","example":"2"}},{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/leagues/{league}/teams/{team}/roster":{"get":{"tags":["Leagues"],"summary":"Roster","description":"Current roster with slot, starter flag, injury status, and points.","parameters":[{"name":"league","in":"path","required":true,"description":"League label (CSG1 to CSG8) or ESPN league id.","schema":{"type":"string","example":"CSG2"}},{"name":"team","in":"path","required":true,"description":"Team id, abbreviation, or exact team name.","schema":{"type":"string","example":"2"}},{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Roster"}},"text/csv":{"schema":{"type":"string"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/teams":{"get":{"tags":["Everyone"],"summary":"All 80 teams","description":"Standings for every team in every league, in one table.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Teams"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/rosters":{"get":{"tags":["Everyone"],"summary":"Every roster","description":"Every player on every team in every league, one row each. Filter with league, starters=true, or position (QB, RB, WR, TE, K, D/ST). The one call for a full rosters spreadsheet.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"league","in":"query","description":"One league only (CSG1 to CSG8).","schema":{"type":"string","example":"CSG2"}},{"name":"starters","in":"query","description":"true = starting lineups only.","schema":{"type":"boolean"}},{"name":"position","in":"query","description":"Filter to one position.","schema":{"type":"string","example":"RB"}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rosters"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/schedule":{"get":{"tags":["Everyone"],"summary":"Every matchup in every league","description":"All eight schedules in one table, with points and projections. homeKey and awayKey join to teams.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"week","in":"query","description":"Limit to one week.","schema":{"type":"integer","minimum":1,"maximum":18}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/scores":{"get":{"tags":["Everyone"],"summary":"All scores, one row per team per week","description":"The whole season across all leagues. The best starting point for your own analytics.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"week","in":"query","description":"Limit to one week.","schema":{"type":"integer","minimum":1,"maximum":18}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Scores"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/points-leaders":{"get":{"tags":["Everyone"],"summary":"Points leaders","description":"All 80 teams ranked by total points for, with high, low, and average.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PointsLeaders"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/notes":{"get":{"tags":["Everyone"],"summary":"Commish notes","description":"Posts from the commissioner: rulings, money notices, reminders. Newest first, pinned notes on top. Photos are links back to this site.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notes"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/weekly":{"get":{"tags":["Money"],"summary":"Weekly top score winners","description":"The $10 winner for each week, with the tiebreak if one was needed.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Weekly"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/weekly/{week}":{"get":{"tags":["Money"],"summary":"One week, top scores across all leagues","description":"The winner and the full ranked list for that week.","parameters":[{"name":"week","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WeekTop"}},"text/csv":{"schema":{"type":"string"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/summary":{"get":{"tags":["Phone"],"summary":"Phone-sized digest","description":"Current week, latest $10 winner, top five points leaders, top five Super Bowl seeds, optionally one league's standings. Add format=text for plain text a Shortcut or widget can show as-is.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"league","in":"query","description":"Also include this league's standings (CSG1 to CSG8).","schema":{"type":"string","example":"CSG2"}},{"name":"format","in":"query","description":"json (default) or text.","schema":{"type":"string","enum":["json","text"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Summary"}},"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/money-board":{"get":{"tags":["Money"],"summary":"Money board","description":"Who has collected weekly prizes so far, and how much.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoneyBoard"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/outlook":{"get":{"tags":["Super Bowl"],"summary":"Seed outlook: today vs projected","description":"Every team's league seed and Super Bowl seed today next to where 60,000 simulated seasons finish them: projected seed, the odds of each seed, playoff, bye, title, auto bid, wildcard, and Super Bowl odds, plus the biggest projected risers and fallers. Recomputed with each ten-minute refresh. CSV returns one row per team.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Outlook"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/history":{"get":{"tags":["Everyone"],"summary":"Past seasons","description":"Every finished CSG season on file: each league's champion, runner-up, and regular season 1 seed; the Super Bowl wildcard cutline; the weekly top score average and extremes; the season points leader; and managers (keyed by lowercase owner name) with every past team, record, seed, final place, and titles. CSV returns the champions list.","parameters":[{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/History"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/draft-slots":{"get":{"tags":["Everyone"],"summary":"Draft slot study","description":"Does round one draft position decide the season? Add seasons=2025 (comma list) to study only those finished seasons. Every finished CSG season plus the current one: each team's slot, regular season seed, final finish, record, points, Super Bowl qualification, and ESPN draft-day rank (espnDraftRank: 1 = best roster on paper after the draft); averages by slot; and a luck check for slot vs seed, middle vs edge slots, and draft grade vs seed (how often 20,000 random reshuffles of each league's draft order line up as well: tests.*.pValue; tests.*.rho is how closely draft order matched the standings, -1 to 1). Ignores season. CSV returns one row per team-season.","parameters":[{"name":"seasons","in":"query","description":"Finished seasons to include, comma separated. Default: all on file.","schema":{"type":"string","example":"2025"}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftSlots"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/superbowl":{"get":{"tags":["Super Bowl"],"summary":"Super Bowl race","description":"Auto bids, wildcards, the bubble, and the cutline. CSV returns the seeded field.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuperBowl"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/leagues/{league}/teams/{team}/calendar.ics":{"get":{"tags":["Calendar"],"summary":"One team, whole season","description":"Every matchup as a Sunday event with opponent and projections in the title (score and result once played), a Friday morning lineup reminder, and the weekly top-score winner as an all-day Tuesday event. Subscribe, do not import, so it keeps updating.","parameters":[{"name":"league","in":"path","required":true,"description":"League label (CSG1 to CSG8) or ESPN league id.","schema":{"type":"string","example":"CSG2"}},{"name":"team","in":"path","required":true,"description":"Team id, abbreviation, or exact team name.","schema":{"type":"string","example":"2"}},{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}}],"responses":{"200":{"description":"iCalendar","content":{"text/calendar":{"schema":{"type":"string"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/leagues/{league}/calendar.ics":{"get":{"tags":["Calendar"],"summary":"Every matchup in one league","description":"All five games a week for the league, plus the weekly winner.","parameters":[{"name":"league","in":"path","required":true,"description":"League label (CSG1 to CSG8) or ESPN league id.","schema":{"type":"string","example":"CSG2"}},{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}}],"responses":{"200":{"description":"iCalendar","content":{"text/calendar":{"schema":{"type":"string"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/nfl/schedule":{"get":{"tags":["NFL"],"summary":"NFL games of the week","description":"Every NFL game for one week from the ESPN scoreboard: kickoff in UTC (render it in the viewer's own time zone), broadcast network, where it streams, venue, roof (dome, retractable or open), the game-window weather forecast for outdoor games (ESPN's recorded conditions once played), live status and score. Refreshes every 45 seconds while games are on.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"week","in":"query","description":"NFL week 1 to 18. Defaults to the current week.","schema":{"type":"integer","minimum":1,"maximum":18}},{"name":"format","in":"query","description":"Set to csv for a spreadsheet-ready table.","schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NflWeek"}},"text/csv":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/nfl/news":{"get":{"tags":["NFL"],"summary":"This week in one place","description":"A roll-up for the week: every game with kickoff, line, broadcaster, the interns' headline and preview, and the CSG players at stake; the most-started players across all 80 teams; an injury watch; the beat-writer feed; and general ESPN NFL headlines.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}},{"name":"week","in":"query","description":"NFL week. Defaults to the current week, rolling forward once every game is final.","schema":{"type":"integer","minimum":1,"maximum":18}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/changelog":{"get":{"tags":["Feedback"],"summary":"What's new","description":"Recent changes to the page and this API, newest first, in plain words.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","example":"2026-10-01"},"title":{"type":"string"},"detail":{"type":"string"},"area":{"type":"string"}}}}}}}}}}}},"/bugs":{"post":{"tags":["Feedback"],"summary":"Report a problem","description":"Something wrong on the page or in this API? Tell us here. A person reads every report. Five reports an hour per person.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["what"],"properties":{"what":{"type":"string","maxLength":4000,"description":"What happened, and what you expected instead.","example":"The weekly winner for week 3 looks wrong for CSG4."},"where":{"type":"string","maxLength":200,"description":"Which page, tab or endpoint.","example":"This week tab"},"contact":{"type":"string","maxLength":200,"description":"Optional: your name or email if you want a reply.","example":""}}}}}},"responses":{"200":{"description":"Thanks, we got it.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"id":{"type":"string","nullable":true}}}}}},"400":{"description":"The report needs a sentence or two."},"429":{"description":"Too many reports this hour."}}}},"/nfl/games/{id}":{"get":{"tags":["NFL"],"summary":"One NFL game in depth","description":"Score and status, every drive and play, scoring summary, team leaders and stats, ESPN news and video links, division standings, injuries, officials, TV and radio. Refreshes every 30 seconds while the game is live.","parameters":[{"name":"id","in":"path","required":true,"description":"ESPN event id, from /nfl/schedule.","schema":{"type":"string","example":"401872657"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/calendar/weekly-winners.ics":{"get":{"tags":["Calendar"],"summary":"Weekly $10 winners only","description":"One all-day event each Tuesday naming the top score across all 80 teams.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}}],"responses":{"200":{"description":"iCalendar","content":{"text/calendar":{"schema":{"type":"string"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}},"/superbowl/bracket":{"get":{"tags":["Super Bowl"],"summary":"Published bracket","description":"The bracket the commissioner published, if any.","parameters":[{"name":"season","in":"query","description":"Four-digit season. Defaults to the current season.","schema":{"type":"integer","example":2026}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Bracket"}}}},"429":{"description":"Rate limited (120 requests a minute per address)"}}}}},"components":{"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string"}}},"Summary":{"type":"object","properties":{"season":{"type":"integer"},"week":{"type":"integer"},"lastFinalWeek":{"type":"integer"},"latestWinner":{"type":"object","nullable":true},"liveLeader":{"type":"object","nullable":true},"pointsLeaders":{"type":"array","items":{"type":"object"}},"superBowlSeeds":{"type":"array","items":{"type":"object"}},"standings":{"type":"array","items":{"type":"object"}},"text":{"type":"string","description":"The same digest as plain lines."}}},"Owners":{"type":"array","items":{"type":"string"},"description":"Manager names as ESPN lists them."},"Standing":{"type":"object","properties":{"teamKey":{"type":"string","example":"26830554-2","description":"leagueId-teamId. Unique across all leagues; join tables on this."},"league":{"type":"string","example":"CSG2"},"leagueId":{"type":"string"},"teamId":{"type":"integer"},"team":{"type":"string"},"abbrev":{"type":"string"},"owners":{"$ref":"#/components/schemas/Owners"},"logo":{"type":"string","nullable":true},"rank":{"type":"integer"},"wins":{"type":"integer"},"losses":{"type":"integer"},"ties":{"type":"integer"},"record":{"type":"string","example":"3-1"},"pointsFor":{"type":"number"},"pointsAgainst":{"type":"number"},"avgPoints":{"type":"number"},"pfRank":{"type":"integer","nullable":true},"streak":{"type":"string","example":"W2"},"playoffSeed":{"type":"integer"},"waiverRank":{"type":"integer"},"allPlay":{"type":"string","example":"27-9"}}},"Score":{"type":"object","description":"One team, one week.","properties":{"teamKey":{"type":"string","example":"26830554-2"},"season":{"type":"integer"},"week":{"type":"integer"},"final":{"type":"boolean","description":"ESPN has finalized this week for the league."},"league":{"type":"string"},"leagueId":{"type":"string"},"teamId":{"type":"integer"},"team":{"type":"string"},"owners":{"$ref":"#/components/schemas/Owners"},"points":{"type":"number","nullable":true},"bench":{"type":"number","nullable":true,"description":"Points left on the bench. The weekly tiebreaker."},"opponent":{"type":"string","nullable":true},"opponentPoints":{"type":"number","nullable":true},"result":{"type":"string","nullable":true,"enum":["W","L","T",null]},"playoff":{"type":"string","nullable":true}}},"Game":{"type":"object","properties":{"league":{"type":"string"},"leagueId":{"type":"string"},"week":{"type":"integer"},"playoff":{"type":"string","nullable":true},"homeKey":{"type":"string"},"awayKey":{"type":"string"},"winner":{"type":"string","description":"HOME, AWAY, TIE, or UNDECIDED."},"homeTeamId":{"type":"integer"},"homeTeam":{"type":"string"},"homePoints":{"type":"number","nullable":true},"homeProjected":{"type":"number","nullable":true},"homeBench":{"type":"number","nullable":true},"awayTeamId":{"type":"integer"},"awayTeam":{"type":"string"},"awayPoints":{"type":"number","nullable":true},"awayProjected":{"type":"number","nullable":true},"awayBench":{"type":"number","nullable":true}}},"RosterSlot":{"type":"object","properties":{"playerId":{"type":"integer"},"player":{"type":"string"},"position":{"type":"string","example":"RB"},"proTeam":{"type":"string","example":"DET"},"slot":{"type":"string","example":"FLEX"},"starter":{"type":"boolean"},"injuryStatus":{"type":"string","nullable":true,"example":"QUESTIONABLE"},"seasonPoints":{"type":"number"},"weekProjected":{"type":"number","nullable":true},"weekPoints":{"type":"number","nullable":true}}},"LeagueSummary":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string","example":"CSG3"},"name":{"type":"string"},"season":{"type":"integer"},"currentWeek":{"type":"integer"},"finalWeek":{"type":"integer"},"finalWeeks":{"type":"array","items":{"type":"integer"}},"playoffTeams":{"type":"integer"},"teamCount":{"type":"integer"},"error":{"type":"string","nullable":true}}},"WeeklyWinner":{"type":"object","properties":{"week":{"type":"integer"},"final":{"type":"boolean"},"prize":{"type":"integer","example":10},"league":{"type":"string"},"leagueId":{"type":"string"},"teamId":{"type":"integer"},"team":{"type":"string"},"owners":{"$ref":"#/components/schemas/Owners"},"points":{"type":"number"},"bench":{"type":"number","nullable":true},"tiebreakUsed":{"type":"boolean"},"tiedWith":{"type":"array","items":{"type":"string"}},"teamsCounted":{"type":"integer"}}},"History":{"type":"object","properties":{"currentSeason":{"type":"integer"},"seasons":{"type":"array","items":{"type":"object","additionalProperties":true}},"managers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","additionalProperties":true}}}}},"DraftSlots":{"type":"object","description":"Draft slot study. rows[] = team-seasons (slot, seed, finish, wins, pointsFor, playoffs, champion, superBowl, espnDraftRank; current season adds projSeed, playoffProb). bySlot[] = averages per slot. tests.* = { rho, pValue, leagues, teams }.","properties":{"finishedSeasons":{"type":"array","items":{"type":"integer"}},"finishedTeams":{"type":"integer"},"tests":{"type":"object","additionalProperties":true},"verdicts":{"type":"object","additionalProperties":{"type":"string"}},"bySlot":{"type":"array","items":{"type":"object","additionalProperties":true}},"bands":{"type":"array","items":{"type":"object","additionalProperties":true}},"rows":{"type":"array","items":{"type":"object","additionalProperties":true}},"notes":{"type":"array","items":{"type":"string"}}}},"Outlook":{"type":"object","description":"Seed today vs projected. leagues[].teams[] carry nowSeed, projSeed (average finish), likelySeed, seedDist (odds of seed 1..10), playoffProb, byeProb, titleProb, superBowlQualifyProb, expectedSuperBowlSeed. Probabilities are 0 to 1.","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"currentWeek":{"type":"integer"},"leagues":{"type":"array","items":{"type":"object","additionalProperties":true}},"superBowl":{"type":"array","items":{"type":"object","additionalProperties":true}},"movers":{"type":"object","properties":{"up":{"type":"array","items":{"type":"object","additionalProperties":true}},"down":{"type":"array","items":{"type":"object","additionalProperties":true}}}},"meta":{"type":"object","additionalProperties":true}}},"SuperBowlEntry":{"type":"object","properties":{"seed":{"type":"integer"},"bye":{"type":"boolean"},"via":{"type":"string","enum":["auto","wildcard"]},"league":{"type":"string"},"leagueId":{"type":"string"},"teamId":{"type":"integer"},"team":{"type":"string"},"owners":{"$ref":"#/components/schemas/Owners"},"record":{"type":"string"},"wins":{"type":"integer"},"ties":{"type":"integer"},"pointsFor":{"type":"number"},"leagueRank":{"type":"integer"}}},"NflWeek":{"type":"object","properties":{"season":{"type":"integer"},"week":{"type":"integer"},"fetchedAt":{"type":"string","format":"date-time"},"currentWeek":{"type":"integer","nullable":true},"weeks":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"integer"},"start":{"type":"string"},"end":{"type":"string"}}}},"outOfMarket":{"type":"string"},"games":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","example":"TB @ CIN"},"kickoff":{"type":"string","format":"date-time","description":"UTC"},"status":{"type":"object","properties":{"state":{"type":"string","enum":["pre","in","post"]},"detail":{"type":"string","nullable":true},"shortDetail":{"type":"string","nullable":true},"completed":{"type":"boolean"}}},"home":{"type":"object","properties":{"abbr":{"type":"string"},"name":{"type":"string"},"logo":{"type":"string","nullable":true},"score":{"type":"number","nullable":true},"record":{"type":"string","nullable":true}}},"away":{"type":"object"},"venue":{"type":"object","nullable":true},"broadcasts":{"type":"array","items":{"type":"string"}},"howToWatch":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string"},"stream":{"type":"string","nullable":true},"also":{"type":"string"}}}},"odds":{"type":"object","nullable":true}}}}}},"Index":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"docs":{"type":"string"},"openapi":{"type":"string"},"notes":{"type":"array","items":{"type":"string"}},"endpoints":{"type":"array","items":{"type":"string"}}}},"Seasons":{"type":"object","properties":{"seasons":{"type":"array","items":{"type":"integer"}},"current":{"type":"integer"}}},"Season":{"type":"object","properties":{"season":{"type":"integer"},"currentWeek":{"type":"integer"},"lastFinalWeek":{"type":"integer"},"regularSeasonWeeks":{"type":"integer"},"fetchedAt":{"type":"string","format":"date-time"},"leagues":{"type":"integer"},"teams":{"type":"integer"},"weeksScored":{"type":"integer"}}},"Rules":{"type":"object","description":"The season rules as the page states them: format, tiebreaker, waivers, payouts, league playoffs, and the cross-league Super Bowl.","additionalProperties":true},"Leagues":{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"leagues":{"type":"array","items":{"$ref":"#/components/schemas/LeagueSummary"}}}},"League":{"allOf":[{"$ref":"#/components/schemas/LeagueSummary"},{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"standings":{"type":"array","items":{"$ref":"#/components/schemas/Standing"}},"playoffPicture":{"type":"object","additionalProperties":true}}}]},"Standings":{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"league":{"type":"string"},"leagueId":{"type":"string"},"standings":{"type":"array","items":{"$ref":"#/components/schemas/Standing"}}}},"Schedule":{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"league":{"type":"string"},"leagueId":{"type":"string"},"week":{"type":"integer","nullable":true},"games":{"type":"array","items":{"$ref":"#/components/schemas/Game"}}}},"Scores":{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"league":{"type":"string"},"leagueId":{"type":"string"},"week":{"type":"integer","nullable":true},"scores":{"type":"array","items":{"$ref":"#/components/schemas/Score"}}}},"Team":{"allOf":[{"$ref":"#/components/schemas/Standing"},{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"weekly":{"type":"object","description":"Keyed by week number.","additionalProperties":{"type":"object","properties":{"points":{"type":"number","nullable":true},"bench":{"type":"number","nullable":true},"opponent":{"type":"string","nullable":true},"opponentPoints":{"type":"number","nullable":true},"result":{"type":"string","nullable":true},"playoff":{"type":"string","nullable":true}}}},"roster":{"type":"array","items":{"$ref":"#/components/schemas/RosterSlot"}}}}]},"Roster":{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"week":{"type":"integer"},"league":{"type":"string"},"leagueId":{"type":"string"},"teamId":{"type":"integer"},"team":{"type":"string"},"roster":{"type":"array","items":{"allOf":[{"type":"object","properties":{"league":{"type":"string"},"leagueId":{"type":"string"},"teamId":{"type":"integer"},"team":{"type":"string"}}},{"$ref":"#/components/schemas/RosterSlot"}]}}}},"Teams":{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"teams":{"type":"array","items":{"$ref":"#/components/schemas/Standing"}}}},"RosterRow":{"allOf":[{"type":"object","properties":{"teamKey":{"type":"string","example":"26830554-2"},"league":{"type":"string"},"leagueId":{"type":"string"},"teamId":{"type":"integer"},"team":{"type":"string"}}},{"$ref":"#/components/schemas/RosterSlot"}]},"Rosters":{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"players":{"type":"array","items":{"$ref":"#/components/schemas/RosterRow"}}}},"PointsLeaders":{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"leaders":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer"},"league":{"type":"string"},"leagueId":{"type":"string"},"teamId":{"type":"integer"},"team":{"type":"string"},"owners":{"$ref":"#/components/schemas/Owners"},"record":{"type":"string"},"pointsFor":{"type":"number"},"pointsAgainst":{"type":"number"},"avgPoints":{"type":"number"},"high":{"type":"number"},"low":{"type":"number"},"games":{"type":"integer"}}}}}},"Notes":{"type":"object","properties":{"notes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"at":{"type":"string"},"updatedAt":{"type":"string","nullable":true},"season":{"type":"integer","nullable":true},"week":{"type":"integer","nullable":true},"pinned":{"type":"boolean"},"title":{"type":"string"},"body":{"type":"string"},"images":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"caption":{"type":"string"}}}}}}}}},"Weekly":{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"weeks":{"type":"array","items":{"$ref":"#/components/schemas/WeeklyWinner"}}}},"WeekTop":{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"week":{"type":"integer"},"final":{"type":"boolean"},"prize":{"type":"integer"},"winner":{"type":"object","additionalProperties":true},"tiebreakUsed":{"type":"boolean"},"tiedWith":{"type":"array","items":{"type":"string"}},"teamsCounted":{"type":"integer"},"top":{"type":"array","description":"Top scores across all leagues for the week, best first.","items":{"type":"object","additionalProperties":true}}}},"MoneyBoard":{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"weeklyPrize":{"type":"integer"},"board":{"type":"array","items":{"type":"object","properties":{"team":{"type":"string"},"league":{"type":"string"},"owners":{"$ref":"#/components/schemas/Owners"},"weeks":{"type":"array","items":{"type":"integer"}},"total":{"type":"integer"}}}}}},"SuperBowl":{"type":"object","properties":{"season":{"type":"integer"},"fetchedAt":{"type":"string"},"qualifyingThroughWeek":{"type":"integer"},"playoffWeeks":{"type":"array","items":{"type":"integer"}},"autoBidsPerLeague":{"type":"integer"},"wildcardCount":{"type":"integer"},"byes":{"type":"integer"},"cutline":{"type":"number","nullable":true,"description":"Points-for needed for the last wildcard, once the field is full."},"field":{"type":"array","items":{"$ref":"#/components/schemas/SuperBowlEntry"}},"wildcards":{"type":"array","items":{"$ref":"#/components/schemas/SuperBowlEntry"}},"bubble":{"type":"array","items":{"$ref":"#/components/schemas/SuperBowlEntry"}},"payouts":{"type":"object","additionalProperties":true}}},"Bracket":{"type":"object","description":"The bracket the commissioner published, or published:false.","properties":{"season":{"type":"integer"},"published":{"type":"boolean"}},"additionalProperties":true}}}}