UFC Results API: winner, method, round and time within minutes
The UFCalendar UFC Results API serves the result of every UFC fight since UFC 1 in 1993 — winner, method, round, time, referee and performance bonuses — with live results landing within about 2 minutes of the official verdict, and signed fight.result webhooks on Pro plans so you never poll.
Free 1-day trial · 100 requests · no credit card. Paid plans from $19/mo, cancel anytime.
Results in about two minutes
During a UFC event the pipeline polls the official statistics feed every 5 minutes and typically lands a result within 2 minutes of the verdict. Query GET /v1/events?org=ufc&status=completed for the newest cards, or GET /v1/fights/{id} for one bout.
Webhooks for results and card changes
Register up to 3 endpoints (Pro and up) and receive fight.result, card.changed, event.announced and event.completed as signed JSON deliveries. Deliveries never count against your request quota.
Endpoints for this job
Method and path, linked to the reference. The same key covers every endpoint in the API.
| Method & path | What it returns |
|---|---|
GET /v1/events?org=ufc&status=completed | Completed cards newest-first, each with the full card and every result. |
GET /v1/events/{slug} | One event with its full fight card (both corners, results when completed), venue and event-level broadcasts. |
GET /v1/fights/{id} | One bout with corners, result (winner, method, round, time), referee and bonus flags. |
POST /v1/webhook-endpoints | Signed webhooks for fight results, card changes and event completion · no polling needed. |
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 "https://api.ufcalendar.com/v1/events?org=ufc&status=completed&limit=1" \
-H "Authorization: Bearer $UFCAL_KEY"
{
"data": [
{
"slug": "ufc-330-2026-08-15",
"title": "UFC 330: Makhachev vs Machado Garry",
"status": "completed",
"fights": [
{
"id": 61204,
"weight_class": "Welterweight",
"is_title": true,
"fighter_a": { "id": 1187, "name": "Islam Makhachev", "slug": "islam-makhachev" },
"fighter_b": { "id": 3402, "name": "Ian Machado Garry", "slug": "ian-machado-garry" },
"result": { "winner_fighter_id": 1187,
"method": "Decision - Unanimous", "round": 5, "time": "5:00" },
"referee": "Herb Dean", "bonus": null
},
...import requests
API = "https://api.ufcalendar.com/v1"
H = {"Authorization": f"Bearer {UFCAL_KEY}"}
# Every result from the newest completed UFC card
event = requests.get(f"{API}/events", params={"org": "ufc", "status": "completed", "limit": 1}, headers=H).json()["data"][0]
card = requests.get(f"{API}/events/{event['slug']}", headers=H).json()["data"]
for f in card["fights"]:
r = f.get("result")
if not r:
continue
corners = {c["id"]: c["name"] for c in (f["fighter_a"], f["fighter_b"]) if c}
winner = corners.get(r["winner_fighter_id"], "draw / no contest")
print(f"{f['fighter_a']['name']} vs {f['fighter_b']['name']}: {winner} by {r['method']} R{r['round']} {r['time']}")// Pro plans: stop polling — register a signed webhook for fight results
const API = "https://api.ufcalendar.com/v1";
const headers = { Authorization: `Bearer ${process.env.UFCAL_KEY}`, "Content-Type": "application/json" };
await fetch(`${API}/webhook-endpoints`, {
method: "POST",
headers,
body: JSON.stringify({ url: "https://example.com/hooks/ufcal", events: ["fight.result", "card.changed"] }),
});
// Each delivery: { "type": "fight.result", "sent_at": "...", "data": { "fight_id": 61204,
// "event": { "slug": "ufc-330-2026-08-15", ... }, "fighters": { "a": "...", "b": "..." },
// "result": { "winner": "Islam Makhachev", "winner_fighter_id": 1187, "method": "...", "round": 5, "time": "5:00" } } }
// signed with the endpoint secret (X-UFCalendar-Signature). Deliveries never count against your quota.Questions
- Can I get UFC fight results as JSON?
- Yes. Every completed UFC fight returns a result object with winner_fighter_id, method (for example KO/TKO, Submission, Decision - Unanimous), round, time and details, plus referee and bonus flags, on GET /v1/fights/{id} and inside each event's card on GET /v1/events/{slug}.
- How fast are UFC results available?
- Live events are polled every 5 minutes; a result typically appears in the API within 2 minutes of the official verdict. Pro plans get a fight.result webhook within a minute of the write.
- How far back do results go?
- To UFC 1 in November 1993. All 800 UFC events carry full cards and results, and 98% of fights also carry per-fight statistics.
- Do results include judges' scorecards?
- No. Scorecards are not served by the API today. Results carry the decision type, round and time; per-judge scores are a planned addition once redistribution permission is settled.
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.
UFCalendar is an independent publication, not affiliated with UFC/Zuffa/TKO, PFL, OKTAGON MMA or any promotion. Organization names are used to describe the data. Terms of service · Refund Policy