All systems normalData updated just nowStatusChangelogSupport
badmintonapi
Changelog

What changed, and when.

Every change to the API, newest first. Nothing is removed or renamed without notice here first.

v1
the version you call
30
changes since 29 September 2026
10 Oct
the latest

October 2026

  1. The 2020 ranking freeze, and how old a list is

    • /v1/rankings for a date before our full lists now says how old the list given is (meta.list_age_days: a list stays in force until the next is published). For a date from 16 March 2020 to 10 January 2021 it also carries meta.frozen: the world ranking was frozen then and no new list was published, so the list given is the one that stood through the freeze.
  2. Age in singles chances

    • /v1/predict and the win_chance MCP tool now weigh age in singles. Our rating trails a rising player: since 2010 the side younger by 5 years or more won 5.8 points in 100 more often than its rating said. A shift for the side younger by 5 to 9 years and by 10 or more, fitted on 2010 to 2019, lowered the Brier score on 11,261 singles from 2020 on that it never saw, from 0.1826 to 0.1810. It applies when both players' birth dates are known; age_gap_years gives the gap and meta.model.age the shifts.
  3. Win chances between top players

    • Between two highly rated sides our chance ran a little too sure: where the market prices a match, our favourites won 1 to 3 in 100 less often than we said. /v1/predict and the win_chance MCP tool now use a scale of their own when the lower-rated side is rated 1512.9 or more. Tested first on 18,751 such matches from 2022 on that it was not fitted on, it lowered the Brier score there from 0.1945 to 0.1939, and on the 3,704 priced among them from 0.193 to 0.192. meta.model.top_level gives the bar and the scale.
  4. Deciding-game chance

    • /v1/predict and the win_chance MCP tool take games, the first two games at one game all (21-15,18-21), and add decider: each side's chance of the third game. It starts from the match chance and adds the second game's margin: a second game won by 6 or more carries into the third, and one won by 2 runs slightly the other way. Tested first on 10,597 deciders from 2020 on that it was not fitted on, it scored better there than the match chance alone (Brier 0.2258 against 0.2263). meta.model.decider gives the fit.
  5. Group stages read in full

    • Group-stage matches at the Olympics and other events with groups now carry both partners in doubles and every game score: 301 more group matches have their games, and 178 more doubles group matches have both players on each side. They reach /v1/matches, /v1/tournaments/{id}/draw, player records and our rating, and 150 more results matches are now tied to their draw match.
  6. Win chances across continents

    • /v1/predict and the win_chance MCP tool now add a fitted offset per continent. A rating earned mostly against players from the same region ran high against the strongest: at neutral venues Asian players beat their ratings by about 12 points in 100 and African players fell about 32 short. Tested first on matches from 2020 on that it was not fitted on, the offset lowered the Brier score there from 0.172 to 0.161. Each side now gives its continent, and meta.model.continent_offset the offsets.
  7. Draw matches held once

    • Some draws printed their last rounds twice (once in sections, once in a finals bracket), and those matches were held twice. Each is now held once, with the fuller names, so counts in /v1/players/{id}/stats, /v1/h2h, /v1/analysis/records and our rating no longer count them double. Results matches are also tied to their draw match by the edition's dates, which linked 134 more.
  8. Faster live scores

    • /v1/live, /v1/live/stream and the webhooks: matches in play are now read four times a minute, so a point is here in about 15 seconds. meta.poll_seconds is 15.
  9. Live stream

    • /v1/live/stream on the Live plan: live scores pushed as Server-Sent Events. Every match in play on connect, then each match the moment its score, status or prices change, a heartbeat every 15 seconds, and a fresh connection every 5 minutes (one call each). Two streams at a time per key; filter with discipline. The Python client has live_stream(), a generator of events that reconnects by itself.
  10. Better calibrated win chances

    • /v1/predict and the win_chance MCP tool now use two fitted scales: one for matches where every player has 10 or more rated matches in the event, and one, fitted on its own, when anyone on court has fewer. Both are fitted to every match since 2010, and meta.model gives both (chance_scale and chance_scale_newcomer).
  11. Python client

    • /sdk/badmintonapi.py: one file, standard library only, with a method for every endpoint (written from the API as it stands, so a new endpoint is in it at once), iterate() for every page of a list, and the per-minute limit waited out by itself.

September 2026