API live
Contract 2026-09-06.3 Fight DNA v1 1,437 fighters 898 events 1,795 bouts 5,724 rounds of stats Next card Noche UFC: Silva vs. Delgado · 2026-09-12
Updated 21 min ago Docs →

Documentation

UFC Intelligence API

Base URL https://ufc.proptechusa.ai. Data contract 2026-09-06.3, Fight DNA definitions v1. Every response is { ok, data, meta } or { ok:false, data:null, error, meta }. Every example below is a schema example: a real response captured from the canonical API on Sep 7, 2026 and pinned here, so the shape, field names and semantics you read are exactly what you receive. Pinned examples do not move. For values on the published refresh cadence, see the live demos on the home page, which carry their own capture time and freshness state. Each important endpoint shows request → response → what you can build.

Quickstart Developer+

  1. Buy a plan. Your key (pt_ufc_live_<id>_<secret>) is provisioned automatically and shown once on the dashboard.
  2. Export it: export UFC_API_KEY=pt_ufc_live_…
  3. Call the API:
GET /v1/ufc/events?status=upcoming&limit=3 Developer+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://ufc.proptechusa.ai/v1/ufc/events?status=upcoming&limit=3

Read data; keep meta.request_id for support; watch X-Quota-Remaining. Or skip the terminal: open the Workspace, paste your key and run the current card.

The gateway exposes exactly the 34 endpoints in the reference. Routes above your plan return 403 plan_required; anything else under /v1 is 404 route_not_found.

Authentication

auth
curl -H "Authorization: Bearer $UFC_API_KEY" https://ufc.proptechusa.ai/v1/ufc
# equivalent
curl -H "X-API-Key: $UFC_API_KEY" https://ufc.proptechusa.ai/v1/ufc
  • Bearer token (preferred) or X-API-Key. The key id (12 characters after pt_ufc_live_) is safe to log; the secret is not.
  • Call from your server or edge function. CORS is enabled for tooling, not as a credential model; never ship a key in browser code.
  • Failures: 401 api_key_required, invalid_api_key, api_key_expired, api_key_revoked, api_key_suspended.

API keys

One key per subscription, tied to a plan and a channel. Manage it on the dashboard: copy, rotate (new secret issued once, old key revoked immediately, subscription stays attached), see usage, denied requests and recent calls, and open the Stripe customer portal. Enterprise keys can carry per-key overrides for quota and rate limit.

Plans and limits

PlanPriceRequests / monthRequests / minuteAt the limitUnlocks
Developer$79/mo25,00060429 quota_exceededCore UFC data
Pro$199/mo100,000180429 quota_exceededFighter intelligence
Ultra$499/mo500,000600429 quota_exceededMatchup intelligence
Scale$1499/mo2,000,0001200allowed, X-Quota-Status: over-quota-softProduction infrastructure
EnterpriseLet's talkcustomcustomcustomCustom

Headers on every response: X-Request-Id, X-Upstream-Request-Id, X-API-Version, X-Gateway-Version, X-Plan, X-RateLimit-Limit/Remaining/Reset, X-Quota-Limit/Remaining/Reset, Retry-After (429 only). Denied requests never consume quota. Cache-Control: private, max-age=N mirrors canonical freshness: short for upcoming cards, rankings and search; longer for history and as-of DNA.

Errors

StatusCodeMeaning
401api_key_requiredNo credential sent.
401invalid_api_keyMalformed or unknown key, or secret mismatch.
401api_key_expiredKey past expires_at.
401api_key_revokedKey revoked or rotated.
401api_key_suspendedSubscription not active (unpaid, canceled). Manage it in the dashboard.
403plan_requiredEndpoint or parameter needs a higher plan; detail carries required_plan, current_plan, upgrade_url.
404route_not_foundPath is not part of the commercial contract (no upstream call is made).
429rate_limitedPer-minute limit hit; Retry-After set.
429quota_exceededMonthly quota hit on a hard-limit plan; Retry-After set.
502 / 504upstream_unavailable / upstream_timeoutCanonical API unreachable or slow.

Canonical API errors pass through unchanged:

StatusCodesMeaning
400invalid_include · invalid_ids · too_many_ids · invalid_as_of · invalid_stance · invalid_metric · invalid_bound · invalid_confidence · invalid_type · invalid_fighter_id · invalid_matchupValidation errors from the canonical API; detail lists allowed values.
404event_not_found · fighter_not_found · bout_not_found · article_not_found · division_not_foundUnknown entity.
404dna_not_availableNo Fight DNA snapshot for the fighter (or none at/before as_of). detail.reason: no_snapshot | no_snapshot_at_or_before_as_of.
503rankings_not_available · dna_not_available · ledger_not_available · videos_not_availableThe store does not exist yet; data is null, nothing is synthesized.
Missing data is never a 200 with fake zeroes. You get null, an explicit status, or a 404/503 with a reason.

Events Developer+ Source

GET /v1/ufc/events?status=upcoming|recent|all&date=YYYY-MM-DD&limit=N, then GET /v1/ufc/events/{id} by UUID, UFCStats id or ESPN event id.

GET /v1/ufc/events?status=upcoming&limit=3 Developer+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://ufc.proptechusa.ai/v1/ufc/events?status=upcoming&limit=3
Response excerpt → schedule listschema example · captured Sep 7, 2026
Response JSON
GET /v1/ufc/events?status=upcoming&limit=3
{
  "ok": true,
  "data": [
    {
      "id": "187505ab-636d-4f90-8d5f-d98ebfd1cd7c",
      "ufcstats_id": null,
      "espn_event_id": "600060736",
      "name": "Dana White's Contender Series: Season 10, Week 5",
      "event_date": "2026-09-08",
      "venue": "Meta APEX",
      "city": "Las Vegas",
      "region": "NV",
      "country": "USA",
      "commission": null,
      "is_ppv": null,
      "card_status": "announced",
      "updated_at": "2026-09-07T06:03:34.55+00:00"
    },
    {
      "id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
      "ufcstats_id": "638cfec7ec559d6e",
      "espn_event_id": "600060772",
      "name": "Noche UFC: Silva vs. Delgado",
      "event_date": "2026-09-12",
      "venue": "Desert Diamond Arena",
      "city": "Glendale",
      "region": "AZ",
      "country": "USA",
      "commission": null,
      "is_ppv": null,
      "card_status": "announced",
      "updated_at": "2026-09-07T06:03:41.716+00:00"
    },
    {
      "id": "64bfa864-454c-4d0a-92e3-408f25598d6c",
      "ufcstats_id": null,
      "espn_event_id": "600060737",
      "name": "Dana White's Contender Series: Season 10, Week 6",
      "event_date": "2026-09-15",
      "venue": "Meta APEX",
      "city": "Las Vegas",
      "region": "NV",
      "country": "USA",
      "commission": null,
      "is_ppv": null,
      "card_status": "announced",
      "updated_at": "2026-09-07T06:03:57.561+00:00"
    }
  ],
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-06.3",
    "request_id": "299c1248-929c-4612-aa4c-f221e5f1d01a",
    "count": 3,
    "total": 17,
    "status": "upcoming",
    "date": null,
    "access_tier": "public"
  }
}
excerpt
{
  "ok": true,
  "data": [
    {
      "id": "187505ab-636d-4f90-8d5f-d98ebfd1cd7c",
      "ufcstats_id": null,
      "espn_event_id": "600060736",
      "name": "Dana White's Contender Series: Season 10, Week 5",
      "event_date": "2026-09-08",
      "venue": "Meta APEX",
      "city": "Las Vegas",
      "region": "NV",
      "country": "USA",
      "commission": null,
      "is_ppv": null,
      "card_status": "announced",
      "updated_at": "2026-09-07T06:03:34.55+00:00"
    },
    {
      "id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
      "ufcstats_id": "638cfec7ec559d6e",
      "espn_event_id": "600060772",
      "name": "Noche UFC: Silva vs. Delgado",
      "event_date": "2026-09-12",
      "venue": "Desert Diamond Arena",
      "city": "Glendale",
      "region": "AZ",
      "country": "USA",
      "commission": null,
      "is_ppv": null,
      "card_status": "announced",
      "updated_at": "2026-09-07T06:03:41.716+00:00"
    }
  ],
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-06.3",
    "request_id": "299c1248-929c-4612-aa4c-f221e5f1d01a",
    "count": 3,
    "total": 17,
    "status": "upcoming",
    "date": null,
    "access_tier": "public"
  }
}
DateEventVenueStatus
2026-09-08Dana White's Contender Series: Season 10, Week 5Meta APEX, Las Vegasannounced
2026-09-12Noche UFC: Silva vs. DelgadoDesert Diamond Arena, Glendaleannounced
2026-09-15Dana White's Contender Series: Season 10, Week 6Meta APEX, Las Vegasannounced

Cards Developer+

GET /v1/ufc/events/{id}/card?include=media,results,stats returns event plus ordered bouts[] with both fighters, images and results. include=stats (round rows per bout) requires Pro.

GET /v1/ufc/events/1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52/card Developer+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://ufc.proptechusa.ai/v1/ufc/events/1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52/card
Response excerpt → rendered fight cardschema example · captured Sep 7, 2026
Response JSON
GET /v1/ufc/events/1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52/card
subset: 2 of 13 bouts
{
  "ok": true,
  "data": {
    "event": {
      "id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
      "ufcstats_id": "638cfec7ec559d6e",
      "espn_event_id": "600060772",
      "name": "Noche UFC: Silva vs. Delgado",
      "event_date": "2026-09-12",
      "venue": "Desert Diamond Arena",
      "city": "Glendale",
      "region": "AZ",
      "country": "USA",
      "commission": null,
      "is_ppv": null,
      "card_status": "announced",
      "updated_at": "2026-09-07T06:03:41.716+00:00"
    },
    "bouts": [
      {
        "id": "89e38074-f431-4bc3-b51e-fe42058e60d0",
        "ufcstats_id": null,
        "espn_competition_id": "401914462",
        "event_id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
        "weight_class": "FEATHERWEIGHT",
        "weight_class_raw": "Featherweight",
        "is_womens": false,
        "is_title": false,
        "scheduled_rounds": 5,
        "card_position": "main",
        "bout_order": 13,
        "status": "announced",
        "replaced_bout_id": null,
        "short_notice_days": null,
        "fighter_a": {
          "id": "eed368a5-484b-412f-9d2c-a4fd6d24d019",
          "dob": "1996-12-27",
          "name": "Jean Silva",
          "stance": "ORTHODOX",
          "nickname": "Lord",
          "reach_in": 69,
          "record_d": 0,
          "record_l": 3,
          "record_w": 17,
          "height_in": 67,
          "is_active": true,
          "record_nc": null,
          "weight_lbs": 146,
          "ufcstats_id": "52ef95b5860fb28c",
          "espn_athlete_id": "5145766",
          "primary_image": {
            "id": "776d6a0a-e701-4756-b789-912addfd276d",
            "image_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/eed368a5-484b-412f-9d2c-a4fd6d24d019/portrait.jpg",
            "card_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/eed368a5-484b-412f-9d2c-a4fd6d24d019/card.jpg",
            "thumb_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/eed368a5-484b-412f-9d2c-a4fd6d24d019/thumb.jpg",
            "author": "The White House",
            "license": "Public domain",
            "source_url": "https://commons.wikimedia.org/wiki/File:Jean_Silva_(54451587575).jpg",
            "kind": "wikimedia",
            "attribution_text": "The White House (U.S. Government work), Public domain, via Wikimedia Commons",
            "rights_label": "Public domain"
          }
        },
        "fighter_b": {
          "id": "55ef67ad-88fe-4f7a-b4cb-dc9a10c12feb",
          "dob": "1998-04-21",
          "name": "Jose Miguel Delgado",
          "stance": "SWITCH",
          "nickname": null,
          "reach_in": 73,
          "record_d": 0,
          "record_l": 2,
          "record_w": 12,
          "height_in": 71,
          "is_active": true,
          "record_nc": 0,
          "weight_lbs": 146,
          "ufcstats_id": "7d6ceff6747f2de2",
          "espn_athlete_id": "5223435",
          "primary_image": null
        },
        "result": null
      },
      {
        "id": "7300eba4-285f-4030-9f3f-216fa376f451",
        "ufcstats_id": "1aa008d8597a73b8",
        "espn_competition_id": "401897731",
        "event_id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
        "weight_class": "FLYWEIGHT",
        "weight_class_raw": "Flyweight",
        "is_womens": false,
        "is_title": false,
        "scheduled_rounds": 3,
        "card_position": "main",
        "bout_order": 12,
        "status": "announced",
        "replaced_bout_id": null,
        "short_notice_days": null,
        "fighter_a": {
          "id": "1fa71f4b-3f7d-4705-ba00-1f6bcf397b9a",
          "dob": "1993-12-07",
          "name": "Brandon Moreno",
          "stance": "ORTHODOX",
          "nickname": "The Assassin Baby",
          "reach_in": 70,
          "record_d": 2,
          "record_l": 10,
          "record_w": 23,
          "height_in": 67,
          "is_active": true,
          "record_nc": 0,
          "weight_lbs": 125,
          "ufcstats_id": "792be9a24df82ed6",
          "espn_athlete_id": "3027545",
          "primary_image": {
            "id": "940b4873-af29-4d7e-a94d-aaa986a5f4e8",
            "image_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1fa71f4b-3f7d-4705-ba00-1f6bcf397b9a/portrait.jpg",
            "card_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1fa71f4b-3f7d-4705-ba00-1f6bcf397b9a/card.jpg",
            "thumb_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1fa71f4b-3f7d-4705-ba00-1f6bcf397b9a/thumb.jpg",
            "author": "DiarioMMA",
            "license": "CC BY-SA 4.0",
            "source_url": "https://commons.wikimedia.org/wiki/File:Brandon_Moreno_February_2021.jpg",
            "kind": "wikimedia",
            "attribution_text": "DiarioMMA, CC BY-SA 4.0, via Wikimedia Commons",
            "rights_label": "CC BY-SA 4.0"
          }
        },
        "fighter_b": {
          "id": "5be77aa0-2a5b-4a31-90b8-5f5b7513e0e7",
          "dob": "1994-08-22",
          "name": "Joseph Morales",
          "stance": "SWITCH",
          "nickname": "Bopo",
          "reach_in": 68,
          "record_d": 0,
          "record_l": 2,
          "record_w": 15,
          "height_in": 66,
          "is_active": true,
          "record_nc": 0,
          "weight_lbs": 125,
          "ufcstats_id": "2fe9032955c2e013",
          "espn_athlete_id": "4238229",
          "primary_image": null
        },
        "result": null
      }
    ]
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-06.3",
    "request_id": "9ff18c79-ee61-4832-b2d5-1a45c9d7b9ab",
    "include": [],
    "bouts": 13,
    "access_tier": "public"
  }
}
excerpt
{
  "ok": true,
  "data": {
    "event": {
      "id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
      "ufcstats_id": "638cfec7ec559d6e",
      "espn_event_id": "600060772",
      "name": "Noche UFC: Silva vs. Delgado",
      "event_date": "2026-09-12",
      "venue": "Desert Diamond Arena",
      "city": "Glendale",
      "region": "AZ",
      "country": "USA",
      "commission": null,
      "is_ppv": null,
      "card_status": "announced",
      "updated_at": "2026-09-07T06:03:41.716+00:00"
    },
    "bouts": [
      {
        "id": "89e38074-f431-4bc3-b51e-fe42058e60d0",
        "bout_order": 13,
        "weight_class": "FEATHERWEIGHT",
        "scheduled_rounds": 5,
        "fighter_a": {
          "id": "eed368a5-484b-412f-9d2c-a4fd6d24d019",
          "name": "Jean Silva",
          "…": "record, stance, primary_image"
        },
        "fighter_b": {
          "id": "55ef67ad-88fe-4f7a-b4cb-dc9a10c12feb",
          "name": "Jose Miguel Delgado",
          "…": "…"
        },
        "result": null
      }
    ],
    "…": "12 more bouts"
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-06.3",
    "request_id": "9ff18c79-ee61-4832-b2d5-1a45c9d7b9ab",
    "include": [],
    "bouts": 13,
    "access_tier": "public"
  }
}
Sep 12, 2026 · Desert Diamond Arena, Glendale, AZ

