Skip to content
FighterAPI

Documentation

11 MMA data endpoints over REST and MCP. One key, credits per call.

Your first call

Sign up for a free key (500 credits, no card), swap it in for YOUR_API_KEY, and send this. search_fighters costs 1 credit.

Request

curl -X POST https://mcp.fighterapi.com/v1/search_fighters \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
  "query": "topuria"
}'

Response

json
{
  "fighters": [
    {
      "fighter_id": "4350812",
      "name": "Ilia Topuria",
      "nickname": "El Matador",
      "weight_class": "Lightweight",
      "country": "Georgia",
      "date_of_birth": "1997-01-21",
      "pro_record": null,
      "bouts": 10,
      "last_bout": "2026-06-15T00:00:00.000Z",
      "ufc_bouts": 10
    },
  ...

First 14 lines. Full response and every field

REST / cURL

POST to /v1/{tool_name} with your params as JSON body. No MCP client needed:

bash
curl -X POST https://mcp.fighterapi.com/v1/list_events \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY"

With parameters:

bash
curl -X POST https://mcp.fighterapi.com/v1/search_fighters \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"query":"topuria"}'

Claude Desktop

Add to your claude_desktop_config.json:

json
{
  "mcpServers": {
    "fighterapi": {
      "url": "https://mcp.fighterapi.com/mcp?key=YOUR_API_KEY"
    }
  }
}

Claude Code

One command:

bash
claude mcp add fighterapi https://mcp.fighterapi.com/mcp?key=YOUR_API_KEY --transport streamable-http

Find the right call

All 11 questions

Endpoints

11 endpoints by category. Each page has parameters, requests in three formats, a full example response and every response field.

Reference

Authentication

Every request requires an API key. Pass it via header or query parameter:

bash
x-api-key: YOUR_API_KEY
# or
Authorization: Bearer YOUR_API_KEY
# or (MCP only)
?key=YOUR_API_KEY

Verify your email, then create an API key from the dashboard. Free accounts get 500 credits.

Base URL

text
https://mcp.fighterapi.com

REST API: POST /v1/{tool} with JSON body. Works with cURL, Python, any HTTP client.

MCP: POST /mcp via Streamable HTTP. Works with Claude Desktop, Claude Code, Cursor, and any MCP client.

Rate limits

Credit balanceRate limit
100 credits or more60 req/min
Under 100 credits10 req/min

The limit is the same on every plan. It is burst protection, not the spend boundary; credits are that, and they are enforced per request. Running low slows you down so you notice before the balance reaches zero.

Error handling

CodeMeaningWhat to do
400Invalid parametersCheck required fields and value types
401Invalid or missing API keyCheck your x-api-key header
402Insufficient creditsTop up your wallet or upgrade your plan
429Rate limit exceededWait and retry (see limits above)
500Server errorRetry with idempotency key. Credits auto-refund on server errors.

Pass x-idempotency-key or x-request-id headers to make retries duplicate-safe.

Data coverage

Professional Fighters League (PFL)

FighterAPI also serves the PFL. Pass "league": "pfl" to any tool that lists it, or connect to https://mcp.fighterapi.com/mcp/pfl. What the PFL data covers.

Bellator MMA (Bellator)

FighterAPI also serves the Bellator. Pass "league": "bellator" to any tool that lists it, or connect to https://mcp.fighterapi.com/mcp/bellator. What the Bellator data covers.

DataStatusCoverageVolume
Cards and results
Events, fights in card order, winner, method, round, time, judges' scores and referee.
Available2000 to currentEvery UFC card
Fight stat sheets
Strikes by target and position, takedowns, control time, guard passes, reversals, submission attempts.
A few dozen fights, mostly from 2016 to 2019 and Ultimate Fighter semifinals, have no stat sheet.
Available2000 to currentPer fighter per fight
Round-by-round
Each round's strikes, takedowns, control and submission attempts, compiled by UFC Stats (FightMetric).
A fight whose rounds do not add up to its totals is flagged.
Available2000 to currentPer fighter per round
Fighters
Date of birth, height, reach, stance, gym, record by method and career rates.
AvailableEveryone who fought in the UFC since 2000Profiles and careers
Odds
Opening, closing and current moneylines and the total-rounds line, by sportsbook.
From 2024 only; mostly one book per fight; moneylines and total rounds, no props.
Partial2024 to currentSeveral books January to June 2024, usually one after
Ratings
Our Elo from UFC results, before and after every fight.
Available2000 to currentEvery fighter, every fight

Coverage describes the datasets FighterAPI supports. Freshness and operational health are tracked separately.

Odds snapshot definitions

opening: The first moneyline a sportsbook posted for the fight, as ESPN reports it.

closing: The sportsbook's last moneyline before the fight.

Odds coverage currently documents the books ESPN reports: about nine for January to June 2024 (including Bet365, DraftKings, Caesars and ESPN BET), then usually ESPN BET or DraftKings alone. No opening or closing lines before November 2023, and every fight since mid-2024 has one book. Opening and closing moneylines start with the November 2023 cards: several sportsbooks for January to June 2024, then usually one book per fight (ESPN BET, later DraftKings). There are no opening or closing lines before November 2023. Daily snapshots for each fight with a posted line from October 2026.

Response format

REST API

All successful REST responses wrap the result in a data key:

json
{ "data": { "events": [...], "count": 50 } }

Error responses return:

json
{ "error": "Insufficient credits", "message": "This tool costs 5 credits, you have 2" }

MCP Protocol

MCP responses follow the standard MCP tool result format. The data is returned directly (no data wrapper). Both access methods return identical data, just different envelopes.

Conventions

Seasons: 4-digit year (cards are grouped by calendar year). Example: 2025.

Fight IDs: a fight's id, e.g. 401630119 (an ESPN competition id; list a card's fights with get_event). Get them from get_event, get_schedule or get_fighter_fights.

Fighter IDs: Get them from search_fighters, by name or nickname.

Pagination: Endpoints use a limit parameter. No cursor or offset. Narrow your filters to get different slices of data.

Credits: Deducted before the request executes. Automatically refunded on server errors. Monthly credits are used first, then wallet balance.

Ready to start?

500 free credits on signup. No credit card required.

Get a free key