# Hot Corner v1 - Data sources

Checked 2026-11-08.

## Stats (2026 season, seeded)

Source: MLB Stats API, https://statsapi.mlb.com/api/v1/stats
- Hitters: stats=season, group=hitting, season=2026 (135 qualified hitters returned)
- Pitchers: stats=season, group=pitching, season=2026, playerPool=all (868 pitchers returned, starters and relievers)
- Leaders checked for saves and holds: /api/v1/stats/leaders, season=2026
- No API key required. Stats are the completed 2026 regular-season totals as returned by the API on 2026-11-08.
- Fantasy points in players.json are computed from those totals with the scoring in scoring.js.

## Salaries (AAV, average annual value)

Intended source: Spotrac team payroll pages, spotrac.com/mlb/payroll/_/year/2026
- Spotrac's team payroll totals for 2026 were verified via browser on 2026-11-08 (for example LAD $339,319,244, NYM $346,736,805).
- Spotrac's individual player pages were blocked to direct curl (403 CloudFront) and its team pages only return totals in the text fetch, so most individual AAVs could NOT be verified one by one in this build.

What that means in the app:
- 5 salaries are verified from a fetched source on 2026-11-08: Shohei Ohtani $70M, Freddie Freeman $27M, Zack Wheeler $42M, Jacob deGrom $37M, Dylan Cease $30M. Each has salaryVerified: true in players.json.
- All other salaries are estimates, marked salaryVerified: false in players.json, and shown in the app with a "~" in front of the price, for example ~$12M. Do not treat a "~" price as a verified real AAV.
- Pre-arbitration players are estimated at $0.8M, close to the 2026 MLB minimum salary of $780,000 reported in the same checks.
- Phase 2 (Workers + D1 + weekly salary refresh) is the step that verifies and refreshes every AAV from Spotrac.

## What is not in v1

- No live stats feed. The 2026 season ended Nov 1, 2026. Scores are seeded 2026 totals. Nightly updates start with the 2027 regular season.
- No email login, no server, no database. Rosters live in the browser's localStorage only.
- No IL list feed. No player in the seeded pool carries an IL flag from the stats API, so IL drops in v1 are marked by the player and do not count against the weekly transaction limit. Phase 2 will check the real IL list nightly.
