Ultimate Fighting Calendar
UFCalendar Fight API

The MMA API: UFC, PFL, OKTAGON, BKFC & RIZIN events, results, stats and rankings

The UFCalendar Fight API is a REST API that serves MMA event, fight-card, result, per-round statistic, fighter-career, judges' scorecard and rankings data for UFC, PFL, OKTAGON, BKFC and RIZIN — the same database that powers ufcalendar.com, delivered as clean JSON from $19 a month. It includes official UFC rankings history back to 2013, round-by-round judges' scorecards back to 1995, AI win probabilities and signed webhooks, and no betting odds on any tier.

Free 1-day trial · 100 requests · no credit card. Paid plans from $19/mo, cancel anytime.

Start free: 1-day trial, 100 requests, no card

Sign in, click Start free trial, and a working key is minted on the spot. Every endpoint is open to the trial, so you can evaluate the real data before choosing a plan.

Start free trial

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);

One request, ten years back

$ curl "https://api.ufcalendar.com/v1/rankings/ufc?date=2016-11-14" \
    -H "Authorization: Bearer ufcalendar_..."

{
  "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" },
          ...

The rankings time machine: every official UFC board since 2013, valid until superseded. Rank 0 is the champion.

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.

What no other API has

Three orgs, one schema

UFC, PFL, OKTAGON, BKFC and RIZIN under one key · every alternative is UFC-only. More orgs join as they clear our reliability bar; /v1/orgs carries per-org capability flags so your client discovers coverage.

Judges' scorecards

The official commission record, round by round: 107,430 scored rounds across 4,419 bouts and 550 officials, UFC back to 1995. No other MMA API serves them. Point deductions and decision type come with the card.

Rankings time machine

Official UFC rankings point-in-time back to 2013 (543 snapshots), plus PFL, OKTAGON and BKFC boards. "What was he ranked that night?" is one query parameter.

Card-change log

Fight added, opponent swapped, card reshuffled · the diff log behind our "card updated" badge is an endpoint, so your app can react to late changes.

Per-round statistics

Strikes by target and position, takedowns, control time · per fight and per round. 10,674 fights carry full stat lines (91% of the catalog).

Complete careers

Fighter timelines span every promotion they ever fought in · not just the launch orgs. 121,078 career rows, merged and deduplicated.

Built for AI agents

OpenAPI 3.1, llms.txt, stable snake_case JSON with a predictable envelope. Point an agent at the spec and it works.

Coverage: UFC, PFL, OKTAGON, BKFC & RIZIN

Each organization ships with full depth · schedules, cards, results, stats and rankings. Dedicated coverage pages:

UFC

800 events back to UFC 1 in 1993 · per-round stats, complete careers, and the only point-in-time UFC rankings API.

Explore the UFC API

PFL

The league era from its 2017 debut · full cards, results, per-fight SmartCage stat lines and crossover careers.

Explore the PFL API

OKTAGON

Europe's fastest-growing promotion, absent from every mainstream sports API · full cards, results and per-round stats.

Explore the OKTAGON API

BKFC

Bare-knuckle boxing's biggest promotion · every BKFC event back to 2018, results, and per-round punch stats no other API serves.

Explore the BKFC API

RIZIN

Japan's biggest promotion, invisible to Western sports APIs · every RIZIN card since 2015, MMA and kickboxing bouts, results within minutes and per-round stats from 2023.

Explore the RIZIN API

Pricing

Hard caps, no overage bills, cancel anytime. Annual billing gives 2 months free.

Hobby
$19/mo
  • 5,000 requests/month
  • 30 requests/minute
  • Commercial use, ICS feeds, email support
Start now
Pro
$49/mo
  • 50,000 requests/month
  • 120 requests/minute
  • Signed webhooks, full history, priority support
Start now
Business
$149/mo
  • 250,000 requests/month
  • 300 requests/minute
  • Internal redistribution, priority support
Start now

Enterprise (custom quotas, redistribution rights, contracts): api@ufcalendar.com

What's inside

1,089
events, back to UFC 1 in 1993
11,673
fights · 98% with full results
10,674
fights with per-fight stat lines
4,455
fighters with bios and records
107,430
scorecard rows from official judges
104,189
official ranking rows since 2013
121,078
career history rows across promotions

Counts grow every fight night · the same scraper fleet that runs this site feeds the API within minutes of each result.

Endpoints

Twenty-plus REST endpoints under one bearer key. Cursor pagination, snake_case JSON, a stable envelope. Full reference in the docs.

Method & pathWhat it returnsPlan
GET /v1/eventsMMA schedule + results API: full fight cards, venues, broadcasts, and a card-change diff log for late reshuffles.All plans
GET /v1/events/{slug}One event with its full fight card (both corners, results when completed), venue and event-level broadcasts.All plans
GET /v1/events/{slug}/changesThe card-change diff log: fight added or removed, opponent swapped, date or order moved.All plans
GET /v1/fights/{id}One bout with corners, result (winner, method, round, time), referee and bonus flags.All plans
GET /v1/fights/{id}/statsPer-fight totals for both corners: strikes by target and position, takedowns, control time.All plans
GET /v1/fights/{id}/roundsOne bout with its result, per-fight totals for both corners, and round-by-round statistics.All plans
GET /v1/fights/{id}/scorecardsJudges' scorecards for any bout: every official, their score for each round, card totals, decision type and point deductions.All plans
GET /v1/judgesJudge directory with career shape: fights worked, rounds scored, 10-8s, split cards and lone dissents.All plans
GET /v1/fighters/{slug}Fighter bio, records, career statistics per scope, Power Index and CC-licensed images.All plans
GET /v1/fighters/{id}/historyRoster search, bios, records · and complete multi-promotion career timelines, merged and deduplicated.All plans
GET /v1/rankings/{org}?date=Official ranking boards, point-in-time back to 2013 for the UFC. Champions across every launch org.All plans
GET /v1/championsCurrent champions across every launch org in one call.All plans
GET /v1/predictions/upcomingUFCalendar Power Index ratings and AI win probabilities for upcoming UFC bouts.All plans
GET /v1/calendar/{org}.icsICS calendar feeds per organization · subscribe any calendar app to every event, auto-updating as cards change.All plans
POST /v1/webhook-endpointsSigned webhooks for fight results, card changes and event completion · no polling needed.Pro and up
GET /v1/bulk/events.json.gzGzipped full-dataset snapshots of events, fights and fighters for warehouse loads.Enterprise only

