UFC odds API: consensus lines and historical odds since 2012
The UFCalendar Fight API now serves UFC odds: one consensus line per bout, opening and closing prices, line movement and historical UFC odds back to 2012.
The UFCalendar Fight API now serves betting odds, and I want to be precise about what that means before anyone pictures a scrolling board of sportsbook logos. It is one number per corner: the UFCalendar consensus line, averaged across the sportsbooks we track, with the opening line, the closing line and the movement between them. For the UFC it goes back to UFC 142 on January 14, 2012.
It shipped on September 25 for all five launch organizations (UFC, PFL, OKTAGON, BKFC and RIZIN), and the current, opening and closing lines are readable on every plan, the free 1-day trial included. The full endpoint list and live samples are on the UFC odds API page.
What shipped
GET /v1/fights/{id}/odds: one bout's consensus, opening and closing line, the movement from the opening line to the current line (the close, once the bout is settled), how many points we hold, and when the line last changed. Every line carries the American price, the decimal price, the implied probability, the favorite, a margin-removedfair_probability_a,sources(how many sportsbooks backed that point) andrecorded_at.GET /v1/events/{idOrSlug}/odds: the same block for every bout on a card, in card order, with unpriced bouts listed rather than dropped.?include=oddson the event and fight detail calls, which puts the current line inline next to the card.GET /v1/fights/{id}/odds/history(Pro and up): every consensus point for a bout, oldest first.- The
odds.movedwebhook (Pro and up): a signed delivery when a line moves 5 points of implied probability or the favorite flips. A slow drift accumulates and fires once; a move that returns to where it started never fires. odds-closing.json.gz(Enterprise): every priced, settled launch-org bout since 2012 with its opening and closing line, in one file.
The MCP server gained get_fight_odds, get_event_odds and get_odds_history, which takes it to 49 tools. The SDKs follow: Python 0.7.0 has api.fight_odds, api.event_odds and api.fight_odds_history, and TypeScript 0.5.0 has fightOdds, eventOdds and fightOddsHistory.
What "consensus" means here
For every bout we take each sportsbook's two-way moneyline, convert both sides to decimal, average them, and convert back to American. The averaging happens in decimal on purpose: American prices do not average across the plus/minus 100 seam, and a naive mean of -110 and +120 is not a price anyone ever quoted. The result is one line per corner, and sources tells you how many books stand behind it. Book identities are never in the payload.
Prediction markets and exchanges are excluded from the mean. An exchange price is an order book, not a bookmaker's line: the number on the screen is whatever the last resting order says, and on a thin book that can price both corners as favorites at the same time. A consensus is only as honest as its inputs, so those inputs stay out.
fair_probability_a strips the bookmaker's margin: each side's implied probability divided by the sum of both. The raw implied probabilities of a bout add up to a little over 100 percent; the fair pair adds up to exactly 100.
We refresh every 30 minutes in the 48 hours before a card and every two hours otherwise. A point is stored only when the consensus actually changes, so the timestamps in the history follow the market rather than our crawler. The closing line is the last consensus point at or before the card's listed start time.
The archive, by the numbers
As of September 24, prod holds a closing consensus for 9,439 settled bouts across the five organizations since 2012, built from 301,159 stored points.
| Organization | Settled bouts with a closing line | First priced card | Bouts with a full movement series | Closing favorite won |
|---|---|---|---|---|
| UFC | 6,247 | UFC 142, January 14, 2012 | 1,653 | 68.8% |
| PFL | 1,068 | July 29, 2017 | 47 | 75.2% |
| BKFC | 1,017 | BKFC 3, October 21, 2018 | 998 | 70.1% |
| OKTAGON | 690 | OKTAGON 21, January 30, 2021 | 22 | 71.3% |
| RIZIN | 417 | RIZIN 4, December 31, 2016 | 33 | 69.8% |
| All five | 9,439 | 2,753 | 69.9% |
The last column is the join doing its job: the closing line from the odds table against the winner from the results table, same fight id, no scraping and no name matching. It counts decided bouts with a clear closing favorite, 4,203 of 6,109 in the UFC and 6,464 of 9,248 across all five. Put the other way round, the UFC's closing favorite has lost 1,906 times since 2012.
Now the part I would want told to me before I built anything on it. "Full movement series" means more than one point. For 6,686 of the 9,439 bouts we hold only the closing line, so opening and closing are the same point and points is 1. Check points before you draw a chart. The UFC year by year shows where the series lives, and how much deeper the market has become:
| Year | Priced UFC bouts | Average books behind the closing line | Bouts with a full series |
|---|---|---|---|
| 2012 | 283 | 3.7 | 0 |
| 2013 | 364 | 4.0 | 0 |
| 2014 | 423 | 3.9 | 0 |
| 2015 | 397 | 3.7 | 0 |
| 2016 | 440 | 4.3 | 0 |
| 2017 | 419 | 5.9 | 0 |
| 2018 | 440 | 5.3 | 439 |
| 2019 | 471 | 4.8 | 471 |
| 2020 | 426 | 8.4 | 426 |
| 2021 | 446 | 12.1 | 12 |
| 2022 | 430 | 12.9 | 10 |
| 2023 | 435 | 12.2 | 140 |
| 2024 | 411 | 13.2 | 0 |
| 2025 | 454 | 19.0 | 2 |
| 2026 (to date) | 408 | 21.0 | 153 |
The book count is the other story in that table. A 2012 UFC closing line was the average of 3.7 books; a 2026 one averages 21.0. On UFC 331 on September 19 the average closing line had 18.3 books behind it, and for the September 26 Fight Night the Raul Rosas Jr. vs Raoni Barcelos main event line had 18 at the last check on September 24. The smaller organizations are thinner: the OKTAGON and BKFC cards on the same Saturday average 4.7 and 3.0 books per line. sources is there so you never have to guess which kind of consensus you are holding.
Khabib vs McGregor, read from the payload
Photo: Andrius Petrucenia on Flickr (Original version) UCinternational (Crop) / CC BY-SA 2.0The UFC 229 main event is fight 62368, and it is a good one to learn the shape on because the line has a long memory. The first consensus point we hold for Khabib Nurmagomedov vs Conor McGregor was recorded on April 13, 2017, nearly eighteen months before the fight, from a single book: -115 on both men, a dead even pair. By July 10, 2018, with two books quoting, Nurmagomedov was -154. At the close, 00:39 UTC on October 7 with six books behind it, he was -168 and McGregor +141. In all, 217 stored points.
Strip the margin and the market moved from 50 percent to 60.17 percent on Nurmagomedov across the life of the line. That is what the market believed. The same id then answers what happened: GET /v1/fights/62368 has the submission at 3:03 of round four, with Herb Dean as referee, and /v1/fights/62368/stats has Nurmagomedov landing 70 of 119 significant strikes to McGregor's 51 of 81, three of seven takedowns, 45 significant strikes on the ground to six, and 734 seconds of control time, which is 12 minutes and 14 seconds of a fight that lasted 18:03.
"closing": {
"a": { "american": -168, "decimal": 1.595, "implied_probability": 0.6269 },
"b": { "american": 141, "decimal": 2.41, "implied_probability": 0.4149 },
"favourite": "a",
"fair_probability_a": 0.6017,
"sources": 6,
"recorded_at": "2018-10-07T00:39:06.000Z"
},
"movement": { "delta_points_a": 9.2, "direction": "a", "since": "2017-04-13T23:07:26.000Z" },
"points": 217
One developer note from this very payload: on a finished bout, consensus is the closing line, the last point at or before the card's listed start, so it matches closing. The market kept moving for hours after the bell (1,549 of the 9,439 settled bouts have points recorded after the start); those later quotes stay in the history but are never served as the line. movement runs from the opening line to the close, which is the 9.2 points above, and include=odds returns the same closing line inline.
Adesanya vs Strickland: when the market was sure
Photo: MMAnytt / CC BY-SA 4.0Market-error journalism is where a closing-line archive earns its keep, and UFC 293 on September 9, 2023 is one of the cleanest examples among the title fights. Israel Adesanya opened on August 8, 2023 at -400 against Sean Strickland at +300, from one book. The market then moved further toward the champion, not away from him. At the close, with 11 books behind it, Adesanya was -677 and Strickland +469: a fair probability of 83.21 percent for Adesanya, up from 76.19 at the open, across 483 stored points.
/v1/fights/60053/scorecards answers the rest. All three judges, Eric Colón, David Lethaby and Clemens Werner, scored it 49-46 for Strickland, and all three gave Adesanya the same single round, the second. The market spent a month growing more confident in a fighter who won one round on every card. I do not read that as anyone's failure. I read it as a measurement of how certain a market can be and still miss, and the archive holds 1,906 UFC closing favorites who lost.
Plans
The current, opening and closing lines, the event odds call and include=odds are on every plan, including the free 1-day trial (100 requests, no card). Hobby is $19 a month for 30,000 requests, Pro $49 for 200,000 and Business $149 for 1,000,000. Pro and up add the movement history and the odds.moved webhook, and the closing-line bulk file is an Enterprise feature. The trial starts from your API account page.
What it is not
It is not advice. Every odds response carries the same note in meta: information only, not betting advice. We describe what the market priced. We do not tell anyone what to do about it, and neither does the API.
It is not a sportsbook, and nothing in it links to one. It is not a per-book pricing feed either: no book names, no per-book prices, no in-play odds. The line stops mattering to us when the card starts, which is why the closing point is the last one before the listed start time.
And it is not a crystal ball. The opening line on Khabib vs McGregor was an even pair from one book in April 2017, and the closing line was a six-book consensus eighteen months later. Everything between the two is the market changing its mind in public, 217 times. We just kept the receipts.