Win chance
Odds MCPwin_chance The chance each side wins from our rating, with a fair price and their head-to-head. Singles or doubles, on any date.
/v1/predict- 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
Give two players, or two pairs, and the API returns the chance each side wins from our rating as it stood on the day you choose, with a fair price and their head to head. Below the reference: how ratings become a chance, how often that chance has come true, and how to read it beside a bookmaker's price.
See it in charts: how our rating worksTry it
Kept in this browser and filled in on every page. A key made in your account lands here by itself.
Press Run to call the API with your key. The answer appears here.
Parameters
player1pl_ idrequiredplayer2pl_ idrequiredpartner1pl_ id- Doubles: player1's partner.
partner2pl_ id- Doubles: player2's partner.
disciplinetext- MS, WS, MD, WD or XD.
MSWSMDWDXD datedate- The ratings as they stood that day.
hosttext- The host country's IOC code, like DEN: a side whose players are all from it is moved by the home figure in meta.model.home_edge (rating points; null when testing found none, and it can be below 0).
gamestext- In play at one game all: the first two games from side 1, like 21-15,18-21; adds the chance of the deciding game.
Returns
discipline- MS, WS, MD, WD or XD.
date- The day, YYYY-MM-DD.
host- The host given: code, and home_side (1 or 2, the side whose players are all from it; null when neither or both).
side1- Side 1: players, rating, continent (the one its players share, else null), chance and fair price.
side2- Side 2: players, rating, continent, chance and fair price.
head_to_head- Meetings between the two sides and the wins of each.
age_gap_years- Singles: how many years older side 2 is than side 1 on the date (below 0 when side 1 is older), when both birth dates are known; the chance includes the age term (meta.model.age). Null in doubles or when a date is missing.
decider- With games at one game all: each side's chance of the deciding game (side1, side2), fair_price for each, which side won the second game and by how many points; null without games.
Where the win chance comes from
The chance is our rating turned into a probability. This is how that is done, how well it has matched results, and how to read it next to a price.
See it in charts: how our rating worksDoubles 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.
PA = 1 / (1 + 10(RB - RA) / 320)91,343 matches since 2000, Brier score 0.1854| Rating gap | Chance on the 400 scale | Chance we publish (scale 320) | Fair price, decimal |
|---|---|---|---|
| 0 | 50% | 50% | 2.00 |
| 25 | 53.6% | 54.5% | 1.84 |
| 50 | 57.1% | 58.9% | 1.70 |
| 100 | 64% | 67.3% | 1.49 |
| 150 | 70.3% | 74.6% | 1.34 |
| 200 | 76% | 80.8% | 1.24 |
| 300 | 84.9% | 89.6% | 1.12 |
| 400 | 90.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.
The fair price
fair_price is one divided by the chance: the decimal price at which backing that side would break even if the chance were exactly right. A 62.5% chance is a fair price of 1.60. A bookmaker's price carries a margin, so a market price is shorter than fair on both sides; when a market price is longer than our fair price, our rating thinks that side is under-rated by the market.
That is a starting point, not a bet. The market knows about injuries, form inside a tournament and conditions; the rating knows only results. Compare the two with /v1/odds/{id} before you act on either.
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).
| Discipline | Matches | Favourite won | Brier score |
|---|---|---|---|
| Men's singles | 23,390 | 69.3% | 0.1966 |
| Women's singles | 18,407 | 72.8% | 0.1759 |
| Men's doubles | 16,986 | 70.3% | 0.1904 |
| Women's doubles | 15,842 | 73.5% | 0.1732 |
| Mixed doubles | 16,718 | 71% | 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.
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.
Using it well
- Check the matches behind each rating. Every player comes with
matches. A player with no rated match is taken at 1500, and the chance says so inmeta.note. - Use the date for the past.
dategives the chance as it would have been on that day, from results before it only, so a backtest is honest. - Singles needs no discipline. For two singles players it is worked out from the first player; doubles needs
disciplineand both partners. - Read it beside the head to head.
head_to_headcounts their meetings in the discipline; a long one-sided record the rating does not show can mean a match-up it misses.
The answer, field by field
Today's top two in men's singles, GET /v1/predict?player1=pl_9k1rzjad&player2=pl_d1p4a658:
{
"data": {
"discipline": "MS",
"date": "2026-10-12",
"side1": {
"players": [
{
"id": "pl_9k1rzjad",
"name": "Viktor Axelsen",
"country": "DEN",
"rating": 2044,
"matches": 612,
"last_rated": "2025-10-26"
}
],
"rating": 2044,
"chance": 0.5198,
"fair_price": 1.92
},
"side2": {
"players": [
{
"id": "pl_d1p4a658",
"name": "Shi Yuqi",
"country": "CHN",
"rating": 2033,
"matches": 469,
"last_rated": "2026-09-29"
}
],
"rating": 2033,
"chance": 0.4802,
"fair_price": 2.08
},
"head_to_head": {
"meetings": 13,
"side1_wins": 9,
"side2_wins": 4
}
},
"meta": {
"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"
},
"note": "A player never rated starts at 1500; a chance built on few rated matches is rough. Compare it with the market at /v1/odds/{id}."
}
}discipline- The discipline the chance is for. For singles without one, it is worked out from the first player.
date- The day the ratings stand on; today when you left it out.
side1.players- Each player on the side:
id,name,country, their ownrating(null if never rated),matchesbehind it andlast_rated. side1.rating- The side's rating: the player's own in singles, the average of the two in doubles. A never-rated player counts as 1500.
side1.chance- The chance this side wins, 0 to 1, on the fitted scale. The two sides add up to 1.
side1.fair_price- One divided by the chance: the decimal price with no margin.
head_to_head- Their meetings in this discipline (from the first player on each side):
meetings,side1_wins,side2_wins. Not used in the chance. meta.model- The model:
chance_scale,fitted_on_matches,brierandbuilt, so any chance can be checked by hand.
Recipes
GET /v1/predict?player1=pl_...&partner1=pl_...&player2=pl_...&partner2=pl_...&discipline=XDdate to the day before it: only results before that day are used.GET /v1/predict?player1=pl_...&player2=pl_...&date=2021-07-31GET /v1/odds/mt_...GET /v1/analysis/upsets?by=rating&from=2015Words 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 does the chance differ from the bookmaker's?
- The rating sees only results; the market also sees injuries, form within a tournament and money. Differences are worth a look, not proof that one side is wrong.
- Can I get the chance for a match that was played years ago?
- Yes. Pass
dateas the day before the match and you get the chance from the ratings that stood then. - Does the head to head change the chance?
- No. The chance comes from the ratings alone; the head to head is given beside it for you to weigh.
- How is the scale chosen?
- Each night the scale that gives the lowest Brier score on every rated match since 2000 is chosen, and it is in
meta.model.chance_scale.
More on the rating: how our rating works, and the rating in charts.