MMA Calendar
UFCalendar Fight API

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

The UFCalendar Fight API is an MMA API and fight data API in one: a REST service that serves MMA event, fight-card, result, per-round statistic, fighter-career, judges’ scorecard, rankings and consensus odds data for UFC, PFL, OKTAGON, BKFC and RIZIN, from 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, one consensus betting line per bout with opening and closing odds back to 2012, AI win probabilities, signed webhooks and a hosted MCP server.

Free 1-day trial · 100 requests · no credit card. Paid plans from $19/mo for 30,000 requests, 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.

MMA Fight Data API guides by use case

One page per job: schedules, results, per-round statistics, rankings history, judges' scorecards, the live feed and consensus odds, each with its own endpoints, sample responses and code.

What no other API has

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

Consensus odds since 2012

One consensus moneyline per bout, the mean across about 18 sportsbooks on a UFC card, with implied and de-vigged probabilities, a closing line for 9,400+ completed fights since 2012 and the full move from open to close on 2,700+ of them. Movement history on Pro. Book identities are never exposed; information only, not betting advice.

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

A hosted MCP server at api.ufcalendar.com/mcp, OpenAPI 3.1, llms.txt and stable snake_case JSON. Connect Claude, ChatGPT, Cursor or Codex in a minute — or point any agent at the spec.

Results in seconds

UFC results are in the API a median 28 seconds after the official announcement. The timings for every promotion are public.

See the timings →

Coverage: UFC, PFL, OKTAGON, BKFC & RIZIN

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

UFC

800 events back to UFC 1 in 1993 · per-round stats, complete careers, and point-in-time UFC rankings history no other API serves.

Explore UFC data in the API →

PFL

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

Explore PFL data in the API →

OKTAGON

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

Explore OKTAGON data in the 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 BKFC data in the 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 RIZIN data in the API →

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.

Pricing

Hard caps, no overage bills, cancel anytime. Annual billing gives 2 months free. Quotas raised in September 2026: up to 6× more requests on every plan and up to 600 requests a minute.

Hobby
$19/mo
  • 30,000 requests/month
  • 60 requests/minute
  • Commercial use, ICS feeds, email support
Start now
Pro
$49/mo
  • 200,000 requests/month
  • 300 requests/minute
  • Signed webhooks, odds movement history, full history, priority support
Start now
Business
$149/mo
  • 1,000,000 requests/month
  • 600 requests/minute
  • Internal redistribution, priority support
Start now

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
9,400+
completed fights with a closing line, back to 2012
104,189
official ranking rows since 2013
121,078
career history rows across promotions

Counts grow every fight night · the same data pipeline 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/changesEvery card change across every event in one feed, newest first: the webhook's audit trail for callers that poll.All plans
GET /v1/events/{slug}/storylinesA card's talking points from the record: title fights, ranked fighters, win streaks and the closest bout on paper.All plans
GET /v1/fights/{id}One bout with corners, result (winner, method, round, time), referee and bonus flags.All plans
GET /v1/fights/searchSearch completed bouts by title fight, finish method, division, fighter, winner or date range: the last title fight to end by knockout in one call.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/fights/{id}/oddsOne bout's consensus moneyline: American and decimal prices, implied and de-vigged probabilities, the opening and closing line and the movement between them.All plans
GET /v1/events/{slug}/oddsThe consensus line for every bout on a card in one call, in card order, unpriced bouts included.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/compare?a=&b=The tale of the tape in one call: both bios, career stats, strike mix, recent form, previous meetings and common opponents.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/stats/leadersOne Record Book leaderboard per promotion: career, single-fight, round, division and event boards across 48 metrics.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, event completion and consensus odds moves · no polling needed.Pro and up
GET /v1/fights/{id}/odds/historyEvery movement point of a bout's consensus line, oldest first, with the number of sportsbooks behind each point.Pro and up

Read the docs · OpenAPI 3.1 · llms.txt

How it compares to 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.

UFCalendarCito API
Self-serve signupYesYes
Price from$19/mo (free 1-day trial)Free tier, paid plans
Requests on the entry plan30,000/mo for $1910,000/mo for $15
Promotions coveredUFC, PFL, OKTAGON, BKFC, RIZINUFC only
Per-round statisticsYesYes
UFC rankings history since 2013Yes, 543 snapshotsNo
Judges' scorecardsYesNo
Card-change & result webhooksYesNo
ICS calendar feedsYesNo
Betting oddsConsensus line, since 2012Yes

Our odds are one consensus line per bout for display and analysis, not a trading feed.

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 MCP server for MMA data?
Yes — UFCalendar runs a hosted MCP server at https://api.ufcalendar.com/mcp. Add it as a custom connector in Claude.ai or ChatGPT, or register it in Claude Code, Cursor or Codex with an API key. One tool call counts as one request against your plan, and three discovery tools answer with no sign-in. Full setup on the AI agents page.
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. 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 for 30,000 requests 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). A typed TypeScript client is one `npm i @ufcalendar/sdk` away as well.
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, official UFC rankings are point-in-time from 2013, and consensus odds with opening and closing lines go back to 2012.
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.
Does the API include betting odds?
Yes, as one consensus line per bout. Every priced fight carries the mean moneyline across the sportsbooks we track (about 18 on a UFC card; prediction markets and exchanges are excluded), with American and decimal prices, implied probability, a de-vigged fair probability and the opening and closing line, on every plan. Line movement history is Pro and up. Book identities are not exposed, and odds are information only, not betting advice.
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, event.completed and odds.moved. 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. odds.moved fires when a bout's consensus line moves 5 points of implied probability or the favourite flips. 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, and consensus odds every 30 minutes in the 48 hours before a card (every 2 hours otherwise).
What are the usage rules?
Paid tiers cover commercial display and analysis. No resale or redistribution of the raw dataset on any plan, no use as an official-data feed for regulated sportsbooks, and no resale of the odds as a standalone odds feed or use of them as a price source for setting or settling wagers. 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