Read the docs · OpenAPI 3.1 · llms.txt

How it compares to Sportradar, SportsDataIO and Cito API

For developers choosing an MMA data API. Competitor cells come from their public pages on 2026-09-03 — tell us if one is out of date.

UFCalendarSportradarSportsDataIOCito API
Self-serve signupYesContact salesContact salesYes
Price from$19/mo (free 1-day trial)Enterprise contractEnterprise contractFree tier, paid plans
Promotions coveredUFC, PFL, OKTAGON, BKFC, RIZINUFC onlyUFC onlyUFC only
Per-round statisticsYesYesYesYes
UFC rankings history since 2013Yes, 543 snapshotsNoNoNo
Judges' scorecardsYesNoNoNo
Card-change & result webhooksYesNoNoNo
ICS calendar feedsYesNoNoNo
Betting oddsNoYesYesYes

We serve no betting odds by design; if you need odds, one of the others is the right tool. Sportradar and SportsDataIO are licensed enterprise feeds and the right choice for regulated sportsbooks.

Questions

Is there a free tier or a trial?
Yes — a free 1-day trial: 100 requests, no credit card, one per account. Sign in, click Start free trial, and your key is minted on the spot. There is no permanent free tier; for a longer evaluation email api@ufcalendar.com with a line about what you are building.
Is there an official UFC API?
No. UFC does not offer a public developer API, and UFCalendar is independent — not affiliated with UFC, Zuffa or TKO. The Fight API reconciles public sources (results, statistics, rankings, schedules) into one clean, documented schema and serves it as JSON.
Is there a free MMA API?
UFCalendar has a free 1-day trial: 100 requests, every endpoint, no credit card. There is no permanent free tier — paid plans start at $19 a month with hard caps and no overage bills. Open-source scrapers on GitHub are free but unhosted and break when a source changes its markup.
Can I use it from Python, JavaScript or a spreadsheet?
Yes. It is a plain REST API over HTTPS with bearer-key auth, so requests in Python, fetch in JavaScript, curl, Postman or a Google Sheets script all work unchanged — the quickstart above is complete code. The OpenAPI 3.1 spec generates a typed client in any language. A typed Python client is one `pip install ufcalendar` away (open source on GitHub).
Can I get UFC fight results as JSON?
Yes. Every completed fight returns a result object with winner, method (for example KO/TKO, Submission, Decision - Unanimous), round, time, referee and bonus flags, on GET /v1/fights/{id} and inside each event's card. Live results land within about 2 minutes of the official verdict.
Why only UFC, PFL, OKTAGON, BKFC and RIZIN?
Those are the orgs where our data is deepest: per-fight statistics, own live results pipelines, official rankings boards. ONE, KSW, Cage Warriors and ACA are tracked and join the moment they clear our reliability bar · each addition is announced in the changelog.
How much historical MMA data is in the API?
UFC back to UFC 1 in 1993, PFL to 2017, OKTAGON to 2016 — 1,089 events and 11,673 fights with results, statistics, and fighter careers spanning every promotion they fought in. Judges' scorecards go back to 1995, and official UFC rankings are point-in-time from 2013.
Does the API have judges' scorecards?
Yes — the official commission record, and no other MMA API sells it. Every bout that went to a decision carries each judge's score for every round, their card total, the decision type (unanimous, split, majority and the draw variants) and any point deductions: 107,430 scored rounds across 4,419 bouts and 550 officials, UFC back to 1995, PFL from 2018, OKTAGON from 2025. Judges are first-class too — /v1/judges gives you each official's career shape, including how often they scored a round 10-8 and how often they were the lone dissenter on a three-judge panel. Media-member scorecards and fan scoring are not part of the API.
Do you serve betting odds?
No, by design. The Fight API carries no betting data on any tier.
Is there a calendar (ICS) feed?
Yes · every plan includes per-org ICS feeds (e.g. /v1/calendar/ufc.ics) that any calendar app can subscribe to. Times and cards update automatically as events change.
Which plans include webhooks?
Webhooks are Pro and up · a Hobby key gets a 403 on the webhook endpoints. Pro and Business each allow up to 3 signed endpoints receiving event.announced, fight.result, card.changed and event.completed. Subscribe to event.announced and you never have to poll for new cards — it fires once per event, within a minute of a card first landing in our data. Deliveries never count against your monthly request quota; only the calls you make to register or list endpoints do.
Can I use the fighter images?
Yes · every image the API returns is Creative-Commons or public-domain licensed from Wikimedia Commons, with artist and license fields included. Displaying that credit is required by the license.
How fresh are results?
Live results land within 5 minutes for every launch org (2 minutes for UFC). Pre-fight card changes refresh every 2 hours, rankings twice a day, model probabilities every 30 minutes.
What are the usage rules?
Paid tiers cover commercial display and analysis. No bulk resale of the raw dataset below Enterprise, and no use as an official-data feed for regulated sportsbooks. Trial keys are for evaluation only.

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