How do I get a fighter's full MMA career, including fights outside the UFC?
Request the fighter's history from the MMA Fight Data API, api.fighter_history(slug) in Python. It returns one merged timeline, newest first: every UFC bout plus the regional, amateur and other-promotion fights before it, and other combat sports such as sambo or grappling, each row with the date, event, opponent, result, method, round and time.
Free plan: 1,000 requests a month, no card. Paid plans from $19/mo.
Endpoints used
| Method & path | What it returns | Plan |
|---|---|---|
GET /v1/fighters/{slug}/history | Roster search, bios, records · and complete multi-promotion career timelines, merged and deduplicated. | All plans |
GET /v1/fighters/{slug} | Fighter bio, records, career statistics per scope, Power Index and CC-licensed images. | All plans |
GET /v1/fighters/{slug}/stats | Career statistics per scope: strike and takedown rates, accuracy, defense, submission average. | All plans |
The code
curl fetches Merab Dvalishvili's 46-row timeline. The Python block recounts his 21-6 pro MMA record from it and lists the fights outside the UFC; the JavaScript block groups the record by promotion.
Every block runs as shown with your API key in the UFCAL_API_KEY environment variable. Python uses pip install ufcalendar and JavaScript or TypeScript uses npm install @ufcalendar/sdk; any HTTP client works too.
curl "https://api.ufcalendar.com/v1/fighters/merab-dvalishvili/history" \
-H "Authorization: Bearer $UFCAL_API_KEY"# pip install ufcalendar
from collections import Counter
from ufcalendar import FightAPI
api = FightAPI() # reads UFCAL_API_KEY from the environment
history = api.fighter_history("merab-dvalishvili") # every bout, every promotion, newest first
pro_mma = [b for b in history
if b["sport"] == "mma" and b["competition_level"] == "pro" and b["result"] != "cancelled"]
print("pro MMA bouts:", len(pro_mma), dict(Counter(b["result"] for b in pro_mma)))
for b in pro_mma:
if b["org_slug"] != "ufc": # the fights outside the UFC
print(b["date"], b["event_title"], "|", b["result"], "vs", b["opponent_name"], "-", b["method"])
# Other combat sports on the same timeline
print(dict(Counter(b["sport"] for b in history if b["sport"] != "mma")))// npm install @ufcalendar/sdk
import { FightAPI } from "@ufcalendar/sdk";
const api = new FightAPI(); // reads UFCAL_API_KEY from the environment
const history = await api.fighterHistory("merab-dvalishvili");
const fought = history.filter((b) => b.sport === "mma" && b.result !== "cancelled");
// Group the MMA career by promotion (null org_slug = an event outside our covered promotions)
const byOrg = {};
for (const b of fought) {
const key = b.org_slug ?? `other (${b.competition_level})`;
byOrg[key] ??= {};
byOrg[key][b.result] = (byOrg[key][b.result] ?? 0) + 1;
}
console.table(byOrg);Sample response
A real response from the live API, trimmed for length. … marks removed fields.
{
"data": [
{
"date": "2026-10-24",
"event_title": "UFC 333: Volkanovski vs Evloev",
"org_slug": "ufc",
"sport": "mma",
"competition_level": "pro",
"opponent_name": "Petr Yan",
"result": "loss",
"method": "Decision - Unanimous",
"round": 5,
"time": "5:00"
},
…,
{
"date": "2017-06-02",
"event_title": "Ring of Combat 59",
"org_slug": null,
"sport": "mma",
"competition_level": "pro",
"opponent_name": "Raufeon Stots",
"result": "win",
"method": "TKO",
"round": 1,
"time": "0:15"
},
…
],
"meta": { "truncated": false }
}Notes and pitfalls
- Filter before you count: sport (mma, sambo, wrestling and so on) and competition_level (pro or amateur) separate the record you mean, and a result of cancelled marks a booked bout that never happened.
- org_slug is set for bouts in a promotion the API covers and null for regional events; event_title names the event either way.
- Rows outside the covered promotions can carry fewer fields: round and time may be null, and opponent.id is null when the opponent has no profile.
- The recount matches records.pro_mma on the fighter endpoint, which is the quick way to show a record without walking the timeline.
Related pages
More code guides
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