Noche UFC: Silva vs. Delgado

announced 13 bouts
Main event · Featherweight · 5 rounds
Jean Silva portrait
Jean Silva
17-3-0 · Orthodox
The White House (U.S. Government work), Public domain, via Wikimedia Commons
Jose Miguel Delgado (silhouette; no rights-cleared portrait)
Jose Miguel Delgado
12-2-0 · Switch
VS
  1. Main Brandon Moreno vs Joseph Morales Flyweight
  2. Main Tommy McMillen vs Marwan Rahiki Featherweight
  3. Main Manon Fiorot vs Alexa Grasso Flyweight (W)
  4. Main Waldo Cortes Acosta vs Curtis Blaydes Heavyweight
+ 8 more bouts on the card

Fighters Developer+

GET /v1/ufc/fighters?q=&active=true to search, GET /v1/ufc/fighters/{id}?include=media,ranking,next,history,stats,videos for the composite profile (ids: UUID, UFCStats or ESPN athlete id). include=stats requires Pro. History: /fighters/{id}/history?limit=.

GET /v1/ufc/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6?include=ranking,next,history&history_limit=5 Developer+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://ufc.proptechusa.ai/v1/ufc/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6?include=ranking,next,history&history_limit=5
Response excerpt → fighter profileschema example · captured Sep 7, 2026
Response JSON
GET /v1/ufc/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6?include=ranking,next,history&history_limit=5
subset
{
  "ok": true,
  "data": {
    "id": "2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6",
    "ufcstats_id": "34ff304266360297",
    "espn_athlete_id": "4608674",
    "name": "Manon Fiorot",
    "nickname": "The Beast",
    "dob": "1990-02-17",
    "height_in": 67,
    "reach_in": 65,
    "weight_lbs": 125,
    "stance": "ORTHODOX",
    "record_w": 13,
    "record_l": 2,
    "record_d": 0,
    "record_nc": 0,
    "is_active": true,
    "career_slpm": 5.66,
    "career_str_acc": 42,
    "career_sapm": 3.58,
    "career_str_def": 66,
    "career_td_avg": 1.05,
    "career_td_acc": 29,
    "career_td_def": 87,
    "career_sub_avg": 0,
    "fight_history_count": 9,
    "updated_at": "2026-09-06T16:30:42.017224+00:00",
    "slug_id": "4608674",
    "images": [
      {
        "id": "61827143-8f84-4f0d-8e06-53486dcc22ac",
        "kind": "wikimedia",
        "r2_key": "fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/portrait.jpg",
        "license": "CC BY 3.0",
        "author": "Lucie Bertaud",
        "source_url": "https://commons.wikimedia.org/wiki/File:MANON_FIOROT_ET_ALDRIC_CASSATA,_LE_COUPLE_GOAL_DU_MMA_-_MMA_EXTRA_ROUND_-22_-_YouTube_-_0-28-31_(cropped).jpg",
        "fighter_id": "2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6",
        "created_at": "2026-09-06T13:43:58.93579+00:00",
        "source_family": "wikimedia",
        "attribution_text": "Lucie Bertaud, CC BY 3.0, via Wikimedia Commons",
        "rights_label": "CC BY 3.0",
        "rights_expires_at": null,
        "stored_first_party": true,
        "image_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/portrait.jpg",
        "card_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/card.jpg",
        "thumb_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/thumb.jpg"
      }
    ],
    "primary_image": {
      "id": "61827143-8f84-4f0d-8e06-53486dcc22ac",
      "image_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/portrait.jpg",
      "card_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/card.jpg",
      "thumb_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/thumb.jpg",
      "author": "Lucie Bertaud",
      "license": "CC BY 3.0",
      "source_url": "https://commons.wikimedia.org/wiki/File:MANON_FIOROT_ET_ALDRIC_CASSATA,_LE_COUPLE_GOAL_DU_MMA_-_MMA_EXTRA_ROUND_-22_-_YouTube_-_0-28-31_(cropped).jpg",
      "kind": "wikimedia",
      "attribution_text": "Lucie Bertaud, CC BY 3.0, via Wikimedia Commons",
      "rights_label": "CC BY 3.0"
    },
    "ranking": {
      "source": "ufc.com official rankings",
      "source_url": "https://www.ufc.com/rankings",
      "snapshot_date": "2026-09-06",
      "captured_at": "2026-09-06T16:10:07.916+00:00",
      "positions": [
        {
          "division": "P4P",
          "label": "Women's Pound-for-Pound",
          "is_womens": true,
          "is_p4p": true,
          "rank": 6,
          "is_champion": false,
          "change": 0,
          "is_new": false
        },
        {
          "division": "FLYWEIGHT",
          "label": "Women's Flyweight",
          "is_womens": true,
          "is_p4p": false,
          "rank": 2,
          "is_champion": false,
          "change": 0,
          "is_new": false
        }
      ]
    },
    "next_bout": {
      "id": "c5ab710f-9440-4142-b87f-d2de30c1780d",
      "ufcstats_id": "d9712b45c094730e",
      "espn_competition_id": "401897734",
      "event_id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
      "weight_class": "FLYWEIGHT",
      "weight_class_raw": "Women's Flyweight",
      "is_womens": true,
      "is_title": false,
      "scheduled_rounds": 3,
      "card_position": "main",
      "bout_order": 10,
      "status": "announced",
      "replaced_bout_id": null,
      "short_notice_days": null,
      "fighter_a": {
        "id": "2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6",
        "dob": "1990-02-17",
        "name": "Manon Fiorot",
        "stance": "ORTHODOX",
        "nickname": "The Beast",
        "reach_in": 65,
        "record_d": 0,
        "record_l": 2,
        "record_w": 13,
        "height_in": 67,
        "is_active": true,
        "record_nc": 0,
        "weight_lbs": 125,
        "ufcstats_id": "34ff304266360297",
        "espn_athlete_id": "4608674"
      },
      "fighter_b": {
        "id": "1d296292-4969-43a8-9948-cd0a76a642ce",
        "dob": "1993-08-09",
        "name": "Alexa Grasso",
        "stance": "ORTHODOX",
        "nickname": null,
        "reach_in": 66,
        "record_d": 1,
        "record_l": 5,
        "record_w": 17,
        "height_in": 65,
        "is_active": true,
        "record_nc": 0,
        "weight_lbs": 126,
        "ufcstats_id": "e8b731feff72294b",
        "espn_athlete_id": "3136287"
      },
      "result": null,
      "event": {
        "id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
        "city": "Glendale",
        "name": "Noche UFC: Silva vs. Delgado",
        "venue": "Desert Diamond Arena",
        "is_ppv": null,
        "region": "AZ",
        "country": "USA",
        "commission": null,
        "event_date": "2026-09-12",
        "updated_at": "2026-09-07T06:03:41.716+00:00",
        "card_status": "announced",
        "ufcstats_id": "638cfec7ec559d6e",
        "espn_event_id": "600060772"
      },
      "is_fighter_a": true,
      "opponent": {
        "id": "1d296292-4969-43a8-9948-cd0a76a642ce",
        "name": "Alexa Grasso",
        "nickname": null,
        "ufcstats_id": "e8b731feff72294b",
        "espn_athlete_id": "3136287",
        "slug_id": "3136287",
        "record_w": 17,
        "record_l": 5,
        "record_d": 1,
        "record_nc": 0,
        "primary_image": {
          "id": "85e0a287-fae3-43d1-be20-0fa490c01fb8",
          "image_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1d296292-4969-43a8-9948-cd0a76a642ce/portrait.jpg",
          "card_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1d296292-4969-43a8-9948-cd0a76a642ce/card.jpg",
          "thumb_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1d296292-4969-43a8-9948-cd0a76a642ce/thumb.jpg",
          "author": "Alexa Lopez Col",
          "license": "CC BY 3.0",
          "source_url": "https://commons.wikimedia.org/wiki/File:Alexa_Grasso_2023_03.png",
          "kind": "wikimedia",
          "attribution_text": "Alexa Lopez Col, CC BY 3.0, via Wikimedia Commons",
          "rights_label": "CC BY 3.0"
        }
      },
      "outcome": null
    },
    "history": [
      {
        "id": "c5ab710f-9440-4142-b87f-d2de30c1780d",
        "ufcstats_id": "d9712b45c094730e",
        "espn_competition_id": "401897734",
        "event_id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
        "weight_class": "FLYWEIGHT",
        "weight_class_raw": "Women's Flyweight",
        "is_womens": true,
        "is_title": false,
        "scheduled_rounds": 3,
        "card_position": "main",
        "bout_order": 10,
        "status": "announced",
        "replaced_bout_id": null,
        "short_notice_days": null,
        "fighter_a": {
          "id": "2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6",
          "dob": "1990-02-17",
          "name": "Manon Fiorot",
          "stance": "ORTHODOX",
          "nickname": "The Beast",
          "reach_in": 65,
          "record_d": 0,
          "record_l": 2,
          "record_w": 13,
          "height_in": 67,
          "is_active": true,
          "record_nc": 0,
          "weight_lbs": 125,
          "ufcstats_id": "34ff304266360297",
          "espn_athlete_id": "4608674"
        },
        "fighter_b": {
          "id": "1d296292-4969-43a8-9948-cd0a76a642ce",
          "dob": "1993-08-09",
          "name": "Alexa Grasso",
          "stance": "ORTHODOX",
          "nickname": null,
          "reach_in": 66,
          "record_d": 1,
          "record_l": 5,
          "record_w": 17,
          "height_in": 65,
          "is_active": true,
          "record_nc": 0,
          "weight_lbs": 126,
          "ufcstats_id": "e8b731feff72294b",
          "espn_athlete_id": "3136287"
        },
        "result": null,
        "event": {
          "id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
          "city": "Glendale",
          "name": "Noche UFC: Silva vs. Delgado",
          "venue": "Desert Diamond Arena",
          "is_ppv": null,
          "region": "AZ",
          "country": "USA",
          "commission": null,
          "event_date": "2026-09-12",
          "updated_at": "2026-09-07T06:03:41.716+00:00",
          "card_status": "announced",
          "ufcstats_id": "638cfec7ec559d6e",
          "espn_event_id": "600060772"
        },
        "is_fighter_a": true,
        "opponent": {
          "id": "1d296292-4969-43a8-9948-cd0a76a642ce",
          "name": "Alexa Grasso",
          "nickname": null,
          "ufcstats_id": "e8b731feff72294b",
          "espn_athlete_id": "3136287",
          "slug_id": "3136287",
          "record_w": 17,
          "record_l": 5,
          "record_d": 1,
          "record_nc": 0,
          "primary_image": {
            "id": "85e0a287-fae3-43d1-be20-0fa490c01fb8",
            "image_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1d296292-4969-43a8-9948-cd0a76a642ce/portrait.jpg",
            "card_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1d296292-4969-43a8-9948-cd0a76a642ce/card.jpg",
            "thumb_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1d296292-4969-43a8-9948-cd0a76a642ce/thumb.jpg",
            "author": "Alexa Lopez Col",
            "license": "CC BY 3.0",
            "source_url": "https://commons.wikimedia.org/wiki/File:Alexa_Grasso_2023_03.png",
            "kind": "wikimedia",
            "attribution_text": "Alexa Lopez Col, CC BY 3.0, via Wikimedia Commons",
            "rights_label": "CC BY 3.0"
          }
        },
        "outcome": null
      }
    ]
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-06.3",
    "request_id": "ea40960e-eaf1-4048-ad39-c4c2b09c271c",
    "include": [
      "ranking",
      "next",
      "history"
    ],
    "history_count": 3,
    "access_tier": "public"
  }
}
excerpt
{
  "ok": true,
  "data": {
    "id": "2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6",
    "ufcstats_id": "34ff304266360297",
    "espn_athlete_id": "4608674",
    "name": "Manon Fiorot",
    "nickname": "The Beast",
    "dob": "1990-02-17",
    "height_in": 67,
    "reach_in": 65,
    "weight_lbs": 125,
    "stance": "ORTHODOX",
    "record_w": 13,
    "record_l": 2,
    "record_d": 0,
    "record_nc": 0,
    "is_active": true,
    "career_slpm": 5.66,
    "career_str_acc": 42,
    "career_sapm": 3.58,
    "career_str_def": 66,
    "career_td_avg": 1.05,
    "career_td_acc": 29,
    "career_td_def": 87,
    "career_sub_avg": 0,
    "fight_history_count": 9,
    "updated_at": "2026-09-06T16:30:42.017224+00:00",
    "slug_id": "4608674",
    "primary_image": {
      "id": "61827143-8f84-4f0d-8e06-53486dcc22ac",
      "image_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/portrait.jpg",
      "card_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/card.jpg",
      "thumb_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/thumb.jpg",
      "author": "Lucie Bertaud",
      "license": "CC BY 3.0",
      "source_url": "https://commons.wikimedia.org/wiki/File:MANON_FIOROT_ET_ALDRIC_CASSATA,_LE_COUPLE_GOAL_DU_MMA_-_MMA_EXTRA_ROUND_-22_-_YouTube_-_0-28-31_(cropped).jpg",
      "kind": "wikimedia",
      "attribution_text": "Lucie Bertaud, CC BY 3.0, via Wikimedia Commons",
      "rights_label": "CC BY 3.0"
    },
    "next_bout": {
      "id": "c5ab710f-9440-4142-b87f-d2de30c1780d",
      "ufcstats_id": "d9712b45c094730e",
      "espn_competition_id": "401897734",
      "event_id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
      "weight_class": "FLYWEIGHT",
      "weight_class_raw": "Women's Flyweight",
      "is_womens": true,
      "is_title": false,
      "scheduled_rounds": 3,
      "card_position": "main",
      "bout_order": 10,
      "status": "announced",
      "replaced_bout_id": null,
      "short_notice_days": null,
      "fighter_a": {
        "id": "2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6",
        "dob": "1990-02-17",
        "name": "Manon Fiorot",
        "stance": "ORTHODOX",
        "nickname": "The Beast",
        "reach_in": 65,
        "record_d": 0,
        "record_l": 2,
        "record_w": 13,
        "height_in": 67,
        "is_active": true,
        "record_nc": 0,
        "weight_lbs": 125,
        "ufcstats_id": "34ff304266360297",
        "espn_athlete_id": "4608674"
      },
      "fighter_b": {
        "id": "1d296292-4969-43a8-9948-cd0a76a642ce",
        "dob": "1993-08-09",
        "name": "Alexa Grasso",
        "stance": "ORTHODOX",
        "nickname": null,
        "reach_in": 66,
        "record_d": 1,
        "record_l": 5,
        "record_w": 17,
        "height_in": 65,
        "is_active": true,
        "record_nc": 0,
        "weight_lbs": 126,
        "ufcstats_id": "e8b731feff72294b",
        "espn_athlete_id": "3136287"
      },
      "result": null,
      "event": {
        "id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
        "city": "Glendale",
        "name": "Noche UFC: Silva vs. Delgado",
        "venue": "Desert Diamond Arena",
        "is_ppv": null,
        "region": "AZ",
        "country": "USA",
        "commission": null,
        "event_date": "2026-09-12",
        "updated_at": "2026-09-07T06:03:41.716+00:00",
        "card_status": "announced",
        "ufcstats_id": "638cfec7ec559d6e",
        "espn_event_id": "600060772"
      },
      "is_fighter_a": true,
      "opponent": {
        "id": "1d296292-4969-43a8-9948-cd0a76a642ce",
        "name": "Alexa Grasso",
        "nickname": null,
        "ufcstats_id": "e8b731feff72294b",
        "espn_athlete_id": "3136287",
        "slug_id": "3136287",
        "record_w": 17,
        "record_l": 5,
        "record_d": 1,
        "record_nc": 0,
        "primary_image": {
          "id": "85e0a287-fae3-43d1-be20-0fa490c01fb8",
          "image_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1d296292-4969-43a8-9948-cd0a76a642ce/portrait.jpg",
          "card_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1d296292-4969-43a8-9948-cd0a76a642ce/card.jpg",
          "thumb_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1d296292-4969-43a8-9948-cd0a76a642ce/thumb.jpg",
          "author": "Alexa Lopez Col",
          "license": "CC BY 3.0",
          "source_url": "https://commons.wikimedia.org/wiki/File:Alexa_Grasso_2023_03.png",
          "kind": "wikimedia",
          "attribution_text": "Alexa Lopez Col, CC BY 3.0, via Wikimedia Commons",
          "rights_label": "CC BY 3.0"
        }
      },
      "outcome": null
    }
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-06.3",
    "request_id": "ea40960e-eaf1-4048-ad39-c4c2b09c271c",
    "include": [
      "ranking",
      "next",
      "history"
    ],
    "history_count": 3,
    "access_tier": "public"
  }
}
Manon Fiorot portrait
Lucie Bertaud, CC BY 3.0, via Wikimedia Commons
Manon Fiorot“The Beast”
Women'S Flyweight · #2
Record
13-2-0
Height
5'7"
Reach
65"
Stance
Orthodox
Weight
125 lb
Fights
9
Career stats Source
5.66SLpM
42%Str. acc
3.58SApM
66%Str. def
1.05TD avg
29%TD acc
87%TD def
0Sub avg
Career averages are display-only source facts, not as-of Fight DNA features.

