All systems normalData updated just nowStatusChangelogSupport
badmintonapi

Our rating

Archive MCP player_ratings

Our own rating (Elo-style, from every senior result) as a table for a discipline on any date, or one player's rating history. Not an official BWF figure.

GET/v1/ratings
113,880
senior matches rated, replayed in order every night
3,288
ratings active in the last 12 months, five disciplines
71.2%
of the rating's favourites won, 91,343 matches since 2010
320
the chance scale, fitted nightly to every match since 2010

Our rating is an Elo-style number for every player in every discipline, made from who they beat and who beat them in every senior draw result, in order. Ask for a table on any date or for one player's history. Below the reference is the whole method: the formula with a real final worked through, doubles, new players, how a rating becomes a chance, how accurate it has been, and the limits.

See it in charts: how our rating works

Try it

Kept in this browser and filled in on every page. A key made in your account lands here by itself.

Answer

Press Run to call the API with your key. The answer appears here.

Parameters

disciplinetext
MS, WS, MD, WD or XD. MSWSMDWDXD
datedate
The ratings as they stood that day; today when left out.
playerpl_ id
One player's history instead of a table.
activetrue or false
Only players rated in the year before the date (default true).
pagewhole number
Which page. Default 1.
per_pagewhole number
Results a page, up to 200. Default 50.
cursortext
Meta.next_cursor from the page before.

Returns

rank
Position in the list.
player
The player: id, name and country.
rating
Our rating, starting at 1500.
matches
Matches played, or the matches themselves.
last_rated
The last day of the edition in which the rating last changed (for an edition still under way, the day it is due to end).
How our rating works

One number for how well a player is playing

The world ranking counts points for finishing places. Our rating counts who you beat. It is built from every senior draw result in order, the way chess ratings are, and it is our own model, never an official BWF figure.

See it in charts: how our rating works

In short

  • Everyone starts at 1500. A rating has no ceiling or floor: it rises with wins over strong players and falls with losses to weaker ones. Today the highest-rated active men's singles player is at 2,044, and in women's singles 2,397.
  • It moves after every match. Beat someone rated above you and you gain more; lose to someone rated below you and you lose more. A win never lowers a rating and a loss never raises it.
  • One rating per discipline. A player has separate ratings for singles, doubles and mixed, because skill in one does not carry over to another.
  • Pairs are averaged. In doubles a pair is rated as the average of its two players, and both move by the same amount.
  • Rebuilt whole every night. Every senior draw result since 1899 is replayed in order, 113,880 matches for 16,212 players, so a draw we add for 1985 corrects everything after it.
  • It turns into a chance. Two ratings give each side's chance to win, fitted to real results: the favourite it names has won 71.2% of matches since 2010.

Who leads now

The highest-rated active player in each discipline today, from last night's build. The full tables are one call away, and the charts page draws their lines over three years.

DisciplineLeaderRatingMatches12 monthsNext best
Men's singlesViktor Axelsen DEN2,044612 +7Shi Yuqi, 2,033 (11 behind)
Women's singlesAn Se-young KOR2,397446 +108Akane Yamaguchi, 2,177 (220 behind)
Men's doublesSeo Seung-jae KOR2,210419 -52Muhammad Shohibul Fikri, 2,020 (190 behind)
Women's doublesLiu Shengshu CHN2,132258 +19Lee So-hee, 2,099 (33 behind)
Mixed doublesHuang Dongping CHN2,234580 -19Wei Yaxin, 2,095 (139 behind)

The gap to second place turns into a chance like any other gap: in men's singles, Viktor Axelsen would be given 52% against Shi Yuqi today.

Why a rating as well as the world ranking

The world ranking answers "who has earned the most points in the last 52 weeks". It rewards playing often and going deep in the biggest events, and it is the list that decides seedings and entries. It is the right list for that job, and the API serves it at /v1/rankings.

A rating answers a different question: "how strong is this player now, judged by the results". It does not care how many tournaments someone entered or how many points a round is worth. It cares who they played and whether they won. So a player back from injury with few ranking points, but beating the best, rises fast in the rating while the ranking catches up over months.

World rankingOur rating
MeasuresPoints earned for finishing placesStrength, from who you beat and lose to
What countsThe best tournaments in a rolling 52 weeksEvery rated senior match, ever, in order
Beating a top playerWorth the same as beating anyone in that roundWorth far more than beating a lower player
Playing lessPoints drop off after 52 weeksThe rating stays where the last result left it
DoublesRanks the pairRates each player; a pair is the average
Turns into a chanceNoYes, the chance either side wins

