UFC Rankings API: official boards, point-in-time since 2013
The UFCalendar UFC Rankings API returns the official UFC rankings for any date since February 2013 — 543 change-gated snapshots, champion at rank 0, one ?date= parameter. Current boards for PFL, OKTAGON and BKFC ride the same endpoint. No other UFC API serves rankings history.
Free 1-day trial · 100 requests · no credit card. Paid plans from $19/mo, cancel anytime.
What was he ranked that night?
GET /v1/rankings/ufc?date=2016-11-14 answers it in one call: the board that was valid on that date, valid until superseded, with fighter slugs that resolve to full careers. Movement arrows, year-end boards and rank-at-fight-time badges are all derivable client-side.
Change-gated snapshots, not daily dumps
A snapshot is stored only when the board actually changed, so snapshot dates approximate real UFC ranking updates. 104,189 ranking rows across every division and both pound-for-pound lists, resolved to fighter ids at 99.99%.
Endpoints for this job
Method and path, linked to the reference. The same key covers every endpoint in the API.
| Method & path | What it returns |
|---|---|
GET /v1/rankings/ufc?date=YYYY-MM-DD | Official ranking boards, point-in-time back to 2013 for the UFC. Champions across every launch org. |
GET /v1/rankings/ufc/{division} | One division's current board, or the board on any past date. |
GET /v1/fighters/{slug}/rankings | Every official ranking row a fighter ever held, newest first. |
GET /v1/champions | Current champions across every launch org in one call. |
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/rankings/ufc?date=2016-11-14" \
-H "Authorization: Bearer $UFCAL_KEY"
{
"data": {
"org": "ufc",
"board": "official",
"snapshot_date": "2016-11-07",
"divisions": [
{
"division": "lightweight",
"entries": [
{ "rank": 0, "is_champion": true,
"name": "Eddie Alvarez", "fighter_slug": "eddie-alvarez" },
{ "rank": 1, "name": "Khabib Nurmagomedov",
"fighter_slug": "khabib-nurmagomedov" },
...import requests
API = "https://api.ufcalendar.com/v1"
H = {"Authorization": f"Bearer {UFCAL_KEY}"}
# What was the lightweight board the week of UFC 205?
board = requests.get(f"{API}/rankings/ufc", params={"date": "2016-11-14"}, headers=H).json()["data"]
lw = next(d for d in board["divisions"] if d["division"] == "lightweight")
for e in lw["entries"][:6]:
print("C " if e["rank"] == 0 else f"#{e['rank']:<2}", e["name"])
# One fighter's full ranking history (every snapshot he appeared on)
hist = requests.get(f"{API}/fighters/khabib-nurmagomedov/rankings", headers=H).json()["data"]
print(len(hist), "ranking rows, first:", hist[0]["snapshot_date"])const API = "https://api.ufcalendar.com/v1";
const headers = { Authorization: `Bearer ${process.env.UFCAL_KEY}` };
// Current official board, then the same board on any past date
const now = await fetch(`${API}/rankings/ufc`, { headers }).then((r) => r.json());
const then = await fetch(`${API}/rankings/ufc?date=2016-11-14`, { headers }).then((r) => r.json());
const champ = (b, div) =>
b.data.divisions.find((d) => d.division === div)?.entries.find((e) => e.rank === 0)?.name;
console.log("LW champion now:", champ(now, "lightweight"), "| Nov 2016:", champ(then, "lightweight"));Questions
- Does the API include historical UFC rankings?
- Yes. Official UFC rankings point-in-time back to February 2013: 543 snapshots, every division plus men's and women's pound-for-pound, champion as rank 0. Pass ?date=YYYY-MM-DD to /v1/rankings/ufc and you get the board that was valid on that day.
- How often are current rankings refreshed?
- The live ufc.com board is polled twice a day and a new snapshot is written only when it changed. A fighter's full ranking history is one call: GET /v1/fighters/{slug}/rankings.
- Are PFL, OKTAGON and BKFC rankings included?
- developers.topicApi.ufcRankings.faq.c.a
- Is this an official UFC rankings feed?
- No. UFCalendar is independent and not affiliated with UFC, Zuffa or TKO. The boards are the public rankings ufc.com publishes, archived and normalized into one schema.
UFC API guides by use case
One page per job — schedules, results, per-round statistics and rankings history — each with its own endpoints, sample responses and code.
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