Results feed for your own tools

If you run your own tool alongside FranchiseHub — a head-to-head bot, a stats tracker, a custom leaderboard — you can pull this league's game results straight from FranchiseHub instead of re-entering them by hand. It updates automatically every time your league advances.

Get a key

  1. Open your dashboard's Commish Center → League Access.
  2. Click Create a key, give it a label so you remember what it's for (e.g. "Head-to-head bot"), and click Create key.
  3. Copy the key shown — it is only shown once. If you lose it, revoke it and create a new one.

Keep the key private. Anyone who has it can read this league's results.

The endpoint

GET https://<your-dashboard-domain>/api/leagues/<leagueId>/results

Send your key as a Bearer token:

curl -H "Authorization: Bearer YOUR_KEY" \
  "https://<your-dashboard-domain>/api/leagues/<leagueId>/results?season=0"

Your league's numeric ID is shown at the top of the League Access page and in the example URL there.

Query parameters (all optional)

Parameter What it does
season Only this season. Matches the seasonIndex in the response (Season 1 = 0, Season 2 = 1, and so on).
week Only this week. Matches the weekIndex in the response (Week 1 = 0, Week 2 = 1, and so on — playoff weeks continue the same count).
since Only games first seen final at or after this time. Accepts either an ISO timestamp (2026-09-20T00:00:00Z) or milliseconds since epoch. Use this to poll for "what's new" without re-reading the whole season.
all=1 Include games that haven't been played yet too (normally only final games come back).
format=csv Return the same rows as a CSV download instead of JSON.

Leave everything off to get every played game in the league's current data.

Response shape (JSON)

{
  "generatedAt": "2026-09-24T15:04:05.000Z",
  "leagueId": "1234567890",
  "count": 1,
  "results": [
    {
      "seasonIndex": 0,
      "stageIndex": 1,
      "weekIndex": 6,
      "scheduleId": 4821,
      "homeTeamId": 12,
      "homeTeam": { "teamId": 12, "name": "Dallas Cowboys", "abbr": "DAL" },
      "awayTeamId": 4,
      "awayTeam": { "teamId": 4, "name": "Buffalo Bills", "abbr": "BUF" },
      "homeScore": 27,
      "awayScore": 24,
      "status": "played",
      "homeUser": { "id": "1234...", "name": "some_discord_name" },
      "awayUser": null,
      "playedAt": "2026-09-22T02:11:09.000Z"
    }
  ]
}

A few notes on the columns:

  • homeTeam / awayTeam carry the CURRENT team identity, even if EA changed this league's team IDs since the game was played — you'll never see a game named for a team that no longer exists under that ID.
  • homeUser / awayUser are only present when a real person has claimed that team through FranchiseHub's team-claim system. A CPU-controlled team comes back null.
  • playedAt is when FranchiseHub first saw the game as final — not the in-game clock. EA's export doesn't carry a real played-at timestamp, so this is the closest honest substitute, and it's also what ?since= filters against. A game played before you created your key may show playedAt: null the first time it appears; after that it's recorded.
  • status is "played" unless you passed all=1, in which case not-yet-played games come back as "not_played" with zeroed scores.

CSV columns

?format=csv returns the same data as a spreadsheet-friendly download:

seasonIndex,stageIndex,weekIndex,scheduleId,homeTeamId,homeTeamName,homeTeamAbbr,awayTeamId,awayTeamName,awayTeamAbbr,homeScore,awayScore,status,homeUserId,homeUserName,awayUserId,awayUserName,playedAt

Rate limits and revoking a key

Each key can make up to 30 requests per minute — plenty for polling after every advance. If your tool hits that limit it gets a 429 response with a Retry-After header telling it how long to wait.

To shut off a key immediately — a leak, a retired tool, anything — go back to League Access and click Revoke next to it. Revoked keys stop working right away; nothing else on your dashboard changes.