Skip to content
MMA Calendar
UFCalendar Fight API

The MMA API for fight data

UFC, PFL, OKTAGON, BKFC & RIZIN events, results, stats and rankings.

The UFCalendar Fight API is an MMA API and fight data API with a free plan: 1,000 requests a month, no card, never expires, and paid plans from $19 a month. One REST service 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 as clean JSON, from the same database that powers ufcalendar.com. 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 plan: 1,000 requests/month, no card, never expires. Paid plans from $19/mo for 30,000 requests, cancel anytime.

Compare MMA data APIs →

Start free: 1,000 requests a month, no card

Sign in, click Get a free key, and a working key is minted on the spot. The free plan never expires and opens every endpoint Hobby does, so you can build on the real data before you pay anything.

Get a free key

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

Try it now, no key

One endpoint answers without a key: the plans, prices and quotas as JSON. Paste it into a terminal to see the response envelope before you sign up.

curl
$ curl https://api.ufcalendar.com/v1/plans

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 and consensus odds, each with its own endpoints, sample responses and code.

UFC schedule

The UFC schedule in the MMA Fight Data API: upcoming cards, start times and ICS feeds

Read the guide →

UFC fight results

UFC fight results data within minutes: winner, method, round and time, pushed by webhook, in the MMA Fight Data API

Read the guide →

UFC fight stats

Per-round UFC fight statistics as JSON, in the MMA Fight Data API

Read the guide →

UFC rankings history

UFC rankings history in the MMA Fight Data API: official boards, point-in-time since 2013

Read the guide →

UFC scorecards

UFC scorecards in the MMA Fight Data API: judges, round-by-round scores, deductions

Read the guide →

UFC odds

UFC odds in the MMA Fight Data API: consensus lines, line movement and closing odds

Read the guide →

MMA API comparison

Is there an official UFC API? No. A dated, side-by-side comparison of the APIs and free sources developers actually use: coverage, history, scorecards, speed and price.

Read the guide →

Build an MMA app

Screen by screen: the endpoints a UFC or MMA app needs for schedules, fight cards, results, fighter profiles, rankings and push alerts, with working code.

Read the guide →

MCP server for UFC data

Connect Claude, ChatGPT, Cursor or Codex to UFC cards, results, stats, scorecards and rankings in about a minute.

Read the guide →

MMA MCP Server

Five promotions, one MCP endpoint: UFC, PFL, OKTAGON, BKFC and RIZIN for your agent, with one auth and one tool set.

Read the guide →

AI agents & MCP

Hosted MCP server, OAuth or API-key sign-in, and an installable agent skill.

Read the guide →

Code guides

Question-shaped guides with working code and a real response from the live API.

All code guides →

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:

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.

Free
$0/mo
  • 1,000 requests/month
  • 10 requests/minute
  • No card, never expires, 1 key
Get a free key
Hobby
$19/mo
  • 30,000 requests/month
  • 60 requests/minute
  • 5 keys, email support
Start now
Pro
$49/mo
  • 200,000 requests/month
  • 300 requests/minute
  • Signed webhooks, odds movement history, priority support
Start now
Business
$149/mo
  • 1,000,000 requests/month
  • 600 requests/minute
  • Highest limits, priority support
Start now

What a real job costs

Request counts for common jobs, worked out from our real 2026 numbers and the API's paging: up to 100 results per list page, one call per event card, one call per bout's stats.

What a real job costs
JobRequestsCheapest plan that fits
Every UFC event of 2026 with full cards1 × event list page + 53 × event card54, one-offFree · $0/mo
Fight stats for every UFC bout of 20261 × event list page + 48 × event card + 526 × bout stats575, one-offFree · $0/mo
Daily schedule polling for a yearOne upcoming-events call a day; every promotion fits on one page365 / year (≤ 31 / month)Free · $0/mo
A fighter-profile app with 500 fighters500 fighters × profile, fight history and career stats, refreshed weekly (1,505 requests per refresh)6,522 / monthHobby · $19/mo

Counts as of Oct 31, 2026. Rate limits set the pace, not the bill: the 575-request stats job takes ≈ 58 min on Free (10 requests a minute) and ≈ 10 min on Hobby.

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.

Endpoints
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 · plus UFCalendar fantasy points per corner and data-quality flags.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/refereesReferee directory: bouts worked, promotions, finish rate, how their fights ended and average fight time · plus every bout each one worked.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/coverageWhat the database holds per promotion and year: events, settled bouts and the share with stats, round stats, judges' scorecards and a consensus odds line.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 · API status

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-10-15 — tell us if one is out of date.

How it compares to Sportradar, SportsDataIO and Cito API
UFCalendarSportradarSportsDataIOCito API
Self-serve signupYesContact salesContact salesYes
Price fromFree plan, then $19/moContact salesContact salesFree tier, paid plans
Requests on the entry plan1,000/mo free, no card; then 30,000/mo for $19——10,000/mo for $15
Promotions coveredUFC, PFL, OKTAGON, BKFC, RIZINUFC + Contender SeriesUFC onlyUFC + Contender Series
Per-round statisticsYesMain events; totals elsewhereYesYes
UFC rankings history since 2013Yes, 543 snapshotsCurrent board only—Current board only
Judges' scorecardsYes———
Card-change & result webhooksYes———
ICS calendar feedsYes———
Betting oddsConsensus line, since 2012—YesYes

Sportradar and SportsDataIO are licensed enterprise feeds and the right choice for regulated sportsbooks. Our odds are one consensus line per bout for display and analysis, not a trading feed; if you need each book's price separately, one of the others is the right tool.

Compare MMA data APIs →

Questions

Is there a free plan?
Yes — a permanent free plan: 1,000 requests a month at 10 a minute, one key, no credit card, and it never expires. It opens every endpoint Hobby does; webhooks and odds history are Pro. Sign in, click Get a free key and your key is minted on the spot.
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.
Is there a free MMA API?
Yes. UFCalendar has a permanent free plan: 1,000 requests a month, every endpoint Hobby has, no credit card, never expires. 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).
Can I build a real-time MMA results app with the API?
Yes. Results and final fight stats reach the API within minutes of the official decision for every promotion we cover (the measured timings are public on /results-speed), and the fight.result webhook on Pro and Business pushes each one to your server, so your app updates without polling. event.announced and card.changed keep new cards and late changes in sync.
What are the usage rules?
Every plan, the free one included, carries the same rights: commercial use, display in your own products, training your own models and selling their outputs, unlimited storage, and keeping the data after you cancel. Plans differ only in volume and features. On no plan may you redistribute the data as data (an API, dataset, dump or feed), use it as an official-data feed for licensed sportsbooks, or use the odds as a price source for setting or settling wagers. The terms open with a plain-English summary.

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