JSON API
Static JSON generated at build time. No keys, no rate limits. Fetch what you need.
Endpoints
| Path | Returns |
|---|---|
/api/events.json | Every event with nested fights, fighters, and scores. Newest first. |
/api/events/<slug>.json | One event by slug, same shape as an item in the array above. |
Example: /api/events/ufc-330-makhachev-vs-machado-garry.json
Response shape
Fields are snake_case and stable. winner is null for draws and no
contests. official_scores is a flat array of per-round rows.
media_scores are fight totals: score1/score2 follow the
fight's fighter1/fighter2 order. fan_tally is a static
snapshot of anonymous fan submissions as of the last build.
{
"id": 1,
"slug": "ufc-324-gaethje-vs-pimblett",
"promotion": "UFC",
"name": "UFC 324: Gaethje vs. Pimblett",
"date": "2026-01-24",
"venue": "T-Mobile Arena",
"city": "Las Vegas",
"country": "USA",
"fights": [
{
"id": 11,
"bout_order": 10,
"weight_class": "Lightweight",
"scheduled_rounds": 5,
"is_decision": true,
"method": "Decision - Unanimous",
"method_detail": null,
"ending_round": 5,
"ending_time": "5:00",
"fighter1": { "id": 21, "slug": "justin-gaethje", "name": "Justin Gaethje" },
"fighter2": { "id": 22, "slug": "paddy-pimblett", "name": "Paddy Pimblett" },
"winner": { "id": 21, "slug": "justin-gaethje", "name": "Justin Gaethje" },
"official_scores": [
{
"judge_id": 3,
"judge_name": "Sal D'Amato",
"judge_slug": "sal-damato",
"fighter_id": 21,
"round": 1,
"score": 10
}
],
"media_scores": [
{
"media_member": "Tristen Critchfield",
"outlet": "Sherdog.com",
"source_url": "https://www.sherdog.com/...",
"score1": 29,
"score2": 28
}
],
"fan_tally": { "sessions": 0, "f1Votes": 0, "f2Votes": 0, "drawVotes": 0 }
}
]
} Notes
- All results come from the ESPN public API.
- Judge scorecards come from athletic commission records and are added as they are verified.
- The data is a work in progress; scorecard fields may be empty for recent events.