Bouts and round stats Developer+ Source

GET /v1/ufc/bouts/{id} for one bout; GET /v1/ufc/bouts/{id}/stats for every UFC Stats round row (kd, sig_str_*, total_str_*, td_*, sub_att, rev, ctrl_sec, head/body/leg and distance/clinch/ground splits) plus per-fighter totals, fight_time_sec and provenance. Bouts without rows return empty arrays. Career aggregates with computed rates: GET /v1/ufc/fighters/{id}/stats (Pro).

GET /v1/ufc/fighters/ec94d296-2db3-4e0d-be6a-46de4f480672/stats Pro+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://ufc.proptechusa.ai/v1/ufc/fighters/ec94d296-2db3-4e0d-be6a-46de4f480672/stats
Career stats response
GET /v1/ufc/fighters/ec94d296-2db3-4e0d-be6a-46de4f480672/stats
subset: 2 round rows, 1 bout
{
  "ok": true,
  "data": {
    "fighter": {
      "id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
      "ufcstats_id": "0d8011111be000b2",
      "espn_athlete_id": "3093653",
      "slug_id": "3093653",
      "name": "Sean Strickland"
    },
    "career_snapshot": {
      "slpm": 6.04,
      "striking_accuracy": 42,
      "sapm": 4.57,
      "striking_defense": 60,
      "takedown_average": 0.71,
      "takedown_accuracy": 64,
      "takedown_defense": 76,
      "submission_average": 0.2
    },
    "warning": "Career snapshot fields are display-only and must not be used as historical model features because they include future information relative to older bouts.",
    "round_stats": [
      {
        "bout_id": "6ce6361a-bcc0-492f-86a6-b0ee1bf591c8",
        "fighter_id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
        "round": 1,
        "kd": 0,
        "sig_str_landed": 0,
        "sig_str_att": 0,
        "total_str_landed": 12,
        "total_str_att": 13,
        "td_landed": 0,
        "td_att": 0,
        "sub_att": 0,
        "rev": 0,
        "ctrl_sec": 0,
        "head_landed": 0,
        "head_att": 0,
        "body_landed": 0,
        "body_att": 0,
        "leg_landed": 0,
        "leg_att": 0,
        "distance_landed": 0,
        "distance_att": 0,
        "clinch_landed": 0,
        "clinch_att": 0,
        "ground_landed": 0,
        "ground_att": 0,
        "captured_at": "2026-09-06T16:46:39.629853+00:00"
      },
      {
        "bout_id": "6ce6361a-bcc0-492f-86a6-b0ee1bf591c8",
        "fighter_id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
        "round": 2,
        "kd": 0,
        "sig_str_landed": 15,
        "sig_str_att": 38,
        "total_str_landed": 29,
        "total_str_att": 57,
        "td_landed": 0,
        "td_att": 0,
        "sub_att": 0,
        "rev": 0,
        "ctrl_sec": 181,
        "head_landed": 15,
        "head_att": 37,
        "body_landed": 0,
        "body_att": 1,
        "leg_landed": 0,
        "leg_att": 0,
        "distance_landed": 12,
        "distance_att": 33,
        "clinch_landed": 0,
        "clinch_att": 0,
        "ground_landed": 3,
        "ground_att": 5,
        "captured_at": "2026-09-06T16:46:39.629869+00:00"
      }
    ],
    "computed": {
      "provenance": {
        "source": "ufcstats_round_stats",
        "method": "Totals are sums of per-round UFC Stats rows for this fighter. Rates use elapsed fight time from the recorded result (final round + clock), or rounds x 5:00 when no result exists.",
        "bouts_with_stats": 2,
        "rounds": 8,
        "fight_time_sec": 2243,
        "fight_time_basis": {
          "result": 2,
          "rounds_x_5min": 0
        },
        "coverage_note": "Only bouts with UFC Stats round rows are included; coverage may be partial and these are not as-of model features."
      },
      "career_totals": {
        "kd": 1,
        "sig_str_landed": 233,
        "sig_str_att": 553,
        "total_str_landed": 271,
        "total_str_att": 597,
        "td_landed": 0,
        "td_att": 1,
        "sub_att": 0,
        "rev": 0,
        "ctrl_sec": 199,
        "head_landed": 211,
        "head_att": 521,
        "body_landed": 14,
        "body_att": 24,
        "leg_landed": 8,
        "leg_att": 8,
        "distance_landed": 220,
        "distance_att": 536,
        "clinch_landed": 3,
        "clinch_att": 4,
        "ground_landed": 10,
        "ground_att": 13
      },
      "career_rates": {
        "sig_str_landed_per_min": 6.23,
        "sig_str_accuracy": 0.4213,
        "total_str_accuracy": 0.4539,
        "td_per_15min": 0,
        "td_accuracy": 0,
        "sub_att_per_15min": 0,
        "kd_per_15min": 0.4,
        "ctrl_share": 0.0887,
        "head_share": 0.9056,
        "body_share": 0.0601,
        "leg_share": 0.0343,
        "distance_share": 0.9442,
        "clinch_share": 0.0129,
        "ground_share": 0.0429
      },
      "bouts": [
        {
          "bout_id": "6ce6361a-bcc0-492f-86a6-b0ee1bf591c8",
          "event": {
            "id": "de5d4510-50c9-4989-b6e6-4c7ca52f0ede",
            "name": "UFC 328: Chimaev vs. Strickland",
            "event_date": "2026-05-09",
            "venue": "Prudential Center",
            "city": "Newark",
            "region": "NJ",
            "country": "USA",
            "card_status": "complete",
            "espn_event_id": "600058947",
            "ufcstats_id": "9eedac48b497de5a"
          },
          "opponent": {
            "id": "82f23ba8-2053-4f0f-88e3-8216893e2f28",
            "name": "Khamzat Chimaev",
            "nickname": "Borz",
            "ufcstats_id": "767755fd74662dbf",
            "espn_athlete_id": "4684751",
            "slug_id": "4684751",
            "record_w": 15,
            "record_l": 1,
            "record_d": 0,
            "record_nc": 0,
            "primary_image": {
              "id": "f78a5cde-b382-415e-9d86-64a3a10e4669",
              "image_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/82f23ba8-2053-4f0f-88e3-8216893e2f28/portrait.jpg",
              "card_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/82f23ba8-2053-4f0f-88e3-8216893e2f28/card.jpg",
              "thumb_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/82f23ba8-2053-4f0f-88e3-8216893e2f28/thumb.jpg",
              "author": "MMAnytt",
              "license": "CC BY 3.0",
              "source_url": "https://commons.wikimedia.org/wiki/File:Khamzat_Chimaev_2022.png",
              "kind": "wikimedia",
              "attribution_text": "MMAnytt, CC BY 3.0, via Wikimedia Commons",
              "rights_label": "CC BY 3.0"
            }
          },
          "result": {
            "round": 5,
            "method": "DEC_S",
            "bout_id": "6ce6361a-bcc0-492f-86a6-b0ee1bf591c8",
            "judge_1": "Sue Sanidad",
            "judge_2": "Eric Colon",
            "judge_3": "Sal D'amato",
            "referee": "Herb Dean",
            "time_sec": 300,
            "has_stats": true,
            "winner_id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
            "method_raw": "Decision - Split",
            "scorecards": [
              {
                "judge": "Sue Sanidad",
                "score": "48-47"
              },
              {
                "judge": "Eric Colon",
                "score": "47-48"
              },
              {
                "judge": "Sal D'amato",
                "score": "47-48"
              }
            ],
            "captured_at": "2026-09-06T13:31:27.882+00:00",
            "time_format": "5 Rnd (5-5-5-5-5)",
            "finish_detail": null,
            "result_source": "espn"
          },
          "outcome": "W",
          "rounds": 5,
          "fight_time_sec": 1500,
          "fight_time_basis": "result",
          "totals": {
            "kd": 0,
            "sig_str_landed": 123,
            "sig_str_att": 312,
            "total_str_landed": 160,
            "total_str_att": 355,
            "td_landed": 0,
            "td_att": 1,
            "sub_att": 0,
            "rev": 0,
            "ctrl_sec": 181,
            "head_landed": 118,
            "head_att": 302,
            "body_landed": 5,
            "body_att": 10,
            "leg_landed": 0,
            "leg_att": 0,
            "distance_landed": 119,
            "distance_att": 306,
            "clinch_landed": 1,
            "clinch_att": 1,
            "ground_landed": 3,
            "ground_att": 5
          },
          "rounds_detail": [
            {
              "bout_id": "6ce6361a-bcc0-492f-86a6-b0ee1bf591c8",
              "fighter_id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
              "round": 1,
              "kd": 0,
              "sig_str_landed": 0,
              "sig_str_att": 0,
              "total_str_landed": 12,
              "total_str_att": 13,
              "td_landed": 0,
              "td_att": 0,
              "sub_att": 0,
              "rev": 0,
              "ctrl_sec": 0,
              "head_landed": 0,
              "head_att": 0,
              "body_landed": 0,
              "body_att": 0,
              "leg_landed": 0,
              "leg_att": 0,
              "distance_landed": 0,
              "distance_att": 0,
              "clinch_landed": 0,
              "clinch_att": 0,
              "ground_landed": 0,
              "ground_att": 0,
              "captured_at": "2026-09-06T16:46:39.629853+00:00"
            },
            {
              "bout_id": "6ce6361a-bcc0-492f-86a6-b0ee1bf591c8",
              "fighter_id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
              "round": 2,
              "kd": 0,
              "sig_str_landed": 15,
              "sig_str_att": 38,
              "total_str_landed": 29,
              "total_str_att": 57,
              "td_landed": 0,
              "td_att": 0,
              "sub_att": 0,
              "rev": 0,
              "ctrl_sec": 181,
              "head_landed": 15,
              "head_att": 37,
              "body_landed": 0,
              "body_att": 1,
              "leg_landed": 0,
              "leg_att": 0,
              "distance_landed": 12,
              "distance_att": 33,
              "clinch_landed": 0,
              "clinch_att": 0,
              "ground_landed": 3,
              "ground_att": 5,
              "captured_at": "2026-09-06T16:46:39.629869+00:00"
            },
            {
              "bout_id": "6ce6361a-bcc0-492f-86a6-b0ee1bf591c8",
              "fighter_id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
              "round": 3,
              "kd": 0,
              "sig_str_landed": 43,
              "sig_str_att": 100,
              "total_str_landed": 43,
              "total_str_att": 100,
              "td_landed": 0,
              "td_att": 0,
              "sub_att": 0,
              "rev": 0,
              "ctrl_sec": 0,
              "head_landed": 42,
              "head_att": 98,
              "body_landed": 1,
              "body_att": 2,
              "leg_landed": 0,
              "leg_att": 0,
              "distance_landed": 43,
              "distance_att": 100,
              "clinch_landed": 0,
              "clinch_att": 0,
              "ground_landed": 0,
              "ground_att": 0,
              "captured_at": "2026-09-06T16:46:39.629881+00:00"
            },
            {
              "bout_id": "6ce6361a-bcc0-492f-86a6-b0ee1bf591c8",
              "fighter_id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
              "round": 4,
              "kd": 0,
              "sig_str_landed": 34,
              "sig_str_att": 86,
              "total_str_landed": 38,
              "total_str_att": 90,
              "td_landed": 0,
              "td_att": 0,
              "sub_att": 0,
              "rev": 0,
              "ctrl_sec": 0,
              "head_landed": 33,
              "head_att": 84,
              "body_landed": 1,
              "body_att": 2,
              "leg_landed": 0,
              "leg_att": 0,
              "distance_landed": 34,
              "distance_att": 86,
              "clinch_landed": 0,
              "clinch_att": 0,
              "ground_landed": 0,
              "ground_att": 0,
              "captured_at": "2026-09-06T16:46:39.629898+00:00"
            },
            {
              "bout_id": "6ce6361a-bcc0-492f-86a6-b0ee1bf591c8",
              "fighter_id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
              "round": 5,
              "kd": 0,
              "sig_str_landed": 31,
              "sig_str_att": 88,
              "total_str_landed": 38,
              "total_str_att": 95,
              "td_landed": 0,
              "td_att": 1,
              "sub_att": 0,
              "rev": 0,
              "ctrl_sec": 0,
              "head_landed": 28,
              "head_att": 83,
              "body_landed": 3,
              "body_att": 5,
              "leg_landed": 0,
              "leg_att": 0,
              "distance_landed": 30,
              "distance_att": 87,
              "clinch_landed": 1,
              "clinch_att": 1,
              "ground_landed": 0,
              "ground_att": 0,
              "captured_at": "2026-09-06T16:46:39.629918+00:00"
            }
          ]
        }
      ]
    }
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-06.3",
    "request_id": "5deee28a-98f1-48dc-a89c-fdaf9ea5d029",
    "access_tier": "public"
  }
}