What goes in, and what does not

Counted The winner and loser of every senior draw match we hold, first round to final. The rating of each opponent at the moment the match was played. The order of play: tournaments by start date, then round by round inside each draw. Retirements, as the result stands: the player who retired lost. How many rated matches each player has had in the discipline, which sets how far one result moves them.
Not counted The score. A 21-19, 19-21, 23-21 win counts the same as 21-5, 21-6. Walkovers: no match was played, so nobody moves. The tournament's level or prize money. A first-round win counts the same at every event. Junior events, team events without a draw, and qualifying rounds the draw does not show. Injuries, coaches, travel, home crowds and time away. Only results.

The calculation, step by step

Before each match, both sides get an expected score: the share of the match they would win if the ratings were exactly right. The rating gap decides it.

Expected score of AEA = 1 / (1 + 10(RB - RA) / 400)
After the matchRA' = RA + K × (SA - EA)
WhereSA = 1 for a win, 0 for a loss; K = 32 for a player's first 20 matches in the discipline, 20 after

When both players have the same K, what one gains the other loses, so rating points mostly pass between players rather than appear from nowhere. The size of the move depends on how surprising the result was. At K = 20:

Rated above the opponent byExpected scoreChange for a winChange for a loss
Level50%+10.0-10.0
50 points57.1%+8.6-11.4
100 points64%+7.2-12.8
200 points76%+4.8-15.2
300 points84.9%+3.0-17.0
400 points90.9%+1.8-18.2
Rated 200 below24%+15.2-4.8
A real one: the 2026 Arctic Open men's singles final
Yushi Tanaka JPN Rating before 1,841.9 Expected score 0.301 K 20 (130 matches before) Change -6.0, to 1,835.9
Anders Antonsen DEN won Rating before 1,988.3 Expected score 0.699 K 20 (452 matches before) Change +6.0, to 1,994.3

The published chance before the match, from the fitted scale below, was 25.9% for Yushi Tanaka and 74.1% for Anders Antonsen.

New players settle quickly

A player's first 20 rated matches in a discipline move them with K = 32, 60% more than the K = 20 after that. Starting at 1500 is a guess, and the larger steps get a newcomer near their real level in a season rather than several. Once a player has a record, each result moves them less, so one bad day does not undo years of form.

Every rating comes with matches, the rated matches behind it. Below 20, read the number as rough. /v1/predict gives each player's count too, so you can weigh a chance built on a short record.

Doubles and mixed

A pair's rating is the average of its two players' ratings in that discipline. The expected score uses the two pair averages, and after the match both players on a side move by the same amount. A player who changes partner keeps their own rating, so a new pair starts from what each partner has earned, not from 1500.

Men's doubles, women's doubles and mixed are rated apart: a mixed specialist and a men's doubles specialist are judged only on their own events. For a chance, /v1/predict takes player1 and partner1 against player2 and partner2, with the discipline.

From ratings to a chance

The ratings move on the classic Elo scale of 400: a 400-point gap means the stronger side is expected to win ten times as often as the weaker. In badminton a rating gap wins more often than that: best of three games to 21 gives the better player many chances to show it. So the chance we publish uses its own scale, fitted every night to every rated match since 2010: the scale that would have scored those matches best. A match where any player has fewer than 10 rated matches in the event uses a second scale (225), fitted the same way on those matches alone: a rating built on few results is read differently, and in practice a newcomer drawn against an established player loses more often than the gap alone says, so that scale comes out the sharper of the two.

Published chance of APA = 1 / (1 + 10(RB - RA) / 320)
Fitted on91,343 matches since 2000, Brier score 0.1854
Rating gapChance on the 400 scaleChance we publish (scale 320)Fair price, decimal
050%50%2.00
2553.6%54.5%1.84
5057.1%58.9%1.70
10064%67.3%1.49
15070.3%74.6%1.34
20076%80.8%1.24
30084.9%89.6%1.12
40090.9%94.7%1.06

The scale is in every answer as meta.model.chance_scale, the newcomer scale as meta.model.chance_scale_newcomer with newcomer_below_matches, and the matches they were fitted on and their Brier score, so you can reproduce any chance from two ratings yourself.

How accurate it is

Every match is scored with the ratings as they stood before it was played, so this is a fair test: nothing from the match or after it leaks in. Across 91,343 senior draw matches since 2010, the side our rating made favourite won 71.2%, with a Brier score of 0.1854 (the average squared gap between chance and result: 0 is perfect, 0.25 is a coin toss).

