Changelog
New endpoints, parameters and data — newest first. All changes are backwards-compatible; we add fields, we don't remove them.
August 2026
Season addressing that matches the data
- GET /v1/leagues/{id}/fixtures no longer depends on the feed's season index: it defaults to your plan's whole history window plus the upcoming schedule, start_time/end_time narrow it with no 24h cap, and ?season= now selects by the season's kickoff dates. Leagues whose seasons list is empty — the index only tracks a subset — return their full fixture history instead of season_not_found, and a ?season= they do not list is a clear 404.
- GET /v1/standings is now explicit about coverage: where the feed carries no current table, we compute one from finished results where the league's format allows it — marked "source": "computed" (goal, corner and card tables alike; administrative point adjustments excluded). Formats a computed table cannot represent faithfully (playoff splits, Apertura/Clausura pyramids, quadruple round-robins) return an explicit standings_not_available error instead of a stale or missing-season answer. Every response now names its season and its source ("feed" | "computed").
- Unsupported query parameters other feeds use — from, to, date, and team/live on /v1/fixtures — return 400 unknown_parameter instead of being silently ignored, so an unfiltered response can never masquerade as a filtered one.
- Pricing copy now spells out the Pro odds package: opening, closing and in-play prices; tick-by-tick movement history stays Ultra.
August 2026
The league list, published and enforced
- The Pro league list is published in full, with ids, at /docs/league-coverage: the top flight of 84 countries, the 34 second divisions bet365 prices in full, the continental club cups and national-team football.
- Plan league scope is now enforced. Free keys reach the five big European leagues, Pro the published list, Ultra everything. A competition outside your plan returns 403 insufficient_plan — never an empty list.
August 2026
BTTS, and a trimmed history
- GET /v1/leagues/{id} now lists the league's seasons (newest first, one marked current) — the valid ?season= values for league fixtures and standings.
- country_id and is_national are dropped from team payloads — the upstream data never actually carried them, so they only misled.
- Both-teams-to-score joins /v1/fixtures/{id}/odds (bet365, pre-match) and the coverage table.
- Bookmakers beyond bet365 on /v1/fixtures/{id}/odds are now an Ultra feature — bet365 (every market) stays on Pro.
- The first_10min and next_goal markets are dropped from odds history.
- The /v1/fixtures/{id}/corners endpoint is removed — corner counts are on every fixture, corner lines on /odds, and corner tables on /standings.
- corner_projection is dropped from /v1/fixtures/{id}/statistics and the stats include.
August 2026
Closing lines
- The current stage is renamed closing on every odds payload — opening / closing / inplay, the terms backtesters actually use. For a match that has not kicked off yet, closing is simply the latest pre-match price so far.
August 2026
Bookmaker odds
- /v1/fixtures/{id}/odds now returns full prices: every stage (opening, closing, in-play) carries the line and both prices, not just the line.
- New bookmakers parameter (comma list, default bet365) and GET /v1/bookmakers — 18 more books with 1X2, Asian handicap, goal line and corner line where recorded, one odds entry per book.
- Odds movement history too: ?bookmaker= on /v1/fixtures/{id}/odds/history (one book at a time, default bet365) replays any bookmaker's 1X2, Asian handicap, goal line or corner line tick by tick.
August 2026
Reliable live view
- status=live now only returns matches that kicked off within the last 4 hours — stale feed rows stuck in a running status no longer appear.
- per_page for status=live goes up to 500, so a single page holds every live match and offset pagination cannot skip or duplicate a match mid-scroll.
August 2026
Focused fixtures endpoints
- New GET /v1/leagues/{id}/fixtures — a full season of league fixtures (defaults to the newest season with fixtures), the bulk entry point for historical data.
- New GET /v1/teams/{id}/fixtures — one team's matches home and away, most recent first.
- /v1/fixtures is now the window view: start_time / end_time unix timestamps bound a window of up to 24 hours (default: today UTC), so any timezone's "today" is one call. The date, season, team and live parameters are gone — use the new endpoints, and status=live for in-play. status accepts all (default) | scheduled | live | finished; unknown values return a 400.
- esports is now a plain boolean: false (default) returns real football, true returns esoccer instead — the mixed "include" mode is gone.
August 2026
Kickoff timestamps
- New kickoff_ts field — unix seconds, UTC — alongside kickoff_utc on every fixture payload, so comparisons and backtest math need no date parsing.
August 2026
Short-form odds lines
- All odds lines are now single short-form numbers: split bookmaker quotes are averaged ("0.0, -0.5" becomes -0.25) on every endpoint, tick history included.
- Card lines (card_line, card_asian) are now part of the odds include on /v1/fixtures.
August 2026
Compound requests
- New include parameter on /v1/fixtures and /v1/fixtures/{id} — expand odds, events and in-play stats inline: one call per screen, not one call per match.
August 2026
Localization & esoccer filter
- New lang parameter on fixtures, leagues, teams, standings and countries — team, league and country names in 21 languages besides English.
- New esports parameter on /v1/fixtures and /v1/leagues — esoccer (e-football) leagues are excluded by default, opt in with include or only.
July 2026
v1 launched
- Public launch: fixtures, live scores, odds (pre-match + in-play with opening lines and tick history), corners, cards, standings, match events, leagues, teams and countries.
- API key authentication, per-minute rate limits and a uniform JSON envelope.