The UFC API: results, stats & rankings history
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, and the only UFC rankings API with point-in-time history back to 2013.
Free 1-day trial · 100 requests · no credit card. Paid plans from $19/mo, cancel anytime.
What'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 UFC API serves rankings history.
Results in minutes, webhooks included
During live UFC events the pipeline polls every 5 minutes and results typically land within 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?org=ufc&status=completed&limit=1" \
-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",
"fights": [
{
"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 — there is no SDK to install, and 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/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 and event completion · no polling needed.
GET /v1/bulk/events.json.gzGzipped full-dataset snapshots of events, fights and fighters for warehouse loads.
Questions
- Does the UFC API include historical rankings?
- Yes · official UFC rankings point-in-time back to February 2013: 543 snapshots, champion as rank 0, one ?date= parameter away. No other UFC data API offers 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.
- Is this an official UFC API?
- No. UFCalendar is an independent publication, not affiliated with UFC/Zuffa/TKO. Public-source data is reconciled and normalized into one clean schema.
- How fast are UFC results available?
- Live events are polled every 5 minutes; a result typically appears in the API within 2 minutes of the official verdict. Webhooks (Pro and up) push results to your endpoint.
One key, three organizations
Every plan covers UFC, PFL and OKTAGON in the same schema, under the same key. Also see:
UFCalendar is an independent publication, not affiliated with UFC/Zuffa/TKO, PFL, OKTAGON MMA or any promotion. Organization names are used to describe the data. Terms of service · Refund Policy