The PFL API for developers.
Every Professional Fighters League card since the 2018 season as clean JSON: fight cards in running order, results with method, round and time, the upcoming schedule, and live fight status while a card runs. Fighters who also fought in the UFC keep their UFC ID.
- Every card since 2018
- Live fight status during a card
- Same fighter IDs as UFC
{ "success": true, "data": { "slug": "pfl-chicago-pettis-vs-mckee", "name": "PFL Chicago: Pettis vs. McKee", "date": "2026-04-11", "venue": "Wintrust Arena", "card": [ { "id": "pfl-401861989", "boutOrder": 1, "weightClass": "Bantamweight", "scheduledRounds": 5, "status": "completed", "winnerFighterSlug": "mitch-mckee", "method": "Decision - Unanimous", "resultRound": 3, "resultTime": "5:00" } ] }}Seamless Integration with our MCP Server
Give Claude, Cursor, and ChatGPT the Cito MCP server. One command writes the MCP config; for PFL cards, results and live fight status, agents call the /pfl REST endpoints with your key, which stays on your machine.
MCPInstall the Cito MCP serverEverything PFL
Cards, results, live fight status and fighters from every PFL season since 2018, from one API.
Every card since 2018
Every PFL card since the 2018 season, newest first, plus the upcoming schedule. There was no 2020 season.
Live fight status
During a card, the bout in the cage shows status live with the round and clock, and each result lands within a minute or two.
Results to the second
Winner, method ("Decision - Unanimous", "KO/TKO", "Submission"), round and time for every bout.
Cards in running order
boutOrder 1 is the main event; weight class, scheduled rounds and title fight flag on every bout.
Fighter profiles
Date of birth, height, reach, stance, PFL record and fight history, and the record going into a fight when published.
Same fighter IDs as UFC
sergio-pettis is the same id on /pfl and /ufc; ufcFighterSlug marks every fighter with a UFC record.
How does live PFL fight data work?
While a PFL card runs, /pfl/live returns it with every bout. The bout in the cage has status "live" and live.round / live.clock; finished bouts carry their winner, method, round and time within a minute or two of the result. Poll it every 30 to 60 seconds during a card. Between cards it returns an empty list with a note, and /pfl/events/upcoming lists the next cards.
| Field | On a live bout | On a finished bout |
|---|---|---|
| status | "live" | "completed" |
| live | { round, clock } | null |
| winnerFighterSlug / method | null until the result | e.g. "mitch-mckee" / "Decision - Unanimous" |
| resultRound / resultTime | null until the result | e.g. 3 / "5:00" |
{
"success": true,
"data": [],
"meta": {
"total": 0,
"note": "No PFL card is live right now. Next cards: /pfl/events/upcoming."
}
}Does the PFL API have strike stats?
No. The PFL publishes no official strike stats, so PFL bouts carry results only: winner, method, round, time, weight class, scheduled rounds and card order. The stats routes keep the same shape as /bellator and /ufc so shared code does not break: /pfl/bouts/{boutId}/stats returns availability "not_available" and /pfl/bouts/{boutId}/rounds is empty. For round-by-round MMA stats, use the UFC API or the Bellator archive.
- Results: winner, method, round and time for every bout
- Cards: running order, weight class, scheduled rounds, title fights
- Fighters: date of birth, height, reach, stance, PFL record
- Not available: significant strikes, takedowns, control time, round rows
How do PFL fighters link to their UFC record?
By the same slug. A PFL fighter who also has a UFC record keeps the id they have on /ufc/fighters/{slug}: sergio-pettis is the same id on both APIs. Every fighter object carries ufcFighterSlug (null without a UFC record), and /pfl/fighters?ufc=true lists only those fighters.
{
"slug": "sergio-pettis",
"name": "Sergio Pettis",
"nickname": "The Phenom",
"dateOfBirth": "1993-08-18",
"heightIn": 66,
"reachIn": 69,
"stance": "Orthodox",
"ufc": {
"ufcFighterSlug": "sergio-pettis",
"ufcFighterPath": "/api/v1/ufc/fighters/sergio-pettis"
}
}What is the first PFL endpoint to call?
Check the schedule with /pfl/events/upcoming, follow a card live with /pfl/live, and read finished cards with /pfl/events/recent and /pfl/events/{slug}.
curl "https://api.citoapi.com/api/v1/pfl/events/upcoming" \
-H "x-api-key: $CITO_API_KEY"Endpoints you can ship with
Five groups, one UFC key. Follow a card live, open its results, then follow a fighter to their UFC record.
Live & upcoming
The bout in the cage shows status live with its round and clock, and each result lands within a minute or two. Poll every 30 to 60 seconds during a card.
- GET
/api/v1/pfl/liveCards running now with every bout: status, live.round and live.clock, results as they land.
- GET
/api/v1/pfl/events/upcomingScheduled and running PFL cards, soonest first.
Events & cards
Every PFL card since the 2018 season (there was no 2020 season), with the full card in running order, main event first.
- GET
/api/v1/pfl/eventsEvery card, newest first, scheduled cards included. Filter by date or name.
- GET
/api/v1/pfl/events/recentCompleted cards only, newest first.
- GET
/api/v1/pfl/events/{slug}One card with every bout, main event first.
- GET
/api/v1/pfl/events/{slug}/boutsThe card in running order: weight class, scheduled rounds, corners, winner, method, round and time.
Bouts & results
Results only: the PFL publishes no official strike stats, so bouts carry winner, method, round and time, and the stats routes answer availability not_available.
- GET
/api/v1/pfl/boutsQuery bouts by fighter, opponent, event, weight class, method or title fight.
- GET
/api/v1/pfl/bouts/{boutId}One bout: status, live round and clock, result, method, round and time, both corners.
- GET
/api/v1/mma/bouts?promotion=pflPFL bouts through /mma, next to every other non-UFC promotion.
Fighters & head-to-head
Fighters with date of birth, height, reach, stance, PFL record and fight history, and head-to-head between any two.
- GET
/api/v1/pfl/fightersEvery fighter, searchable and paginated. ufc=true keeps fighters with a UFC record.
- GET
/api/v1/pfl/fighters/{slug}Bio, PFL record, UFC pointer, other promotions, last five fights.
- GET
/api/v1/pfl/fighters/{slug}/fightsEvery PFL bout a fighter fought, newest first.
- GET
/api/v1/pfl/h2h?fighter1={slug}&fighter2={slug}Head-to-head record and every meeting between two fighters.
Same ID as UFC
A fighter with a UFC record keeps the same slug on /pfl and /ufc, and ufcFighterSlug marks it, so the two join without a name match.
- GET
/api/v1/pfl/fighters?ufc=trueOnly the PFL fighters who also have a UFC record.
- GET
/api/v1/pfl/fighters/sergio-pettisPFL profile with ufc.ufcFighterSlug and ufc.ufcFighterPath.
- GET
/api/v1/ufc/fighters/sergio-pettisThe same slug on the UFC API.
- GET
/api/v1/pfl/search?q={name}Find fighters and events by name or nickname.
FAQs
Coverage, live data, plans and identity
Can't find what you're looking for? Contact our customer support team
Explore the PFL API
The PFL sits next to the UFC API and the MMA archives on the same key.
- PFL API docsEvery PFL endpoint, the live flow and a real response.
- UFC APIFight cards, results, round-by-round stats and odds.
- Bellator APIThe Bellator archive with official round stats in the UFC's shape.
- MMA archive API docsPRIDE, Strikeforce, WEC, DREAM, EliteXC, Affliction, Bellator, PFL and /mma in one place.
- PRIDE APIPRIDE FC cards, results and round stats, 1997 to 2007.
- Strikeforce APIStrikeforce cards, results and round stats, 2006 to 2013.
- Cito MCP serverRAF and BKFC tools for Claude, Cursor and other MCP clients.
- Cito API pricingFree, Starter, Pro and Scale plans compared.
Build live fight trackers
Create a free key with UFC as your game and call your first PFL endpoint in a minute.