DisciplineMatchesFavourite wonBrier score
Men's singles23,39069.3%0.1966
Women's singles18,40772.8%0.1759
Men's doubles16,98670.3%0.1904
Women's doubles15,84273.5%0.1732
Mixed doubles16,71871%0.1869

A chance is only useful if it means what it says: of all the matches where the favourite was given 70%, about 70% should be won. This is how that has held since 2010, band by band.

Favourite's chanceMatchesExpected and won
50 to 55% 13,725 51.8% won, 52.3% expected
55 to 60% 11,188 56.8% won, 57.4% expected
60 to 65% 10,256 62.1% won, 62.4% expected
65 to 70% 9,520 67% won, 67.5% expected
70 to 75% 8,905 73.5% won, 72.5% expected
75 to 80% 8,222 76.6% won, 77.5% expected
80 to 85% 7,911 81.8% won, 82.5% expected
85 to 90% 7,615 86.7% won, 87.5% expected
90 to 95% 7,591 90% won, 92.5% expected
95 to 100% 6,410 95% won, 97.3% expected

WonExpected

Against the betting market: on the 10,675 of those matches with a closing price, the market's favourite won 75.3% (Brier 0.1660) and ours won 74% (Brier 0.1757). The closing market is sharper, as it should be: it sees team news and money, the rating sees only results. The rating is a fair, independent second opinion, and most useful where there is no price at all.

Dates, history and the active list

Ratings are kept per tournament: after each event a player played, the API stores their rating and match count, dated the tournament's last day (31 December of its year when the dates are not known). Ask for any date and you get the ratings as they stood on that day, made only from results before it. That makes old dates safe to backtest on: no later result can leak into them.

A table lists only active players by default: those rated in the 365 days before the date. A player who retired in 2019 keeps their last rating, but does not crowd today's table. Pass active=false to include everyone, which is how you find the strongest players of any era. The player pages on this site use the same active list for "3rd of 538 rated in the last 12 months".

Because ratings are rebuilt whole each night, adding an old draw can shift ratings after it by a little. Today's numbers are always the best the archive can give; if you store ratings yourself, store meta.model.built with them.

Using the endpoint

Two shapes from one address. Give discipline for a table, ranked by rating. Give player for one player's history, newest first, one row per tournament, with discipline to narrow it.

Today's men's singles tableGET /v1/ratings?discipline=MS
The women's singles table on the eve of the Rio OlympicsGET /v1/ratings?discipline=WS&date=2016-08-10
The highest-rated mixed doubles players of any eraGET /v1/ratings?discipline=XD&active=false&per_page=50
One player's men's doubles historyGET /v1/ratings?player=pl_...&discipline=MD
The chance in a match, from the same ratingsGET /v1/predict?player1=pl_...&player2=pl_...
The wins our rating least expectedGET /v1/analysis/upsets?by=rating

Every answer carries meta.model: the name, kind, starting rating, the chance scale, the matches it was fitted on, its Brier score and when it was built.

The answer, field by field

A table, GET /v1/ratings?discipline=MS&per_page=3, with today's real top three:

{
    "data": [
        {
            "rank": 1,
            "player": {
                "id": "pl_9k1rzjad",
                "name": "Viktor Axelsen",
                "country": "DEN"
            },
            "rating": 2044,
            "matches": 612,
            "last_rated": "2025-10-26"
        },
        {
            "rank": 2,
            "player": {
                "id": "pl_d1p4a658",
                "name": "Shi Yuqi",
                "country": "CHN"
            },
            "rating": 2033,
            "matches": 469,
            "last_rated": "2026-09-29"
        },
        {
            "rank": 3,
            "player": {
                "id": "pl_hmfabfyf",
                "name": "Anders Antonsen",
                "country": "DEN"
            },
            "rating": 1994,
            "matches": 453,
            "last_rated": "2026-10-11"
        }
    ],
    "meta": {
        "count": 3,
        "next_cursor": "...",
        "page": 1,
        "per_page": 3,
        "total": 548,
        "total_pages": 183,
        "next_page": 2,
        "prev_page": null,
        "model": {
            "name": "Badminton API rating",
            "kind": "Elo-style, from every senior draw result in order; our own model, not an official BWF figure",
            "start": 1500,
            "chance_scale": 320,
            "fitted_on_matches": 91343,
            "brier": 0.1854,
            "built": "2026-10-12T04:40:45Z"
        },
        "discipline": "MS",
        "date": "2026-10-12",
        "active": true
    }
}
rank
Place in this table, 1 is the highest rating. Counts across pages.
player
id, name and IOC country (null when unknown). Use the id with every player endpoint.
rating
The rating after the last tournament the player played on or before date, to one decimal.
matches
Rated matches behind it in this discipline. Under 20, the rating is still settling.
last_rated
The day it last changed: that tournament's last day.
meta.model
What made these numbers: name, kind, start, chance_scale, fitted_on_matches, brier and built.
meta.discipline
The discipline of the table.
meta.date
The day the table stands on; today when you left it out.
meta.active
True when only players rated in the 365 days before the date are listed.
meta.total
Players in the whole table, with the usual page fields.

