UFC data for developers: results, stats, scorecards and rankings history in the MMA Fight Data API
Every UFC event back to UFC 1 in 1993 · full fight cards, results within minutes of the final bell, round-by-round statistics, complete fighter careers, the official judges' scorecards for every decision since 1995, and the only MMA data API with point-in-time UFC rankings history back to 2013.
Free 1-day trial · 100 requests · no credit card. Paid plans from $19/mo for 30,000 requests, cancel anytime.
Does UFC offer an official API?
No. UFC does not offer a public developer API, and UFCalendar is independent — not affiliated with UFC, Zuffa or TKO. Free do-it-yourself parsers exist, but they read web pages and break whenever the markup changes. UFCalendar’s MMA Fight Data API serves UFC data as hosted, documented JSON: a free 1-day, 100-request trial with no card, then plans from $19/mo.
Start free trialWhat's inside
17 upcoming events already on the schedule · cards, venues and broadcasts included.
Historical UFC rankings, point-in-time
Ask what any fighter was ranked on any date since February 2013 · one ?date= query parameter. 102,945 ranking rows across 543 official snapshots, champion at rank 0, valid until superseded. No other MMA data API serves UFC rankings history.
Results in minutes, webhooks included
During live UFC events results typically land within about 2 minutes of the verdict. Pro plans add signed webhooks for fight results and card changes · no polling loop required.
Sample request
$ curl "https://api.ufcalendar.com/v1/events/ufc-330-2026-08-15" \
-H "Authorization: Bearer ufcalendar_..."
{
"data": {
"slug": "ufc-330-2026-08-15",
"title": "UFC 330: Makhachev vs Machado Garry",
"org": "ufc",
"starts_at": "2026-08-15T21:30:00Z",
"status": "completed",
"card": [
{
"weight_class": "Welterweight",
"is_title": true,
"fighter_a": { "name": "Islam Makhachev", "slug": "islam-makhachev" },
"fighter_b": { "name": "Ian Machado Garry", "slug": "ian-machado-garry" },
"result": { "method": "Decision - Unanimous", "round": 5, "time": "5:00" }
},
...Quickstart in curl, Python and JavaScript
Complete requests against the live API. Any HTTP client works, or `pip install ufcalendar` for a typed Python client (source on GitHub); every response is plain JSON in a {"data": ..., "meta": ...} envelope.
$ curl "https://api.ufcalendar.com/v1/events?org=ufc" -H "Authorization: Bearer $UFCAL_KEY"
$ curl "https://api.ufcalendar.com/v1/rankings/ufc?date=2016-11-14" -H "Authorization: Bearer $UFCAL_KEY"
$ curl "https://api.ufcalendar.com/v1/fighters/islam-makhachev/history" -H "Authorization: Bearer $UFCAL_KEY"import requests
API = "https://api.ufcalendar.com/v1"
H = {"Authorization": f"Bearer {UFCAL_KEY}"} # key from ufcalendar.com/account/api
upcoming = requests.get(f"{API}/events", params={"org": "ufc"}, headers=H).json()["data"]
print(upcoming[0]["title"], upcoming[0]["starts_at"])
board = requests.get(f"{API}/rankings/ufc", params={"date": "2016-11-14"}, headers=H).json()["data"]
print([e["name"] for e in board["divisions"][0]["entries"][:5]])const API = "https://api.ufcalendar.com/v1";
const headers = { Authorization: `Bearer ${process.env.UFCAL_KEY}` };
const { data: upcoming } = await fetch(`${API}/events?org=ufc`, { headers }).then((r) => r.json());
console.log(upcoming[0].title, upcoming[0].starts_at);
const { data: fighter } = await fetch(`${API}/fighters/islam-makhachev`, { headers }).then((r) => r.json());
console.log(fighter.name, fighter.career_stats.find((s) => s.scope === "pro-mma")?.record);Endpoints for UFC data
Every list endpoint filters with ?org=ufc. The full reference lives in the docs.
GET /v1/events?org=ufcMMA schedule + results API: full fight cards, venues, broadcasts, and a card-change diff log for late reshuffles.
GET /v1/fights/{id}/roundsOne bout with its result, per-fight totals for both corners, and round-by-round statistics.
GET /v1/fighters?org=ufcRoster search, bios, records · and complete multi-promotion career timelines, merged and deduplicated.
GET /v1/rankings/ufcOfficial ranking boards, point-in-time back to 2013 for the UFC. Champions across every launch org.
GET /v1/predictions/upcomingUFCalendar Power Index ratings and AI win probabilities for upcoming UFC bouts.
GET /v1/events/{slug}/oddsThe consensus line for every bout on a card in one call, in card order, unpriced bouts included.
GET /v1/calendar/ufc.icsICS calendar feeds per organization · subscribe any calendar app to every event, auto-updating as cards change.
POST /v1/webhook-endpointsSigned webhooks for fight results, card changes, event completion and consensus odds moves · no polling needed.
Want the market's view of a bout too? One consensus line per fight, with the opening and closing odds, is on every plan. Odds in the MMA Fight Data API
Pricing
Free 1-day trial · 100 requests · no credit card. Paid plans from $19/mo for 30,000 requests, cancel anytime.
Who it's for
Built for indie developers, side projects and small teams. Whether you're building a fantasy app, a stats site, a Discord bot or an analytics project, our plans are priced for you. We don't sell enterprise contracts, and we don't plan to.
Questions
- Does UFC offer an official API?
- No. UFC does not offer a public developer API, and UFCalendar is independent — not affiliated with UFC, Zuffa or TKO. Free do-it-yourself parsers exist, but they read web pages and break whenever the markup changes. UFCalendar’s MMA Fight Data API serves UFC data as hosted, documented JSON: a free 1-day, 100-request trial with no card, then plans from $19/mo.
- Does the API include historical UFC rankings?
- Yes · official UFC rankings point-in-time back to February 2013: 543 snapshots, champion as rank 0, one ?date= parameter away. No other MMA data API offers UFC rankings history.
- How far back does the UFC fight data go?
- To UFC 1 in November 1993. All 800 events carry full cards and results; 8,819 fights (98%) carry per-fight stat lines and 41,526 rounds carry round-by-round statistics.
- How fast are UFC results available?
- A result typically appears in the API within about 2 minutes of the official verdict. Webhooks (Pro and up) push results to your endpoint.
One key, five organizations
Every plan covers UFC, PFL, OKTAGON, BKFC and RIZIN in the same schema, under the same key. Also see:
UFCalendar is an independent publication, not affiliated with UFC/Zuffa/TKO, PFL, OKTAGON MMA, BKFC, RIZIN FF or any promotion. Organization names are used to describe the data. Terms of service · Refund Policy