Results Developer+

GET /v1/ufc/results?limit=N: most recent completed bouts with winner, method, round and time. Results are ESPN-sourced facts; a bout without a result has result: null.

GET /v1/ufc/results?limit=10 Developer+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://ufc.proptechusa.ai/v1/ufc/results?limit=10
Results response
GET /v1/ufc/results?limit=2
{
  "ok": true,
  "data": [
    {
      "bout_id": "f1b4d094-6c94-4769-b815-84be1cd7313d",
      "winner_id": "c66c4189-2a2e-4a64-a688-d2b77e7ee01c",
      "method": "DEC_U",
      "method_raw": "Decision - Unanimous",
      "round": 3,
      "time_sec": 300,
      "time_format": "3 Rnd (5-5-5)",
      "referee": "Gasper Oliver",
      "judge_1": "Jon Bilyk",
      "judge_2": "Maimunah Querido",
      "judge_3": "Tony Tamburrino",
      "scorecards": [
        {
          "judge": "Jon Bilyk",
          "score": "27-30"
        },
        {
          "judge": "Maimunah Querido",
          "score": "27-30"
        },
        {
          "judge": "Tony Tamburrino",
          "score": "27-30"
        }
      ],
      "finish_detail": null,
      "result_source": "ufcstats",
      "has_stats": true,
      "captured_at": "2026-09-07T15:12:36.958409+00:00",
      "bout": {
        "id": "f1b4d094-6c94-4769-b815-84be1cd7313d",
        "ufcstats_id": "d078e9046aa86307",
        "espn_competition_id": null,
        "event_id": "48934126-83b1-4736-b4ca-6cdd4446d951",
        "weight_class": "FLYWEIGHT",
        "weight_class_raw": "Women's Flyweight",
        "is_womens": true,
        "is_title": false,
        "scheduled_rounds": 3,
        "card_position": null,
        "bout_order": 4,
        "status": "complete",
        "replaced_bout_id": null,
        "short_notice_days": null,
        "fighter_a": {
          "id": "c66c4189-2a2e-4a64-a688-d2b77e7ee01c",
          "dob": "1992-05-15",
          "name": "Wang Cong",
          "stance": "SOUTHPAW",
          "nickname": "The Joker",
          "reach_in": 65.5,
          "record_d": 0,
          "record_l": 1,
          "record_w": 10,
          "height_in": 66,
          "is_active": true,
          "record_nc": 0,
          "weight_lbs": 125,
          "ufcstats_id": "2997e7fe3c9d3d4a",
          "espn_athlete_id": "4215200"
        },
        "fighter_b": {
          "id": "96f07308-7d38-458b-afd9-69cd292c9a77",
          "dob": "1994-01-26",
          "name": "Ariane da Silva",
          "stance": "ORTHODOX",
          "nickname": "Queen of Violence",
          "reach_in": 67,
          "record_d": 0,
          "record_l": 11,
          "record_w": 17,
          "height_in": 66,
          "is_active": null,
          "record_nc": 0,
          "weight_lbs": 125,
          "ufcstats_id": "6551c64fbcd1a467",
          "espn_athlete_id": null
        },
        "result": {
          "round": 3,
          "method": "DEC_U",
          "bout_id": "f1b4d094-6c94-4769-b815-84be1cd7313d",
          "judge_1": "Jon Bilyk",
          "judge_2": "Maimunah Querido",
          "judge_3": "Tony Tamburrino",
          "referee": "Gasper Oliver",
          "time_sec": 300,
          "has_stats": true,
          "winner_id": "c66c4189-2a2e-4a64-a688-d2b77e7ee01c",
          "method_raw": "Decision - Unanimous",
          "scorecards": [
            {
              "judge": "Jon Bilyk",
              "score": "27-30"
            },
            {
              "judge": "Maimunah Querido",
              "score": "27-30"
            },
            {
              "judge": "Tony Tamburrino",
              "score": "27-30"
            }
          ],
          "captured_at": "2026-09-07T15:12:36.958409+00:00",
          "time_format": "3 Rnd (5-5-5)",
          "finish_detail": null,
          "result_source": "ufcstats"
        },
        "event": {
          "id": "48934126-83b1-4736-b4ca-6cdd4446d951",
          "city": "Newark",
          "name": "UFC 316: Dvalishvili vs. O'Malley 2",
          "venue": "Prudential Center",
          "is_ppv": null,
          "region": "New Jersey",
          "country": "USA",
          "commission": null,
          "event_date": "2025-06-07",
          "updated_at": "2026-09-06T13:55:19.059327+00:00",
          "card_status": "complete",
          "ufcstats_id": "18c49685296c60e6",
          "espn_event_id": "600053672"
        }
      }
    },
    {
      "bout_id": "0252e8f4-9a02-4d44-93cf-83c0934f3233",
      "winner_id": "bd6b1d04-ba2d-427e-b03b-d27276f6e90d",
      "method": "DEC_U",
      "method_raw": "Decision - Unanimous",
      "round": 3,
      "time_sec": 300,
      "time_format": "3 Rnd (5-5-5)",
      "referee": "Lukasz Bosacki",
      "judge_1": "Ben Cartlidge",
      "judge_2": "Eric Colon",
      "judge_3": "Darryl Ransom",
      "scorecards": [
        {
          "judge": "Ben Cartlidge",
          "score": "27-30"
        },
        {
          "judge": "Eric Colon",
          "score": "27-30"
        },
        {
          "judge": "Darryl Ransom",
          "score": "27-30"
        }
      ],
      "finish_detail": null,
      "result_source": "ufcstats",
      "has_stats": true,
      "captured_at": "2026-09-07T15:08:00.143305+00:00",
      "bout": {
        "id": "0252e8f4-9a02-4d44-93cf-83c0934f3233",
        "ufcstats_id": "2bfc0212f2cae65b",
        "espn_competition_id": null,
        "event_id": "d24a7c8b-8b3b-48c9-b4f1-ac3bc5b26310",
        "weight_class": "BANTAMWEIGHT",
        "weight_class_raw": "Women's Bantamweight",
        "is_womens": true,
        "is_title": false,
        "scheduled_rounds": 3,
        "card_position": null,
        "bout_order": 3,
        "status": "complete",
        "replaced_bout_id": null,
        "short_notice_days": null,
        "fighter_a": {
          "id": "bd6b1d04-ba2d-427e-b03b-d27276f6e90d",
          "dob": "1998-12-30",
          "name": "Klaudia Sygula",
          "stance": "ORTHODOX",
          "nickname": null,
          "reach_in": 69,
          "record_d": 0,
          "record_l": 2,
          "record_w": 8,
          "height_in": 68,
          "is_active": null,
          "record_nc": 0,
          "weight_lbs": 135,
          "ufcstats_id": "9f5e3c20ce40b344",
          "espn_athlete_id": null
        },
        "fighter_b": {
          "id": "fd70809a-f906-48c2-ac6e-f6fa71ffcdfa",
          "dob": "1990-06-27",
          "name": "Irina Alekseeva",
          "stance": "ORTHODOX",
          "nickname": "Russian Ronda",
          "reach_in": 67,
          "record_d": 0,
          "record_l": 4,
          "record_w": 5,
          "height_in": 68,
          "is_active": true,
          "record_nc": 0,
          "weight_lbs": 135,
          "ufcstats_id": "103e2e33a60683e1",
          "espn_athlete_id": "4711407"
        },
        "result": {
          "round": 3,
          "method": "DEC_U",
          "bout_id": "0252e8f4-9a02-4d44-93cf-83c0934f3233",
          "judge_1": "Ben Cartlidge",
          "judge_2": "Eric Colon",
          "judge_3": "Darryl Ransom",
          "referee": "Lukasz Bosacki",
          "time_sec": 300,
          "has_stats": true,
          "winner_id": "bd6b1d04-ba2d-427e-b03b-d27276f6e90d",
          "method_raw": "Decision - Unanimous",
          "scorecards": [
            {
              "judge": "Ben Cartlidge",
              "score": "27-30"
            },
            {
              "judge": "Eric Colon",
              "score": "27-30"
            },
            {
              "judge": "Darryl Ransom",
              "score": "27-30"
            }
          ],
          "captured_at": "2026-09-07T15:08:00.143305+00:00",
          "time_format": "3 Rnd (5-5-5)",
          "finish_detail": null,
          "result_source": "ufcstats"
        },
        "event": {
          "id": "d24a7c8b-8b3b-48c9-b4f1-ac3bc5b26310",
          "city": "Baku",
          "name": "UFC Fight Night: Hill vs. Rountree Jr.",
          "venue": "Baku Crystal Hall",
          "is_ppv": null,
          "region": null,
          "country": "Azerbaijan",
          "commission": null,
          "event_date": "2025-06-21",
          "updated_at": "2026-09-06T13:55:23.346591+00:00",
          "card_status": "complete",
          "ufcstats_id": "400c7b43c86d27d3",
          "espn_event_id": "600053795"
        }
      }
    }
  ],
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-06.3",
    "request_id": "2225ef16-af1a-44c0-afa4-541bfc992826",
    "count": 2,
    "access_tier": "public"
  }
}

