All systems normalData updated just nowStatusChangelogSupport
badmintonapi

Changelog

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

  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. Match duration
    • /v1/results, /v1/results/yesterday, /v1/events/{id}, /v1/live and the webhooks now give duration_min: how long a finished match lasted, in minutes, from its start to its final point.
  12. 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.
  13. Point by point
    • /v1/events/{id}/points and the match_points MCP tool: every rally of a match, game by game, with the score after it, who won it and who served it, and each side's points won on and against serve and longest run. Rallies are read while a match is in play (Live plan) and again once it has finished (Archive plan).
    • /v1/live is now read twice a minute while a match is in play: meta.poll_seconds is 30.
  14. Webhooks
    • On the Live plan, add up to 10 endpoints in your account (Webhooks) and get a signed POST the moment a match starts (match.started), finishes (match.finished) or has its result corrected (result.corrected). The body is the same match as /v1/events/{id}; each delivery is signed in X-BDA-Signature and tried 8 times over about 3 days.
  15. Venue altitude
    • /v1/venues, /v1/venues/{id} and /v1/calendar now give elevation_m: the height above sea level of the venue, or of its host city where the venue has none, with elevation_from saying which.
  16. Market accuracy by round and seeding
    • /v1/analysis/market now also gives favourite_by_round and favourite_by_seeding: how often the closing favourite won against how often the market expected, round by round and by whether each side was seeded.
  17. Schedule load
    • /v1/players/{id}/schedule and the player_schedule MCP tool: every event a player played with its dates, matches, furthest round and the rest days before it, and in meta the days since their last event, events and matches in the last 30, 60 and 90 days and back-to-back weeks, as they stood on any day you name.
  18. Playing hand, height and coach for more players
    • /v1/players/{id} now fills hand and height_cm from the player's own page where the open knowledge base has none, and adds coach.
  19. World ranking history back to 2013
    • /v1/rankings with a date before September 2026 now answers with that week's top list (about 20 to 25 places), back to 2013 (women's singles from 2012); meta.full is false for these and meta.depth says how deep.
    • /v1/players/{id}/rankings now includes every week the player was in those top lists.
    • The rankings pages open any of those weeks from their list picker.
  20. World number ones, and OpenAPI
    • /v1/rankings/number-ones and the world_number_ones MCP tool: every world number one in each discipline since the computer ranking began on 1 October 2009, reign by reign, with dates and weeks; on a date, or for one player.
    • The whole API as OpenAPI 3.1 at https://badmintonapi.com/openapi.json, built from the same list the API runs on.
    • /v1/players/{id} now gives number_one: weeks at world number one in each discipline, with reigns and dates.
  21. Handicaps and totals
    • /v1/odds/{id} and the match_odds MCP tool now carry lines: every handicap and total line priced before play, in games or points, with each bookmaker's opening and closing price and the average close.
    • /v1/players/{id} also gives born, hand and height_cm where known.
    • /v1/players/{id} now gives career_high: the player's best world ranking with its event, date and doubles partner, for over 2,300 players.
    • /v1/tournaments/{id} now gives podium: gold, silver and both bronzes in each event, for editions with a medal table.
    • Draw matches: finals for 480 more editions whose medal tables are all that is published (gold beat silver, no score), and full draws for the junior championships whose event pages were not read before.
  22. Accounts, keys and plans
    • Sign in with Google at /login: a free key is made at once, with no card.
    • Your account at /account: today's calls, keys (up to five, each with a name, rotated with a day's overlap or revoked), the plans and billing, and every endpoint's calls and errors over 30 days.
    • Paid plans in US dollars a month: Archive $19, Odds $49 and Live $149, changed or cancelled at any time. Support and refunds at /support and /refunds.
    • An agent skill at /skill.md and /.well-known/agent-skills/index.json teaches AI agents the API and the MCP tools.
  23. Status, as uptime
    • /status and /status.json now show whether the website, the REST API and the MCP server are answering, their uptime over the last day, week, month and quarter, and every incident with its updates.
    • Each part in /status.json is matched by its key: site, api or mcp. The freshness of results, prices and rankings is no longer on the status page.
  24. Twice the tournaments
    • 124,000 draw matches in 92 series, up from 67,000 in 30: the rest of the World Tour, the Grand Prix circuit before it, and the Oceania, African, European, Pan American and Pacific championships and Games.
    • Team events: the Thomas, Uber and Sudirman Cups, every tie since 1949 with the matches inside it, in /v1/tournaments/{id}/ties and each player's record.
    • Juniors: the Asian, European and African junior championships beside the world title.
    • Para badminton: the Paralympic Games and the para world championships, each match with its sport_class (WH1 to SH6). /v1/tournaments/{id}/draw takes sport_class, /v1/series/{slug}/champions keys para finals by class ("MS WH1"), /v1/players/{id}/titles gives each final's class, and level=para lists the editions.
    • Group stages: 2,500 round-robin matches from the Olympic and Paralympic Games, the season finals and the European Games, each with its group as the round.
    • This season's results for every tournament we carry prices for, and the Super Series years of six more opens.
  25. Our own names throughout
    • /v1/rankings: each entry names its players as we hold them, with their player ids and, in doubles, both partners.
    • /v1/results, /v1/fixtures and /v1/live: tournaments under our own names, and players under ours wherever the match is in a draw.
    • /status.json: each run is named by one of our own job keys.
    • /v1/venues and /v1/venues/{id}: meta.source is no longer sent.
  26. MCP server
    • 33 tools at https://api.badmintonapi.com/mcp, one for every endpoint worth asking about, with the same key, plans and limits as the API.
  27. Our rating, win chance and five analyses
    • /v1/ratings: an Elo-style rating for every player on any date, with each player's history.
    • /v1/predict: the chance each side wins, with a fair price and their head-to-head.
    • /v1/analysis/upsets, seeds, deciders, records and market.
    • /v1/series/{slug}/champions: the roll of honour of every series.
  28. Players in depth
    • /v1/players/{id}/partners, opponents, titles, form, stats and rankings.
  29. Search, countries, the calendar and places
    • /v1/search: players, pairs, tournaments, series, countries, venues and cities in one call, on every plan.
    • /v1/countries and /v1/countries/{code}.
    • /v1/calendar: a season in date order with venue, dates and prize money.
    • /v1/venues, /v1/venues/{id} and /v1/locations.
  30. The API opens
    • 19 endpoints: results, fixtures, tournaments, draws since 1899, players, head to head, world rankings, odds, backtests and live scores.