open-leagues

Open data

Three JSON files: the player-ID crosswalk, FAAB clearing prices, and the closing line for every NFL game since 1999. Anonymous, CORS on, no key.

/api/players.json

Sleeper, GSIS (nflverse), ESPN, Yahoo, RotoWire, and Sportradar ids side by side, with name, team, and position. Built from Sleeper’s player file; cached a day.

shape
{
  "source": "sleeper players + nflverse gsis",
  "count": 11826,
  "players": [
    { "sleeper_id": "4866", "gsis_id": "00-0034844", "espn_id": "3929630",
      "yahoo_id": "30972", "rotowire_id": "12507", "sportradar_id": "9811b753-…",
      "name": "Saquon Barkley", "team": "PHI", "position": "RB" }
  ]
}

/api/wire/:season/:week.json

What each player cleared for on waivers that week, across every Sleeper league that has asked for a receipt, as a share of budget. Median, quartiles, max, share of what the winner had left, and the count. Raw dollars appear only when every bid came from the same budget.

Filter to a cohort: ?rosters=12&format=half&superflex=false. The budgets map shows how many contributing leagues run each purse.

shape · real
{
  "season": "2025", "week": 14, "leagues": 1,
  "budgets": { "200": 1 },            // contributing leagues per FAAB purse
  "cohort": {},                       // or { rosters: 14, format: "half", superflex: false }
  "prices": [
    { "player_id": "2449", "name": "Stefon Diggs", "position": "WR", "n": 1,
      "median_pct": 39.5, "p25_pct": 39.5, "p75_pct": 39.5, "max_pct": 39.5,
      "median_pct_remaining": 76.7,   // share of what the winner still had
      "dollars": { "budget": 200, "median": 79 } }   // only within one budget
  ]
}
  • Only leagues that have been pasted contribute. Each receipt read registers its league; nothing is crawled.
  • No league id, manager, or roster appears in the payload. n is the number of winning bids behind a price. median_pct_remaining is the bid as a share of what the winner still had.
  • Cached an hour once a league has a cleared claim. Empty results are not cached.
  • A team’s receipt shows the median share and count beside a won claim once a second league has one.

/api/lines/:season.json

Every game of a season with its closing spread, total, moneylines, prices, result, and context: rest days, roof, surface, division game, weekday, starting quarterbacks, referee. Source: nflverse’s games table, 1999 to now, refreshed every six hours. Closing lines only; opening lines for 2007–2021 exist in the Sportsbook Review archive and are not wired in.

Public betting splits are a separate opt-in feed, read over MCP as getBettingSplits. OPENLEAGUES_SPLITS_SOURCE=actionnetwork,dknetwork,wiseguyteam adds the consensus with history from 2023, DraftKings’ own numbers, and a multi-book read for the current slate, each under its own book. They are not republished here.

shape · real
{
  "source": "nflverse nfldata games.csv · closing lines", "season": 2025, "count": 272,
  "games": [
    { "gameId": "2025_14_DAL_DET", "season": 2025, "week": 14, "home": "DET", "away": "DAL",
      "spread": 3.5,            // home-signed: DET favored by 3.5
      "total": 55.5, "homeMoneyline": -192, "awayMoneyline": 160,
      "homeSpreadOdds": -110, "awaySpreadOdds": -110, "overOdds": -110, "underOdds": -110,
      "result": 14,             // home − away
      "points": 74, "homeScore": 44, "awayScore": 30,
      "divGame": false, "roof": "dome", "surface": "fieldturf", "homeRest": 7, "awayRest": 7,
      "weekday": "Thursday", "gameday": "2025-12-04", "gametime": "20:15",
      "homeQb": "Jared Goff", "awayQb": "Dak Prescott", "referee": "Shawn Hochuli" }
  ]
}

The same rows drive the lab verbs over MCP: getGameLines, getGameContext, getBettingSplits, sampleGames, evaluateBets, summarizeRun (with pBreakEven), simulateBankroll. freezeStrategy, recordLabRun, and getLabRuns hold frozen strategies and the run ledger. lab-discover holds out a season before it freezes anything; lab-run grades a frozen rule weekly. Neither places a bet. The guide runs one.