Rankings Developer+ Source

GET /v1/ufc/rankings?division=&womens=: the verified ufc.com snapshot with per-division champion and entries, linked to canonical fighter ids. Attribution is required: render source and source_url. 503 rankings_not_available when no store exists.

GET /v1/ufc/rankings?division=FEATHERWEIGHT Developer+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://ufc.proptechusa.ai/v1/ufc/rankings?division=FEATHERWEIGHT
Response → rankings screenschema example · captured Sep 7, 2026
Response JSON
GET /v1/ufc/rankings?division=FEATHERWEIGHT
subset: 3 entries
{
  "ok": true,
  "data": {
    "source": "ufc.com official rankings",
    "source_url": "https://www.ufc.com/rankings",
    "snapshot_date": "2026-09-06",
    "captured_at": "2026-09-06T16:10:07.916+00:00",
    "divisions": [
      {
        "key": "FEATHERWEIGHT",
        "label": "Featherweight",
        "is_womens": false,
        "is_p4p": false,
        "champion": {
          "name": "Alexander Volkanovski",
          "ufc_slug": "alexander-volkanovski",
          "fighter_id": "a312eb8b-7d22-4e20-92fe-3e8cdcba0fe7",
          "fighter": {
            "id": "a312eb8b-7d22-4e20-92fe-3e8cdcba0fe7",
            "name": "Alexander Volkanovski",
            "slug_id": "3949584"
          }
        },
        "entries": [
          {
            "rank": 1,
            "name": "Movsar Evloev",
            "ufc_slug": "movsar-evloev",
            "fighter_id": "6959f9f0-bcc1-439b-bdb1-7bfc13a12f2a",
            "change": 0,
            "is_new": false,
            "fighter": {
              "id": "6959f9f0-bcc1-439b-bdb1-7bfc13a12f2a",
              "name": "Movsar Evloev",
              "slug_id": "4029275"
            }
          },
          {
            "rank": 2,
            "name": "Diego Lopes",
            "ufc_slug": "diego-lopes",
            "fighter_id": "803fdd5d-02ce-4064-80f4-12a38e1a8593",
            "change": 0,
            "is_new": false,
            "fighter": {
              "id": "803fdd5d-02ce-4064-80f4-12a38e1a8593",
              "name": "Diego Lopes",
              "slug_id": "4881999"
            }
          },
          {
            "rank": 3,
            "name": "Lerone Murphy",
            "ufc_slug": "lerone-murphy",
            "fighter_id": "6e9b0c00-cda3-4214-9505-bfd84303fb9c",
            "change": 0,
            "is_new": false,
            "fighter": {
              "id": "6e9b0c00-cda3-4214-9505-bfd84303fb9c",
              "name": "Lerone Murphy",
              "slug_id": "4576101"
            }
          }
        ]
      }
    ]
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-06.3",
    "request_id": "bddd872b-5209-4fdf-b468-76803cc51220",
    "store": "table",
    "divisions": 1,
    "division": "FEATHERWEIGHT",
    "womens": null,
    "access_tier": "public"
  }
}
Featherweight
Official snapshot 2026-09-06
Sourceufc.com
Alexander Volkanovski portrait
Champion
Alexander Volkanovski
  1. 1 Movsar Evloev portrait Movsar Evloev
  2. 2 Diego Lopes portrait Diego Lopes
  3. 3 Lerone Murphy
  4. 4 Aljamain Sterling portrait Aljamain Sterling
  5. 5 Yair Rodriguez portrait Yair Rodriguez
  6. 6 Jean Silva portrait Jean Silva

Media Developer+ Media

Fighter rows carry primary_image (image_url, card_url 800×1000, thumb_url 320×400) with author, license, source_url, kind, attribution_text and rights_label; fighter detail adds images[]; GET /v1/ufc/fighters/media?ids=… maps up to 150 ids. Render the credit wherever the image is shown; the file's license governs reuse. Official video metadata (/videos, /fighters/{id}/videos, /events/{id}/videos) returns ids, official URLs, embed_url and attribution; play through the provider, never rehost.

primary_image (live)
{
  "id": "61827143-8f84-4f0d-8e06-53486dcc22ac",
  "image_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/portrait.jpg",
  "card_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/card.jpg",
  "thumb_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/thumb.jpg",
  "author": "Lucie Bertaud",
  "license": "CC BY 3.0",
  "source_url": "https://commons.wikimedia.org/wiki/File:MANON_FIOROT_ET_ALDRIC_CASSATA,_LE_COUPLE_GOAL_DU_MMA_-_MMA_EXTRA_ROUND_-22_-_YouTube_-_0-28-31_(cropped).jpg",
  "kind": "wikimedia",
  "attribution_text": "Lucie Bertaud, CC BY 3.0, via Wikimedia Commons",
  "rights_label": "CC BY 3.0"
}

Fight DNA Pro+ PBE derived

GET /v1/ufc/fighters/{id}/dna[?as_of=YYYY-MM-DD]: the fighter's snapshot with metrics (striking, pace, grappling, finish), stance_splits, round_profile, finish_profile, context_splits, position_profile and provenance. Family routes: /splits?opponent_stance=, /round-profile, /finish-profile, /position-profile. Definitions for every metric: GET /v1/ufc/dna/metrics (all plans).