A player's history, GET /v1/ratings?player=pl_9k1rzjad&discipline=MS, comes newest first, one row per tournament they played:

date
The tournament's last day, when the rating took this value.
discipline
MS, WS, MD, WD or XD. Leave discipline out to get every discipline the player has, interleaved by date.
rating
The rating after that tournament.
matches
Rated matches in the discipline up to and including that tournament.
tournament
id and name of the edition. Its draw is at /v1/tournaments/{id}/draw.

Recipes

Who was number one on a given dayAsk for the table on that date with one row.GET /v1/ratings?discipline=WS&date=2019-08-25&per_page=1
A player's peakFetch their history in one discipline (up to 200 a page) and take the highest rating; its row says which tournament it came after.GET /v1/ratings?player=pl_...&discipline=MS&per_page=200
Form over the last yearCompare the newest row with the first row dated a year earlier. The player pages on this site show the same as a line.GET /v1/ratings?player=pl_...&discipline=XD
Rating against the world rankingFetch both lists for the same day and join them on the player id: a player far higher in the rating is winning more than their points show.GET /v1/rankings?discipline=MS
The best of an eraTurn off the active filter on a date at the end of the era: everyone who had played to then, ranked by where they stood.GET /v1/ratings?discipline=MD&date=1999-12-31&active=false
A chance for any matchTwo players, or two pairs with the discipline, on any date. The answer has the ratings, the chance, the fair price and the head to head.GET /v1/predict?player1=pl_...&player2=pl_...

What it cannot see

  • Margins. A narrow win and a thrashing count the same. That keeps the rating simple and hard to game, and loses a little information.
  • Time away. A rating does not fade while a player is injured or retired; it waits. Their first results back move them as usual.
  • Matches outside the draws. Results we do not hold a draw for are not counted, so a player who plays mostly below the senior tours may be under-rated.
  • Eras. Ratings are relative to the players of the time. A 1,900 in 1995 and a 1,900 today are both far above their fields, not the same strength.
  • Men against women. The pools never meet, so a men's singles rating and a women's singles rating are not comparable.

Words used here

Elo
A rating system made for chess, where points pass from loser to winner and the amount depends on how expected the result was.
Expected score
The share of the match a side would win if the ratings were exactly right; the rating moves by the gap between this and the result.
K
How far one result can move a rating: 32 for a player's first 20 matches in a discipline, 20 after.
Scale
The rating gap at which the stronger side is ten times as likely to win. Ratings move on 400; the published chance uses 320, fitted to results.
Active
Rated in the 365 days before the date asked for. Tables list only active players unless active=false.
Brier score
The average of (chance minus result) squared over many matches. 0 is perfect, 0.25 is what always saying 50% scores. Lower is better.
Calibration
Whether chances mean what they say: of matches given 70%, about 70% should be won.
Fair price
One divided by the chance, in decimal odds, with no bookmaker's margin.

Questions

Why is the world number one not first in our rating?
The ranking rewards points earned over a year, and the rating rewards who you beat. A player who wins often against the very best can sit above a player with more points from more events. When they differ, the rating is usually reacting faster to recent results.
Why 1,500?
It is the usual Elo starting point and only a label: what matters is the gap between two ratings, not the number itself.
How often does it change?
It is rebuilt every night from the draws, so a finished tournament shows in the ratings by the next morning.
Can a player lose rating while winning a tournament?
No. Every win adds and every loss takes away, so a player who wins every match of a tournament ends it higher.
Is it the same as chess Elo?
The updates are the same idea, with K of 32 then 20. The published chance uses a scale fitted to badminton results (320) rather than chess's 400.
Is it official?
No. It is our own model, made from the results in the archive. The official list is the BWF world ranking, at /v1/rankings.

More on the rating: how the win chance works, and the rating in charts.