Skip to content
MMA Calendar
UFCalendar Fight API

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 trial

What's inside

800
events since 1993
9,016
fights
8,819
fights with full stat lines
41,526
rounds of round-by-round stats
2,852
fighters with bios & records
102,945
official ranking rows
3,802
bouts with judges' scorecards

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
$ 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"
Python
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]])
JavaScript
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=ufc

    MMA schedule + results API: full fight cards, venues, broadcasts, and a card-change diff log for late reshuffles.

  • GET /v1/fights/{id}/rounds

    One bout with its result, per-fight totals for both corners, and round-by-round statistics.

  • GET /v1/fighters?org=ufc

    Roster search, bios, records · and complete multi-promotion career timelines, merged and deduplicated.

  • GET /v1/rankings/ufc

    Official ranking boards, point-in-time back to 2013 for the UFC. Champions across every launch org.

  • GET /v1/predictions/upcoming

    UFCalendar Power Index ratings and AI win probabilities for upcoming UFC bouts.

  • GET /v1/events/{slug}/odds

    The consensus line for every bout on a card in one call, in card order, unpriced bouts included.

  • GET /v1/calendar/ufc.ics

    ICS calendar feeds per organization · subscribe any calendar app to every event, auto-updating as cards change.

  • POST /v1/webhook-endpoints

    Signed 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.

Pricing & plans →

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