GET /v1/ufc/fighters/ec94d296-2db3-4e0d-be6a-46de4f480672/dna Pro+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://ufc.proptechusa.ai/v1/ufc/fighters/ec94d296-2db3-4e0d-be6a-46de4f480672/dna
Response excerpt → Fight DNA panelschema example · captured Sep 7, 2026
Response JSON
GET /v1/ufc/fighters/ec94d296-2db3-4e0d-be6a-46de4f480672/dna
subset
{
  "ok": true,
  "data": {
    "fighter": {
      "id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
      "name": "Sean Strickland",
      "nickname": null,
      "ufcstats_id": "0d8011111be000b2",
      "espn_athlete_id": "3093653",
      "slug_id": "3093653",
      "record_w": 31,
      "record_l": 7,
      "record_d": 0,
      "record_nc": 0,
      "primary_image": {
        "id": "006e6554-f441-4892-8a49-30409d01e52e",
        "image_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/ec94d296-2db3-4e0d-be6a-46de4f480672/portrait.jpg",
        "card_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/ec94d296-2db3-4e0d-be6a-46de4f480672/card.jpg",
        "thumb_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/ec94d296-2db3-4e0d-be6a-46de4f480672/thumb.jpg",
        "author": "MMAnytt",
        "license": "CC BY-SA 4.0",
        "source_url": "https://commons.wikimedia.org/wiki/File:Sean_Strickland_at_UFN_200.png",
        "kind": "wikimedia",
        "attribution_text": "MMAnytt, CC BY-SA 4.0, via Wikimedia Commons",
        "rights_label": "CC BY-SA 4.0"
      },
      "stance": "ORTHODOX",
      "is_active": true
    },
    "snapshot": {
      "as_of_date": "2026-09-06",
      "definition_version": 1,
      "sample_bouts": 3,
      "sample_completed_bouts": 3,
      "sample_stat_bouts": 2,
      "sample_rounds": 8,
      "sample_seconds": 2243,
      "coverage_status": "low",
      "metrics": {
        "sig_landed_per_min": {
          "unit": "per_min",
          "value": 6.2327,
          "origin": "pbe_derived",
          "numerator": 233,
          "as_of_date": "2026-09-06",
          "confidence": "medium",
          "metric_key": "sig_landed_per_min",
          "denominator": 2243,
          "sample_bouts": 2,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "sig_absorbed_per_min": {
          "unit": "per_min",
          "value": 4.0927,
          "origin": "pbe_derived",
          "numerator": 153,
          "as_of_date": "2026-09-06",
          "confidence": "medium",
          "metric_key": "sig_absorbed_per_min",
          "denominator": 2243,
          "sample_bouts": 2,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "sig_accuracy": {
          "unit": "ratio",
          "value": 0.4213,
          "origin": "pbe_derived",
          "numerator": 233,
          "as_of_date": "2026-09-06",
          "confidence": "medium",
          "metric_key": "sig_accuracy",
          "denominator": 553,
          "sample_bouts": 2,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "td_attempts_per_15": {
          "unit": "per_15",
          "value": 0.4012,
          "origin": "pbe_derived",
          "numerator": 1,
          "as_of_date": "2026-09-06",
          "confidence": "medium",
          "metric_key": "td_attempts_per_15",
          "denominator": 2243,
          "sample_bouts": 2,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "finish_rate": {
          "unit": "ratio",
          "value": 0.5,
          "origin": "pbe_derived",
          "numerator": 1,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "finish_rate",
          "denominator": 2,
          "sample_bouts": 2,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        },
        "pace_retention_r3_vs_r1": {
          "unit": "ratio",
          "value": 2.5884,
          "origin": "pbe_derived",
          "numerator": 23.2957,
          "as_of_date": "2026-09-06",
          "confidence": "medium",
          "metric_key": "pace_retention_r3_vs_r1",
          "denominator": 9,
          "sample_bouts": 2,
          "sample_rounds": 4,
          "sample_seconds": 1043,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        }
      },
      "stance_splits": {
        "SOUTHPAW": {
          "record": {
            "d": 0,
            "l": 0,
            "w": 0,
            "nc": 0,
            "appearances": 0
          },
          "ko_rate": {
            "unit": "ratio",
            "value": null,
            "origin": "pbe_derived",
            "numerator": 0,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "stance_ko_rate",
            "denominator": 0,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "espn",
              "ufcstats"
            ],
            "definition_version": 1
          },
          "sub_rate": {
            "unit": "ratio",
            "value": null,
            "origin": "pbe_derived",
            "numerator": 0,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "stance_sub_rate",
            "denominator": 0,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "espn",
              "ufcstats"
            ],
            "definition_version": 1
          },
          "kd_per_15": {
            "unit": "per_15",
            "value": null,
            "origin": "pbe_derived",
            "numerator": null,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "stance_kd_rate_15",
            "denominator": null,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "ufcstats"
            ],
            "definition_version": 1
          },
          "confidence": "insufficient",
          "stat_bouts": 0,
          "finish_rate": {
            "unit": "ratio",
            "value": null,
            "origin": "pbe_derived",
            "numerator": 0,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "stance_finish_rate",
            "denominator": 0,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "espn",
              "ufcstats"
            ],
            "definition_version": 1
          },
          "ko_tko_wins": 0,
          "stat_rounds": 0,
          "decision_wins": 0,
          "record_metric": {
            "unit": "record",
            "value": {
              "d": 0,
              "l": 0,
              "w": 0,
              "nc": 0,
              "appearances": 0
            },
            "origin": "pbe_derived",
            "numerator": null,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "stance_record",
            "denominator": null,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "espn"
            ],
            "definition_version": 1
          },
          "submission_wins": 0,
          "observed_seconds": 0,
          "sig_diff_per_min": {
            "unit": "per_min",
            "value": null,
            "origin": "pbe_derived",
            "numerator": null,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "stance_sig_diff_per_min",
            "denominator": null,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "ufcstats"
            ],
            "definition_version": 1
          },
          "td_landed_per_15": {
            "unit": "per_15",
            "value": null,
            "origin": "pbe_derived",
            "numerator": null,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "stance_td_rate_15",
            "denominator": null,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "ufcstats"
            ],
            "definition_version": 1
          }
        },
        "open": {
          "record": {
            "d": 0,
            "l": 0,
            "w": 0,
            "nc": 0,
            "appearances": 0
          },
          "ko_rate": {
            "unit": "ratio",
            "value": null,
            "origin": "pbe_derived",
            "numerator": 0,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "stance_ko_rate",
            "denominator": 0,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "espn",
              "ufcstats"
            ],
            "definition_version": 1
          },
          "sub_rate": {
            "unit": "ratio",
            "value": null,
            "origin": "pbe_derived",
            "numerator": 0,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "stance_sub_rate",
            "denominator": 0,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "espn",
              "ufcstats"
            ],
            "definition_version": 1
          },
          "kd_per_15": {
            "unit": "per_15",
            "value": null,
            "origin": "pbe_derived",
            "numerator": null,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "stance_kd_rate_15",
            "denominator": null,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "ufcstats"
            ],
            "definition_version": 1
          },
          "confidence": "insufficient",
          "stat_bouts": 0,
          "finish_rate": {
            "unit": "ratio",
            "value": null,
            "origin": "pbe_derived",
            "numerator": 0,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "stance_finish_rate",
            "denominator": 0,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "espn",
              "ufcstats"
            ],
            "definition_version": 1
          },
          "ko_tko_wins": 0,
          "stat_rounds": 0,
          "decision_wins": 0,
          "record_metric": {
            "unit": "record",
            "value": {
              "d": 0,
              "l": 0,
              "w": 0,
              "nc": 0,
              "appearances": 0
            },
            "origin": "pbe_derived",
            "numerator": null,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "open_stance_record",
            "denominator": null,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "espn"
            ],
            "definition_version": 1
          },
          "submission_wins": 0,
          "observed_seconds": 0,
          "sig_diff_per_min": {
            "unit": "per_min",
            "value": null,
            "origin": "pbe_derived",
            "numerator": null,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "stance_sig_diff_per_min",
            "denominator": null,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "ufcstats"
            ],
            "definition_version": 1
          },
          "td_landed_per_15": {
            "unit": "per_15",
            "value": null,
            "origin": "pbe_derived",
            "numerator": null,
            "as_of_date": "2026-09-06",
            "confidence": "insufficient",
            "metric_key": "stance_td_rate_15",
            "denominator": null,
            "sample_bouts": 0,
            "sample_rounds": 0,
            "sample_seconds": 0,
            "coverage_status": "insufficient",
            "source_families": [
              "ufcstats"
            ],
            "definition_version": 1
          }
        },
        "…": "other stances omitted from this example"
      },
      "round_profile": {
        "rounds": {
          "1": {
            "rounds": 2,
            "seconds": 600,
            "sig_att_per_min": {
              "unit": "per_min",
              "value": 9,
              "origin": "pbe_derived",
              "numerator": 90,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r1_sig_attempts_per_min",
              "denominator": 600,
              "sample_bouts": 2,
              "sample_rounds": 2,
              "sample_seconds": 600,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "absorbed_per_min": {
              "unit": "per_min",
              "value": 2.3,
              "origin": "pbe_derived",
              "numerator": 23,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r1_sig_absorbed_per_min",
              "denominator": 600,
              "sample_bouts": 2,
              "sample_rounds": 2,
              "sample_seconds": 600,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "sig_landed_per_min": {
              "unit": "per_min",
              "value": 3.2,
              "origin": "pbe_derived",
              "numerator": 32,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r1_sig_landed_per_min",
              "denominator": 600,
              "sample_bouts": 2,
              "sample_rounds": 2,
              "sample_seconds": 600,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            }
          },
          "2": {
            "rounds": 2,
            "seconds": 600,
            "sig_att_per_min": {
              "unit": "per_min",
              "value": 11.7,
              "origin": "pbe_derived",
              "numerator": 117,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r2_sig_attempts_per_min",
              "denominator": 600,
              "sample_bouts": 2,
              "sample_rounds": 2,
              "sample_seconds": 600,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "absorbed_per_min": {
              "unit": "per_min",
              "value": 3.3,
              "origin": "pbe_derived",
              "numerator": 33,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r2_sig_absorbed_per_min",
              "denominator": 600,
              "sample_bouts": 2,
              "sample_rounds": 2,
              "sample_seconds": 600,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "sig_landed_per_min": {
              "unit": "per_min",
              "value": 5.2,
              "origin": "pbe_derived",
              "numerator": 52,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r2_sig_landed_per_min",
              "denominator": 600,
              "sample_bouts": 2,
              "sample_rounds": 2,
              "sample_seconds": 600,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            }
          },
          "3": {
            "rounds": 2,
            "seconds": 443,
            "sig_att_per_min": {
              "unit": "per_min",
              "value": 23.2957,
              "origin": "pbe_derived",
              "numerator": 172,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r3_sig_attempts_per_min",
              "denominator": 443,
              "sample_bouts": 2,
              "sample_rounds": 2,
              "sample_seconds": 443,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "absorbed_per_min": {
              "unit": "per_min",
              "value": 5.1467,
              "origin": "pbe_derived",
              "numerator": 38,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r3_sig_absorbed_per_min",
              "denominator": 443,
              "sample_bouts": 2,
              "sample_rounds": 2,
              "sample_seconds": 443,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "sig_landed_per_min": {
              "unit": "per_min",
              "value": 11.377,
              "origin": "pbe_derived",
              "numerator": 84,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r3_sig_landed_per_min",
              "denominator": 443,
              "sample_bouts": 2,
              "sample_rounds": 2,
              "sample_seconds": 443,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            }
          },
          "4": {
            "rounds": 1,
            "seconds": 300,
            "sig_att_per_min": {
              "unit": "per_min",
              "value": 17.2,
              "origin": "pbe_derived",
              "numerator": 86,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r4_sig_attempts_per_min",
              "denominator": 300,
              "sample_bouts": 1,
              "sample_rounds": 1,
              "sample_seconds": 300,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "absorbed_per_min": {
              "unit": "per_min",
              "value": 7.4,
              "origin": "pbe_derived",
              "numerator": 37,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r4_sig_absorbed_per_min",
              "denominator": 300,
              "sample_bouts": 1,
              "sample_rounds": 1,
              "sample_seconds": 300,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "sig_landed_per_min": {
              "unit": "per_min",
              "value": 6.8,
              "origin": "pbe_derived",
              "numerator": 34,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r4_sig_landed_per_min",
              "denominator": 300,
              "sample_bouts": 1,
              "sample_rounds": 1,
              "sample_seconds": 300,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            }
          },
          "5": {
            "rounds": 1,
            "seconds": 300,
            "sig_att_per_min": {
              "unit": "per_min",
              "value": 17.6,
              "origin": "pbe_derived",
              "numerator": 88,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r5_sig_attempts_per_min",
              "denominator": 300,
              "sample_bouts": 1,
              "sample_rounds": 1,
              "sample_seconds": 300,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "absorbed_per_min": {
              "unit": "per_min",
              "value": 4.4,
              "origin": "pbe_derived",
              "numerator": 22,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r5_sig_absorbed_per_min",
              "denominator": 300,
              "sample_bouts": 1,
              "sample_rounds": 1,
              "sample_seconds": 300,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "sig_landed_per_min": {
              "unit": "per_min",
              "value": 6.2,
              "origin": "pbe_derived",
              "numerator": 31,
              "as_of_date": "2026-09-06",
              "confidence": "low",
              "metric_key": "r5_sig_landed_per_min",
              "denominator": 300,
              "sample_bouts": 1,
              "sample_rounds": 1,
              "sample_seconds": 300,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            }
          }
        },
        "pace_retention_r2_vs_r1": {
          "unit": "ratio",
          "value": 1.3,
          "origin": "pbe_derived",
          "numerator": 11.7,
          "as_of_date": "2026-09-06",
          "confidence": "medium",
          "metric_key": "pace_retention_r2_vs_r1",
          "denominator": 9,
          "sample_bouts": 2,
          "sample_rounds": 4,
          "sample_seconds": 1200,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "pace_retention_r3_vs_r1": {
          "unit": "ratio",
          "value": 2.5884,
          "origin": "pbe_derived",
          "numerator": 23.2957,
          "as_of_date": "2026-09-06",
          "confidence": "medium",
          "metric_key": "pace_retention_r3_vs_r1",
          "denominator": 9,
          "sample_bouts": 2,
          "sample_rounds": 4,
          "sample_seconds": 1043,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "championship_round_delta": {
          "unit": "per_min",
          "value": 3.5595,
          "origin": "pbe_derived",
          "numerator": 17.4,
          "as_of_date": "2026-09-06",
          "confidence": "medium",
          "metric_key": "championship_round_delta",
          "denominator": 13.8405,
          "sample_bouts": 2,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "defensive_drift_r3_vs_r1": {
          "unit": "per_min",
          "value": 2.8467,
          "origin": "pbe_derived",
          "numerator": 5.1467,
          "as_of_date": "2026-09-06",
          "confidence": "medium",
          "metric_key": "defensive_drift_r3_vs_r1",
          "denominator": 2.3,
          "sample_bouts": 2,
          "sample_rounds": 4,
          "sample_seconds": 1043,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        }
      },
      "finish_profile": {
        "finish_rate": {
          "unit": "ratio",
          "value": 0.5,
          "origin": "pbe_derived",
          "numerator": 1,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "finish_rate",
          "denominator": 2,
          "sample_bouts": 2,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        },
        "finished_by": {
          "ko_tko": 0,
          "submission": 0
        },
        "ko_finish_rate": {
          "unit": "ratio",
          "value": 0.5,
          "origin": "pbe_derived",
          "numerator": 1,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "ko_finish_rate",
          "denominator": 2,
          "sample_bouts": 2,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        },
        "finish_time_median_sec": {
          "unit": "seconds",
          "value": 743,
          "origin": "pbe_derived",
          "numerator": null,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "finish_time_median_sec",
          "denominator": null,
          "sample_bouts": 1,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        },
        "submission_finish_rate": {
          "unit": "ratio",
          "value": 0,
          "origin": "pbe_derived",
          "numerator": 0,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "submission_finish_rate",
          "denominator": 2,
          "sample_bouts": 2,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        },
        "finish_round_distribution": {
          "unit": "distribution",
          "value": {
            "total": 1,
            "buckets": {
              "1": 0,
              "2": 0,
              "3": 1,
              "4": 0,
              "5": 0
            }
          },
          "origin": "pbe_derived",
          "numerator": 1,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "finish_round_distribution",
          "denominator": 2,
          "sample_bouts": 1,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        },
        "finished_by_round_distribution": {
          "unit": "distribution",
          "value": {
            "total": 0,
            "buckets": {
              "1": 0,
              "2": 0,
              "3": 0,
              "4": 0,
              "5": 0
            }
          },
          "origin": "pbe_derived",
          "numerator": 0,
          "as_of_date": "2026-09-06",
          "confidence": "insufficient",
          "metric_key": "finished_by_round_distribution",
          "denominator": 1,
          "sample_bouts": 0,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "insufficient",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        }
      },
      "context_splits": {
        "…": "omitted from this example"
      },
      "position_profile": {},
      "archetype": null,
      "provenance": {
        "bouts": [
          "815fe985-9681-4106-b5f5-e3086125e036",
          "f39afe57-7d82-4f76-b263-f5c2eea2e097"
        ],
        "record": {
          "d": 0,
          "l": 1,
          "w": 2,
          "nc": 0,
          "appearances": 3
        },
        "builder": "scripts/dna/build_fight_dna.mjs@v1.1",
        "watermark": {
          "bouts": 3,
          "stats_captured_at": "2026-09-06T17:05:53.140855+00:00",
          "results_captured_at": "2026-09-06T16:55:42.217129+00:00",
          "round_stats_captured_at": "2026-09-06T17:05:54.119389+00:00"
        },
        "build_run_id": "38e9445a-e7c9-4a23-bcc4-8d2c70e4a832",
        "fighter_stance": "ORTHODOX"
      },
      "generated_at": "2026-09-06T18:27:53.49+00:00",
      "origin": "pbe_derived"
    }
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-06.3",
    "request_id": "bb5b2e51-f863-477d-aeb2-94486fb9fcd9",
    "requested_as_of": null,
    "resolved_as_of": "2026-09-06",
    "definition_version": 1,
    "as_of_semantics": "as_of_date is exclusive: the snapshot dated D contains bouts with event_date < D, so a bout fought on D is excluded by the snapshot dated D. ?as_of=D resolves to the latest stored snapshot with as_of_date <= D, which therefore never contains a bout fought on or after D.",
    "origin": "pbe_derived",
    "origin_label": "PBE DERIVED",
    "access_tier": "public"
  }
}
excerpt
{
  "ok": true,
  "data": {
    "fighter": {
      "id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
      "name": "Sean Strickland"
    },
    "snapshot": {
      "as_of_date": "2026-09-06",
      "definition_version": 1,
      "sample_bouts": 3,
      "sample_rounds": 8,
      "sample_seconds": 2243,
      "coverage_status": "low",
      "metrics": {
        "sig_landed_per_min": {
          "unit": "per_min",
          "value": 6.2327,
          "origin": "pbe_derived",
          "numerator": 233,
          "as_of_date": "2026-09-06",
          "confidence": "medium",
          "metric_key": "sig_landed_per_min",
          "denominator": 2243,
          "sample_bouts": 2,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "finish_rate": {
          "unit": "ratio",
          "value": 0.5,
          "origin": "pbe_derived",
          "numerator": 1,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "finish_rate",
          "denominator": 2,
          "sample_bouts": 2,
          "sample_rounds": 8,
          "sample_seconds": 2243,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        },
        "…": "more metric keys"
      },
      "…": "stance_splits, round_profile, finish_profile, context_splits, provenance"
    }
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-06.3",
    "request_id": "bb5b2e51-f863-477d-aeb2-94486fb9fcd9",
    "requested_as_of": null,
    "resolved_as_of": "2026-09-06",
    "definition_version": 1,
    "as_of_semantics": "as_of_date is exclusive: the snapshot dated D contains bouts with event_date < D, so a bout fought on D is excluded by the snapshot dated D. ?as_of=D resolves to the latest stored snapshot with as_of_date <= D, which therefore never contains a bout fought on or after D.",
    "origin": "pbe_derived",
    "origin_label": "PBE DERIVED",
    "access_tier": "public"
  }
}
Fight DNA PBE derived
as of 2026-09-06 · def v1
6.23/min Sig. strikes landed medium
42% Strike accuracy medium
58% Strike defense medium
0.40/15 Takedown attempts medium
0% Takedown accuracy medium
50% Finish rate (wins) low
2.59× Pace retention R3/R1 medium
9% Control share medium
Confidence low 3 bouts · 8 rounds · 37 min observed

Registry families: stance, striking, pace, grappling, finish, context. See the methodology for every definition.

Matchup DNA Ultra+ PBE derived

GET /v1/ufc/matchups/{a}/{b}/dna[?as_of=] compares 18 paired metrics (delta, direction, comparable), adds stance_context, and emits insights[] only above the thresholds in meta.insight_rules; the rest is named in warnings[]. Also Ultra: /dna/query, /bouts/{id}/ledger, /events/{id}/intelligence.

GET /v1/ufc/matchups/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/1d296292-4969-43a8-9948-cd0a76a642ce/dna Ultra+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://ufc.proptechusa.ai/v1/ufc/matchups/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/1d296292-4969-43a8-9948-cd0a76a642ce/dna
Response excerpt → matchup cardschema example · captured Sep 7, 2026
Response JSON
GET /v1/ufc/matchups/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/1d296292-4969-43a8-9948-cd0a76a642ce/dna
subset
{
  "ok": true,
  "data": {
    "fighters": [
      {
        "id": "2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6",
        "name": "Manon Fiorot",
        "nickname": "The Beast",
        "ufcstats_id": "34ff304266360297",
        "espn_athlete_id": "4608674",
        "slug_id": "4608674",
        "record_w": 13,
        "record_l": 2,
        "record_d": 0,
        "record_nc": 0,
        "primary_image": {
          "id": "61827143-8f84-4f0d-8e06-53486dcc22ac",
          "image_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/portrait.jpg",
          "card_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/card.jpg",
          "thumb_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/thumb.jpg",
          "author": "Lucie Bertaud",
          "license": "CC BY 3.0",
          "source_url": "https://commons.wikimedia.org/wiki/File:MANON_FIOROT_ET_ALDRIC_CASSATA,_LE_COUPLE_GOAL_DU_MMA_-_MMA_EXTRA_ROUND_-22_-_YouTube_-_0-28-31_(cropped).jpg",
          "kind": "wikimedia",
          "attribution_text": "Lucie Bertaud, CC BY 3.0, via Wikimedia Commons",
          "rights_label": "CC BY 3.0"
        },
        "stance": "ORTHODOX",
        "is_active": true
      },
      {
        "id": "1d296292-4969-43a8-9948-cd0a76a642ce",
        "name": "Alexa Grasso",
        "nickname": null,
        "ufcstats_id": "e8b731feff72294b",
        "espn_athlete_id": "3136287",
        "slug_id": "3136287",
        "record_w": 17,
        "record_l": 5,
        "record_d": 1,
        "record_nc": 0,
        "primary_image": {
          "id": "85e0a287-fae3-43d1-be20-0fa490c01fb8",
          "image_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1d296292-4969-43a8-9948-cd0a76a642ce/portrait.jpg",
          "card_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1d296292-4969-43a8-9948-cd0a76a642ce/card.jpg",
          "thumb_url": "https://tkmlnhmylqnttmnsnief.supabase.co/storage/v1/object/public/ufc-media/fighters/1d296292-4969-43a8-9948-cd0a76a642ce/thumb.jpg",
          "author": "Alexa Lopez Col",
          "license": "CC BY 3.0",
          "source_url": "https://commons.wikimedia.org/wiki/File:Alexa_Grasso_2023_03.png",
          "kind": "wikimedia",
          "attribution_text": "Alexa Lopez Col, CC BY 3.0, via Wikimedia Commons",
          "rights_label": "CC BY 3.0"
        },
        "stance": "ORTHODOX",
        "is_active": true
      }
    ],
    "a": {
      "as_of_date": "2026-09-06",
      "sample_bouts": 2,
      "sample_rounds": 1,
      "coverage_status": "low",
      "…": "full snapshot subset omitted from this example"
    },
    "b": {
      "as_of_date": "2026-09-06",
      "sample_bouts": 2,
      "sample_rounds": 1,
      "coverage_status": "low",
      "…": "full snapshot subset omitted from this example"
    },
    "comparisons": [
      {
        "key": "sig_landed_per_min",
        "label": "Sig. strikes landed / min",
        "unit": "per_min",
        "family": "striking",
        "higher_is_better": true,
        "mismatch": null,
        "min_abs_delta": null,
        "a": {
          "unit": "per_min",
          "value": 12.973,
          "origin": "pbe_derived",
          "numerator": 16,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "sig_landed_per_min",
          "denominator": 74,
          "sample_bouts": 1,
          "sample_rounds": 1,
          "sample_seconds": 74,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "b": {
          "unit": "per_min",
          "value": 4.4444,
          "origin": "pbe_derived",
          "numerator": 12,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "sig_landed_per_min",
          "denominator": 162,
          "sample_bouts": 1,
          "sample_rounds": 1,
          "sample_seconds": 162,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "delta": 8.5286,
        "direction": "a",
        "comparable": true,
        "min_confidence": "low"
      },
      {
        "key": "sig_absorbed_per_min",
        "label": "Sig. strikes absorbed / min",
        "unit": "per_min",
        "family": "striking",
        "higher_is_better": false,
        "mismatch": null,
        "min_abs_delta": null,
        "a": {
          "unit": "per_min",
          "value": 1.6216,
          "origin": "pbe_derived",
          "numerator": 2,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "sig_absorbed_per_min",
          "denominator": 74,
          "sample_bouts": 1,
          "sample_rounds": 1,
          "sample_seconds": 74,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "b": {
          "unit": "per_min",
          "value": 1.8519,
          "origin": "pbe_derived",
          "numerator": 5,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "sig_absorbed_per_min",
          "denominator": 162,
          "sample_bouts": 1,
          "sample_rounds": 1,
          "sample_seconds": 162,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "delta": -0.2303,
        "direction": "b",
        "comparable": true,
        "min_confidence": "low"
      },
      {
        "key": "sig_accuracy",
        "label": "Sig. strike accuracy",
        "unit": "ratio",
        "family": "striking",
        "higher_is_better": true,
        "mismatch": null,
        "min_abs_delta": null,
        "a": {
          "unit": "ratio",
          "value": 0.5926,
          "origin": "pbe_derived",
          "numerator": 16,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "sig_accuracy",
          "denominator": 27,
          "sample_bouts": 1,
          "sample_rounds": 1,
          "sample_seconds": 74,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "b": {
          "unit": "ratio",
          "value": 0.3158,
          "origin": "pbe_derived",
          "numerator": 12,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "sig_accuracy",
          "denominator": 38,
          "sample_bouts": 1,
          "sample_rounds": 1,
          "sample_seconds": 162,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "delta": 0.2768,
        "direction": "a",
        "comparable": true,
        "min_confidence": "low"
      }
    ],
    "stance_context": {
      "a_stance": "ORTHODOX",
      "b_stance": "ORTHODOX",
      "context": "same",
      "…": "split blocks omitted from this example"
    },
    "insights": [
      {
        "key": "head_attack_share_mismatch",
        "label": "Head attack share mismatch",
        "value": 0.1472,
        "unit": "ratio",
        "a_value": 0.963,
        "b_value": 0.8158,
        "sample_bouts": 1,
        "sample_rounds": 1,
        "sample_seconds": 74,
        "samples": {
          "a": {
            "sample_bouts": 1,
            "sample_rounds": 1,
            "sample_seconds": 74,
            "confidence": "low"
          },
          "b": {
            "sample_bouts": 1,
            "sample_rounds": 1,
            "sample_seconds": 162,
            "confidence": "low"
          }
        },
        "confidence": "low",
        "direction": "a",
        "side": "a",
        "metric_keys": [
          "head_attack_share"
        ],
        "explanation": "Head attack share: Manon Fiorot 96% (1 bout / 1 round / 1.2 min) vs Alexa Grasso 82% (1 bout / 1 round / 2.7 min); delta +15% toward Manon Fiorot.",
        "origin": "pbe_derived"
      },
      {
        "key": "leg_attack_share_mismatch",
        "label": "Leg attack share mismatch",
        "value": -0.1842,
        "unit": "ratio",
        "a_value": 0,
        "b_value": 0.1842,
        "sample_bouts": 1,
        "sample_rounds": 1,
        "sample_seconds": 74,
        "samples": {
          "a": {
            "sample_bouts": 1,
            "sample_rounds": 1,
            "sample_seconds": 74,
            "confidence": "low"
          },
          "b": {
            "sample_bouts": 1,
            "sample_rounds": 1,
            "sample_seconds": 162,
            "confidence": "low"
          }
        },
        "confidence": "low",
        "direction": "b",
        "side": "b",
        "metric_keys": [
          "leg_attack_share"
        ],
        "explanation": "Leg attack share: Manon Fiorot 0% (1 bout / 1 round / 1.2 min) vs Alexa Grasso 18% (1 bout / 1 round / 2.7 min); delta -18% toward Alexa Grasso.",
        "origin": "pbe_derived"
      }
    ],
    "warnings": [
      "Manon Fiorot vs orthodox opponents: 1 appearance, confidence low; needs >= 3 appearances and confidence >= low. No stance insight emitted.",
      "Alexa Grasso vs orthodox opponents: 0 appearances, confidence insufficient; needs >= 3 appearances and confidence >= low. No stance insight emitted.",
      "Manon Fiorot pace_retention_r3_vs_r1: confidence insufficient (1 bout / 1 round / 1.2 min); needs >= 2 stat-covered bouts and confidence >= low. No pace insight emitted.",
      "Alexa Grasso pace_retention_r3_vs_r1: confidence insufficient (1 bout / 1 round / 2.7 min); needs >= 2 stat-covered bouts and confidence >= low. No pace insight emitted.",
      "Takedown accuracy: Manon Fiorot confidence low (1 bout / 1 round / 1.2 min); Alexa Grasso confidence low (1 bout / 1 round / 2.7 min). Both sides need confidence >= low; no grappling mismatch insight emitted.",
      "Control seconds / takedown: Manon Fiorot confidence low (1 bout / 1 round / 1.2 min); Alexa Grasso confidence low (1 bout / 1 round / 2.7 min). Both sides need confidence >= low; no grappling mismatch insight emitted.",
      "Manon Fiorot finish_rate: confidence insufficient (1 bout / 1 round / 1.2 min); needs confidence >= low (registry minimum 2 wins). No finish-profile insight emitted.",
      "Alexa Grasso finish_rate: confidence insufficient (1 bout / 1 round / 2.7 min); needs confidence >= low (registry minimum 2 wins). No finish-profile insight emitted."
    ],
    "bettors_edge_evidence": [
      {
        "key": "head_attack_share_mismatch",
        "label": "Head attack share mismatch",
        "value": 0.1472,
        "unit": "ratio",
        "side": "a",
        "direction": "a",
        "sample": "1 bout / 1 round / 1.2 min",
        "sample_bouts": 1,
        "sample_rounds": 1,
        "sample_seconds": 74,
        "confidence": "low",
        "origin": "pbe_derived",
        "origin_label": "PBE DERIVED",
        "explanation": "Head attack share: Manon Fiorot 96% (1 bout / 1 round / 1.2 min) vs Alexa Grasso 82% (1 bout / 1 round / 2.7 min); delta +15% toward Manon Fiorot."
      }
    ],
    "origin": "pbe_derived",
    "note": "Fight DNA is PBE-derived evidence with explicit samples and confidence. It is not a pick, price or probability."
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-06.3",
    "request_id": "e7687a49-24eb-4b44-918f-cd179da9746f",
    "requested_as_of": null,
    "resolved_as_of": {
      "a": "2026-09-06",
      "b": "2026-09-06"
    },
    "definition_version": 1,
    "insight_rules": {
      "version": 1,
      "min_confidence": "low",
      "stance_history": {
        "min_appearances": 3,
        "min_confidence": "low"
      },
      "stance_finish_rate": {
        "min_appearances": 3,
        "min_confidence": "low",
        "note": "finish_rate MetricObject of the split must itself be >= low (registry min 2 wins)"
      },
      "pace_retention": {
        "metric": "pace_retention_r3_vs_r1",
        "min_bouts": 2,
        "min_confidence": "low"
      },
      "pace_retention_mismatch": {
        "metric": "pace_retention_r3_vs_r1",
        "min_bouts": 2,
        "min_confidence": "low",
        "min_abs_delta": 0.1
      },
      "target_share_mismatch": {
        "metrics": [
          "head_attack_share",
          "body_attack_share",
          "leg_attack_share"
        ],
        "min_confidence": "low",
        "min_abs_delta": 0.1
      },
      "phase_share_mismatch": {
        "metrics": [
          "distance_attack_share",
          "clinch_attack_share",
          "ground_attack_share"
        ],
        "min_confidence": "low",
        "min_abs_delta": 0.1
      },
      "grappling_mismatch": {
        "min_confidence": "low",
        "min_abs_delta": {
          "td_attempts_per_15": 1,
          "td_accuracy": 0.1,
          "control_seconds_per_td": 30,
          "sub_attempts_per_15": 0.5
        }
      },
      "finish_rate": {
        "metric": "finish_rate",
        "min_confidence": "low"
      }
    },
    "comparisons": 18,
    "comparable": 14,
    "insights": 5,
    "warnings": 8,
    "as_of_semantics": "as_of_date is exclusive: the snapshot dated D contains bouts with event_date < D, so a bout fought on D is excluded by the snapshot dated D. ?as_of=D resolves to the latest stored snapshot with as_of_date <= D, which therefore never contains a bout fought on or after D.",
    "origin": "pbe_derived",
    "origin_label": "PBE DERIVED",
    "access_tier": "public"
  }
}
excerpt
{
  "ok": true,
  "data": {
    "fighters": [
      {
        "id": "2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6",
        "name": "Manon Fiorot",
        "stance": "ORTHODOX"
      },
      {
        "id": "1d296292-4969-43a8-9948-cd0a76a642ce",
        "name": "Alexa Grasso",
        "stance": "ORTHODOX"
      }
    ],
    "comparisons": [
      {
        "key": "sig_landed_per_min",
        "label": "Sig. strikes landed / min",
        "unit": "per_min",
        "family": "striking",
        "higher_is_better": true,
        "mismatch": null,
        "min_abs_delta": null,
        "a": {
          "unit": "per_min",
          "value": 12.973,
          "origin": "pbe_derived",
          "numerator": 16,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "sig_landed_per_min",
          "denominator": 74,
          "sample_bouts": 1,
          "sample_rounds": 1,
          "sample_seconds": 74,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "b": {
          "unit": "per_min",
          "value": 4.4444,
          "origin": "pbe_derived",
          "numerator": 12,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "sig_landed_per_min",
          "denominator": 162,
          "sample_bouts": 1,
          "sample_rounds": 1,
          "sample_seconds": 162,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "delta": 8.5286,
        "direction": "a",
        "comparable": true,
        "min_confidence": "low"
      },
      {
        "key": "sig_absorbed_per_min",
        "label": "Sig. strikes absorbed / min",
        "unit": "per_min",
        "family": "striking",
        "higher_is_better": false,
        "mismatch": null,
        "min_abs_delta": null,
        "a": {
          "unit": "per_min",
          "value": 1.6216,
          "origin": "pbe_derived",
          "numerator": 2,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "sig_absorbed_per_min",
          "denominator": 74,
          "sample_bouts": 1,
          "sample_rounds": 1,
          "sample_seconds": 74,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "b": {
          "unit": "per_min",
          "value": 1.8519,
          "origin": "pbe_derived",
          "numerator": 5,
          "as_of_date": "2026-09-06",
          "confidence": "low",
          "metric_key": "sig_absorbed_per_min",
          "denominator": 162,
          "sample_bouts": 1,
          "sample_rounds": 1,
          "sample_seconds": 162,
          "coverage_status": "low",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "delta": -0.2303,
        "direction": "b",
        "comparable": true,
        "min_confidence": "low"
      }
    ],
    "insights": [
      {
        "key": "head_attack_share_mismatch",
        "label": "Head attack share mismatch",
        "value": 0.1472,
        "unit": "ratio",
        "a_value": 0.963,
        "b_value": 0.8158,
        "sample_bouts": 1,
        "sample_rounds": 1,
        "sample_seconds": 74,
        "samples": {
          "a": {
            "sample_bouts": 1,
            "sample_rounds": 1,
            "sample_seconds": 74,
            "confidence": "low"
          },
          "b": {
            "sample_bouts": 1,
            "sample_rounds": 1,
            "sample_seconds": 162,
            "confidence": "low"
          }
        },
        "confidence": "low",
        "direction": "a",
        "side": "a",
        "metric_keys": [
          "head_attack_share"
        ],
        "explanation": "Head attack share: Manon Fiorot 96% (1 bout / 1 round / 1.2 min) vs Alexa Grasso 82% (1 bout / 1 round / 2.7 min); delta +15% toward Manon Fiorot.",
        "origin": "pbe_derived"
      }
    ],
    "warnings": [
      "Manon Fiorot vs orthodox opponents: 1 appearance, confidence low; needs >= 3 appearances and confidence >= low. No stance insight emitted.",
      "Alexa Grasso vs orthodox opponents: 0 appearances, confidence insufficient; needs >= 3 appearances and confidence >= low. No stance insight emitted."
    ],
    "…": "stance_context, bettors_edge_evidence, note"
  },
  "meta": {
    "resolved_as_of": {
      "a": "2026-09-06",
      "b": "2026-09-06"
    },
    "insights": 5,
    "warnings": 8
  }
}
Manon Fiorot portrait
Lucie Bertaud, CC BY 3.0, via Wikimedia Commons
Manon Fiorot
13-2-0 · #2 Women'S Flyweight
Alexa Grasso portrait
Alexa Lopez Col, CC BY 3.0, via Wikimedia Commons
Alexa Grasso
17-5-1 · #3 Women'S Flyweight
VS
65"Reach66"
OrthodoxStanceOrthodox
12.97Pace (sig. landed/min)low / low4.44
59%Strike accuracylow / low32%
59%Distance sharelow / low97%
0.00Takedown attempts /15low / low0.00
Takedown accuracylow / low
Pace retention R3/R1insufficient / insufficient
100%Finish rate (wins)insufficient / insufficient100%
Stance context: same · comparisons 14/18 comparable · as of 2026-09-06 / 2026-09-06. “—” means no stat-covered rounds for that fighter; nothing is estimated. Reach, stance and rank come from /fighters/{id}; every metric row comes from the matchup response.
Matchup read PBE derived
  • Head attack share mismatch. Head attack share: Manon Fiorot 96% (1 bout / 1 round / 1.2 min) vs Alexa Grasso 82% (1 bout / 1 round / 2.7 min); delta +15% toward Manon Fiorot. low
  • Leg attack share mismatch. Leg attack share: Manon Fiorot 0% (1 bout / 1 round / 1.2 min) vs Alexa Grasso 18% (1 bout / 1 round / 2.7 min); delta -18% toward Alexa Grasso. low
8 thresholds not met are listed in warnings[] instead of being guessed.
Fight DNA is PBE-derived evidence with explicit samples and confidence. It is not a pick, price or probability.

As-of snapshots Pro+

as_of_date is exclusive: the snapshot dated D contains bouts with event_date < D, so a bout fought on D is excluded by the snapshot dated D. ?as_of=D resolves to the latest stored snapshot with as_of_date <= D, which therefore never contains a bout fought on or after D.

Add ?as_of=YYYY-MM-DD to fighter DNA routes (Pro) or Matchup DNA (Ultra). meta.requested_as_of / meta.resolved_as_of report the snapshot used. A date before the first snapshot is a truthful 404:

404 dna_not_available (live)
{
  "ok": false,
  "data": null,
  "error": {
    "code": "dna_not_available",
    "message": "No Fight DNA snapshot exists for Sean Strickland at or before 2024-01-01. Nothing is synthesized.",
    "detail": {
      "fighter_id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
      "requested_as_of": "2024-01-01",
      "definition_version": 1,
      "reason": "no_snapshot_at_or_before_as_of"
    }
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-06.3",
    "request_id": "475fa213-d202-4353-a79d-d31519c3b4a3"
  }
}

Confidence

TierRule
insufficientsample below the metric's registry minimum (min_bouts / min_rounds / min_seconds); value is null when there is no denominator
lowminimum met but sample_bouts < 3 (result metrics) or sample_seconds < 1800 (rate metrics)
mediumsample_bouts < 8 (result metrics) or sample_seconds < 5400 (rate metrics)
highsample_bouts >= 8 (result metrics) or sample_seconds >= 5400 (rate metrics)

coverage_status uses the same scale for stat coverage of the sample. Present insufficient and low as exactly that.

Provenance

Every derived value is a MetricObject; the gateway never strips it.

MetricObject (live)
{
  "unit": "per_min",
  "value": 6.2327,
  "origin": "pbe_derived",
  "numerator": 233,
  "as_of_date": "2026-09-06",
  "confidence": "medium",
  "metric_key": "sig_landed_per_min",
  "denominator": 2243,
  "sample_bouts": 2,
  "sample_rounds": 8,
  "sample_seconds": 2243,
  "coverage_status": "low",
  "source_families": [
    "ufcstats"
  ],
  "definition_version": 1
}

Build a fighter profile

  1. Find the fighter: GET /v1/ufc/fighters?q=fiorot → take id (or accept a UFCStats / ESPN id directly).
  2. Profile: GET /v1/ufc/fighters/{id}?include=ranking,next,history&history_limit=10 → name, record, height/reach/stance, primary_image (+ credit), ranking positions, next bout, recent history.
  3. Career stats (Pro): GET /v1/ufc/fighters/{id}/statscomputed.career_rates with provenance; label as display aggregates.
  4. Fight DNA (Pro): GET /v1/ufc/fighters/{id}/dna → render metrics with their confidence; show the sample line; hide nothing.

Result: the fighter profile demo on the homepage, rendered from exactly these responses. Try it live in the Workspace.

Production example

See how this is used in a real product: A fighter profile on PropBetEdge UFC →

Fighter pages on the production application are built from the same fighter, stats and Fight DNA responses documented above.

Build a fight card

  1. GET /v1/ufc/events?status=upcoming&limit=1 → the next event id.
  2. GET /v1/ufc/events/{id}/card?include=media,resultsbouts[] ordered main event first (bout_order), with card_position (main, prelim, early_prelim), weight class, scheduled rounds, title flag, both fighters with images, and result when fought.
  3. Group by card_position; render the highest bout_order as the main event; credit every portrait.
  4. Optional: GET /v1/ufc/events/{id}/videos for the official fight-week video timeline (link out, never rehost).

See Fight Week on the homepage or run Current card in the Workspace.

Production example

See how this is used in a real product: Fight Week on PropBetEdge UFC →

The production Fight Week view is composed from the event card response, per-bout fighters and their media.

Compare two fighters

  1. Resolve both ids by search.
  2. GET /v1/ufc/matchups/{a}/{b}/dna (Ultra).
  3. Tale of the tape from fighters[] (reach, stance, record, rank); paired rows from comparisons[] (comparable=false → show “—”, never a placeholder number); stance_context for the stance story.
  4. Render insights[] as the read, each with its confidence and sample; surface warnings[] so users see what was not claimed.

Live: Workspace matchup builder.

Production example

See how this is used in a real product: A matchup page on PropBetEdge UFC →

Matchup pages render comparisons[], insights[] and warnings[] exactly as returned, with non-comparable rows shown as em-dashes.

Build a rankings screen

  1. GET /v1/ufc/rankings (all divisions, official order) or ?division=FEATHERWEIGHT.
  2. Champion card from champion; list from entries[] with rank, change, is_new; ties are real, ranks may skip.
  3. Portraits: collect fighter.id values and call GET /v1/ufc/fighters/media?ids=a,b,c (≤150) once; render credits.
  4. Show source / source_url (ufc.com) and snapshot_date.

Production example

See how this is used in a real product: Rankings on PropBetEdge UFC →

The production rankings screen renders the same official snapshot, with portraits from one bulk media call.

Build a Fight Week app

  1. Card: steps from Build a fight card.
  2. Faces and profiles: /fighters/{id} per bout (or reuse card payload).
  3. Intelligence: /fighters/{id}/dna (Pro) for each side; /matchups/{a}/{b}/dna (Ultra) for the read; /events/{id}/intelligence (Ultra) for the ledger view across the card.
  4. Context: /rankings for implications, /events/{id}/videos for official media, /news for PropBetEdge editorial.

Production example

See how this is used in a real product: Fight Week on PropBetEdge UFC →

PropBetEdge UFC's Fight Week is one production implementation of this exact flow: card, faces, per-side Fight DNA, the matchup read and ranking implications.

Endpoint reference

EndpointSummaryOriginMinimum plan
/v1/ufcAPI indexsource factDeveloper
/v1/ufc/eventsList events (upcoming, recent, all, by date)source factDeveloper
/v1/ufc/events/{id}Event by UUID, UFCStats id or ESPN idsource factDeveloper
/v1/ufc/events/{id}/cardEvent plus its ordered fight cardsource factDeveloper
/v1/ufc/events/{id}/articlesPropBetEdge articles for an eventeditorialDeveloper
/v1/ufc/events/{id}/videosOfficial video metadata for an event, grouped for the fight-week timelinethird party linkDeveloper
/v1/ufc/events/{id}/intelligenceFight Week intelligence per bout from the Fight State Ledgerpbe derivedUltra
/v1/ufc/fightersSearch and list fighterssource factDeveloper
/v1/ufc/fighters/mediaBulk primary_image map (max 150 ids)mediaDeveloper
/v1/ufc/fighters/{id}Fighter profile composite (include=media,ranking,next,history,stats,videos)source factDeveloper
/v1/ufc/fighters/{id}/historyFighter bout historysource factDeveloper
/v1/ufc/fighters/{id}/statsCareer round rows plus computed rates and per-bout aggregatespbe derivedPro
/v1/ufc/fighters/{id}/articlesPropBetEdge articles for a fightereditorialDeveloper
/v1/ufc/fighters/{id}/videosOfficial video metadata for a fighterthird party linkDeveloper
/v1/ufc/fighters/{id}/dnaFighter Fight DNA snapshot (metrics, stance splits, round, finish, context)pbe derivedPro
/v1/ufc/fighters/{id}/splitsStance DNA split rowspbe derivedPro
/v1/ufc/fighters/{id}/round-profileRound DNA profilepbe derivedPro
/v1/ufc/fighters/{id}/finish-profileFinish DNA profilepbe derivedPro
/v1/ufc/fighters/{id}/position-profilePosition profile (licensed family; explicit unavailable until a licensed source exists)licensedPro
/v1/ufc/bouts/{id}Bout detailsource factDeveloper
/v1/ufc/bouts/{id}/statsRound-level statistics for a boutsource factDeveloper
/v1/ufc/bouts/{id}/videosOfficial video metadata for a boutthird party linkDeveloper
/v1/ufc/bouts/{id}/ledgerFight State Ledger snapshots and deterministic diffspbe derivedUltra
/v1/ufc/matchups/{fighterA}/{fighterB}/dnaMatchup DNApbe derivedUltra
/v1/ufc/resultsRecent resultssource factDeveloper
/v1/ufc/rankingsOfficial rankings snapshot (ufc.com)source factDeveloper
/v1/ufc/newsPropBetEdge newsroom listeditorialDeveloper
/v1/ufc/articles/{slug}PropBetEdge articleeditorialDeveloper
/v1/ufc/wireThird-party headline wire (Enterprise / first-party only pending rights review)third party linkEnterprise
/v1/ufc/searchSearch fighters, events and articlessource factDeveloper
/v1/ufc/countsCoverage countssource factDeveloper
/v1/ufc/videosOfficial video metadata feedthird party linkDeveloper
/v1/ufc/dna/metricsFight DNA metric registrypbe derivedDeveloper
/v1/ufc/dna/queryCross-fighter Fight DNA querypbe derivedUltra

Interactive reference (OpenAPI) openapi.json →

Origin labels

LabelWhereRule
Sourceevents, fighters, bouts, results, round stats, rankingsNormalized ESPN / UFC Stats / ufc.com facts. Attribute the source where displayed.
PBE derivedFight DNA, Matchup DNA, computed career rates, ledger diffsPropBetEdge analytics. Show sample and confidence. Never present as official statistics or predictions.
Licensedposition profile (reserved)Licensed enrichment, labelled separately when it exists.
Editorialnews, articlesPropBetEdge newsroom content.
Mediaprimary_image, images[], hero_imageRender attribution_text; each file's license governs reuse.
Third-party linkvideos, wireIds and official URLs only. Provider player; never rehost.

Schemas and OpenAPI

The commercial contract is generated from the canonical API's OpenAPI plus the entitlement config, so data schemas (MetricObject, StanceSplit, DnaSnapshot, MatchupDna, Video, PrimaryImage, envelopes) are byte-identical to upstream and every operation carries x-plan and x-origin. Servers: https://ufc.proptechusa.ai (commercial) and https://ufc-api.propbetedge.ai (canonical, first-party). Import openapi.json into your client generator, or browse the interactive reference.