Snapshot stale
Contract 2026-09-14.1 Fight DNA v1 3,297 fighters 924 events 9,573 bouts 42,166 rounds of stats Next card UFC 332: Silva vs. Wang · 2026-10-03
Updated 19 d ago Docs →

Documentation

UFC Intelligence API

Base URL https://proptechusa-ufc-api.sales-fd3.workers.dev — this site is the documentation and account host and does not serve the API. Data contract 2026-09-14.1, 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 14, 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.

New in 2026-09-11.1, on every plan: official weigh-ins with their full source history, and availability, card changes and fighter status. Additive only — no field was removed or renamed.

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://proptechusa-ufc-api.sales-fd3.workers.dev/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 40 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://proptechusa-ufc-api.sales-fd3.workers.dev/v1/ufc
# equivalent
curl -H "X-API-Key: $UFC_API_KEY" https://proptechusa-ufc-api.sales-fd3.workers.dev/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_matchup · invalid_status · invalid_since · invalid_state · invalid_status_typeValidation errors from the canonical API; the message 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://proptechusa-ufc-api.sales-fd3.workers.dev/v1/ufc/events?status=upcoming&limit=3
Response excerpt → schedule listschema example · captured Sep 14, 2026
Response JSON
GET /v1/ufc/events?status=upcoming&limit=3
{
  "ok": true,
  "data": [
    {
      "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-14T06:02:40.811+00:00"
    },
    {
      "id": "221ca353-f623-4b66-98aa-3a504a418236",
      "ufcstats_id": "8a0a35e7c74bebcc",
      "espn_event_id": "600060963",
      "name": "UFC 331: Van vs. Pantoja 2",
      "event_date": "2026-09-19",
      "venue": "crypto.com Arena",
      "city": "Los Angeles",
      "region": "CA",
      "country": "USA",
      "commission": null,
      "is_ppv": null,
      "card_status": "announced",
      "updated_at": "2026-09-14T06:02:44.256+00:00"
    },
    {
      "id": "03f4db32-7b71-4eaf-866e-8b636e6c597a",
      "ufcstats_id": null,
      "espn_event_id": "600060738",
      "name": "Dana White's Contender Series: Season 10, Week 7",
      "event_date": "2026-09-22",
      "venue": "Meta APEX",
      "city": "Las Vegas",
      "region": "NV",
      "country": "USA",
      "commission": null,
      "is_ppv": null,
      "card_status": "announced",
      "updated_at": "2026-09-14T06:02:51.828+00:00"
    }
  ],
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "68886fa7-9808-4b3a-9fb2-128721d9c514",
    "count": 3,
    "total": 15,
    "status": "upcoming",
    "date": null,
    "access_tier": "public"
  }
}
excerpt
{
  "ok": true,
  "data": [
    {
      "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-14T06:02:40.811+00:00"
    },
    {
      "id": "221ca353-f623-4b66-98aa-3a504a418236",
      "ufcstats_id": "8a0a35e7c74bebcc",
      "espn_event_id": "600060963",
      "name": "UFC 331: Van vs. Pantoja 2",
      "event_date": "2026-09-19",
      "venue": "crypto.com Arena",
      "city": "Los Angeles",
      "region": "CA",
      "country": "USA",
      "commission": null,
      "is_ppv": null,
      "card_status": "announced",
      "updated_at": "2026-09-14T06:02:44.256+00:00"
    }
  ],
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "68886fa7-9808-4b3a-9fb2-128721d9c514",
    "count": 3,
    "total": 15,
    "status": "upcoming",
    "date": null,
    "access_tier": "public"
  }
}
DateEventVenueStatus
2026-09-15Dana White's Contender Series: Season 10, Week 6Meta APEX, Las Vegasannounced
2026-09-19UFC 331: Van vs. Pantoja 2crypto.com Arena, Los Angelesannounced
2026-09-22Dana White's Contender Series: Season 10, Week 7Meta 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://proptechusa-ufc-api.sales-fd3.workers.dev/v1/ufc/events/1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52/card
Response excerpt → rendered fight cardschema example · captured Sep 14, 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": "complete",
      "updated_at": "2026-09-14T06:02:26.496+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": "complete",
        "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": {
          "round": 3,
          "method": "SUB",
          "bout_id": "89e38074-f431-4bc3-b51e-fe42058e60d0",
          "judge_1": null,
          "judge_2": null,
          "judge_3": null,
          "referee": "Dan Miragliotta",
          "time_sec": 177,
          "has_stats": false,
          "winner_id": "eed368a5-484b-412f-9d2c-a4fd6d24d019",
          "method_raw": "Submission",
          "scorecards": null,
          "captured_at": "2026-09-14T06:02:39.812+00:00",
          "time_format": "5 Rnd (5-5-5-5-5)",
          "finish_detail": "Rear Naked Choke",
          "result_source": "espn"
        }
      },
      {
        "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": "complete",
        "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": {
          "round": 3,
          "method": "DEC_S",
          "bout_id": "7300eba4-285f-4030-9f3f-216fa376f451",
          "judge_1": "Eric Colon",
          "judge_2": "Andrew Topps",
          "judge_3": "Michael Bell",
          "referee": "Jason Herzog",
          "time_sec": 300,
          "has_stats": false,
          "winner_id": "1fa71f4b-3f7d-4705-ba00-1f6bcf397b9a",
          "method_raw": "Decision - Split",
          "scorecards": [
            {
              "judge": "Eric Colon",
              "score": "30-27"
            },
            {
              "judge": "Andrew Topps",
              "score": "28-29"
            },
            {
              "judge": "Michael Bell",
              "score": "30-27"
            }
          ],
          "captured_at": "2026-09-14T06:02:39.178+00:00",
          "time_format": "3 Rnd (5-5-5)",
          "finish_detail": null,
          "result_source": "espn"
        }
      }
    ]
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "ccbd7c02-eabe-42e1-8c09-0d134cb4c9cc",
    "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": "complete",
      "updated_at": "2026-09-14T06:02:26.496+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": {
          "round": 3,
          "method": "SUB",
          "bout_id": "89e38074-f431-4bc3-b51e-fe42058e60d0",
          "judge_1": null,
          "judge_2": null,
          "judge_3": null,
          "referee": "Dan Miragliotta",
          "time_sec": 177,
          "has_stats": false,
          "winner_id": "eed368a5-484b-412f-9d2c-a4fd6d24d019",
          "method_raw": "Submission",
          "scorecards": null,
          "captured_at": "2026-09-14T06:02:39.812+00:00",
          "time_format": "5 Rnd (5-5-5-5-5)",
          "finish_detail": "Rear Naked Choke",
          "result_source": "espn"
        }
      }
    ],
    "…": "12 more bouts"
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "ccbd7c02-eabe-42e1-8c09-0d134cb4c9cc",
    "include": [],
    "bouts": 13,
    "access_tier": "public"
  }
}
Sep 12, 2026 · Desert Diamond Arena, Glendale, AZ

Noche UFC: Silva vs. Delgado

complete 13 bouts
Main event · Featherweight · 5 rounds
Jean Silva portrait
Jean Silva
17-3-0 · Orthodox
Jose Miguel Delgado (no image available)
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://proptechusa-ufc-api.sales-fd3.workers.dev/v1/ufc/fighters/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6?include=ranking,next,history&history_limit=5
Response excerpt → fighter profileschema example · captured Sep 14, 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-10",
      "captured_at": "2026-09-10T12:15:02.152+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": 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": "complete",
        "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": {
          "round": 3,
          "method": "DEC_U",
          "bout_id": "c5ab710f-9440-4142-b87f-d2de30c1780d",
          "judge_1": "Ron McCarthy",
          "judge_2": "Sal D'amato",
          "judge_3": "Felicia Oh",
          "referee": "Blake Grice",
          "time_sec": 300,
          "has_stats": false,
          "winner_id": "1d296292-4969-43a8-9948-cd0a76a642ce",
          "method_raw": "Decision - Unanimous",
          "scorecards": [
            {
              "judge": "Ron McCarthy",
              "score": "28-29"
            },
            {
              "judge": "Sal D'amato",
              "score": "28-29"
            },
            {
              "judge": "Felicia Oh",
              "score": "28-29"
            }
          ],
          "captured_at": "2026-09-14T06:02:37.932+00:00",
          "time_format": "3 Rnd (5-5-5)",
          "finish_detail": null,
          "result_source": "espn"
        },
        "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-14T06:02:26.496+00:00",
          "card_status": "complete",
          "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": "L"
      }
    ]
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "83b742b9-6010-465c-8430-eb957809a502",
    "include": [
      "ranking",
      "next",
      "history"
    ],
    "history_count": 5,
    "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": null
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "83b742b9-6010-465c-8430-eb957809a502",
    "include": [
      "ranking",
      "next",
      "history"
    ],
    "history_count": 5,
    "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://proptechusa-ufc-api.sales-fd3.workers.dev/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": "02daff45-dd33-4843-89cc-e8f7c1ac91e3",
        "fighter_id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
        "round": 1,
        "kd": 0,
        "sig_str_landed": 11,
        "sig_str_att": 48,
        "total_str_landed": 11,
        "total_str_att": 48,
        "td_landed": 0,
        "td_att": 0,
        "sub_att": 0,
        "rev": 0,
        "ctrl_sec": 0,
        "head_landed": 10,
        "head_att": 46,
        "body_landed": 1,
        "body_att": 2,
        "leg_landed": 0,
        "leg_att": 0,
        "distance_landed": 11,
        "distance_att": 48,
        "clinch_landed": 0,
        "clinch_att": 0,
        "ground_landed": 0,
        "ground_att": 0,
        "captured_at": "2026-09-07T15:48:51.804233+00:00"
      },
      {
        "bout_id": "02daff45-dd33-4843-89cc-e8f7c1ac91e3",
        "fighter_id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
        "round": 2,
        "kd": 1,
        "sig_str_landed": 70,
        "sig_str_att": 140,
        "total_str_landed": 70,
        "total_str_att": 140,
        "td_landed": 0,
        "td_att": 0,
        "sub_att": 0,
        "rev": 0,
        "ctrl_sec": 10,
        "head_landed": 70,
        "head_att": 140,
        "body_landed": 0,
        "body_att": 0,
        "leg_landed": 0,
        "leg_att": 0,
        "distance_landed": 56,
        "distance_att": 120,
        "clinch_landed": 0,
        "clinch_att": 0,
        "ground_landed": 14,
        "ground_att": 20,
        "captured_at": "2026-09-07T15:48:51.804256+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": 25,
        "rounds": 84,
        "fight_time_sec": 24399,
        "fight_time_basis": {
          "result": 25,
          "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": 7,
        "sig_str_landed": 2430,
        "sig_str_att": 5717,
        "total_str_landed": 2643,
        "total_str_att": 5973,
        "td_landed": 18,
        "td_att": 29,
        "sub_att": 4,
        "rev": 0,
        "ctrl_sec": 2032,
        "head_landed": 1963,
        "head_att": 5036,
        "body_landed": 343,
        "body_att": 523,
        "leg_landed": 124,
        "leg_att": 158,
        "distance_landed": 2239,
        "distance_att": 5415,
        "clinch_landed": 78,
        "clinch_att": 117,
        "ground_landed": 113,
        "ground_att": 185
      },
      "career_rates": {
        "sig_str_landed_per_min": 5.98,
        "sig_str_accuracy": 0.425,
        "total_str_accuracy": 0.4425,
        "td_per_15min": 0.66,
        "td_accuracy": 0.6207,
        "sub_att_per_15min": 0.15,
        "kd_per_15min": 0.26,
        "ctrl_share": 0.0833,
        "head_share": 0.8078,
        "body_share": 0.1412,
        "leg_share": 0.051,
        "distance_share": 0.9214,
        "clinch_share": 0.0321,
        "ground_share": 0.0465
      },
      "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-14.1",
    "request_id": "b6cec63b-db9c-4bc8-9722-2a7b000b0505",
    "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://proptechusa-ufc-api.sales-fd3.workers.dev/v1/ufc/results?limit=10
Results response
GET /v1/ufc/results?limit=2
{
  "ok": true,
  "data": [
    {
      "bout_id": "89e38074-f431-4bc3-b51e-fe42058e60d0",
      "winner_id": "eed368a5-484b-412f-9d2c-a4fd6d24d019",
      "method": "SUB",
      "method_raw": "Submission",
      "round": 3,
      "time_sec": 177,
      "time_format": "5 Rnd (5-5-5-5-5)",
      "referee": "Dan Miragliotta",
      "judge_1": null,
      "judge_2": null,
      "judge_3": null,
      "scorecards": null,
      "finish_detail": "Rear Naked Choke",
      "result_source": "espn",
      "has_stats": false,
      "captured_at": "2026-09-14T06:02:39.812+00:00",
      "bout": {
        "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": "complete",
        "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"
        },
        "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"
        },
        "result": {
          "round": 3,
          "method": "SUB",
          "bout_id": "89e38074-f431-4bc3-b51e-fe42058e60d0",
          "judge_1": null,
          "judge_2": null,
          "judge_3": null,
          "referee": "Dan Miragliotta",
          "time_sec": 177,
          "has_stats": false,
          "winner_id": "eed368a5-484b-412f-9d2c-a4fd6d24d019",
          "method_raw": "Submission",
          "scorecards": null,
          "captured_at": "2026-09-14T06:02:39.812+00:00",
          "time_format": "5 Rnd (5-5-5-5-5)",
          "finish_detail": "Rear Naked Choke",
          "result_source": "espn"
        },
        "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-14T06:02:26.496+00:00",
          "card_status": "complete",
          "ufcstats_id": "638cfec7ec559d6e",
          "espn_event_id": "600060772"
        }
      }
    },
    {
      "bout_id": "7300eba4-285f-4030-9f3f-216fa376f451",
      "winner_id": "1fa71f4b-3f7d-4705-ba00-1f6bcf397b9a",
      "method": "DEC_S",
      "method_raw": "Decision - Split",
      "round": 3,
      "time_sec": 300,
      "time_format": "3 Rnd (5-5-5)",
      "referee": "Jason Herzog",
      "judge_1": "Eric Colon",
      "judge_2": "Andrew Topps",
      "judge_3": "Michael Bell",
      "scorecards": [
        {
          "judge": "Eric Colon",
          "score": "30-27"
        },
        {
          "judge": "Andrew Topps",
          "score": "28-29"
        },
        {
          "judge": "Michael Bell",
          "score": "30-27"
        }
      ],
      "finish_detail": null,
      "result_source": "espn",
      "has_stats": false,
      "captured_at": "2026-09-14T06:02:39.178+00:00",
      "bout": {
        "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": "complete",
        "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"
        },
        "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"
        },
        "result": {
          "round": 3,
          "method": "DEC_S",
          "bout_id": "7300eba4-285f-4030-9f3f-216fa376f451",
          "judge_1": "Eric Colon",
          "judge_2": "Andrew Topps",
          "judge_3": "Michael Bell",
          "referee": "Jason Herzog",
          "time_sec": 300,
          "has_stats": false,
          "winner_id": "1fa71f4b-3f7d-4705-ba00-1f6bcf397b9a",
          "method_raw": "Decision - Split",
          "scorecards": [
            {
              "judge": "Eric Colon",
              "score": "30-27"
            },
            {
              "judge": "Andrew Topps",
              "score": "28-29"
            },
            {
              "judge": "Michael Bell",
              "score": "30-27"
            }
          ],
          "captured_at": "2026-09-14T06:02:39.178+00:00",
          "time_format": "3 Rnd (5-5-5)",
          "finish_detail": null,
          "result_source": "espn"
        },
        "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-14T06:02:26.496+00:00",
          "card_status": "complete",
          "ufcstats_id": "638cfec7ec559d6e",
          "espn_event_id": "600060772"
        }
      }
    }
  ],
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "af42b2c0-1313-4e95-a94d-f28dff76c36c",
    "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://proptechusa-ufc-api.sales-fd3.workers.dev/v1/ufc/rankings?division=FEATHERWEIGHT
Response → rankings screenschema example · captured Sep 14, 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-10",
    "captured_at": "2026-09-10T12:15:02.152+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-14.1",
    "request_id": "1240b6b7-a4ca-4dd7-942d-395369bca380",
    "store": "table",
    "divisions": 1,
    "division": "FEATHERWEIGHT",
    "womens": null,
    "access_tier": "public"
  }
}
Featherweight
Official snapshot 2026-09-10
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 (no image available) Lerone Murphy —
  4. 4 Aljamain Sterling portrait Aljamain Sterling —
  5. 5 Yair Rodriguez portrait Yair Rodriguez —
  6. 6 Jean Silva portrait Jean Silva —

Weigh-ins Developer+ Source

GET /v1/ufc/events/{id}/weigh-ins?include=history for one card, or GET /v1/ufc/weigh-ins?event_id=&fighter_id=&status=&since=&limit=&offset= across cards. data.results is the current reading per fighter per event after supersession; data.coverage is the event summary plus state.

  • A null limit is not a division default. contracted_limit_lbs, applicable_limit_lbs and over_by_lbs are null whenever the contracted figure was never published, and limit_basis says which case applies: sourced (the source stated it), division_rule (standard division and known title status) or unsupported (catchweight, open weight, unknown division — over_by_lbs is always null). A source that says “missed weight” with no number gives result: "missed" with null weights: the miss is real, the arithmetic is not available.
  • Confirmation is not correction. When a higher-authority source supersedes an earlier reading at the same weight, is_confirmation is true and is_correction is false. is_correction is true only when the weight changed. coverage.confirmations and coverage.corrections count them separately.
  • Every reading is kept. supersedes_id chains a reading to the one it replaced; ?include=history returns every stored row newest first with supersession_kind (confirmation, correction, or null for an original reading) and superseded_weight_lbs.
  • Coverage state. live while any reading is pending, final once none are, and { state: "no_data" } when the card has no readings at all — so “nobody has weighed in yet” stays distinguishable from “not covered”.
  • Source priority. source_kind is official (the promotion), commission (the athletic commission) or news. Official outranks a report about it. ?since= filters on detected_at — when PropBetEdge saw the reading, not when the publisher dated it — so a back-dated source cannot slip past a poller.
  • Errors. 400 invalid_status, 400 invalid_since, 404 event_not_found.
GET /v1/ufc/events/1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52/weigh-ins?include=history Developer+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://proptechusa-ufc-api.sales-fd3.workers.dev/v1/ufc/events/1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52/weigh-ins?include=history
Response → a weigh-in deskschema example · captured Sep 14, 2026
Response JSON
GET /v1/ufc/events/1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52/weigh-ins?include=history
subset: 2 current readings, 2 history rows
{
  "ok": true,
  "data": {
    "event": {
      "id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
      "name": "Noche UFC: Silva vs. Delgado",
      "event_date": "2026-09-12"
    },
    "coverage": {
      "event_id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
      "event_name": "Noche UFC: Silva vs. Delgado",
      "event_date": "2026-09-12",
      "expected": 26,
      "weighed": 26,
      "made": 26,
      "missed": 0,
      "pending": 0,
      "withdrawn": 0,
      "cancelled": 0,
      "catchweights": 2,
      "corrections": 0,
      "limit_unsupported": 0,
      "last_source_update": "2026-09-11T19:42:02.22+00:00",
      "newest_source_published_at": "2026-09-11T14:23:12+00:00",
      "first_seen_at": "2026-09-11T19:42:02.22+00:00",
      "confirmations": 26,
      "state": "final"
    },
    "results": [
      {
        "id": "fd61469c-9da0-477b-b394-e3ef5cca9c30",
        "event_id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
        "event_name": "Noche UFC: Silva vs. Delgado",
        "event_date": "2026-09-12",
        "bout_id": "89e38074-f431-4bc3-b51e-fe42058e60d0",
        "fighter_id": "eed368a5-484b-412f-9d2c-a4fd6d24d019",
        "fighter_name": "Jean Silva",
        "fighter_espn_athlete_id": "5145766",
        "fighter_ufcstats_id": "52ef95b5860fb28c",
        "weight_class": "FEATHERWEIGHT",
        "weight_class_raw": "Featherweight",
        "is_womens": false,
        "is_title": false,
        "card_position": "main",
        "bout_order": 13,
        "bout_status": "complete",
        "contracted_limit_lbs": 145,
        "allowance_lbs": 1,
        "limit_basis": "division_rule",
        "applicable_limit_lbs": 146,
        "official_weight_lbs": 145,
        "attempt_number": 1,
        "result": "made",
        "over_by_lbs": null,
        "catchweight_lbs": null,
        "weighed_at": null,
        "source_url": "https://www.ufc.com/news/noche-ufc-silva-delgado-official-weigh-in-results",
        "source_name": "UFC.com",
        "source_kind": "official",
        "source_published_at": "2026-09-11T14:23:12+00:00",
        "detected_at": "2026-09-11T19:42:02.22+00:00",
        "first_seen_at": "2026-09-11T19:42:02.22+00:00",
        "last_seen_at": "2026-09-11T19:42:02.22+00:00",
        "raw_text": "Main Event - Featherweight Bout: Jean Silva (145) vs Jose Miguel Delgado (145.5)",
        "supersedes_id": "4d50d4e0-d883-4555-8e69-aeed3f1e7cfa",
        "is_correction": false,
        "is_confirmation": true,
        "superseded_weight_lbs": 145,
        "superseded_source_kind": "news",
        "superseded_source_name": "MMA Fighting"
      },
      {
        "id": "8534c094-0a1f-45fa-bbd5-5e8a82787ac9",
        "event_id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
        "event_name": "Noche UFC: Silva vs. Delgado",
        "event_date": "2026-09-12",
        "bout_id": "89e38074-f431-4bc3-b51e-fe42058e60d0",
        "fighter_id": "55ef67ad-88fe-4f7a-b4cb-dc9a10c12feb",
        "fighter_name": "Jose Miguel Delgado",
        "fighter_espn_athlete_id": "5223435",
        "fighter_ufcstats_id": "7d6ceff6747f2de2",
        "weight_class": "FEATHERWEIGHT",
        "weight_class_raw": "Featherweight",
        "is_womens": false,
        "is_title": false,
        "card_position": "main",
        "bout_order": 13,
        "bout_status": "complete",
        "contracted_limit_lbs": 145,
        "allowance_lbs": 1,
        "limit_basis": "division_rule",
        "applicable_limit_lbs": 146,
        "official_weight_lbs": 145.5,
        "attempt_number": 1,
        "result": "made",
        "over_by_lbs": null,
        "catchweight_lbs": null,
        "weighed_at": null,
        "source_url": "https://www.ufc.com/news/noche-ufc-silva-delgado-official-weigh-in-results",
        "source_name": "UFC.com",
        "source_kind": "official",
        "source_published_at": "2026-09-11T14:23:12+00:00",
        "detected_at": "2026-09-11T19:42:02.22+00:00",
        "first_seen_at": "2026-09-11T19:42:02.22+00:00",
        "last_seen_at": "2026-09-11T19:42:02.22+00:00",
        "raw_text": "Main Event - Featherweight Bout: Jean Silva (145) vs Jose Miguel Delgado (145.5)",
        "supersedes_id": "19226a36-877b-4528-b270-033890b91828",
        "is_correction": false,
        "is_confirmation": true,
        "superseded_weight_lbs": 145.5,
        "superseded_source_kind": "news",
        "superseded_source_name": "MMA Fighting"
      }
    ],
    "history": [
      {
        "id": "fd61469c-9da0-477b-b394-e3ef5cca9c30",
        "event_id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
        "bout_id": "89e38074-f431-4bc3-b51e-fe42058e60d0",
        "fighter_id": "eed368a5-484b-412f-9d2c-a4fd6d24d019",
        "fighter_name": "Jean Silva",
        "official_weight_lbs": 145,
        "attempt_number": 1,
        "result": "made",
        "over_by_lbs": null,
        "catchweight_lbs": null,
        "limit_basis": "division_rule",
        "contracted_limit_lbs": 145,
        "allowance_lbs": 1,
        "weighed_at": null,
        "source_url": "https://www.ufc.com/news/noche-ufc-silva-delgado-official-weigh-in-results",
        "source_name": "UFC.com",
        "source_kind": "official",
        "source_published_at": "2026-09-11T14:23:12+00:00",
        "detected_at": "2026-09-11T19:42:02.22+00:00",
        "first_seen_at": "2026-09-11T19:42:02.22+00:00",
        "last_seen_at": "2026-09-11T19:42:02.22+00:00",
        "supersedes_id": "4d50d4e0-d883-4555-8e69-aeed3f1e7cfa",
        "superseded_at": null,
        "correction_reason": "UFC.com (official) confirmed the MMA Fighting reading and supersedes it",
        "raw_text": "Main Event - Featherweight Bout: Jean Silva (145) vs Jose Miguel Delgado (145.5)",
        "occurred_at": "2026-09-11T14:23:12+00:00",
        "supersession_kind": "confirmation",
        "superseded_weight_lbs": 145
      },
      {
        "id": "4d50d4e0-d883-4555-8e69-aeed3f1e7cfa",
        "event_id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
        "bout_id": "89e38074-f431-4bc3-b51e-fe42058e60d0",
        "fighter_id": "eed368a5-484b-412f-9d2c-a4fd6d24d019",
        "fighter_name": "Jean Silva",
        "official_weight_lbs": 145,
        "attempt_number": 1,
        "result": "made",
        "over_by_lbs": null,
        "catchweight_lbs": null,
        "limit_basis": "division_rule",
        "contracted_limit_lbs": 145,
        "allowance_lbs": 1,
        "weighed_at": null,
        "source_url": "https://www.mmafighting.com/ufc/509613/noche-ufc-weigh-in-results-jean-silva-is-ready-for-noche-ufc-redemption",
        "source_name": "MMA Fighting",
        "source_kind": "news",
        "source_published_at": "2026-09-11T17:46:28+00:00",
        "detected_at": "2026-09-11T19:42:02.22+00:00",
        "first_seen_at": "2026-09-11T19:42:02.22+00:00",
        "last_seen_at": "2026-09-11T19:42:02.22+00:00",
        "supersedes_id": null,
        "superseded_at": "2026-09-11T19:42:02.22+00:00",
        "correction_reason": null,
        "raw_text": "Jean Silva (145) vs. Jose Miguel Delgado (145.5)",
        "occurred_at": "2026-09-11T17:46:28+00:00",
        "supersession_kind": null,
        "superseded_weight_lbs": null
      }
    ],
    "…": "24 more current readings and 50 more history rows omitted from this example"
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "1d9f04eb-8330-4a74-bc80-adc7e0167f12",
    "count": 26,
    "contract": "latest corrected reading per fighter; supersedes_id chains the earlier ones",
    "access_tier": "public"
  }
}

Official weigh-ins Source

coverage.state · final
26/26Weighed
26Made
0Missed
26Confirmed
0Corrected
2Catchweights
  • Jean Silvafeatherweight · division_rule 145limit 146 made confirmed
  • Jose Miguel Delgadofeatherweight · division_rule 145.5limit 146 made confirmed

The same fighter, as stored: the earlier reading is kept and the newer one is labelled.

Reading kept · news
145 lbMMA Fighting
2026-09-11 17:46 UTC
superseded, not deleted
Current reading · official
145 lbUFC.com
2026-09-11 14:23 UTC
is_confirmation: true · is_correction: false

Jean Silva: the official source verified the same 145 lb, so this is a confirmation. Nothing was corrected.

Missed weight across cards, newest first:

GET /v1/ufc/weigh-ins?status=missed&limit=3 Developer+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://proptechusa-ufc-api.sales-fd3.workers.dev/v1/ufc/weigh-ins?status=missed&limit=3
Missed weigh-ins
GET /v1/ufc/weigh-ins?status=missed&limit=3
{
  "ok": true,
  "data": [
    {
      "id": "f86e65aa-6f3a-4562-92d4-0e29bfd5963d",
      "event_id": "5d24f2f8-7127-4818-bdc4-965921eb166c",
      "event_name": "UFC Fight Night: Nurmagomedov vs. Song",
      "event_date": "2026-08-29",
      "bout_id": "e0f62210-277f-40ce-ab17-b889e223fba2",
      "fighter_id": "dc4e0cfd-672f-4fbb-9492-7d4604365a9d",
      "fighter_name": "Andre Lima",
      "fighter_espn_athlete_id": "5157669",
      "fighter_ufcstats_id": "b1f21ce050035d58",
      "weight_class": "FLYWEIGHT",
      "weight_class_raw": "Flyweight",
      "is_womens": false,
      "is_title": false,
      "card_position": "prelim",
      "bout_order": 7,
      "bout_status": "complete",
      "contracted_limit_lbs": 125,
      "allowance_lbs": 1,
      "limit_basis": "division_rule",
      "applicable_limit_lbs": 126,
      "official_weight_lbs": 127,
      "attempt_number": 1,
      "result": "missed",
      "over_by_lbs": 1,
      "catchweight_lbs": null,
      "weighed_at": null,
      "source_url": "https://www.ufc.com/news/official-weigh-results-ufc-shanghai-nurmagomedov-song-fight-night",
      "source_name": "UFC.com",
      "source_kind": "official",
      "source_published_at": null,
      "detected_at": "2026-09-08T21:08:05.730903+00:00",
      "first_seen_at": "2026-09-08T21:08:05.730903+00:00",
      "last_seen_at": "2026-09-08T21:08:05.730903+00:00",
      "raw_text": "Andre Lima (127)",
      "supersedes_id": null,
      "is_correction": false,
      "is_confirmation": false,
      "superseded_weight_lbs": null,
      "superseded_source_kind": null,
      "superseded_source_name": null
    },
    {
      "id": "91e56b40-d721-4fef-a280-dc2fd3b5a517",
      "event_id": "187505ab-636d-4f90-8d5f-d98ebfd1cd7c",
      "event_name": "Dana White's Contender Series: Season 10, Week 5",
      "event_date": "2026-09-08",
      "bout_id": "dfc2881c-1446-4243-9e2c-1fdb7a97f0a6",
      "fighter_id": "b12d5b52-61e9-48d2-a742-dfca4771e355",
      "fighter_name": "Christian Echols",
      "fighter_espn_athlete_id": "4816065",
      "fighter_ufcstats_id": null,
      "weight_class": "MIDDLEWEIGHT",
      "weight_class_raw": "Middleweight",
      "is_womens": false,
      "is_title": false,
      "card_position": "main",
      "bout_order": 3,
      "bout_status": "complete",
      "contracted_limit_lbs": 185,
      "allowance_lbs": 1,
      "limit_basis": "division_rule",
      "applicable_limit_lbs": 186,
      "official_weight_lbs": 189,
      "attempt_number": 1,
      "result": "missed",
      "over_by_lbs": 3,
      "catchweight_lbs": null,
      "weighed_at": null,
      "source_url": "https://www.ufc.com/news/official-weigh-in-results-dana-whites-contender-series-season-10",
      "source_name": "UFC.com",
      "source_kind": "official",
      "source_published_at": "2026-09-07T17:00:00+00:00",
      "detected_at": "2026-09-08T21:01:04.898799+00:00",
      "first_seen_at": "2026-09-08T21:01:04.898799+00:00",
      "last_seen_at": "2026-09-08T21:01:04.898799+00:00",
      "raw_text": "Martin Kozak (185) vs Christian Echols (189); Echols weighed in above the middleweight limit.",
      "supersedes_id": null,
      "is_correction": false,
      "is_confirmation": false,
      "superseded_weight_lbs": null,
      "superseded_source_kind": null,
      "superseded_source_name": null
    },
    {
      "id": "a1718342-c794-4547-87c5-78b286126400",
      "event_id": "5d24f2f8-7127-4818-bdc4-965921eb166c",
      "event_name": "UFC Fight Night: Nurmagomedov vs. Song",
      "event_date": "2026-08-29",
      "bout_id": "87fc9911-6d2b-43cd-b6c6-7e2de44aac97",
      "fighter_id": "8f8beea2-d4a9-4871-aa23-471ffd264552",
      "fighter_name": "Jingnan Xiong",
      "fighter_espn_athlete_id": "3956295",
      "fighter_ufcstats_id": "2cdb479a0ef0ee1d",
      "weight_class": "STRAWWEIGHT",
      "weight_class_raw": "Women's Strawweight",
      "is_womens": true,
      "is_title": false,
      "card_position": "prelim",
      "bout_order": 2,
      "bout_status": "complete",
      "contracted_limit_lbs": 115,
      "allowance_lbs": 1,
      "limit_basis": "division_rule",
      "applicable_limit_lbs": 116,
      "official_weight_lbs": 117,
      "attempt_number": 1,
      "result": "missed",
      "over_by_lbs": 1,
      "catchweight_lbs": null,
      "weighed_at": null,
      "source_url": "https://www.ufc.com/news/official-weigh-results-ufc-shanghai-nurmagomedov-song-fight-night",
      "source_name": "UFC.com",
      "source_kind": "official",
      "source_published_at": null,
      "detected_at": "2026-09-08T21:08:05.730903+00:00",
      "first_seen_at": "2026-09-08T21:08:05.730903+00:00",
      "last_seen_at": "2026-09-08T21:08:05.730903+00:00",
      "raw_text": "Jingnan Xiong (117)",
      "supersedes_id": null,
      "is_correction": false,
      "is_confirmation": false,
      "superseded_weight_lbs": null,
      "superseded_source_kind": null,
      "superseded_source_name": null
    }
  ],
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "66c6fe8d-da8a-4dcd-b913-2b1ba3a24578",
    "count": 3,
    "total": 4,
    "limit": 3,
    "offset": 0,
    "contract": "null contracted_limit_lbs / over_by_lbs means the limit was not published, not that a division default applies",
    "access_tier": "public"
  }
}

Production example

See how this is used in a real product: The weigh-in desk on PropBetEdge UFC →

The production application renders these rows directly, including the confirmation trail and a delta it deliberately cannot compute when the limit was never published.

Availability and card changes Developer+ Source

GET /v1/ufc/injuries?active=true&state=&status_type=&fighter_id=&event_id= is one row per individually sourced availability change, newest first by occurred_at. GET /v1/ufc/events/{id}/card-changes is the same events scoped to one card. GET /v1/ufc/fighters/{id}/status is one fighter's current availability plus the sourced history behind it.

  • Never an inferred diagnosis. injury_type, body_part and injury_side are null unless the cited source names them in words, and any non-null value ships with clinical_quote, the sentence that licensed it. “Out with an injury” is status_type: "injury" with injury_type: null; render that as an unknown cause. Filling the gap yourself makes a medical claim about a named person that no source made.
  • State, not deletion. state is active, resolved (a later sourced event ended it — see resolved_by_event_id) or expired (the card it concerned has passed with nothing resolving it: history, not a present-tense claim).
  • Null status is not a clearance. On /status, current is the most recent active event of a type that means unavailable, or null when nothing is on file. current_note says so in words: the absence of a report is not a medical clearance.
  • Empty is normal. A card with nothing changed returns changes: []. That is the normal state of a card, not an error.
  • Types. injury, illness, withdrawal, replacement, suspension, visa_travel, weight_miss, return, cleared, other. source_kind: "official" marks the promotion amending its own card, which outranks a report about it.
  • Errors. 400 invalid_state, 400 invalid_status_type, 404 event_not_found, 404 fighter_not_found.
GET /v1/ufc/injuries?active=true&limit=5 Developer+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://proptechusa-ufc-api.sales-fd3.workers.dev/v1/ufc/injuries?active=true&limit=5
Response → an availability deskschema example · captured Sep 14, 2026
Response JSON
GET /v1/ufc/injuries?active=true&limit=5
{
  "ok": true,
  "data": [
    {
      "id": "469db6dc-f744-42ad-b603-1adee4166fd7",
      "fighter_id": "4008721e-66c0-429e-b904-51d0d0a7e0d0",
      "fighter_name": "Valentina Shevchenko",
      "fighter_espn_athlete_id": "2554705",
      "fighter_ufcstats_id": "132deb59abae64b1",
      "record_w": 26,
      "record_l": 4,
      "record_d": 1,
      "status_type": "injury",
      "status_detail": "injury that forced Shevchenko to vacate flyweight title",
      "state": "active",
      "event_id": null,
      "event_name": null,
      "event_date": null,
      "bout_id": null,
      "replacement_fighter_id": null,
      "replacement_fighter_name": null,
      "replaced_fighter_id": null,
      "replaced_fighter_name": null,
      "injury_type": null,
      "body_part": null,
      "injury_side": null,
      "clinical_quote": null,
      "expected_return_at": null,
      "expected_return_note": null,
      "source_url": "https://www.mmafighting.com/ufc/509041/valentina-shevchenko-coach-reveals-injury-that-forced-shevchenko-to-vacate-flyweight-title",
      "source_name": "MMA Fighting",
      "source_kind": "news",
      "source_published_at": "2026-09-07T17:00:00+00:00",
      "detected_at": "2026-09-08T20:59:30.211537+00:00",
      "effective_at": null,
      "confidence": 0.7,
      "resolved_by_event_id": null,
      "supersedes_event_id": null,
      "occurred_at": "2026-09-07T17:00:00+00:00"
    },
    {
      "id": "2da5254f-cdb6-42ce-b18d-e30b96f9dfa5",
      "fighter_id": "b12d5b52-61e9-48d2-a742-dfca4771e355",
      "fighter_name": "Christian Echols",
      "fighter_espn_athlete_id": "4816065",
      "fighter_ufcstats_id": null,
      "record_w": 8,
      "record_l": 4,
      "record_d": 0,
      "status_type": "weight_miss",
      "status_detail": "weighed in above the middleweight limit",
      "state": "active",
      "event_id": "187505ab-636d-4f90-8d5f-d98ebfd1cd7c",
      "event_name": "Dana White's Contender Series: Season 10, Week 5",
      "event_date": "2026-09-08",
      "bout_id": "dfc2881c-1446-4243-9e2c-1fdb7a97f0a6",
      "replacement_fighter_id": null,
      "replacement_fighter_name": null,
      "replaced_fighter_id": null,
      "replaced_fighter_name": null,
      "injury_type": null,
      "body_part": null,
      "injury_side": null,
      "clinical_quote": null,
      "expected_return_at": null,
      "expected_return_note": null,
      "source_url": "https://www.ufc.com/news/official-weigh-in-results-dana-whites-contender-series-season-10",
      "source_name": "UFC.com",
      "source_kind": "official",
      "source_published_at": "2026-09-07T17:00:00+00:00",
      "detected_at": "2026-09-08T21:01:04.898799+00:00",
      "effective_at": "2026-09-07T17:00:00+00:00",
      "confidence": 1,
      "resolved_by_event_id": null,
      "supersedes_event_id": null,
      "occurred_at": "2026-09-07T17:00:00+00:00"
    },
    {
      "id": "62f67f08-e771-43e0-a828-9ddb57b25527",
      "fighter_id": "329ef6dc-151c-4b47-9a1d-52552c862f94",
      "fighter_name": "Carlos Ulberg",
      "fighter_espn_athlete_id": "4695736",
      "fighter_ufcstats_id": "9014c02eff8b3d62",
      "record_w": 15,
      "record_l": 1,
      "record_d": 0,
      "status_type": "injury",
      "status_detail": "recovering from an ACL tear",
      "state": "active",
      "event_id": null,
      "event_name": null,
      "event_date": null,
      "bout_id": null,
      "replacement_fighter_id": null,
      "replacement_fighter_name": null,
      "replaced_fighter_id": null,
      "replaced_fighter_name": null,
      "injury_type": "acl tear",
      "body_part": null,
      "injury_side": null,
      "clinical_quote": "recovering from an ACL tear",
      "expected_return_at": null,
      "expected_return_note": "early next year",
      "source_url": "https://www.espn.com/mma/story/_/id/49743588/injured-ufc-champion-ulberg-hopes-return-early-next-year",
      "source_name": "ESPN",
      "source_kind": "news",
      "source_published_at": "2026-08-27T18:30:23+00:00",
      "detected_at": "2026-09-08T20:59:30.211537+00:00",
      "effective_at": null,
      "confidence": 0.75,
      "resolved_by_event_id": null,
      "supersedes_event_id": null,
      "occurred_at": "2026-08-27T18:30:23+00:00"
    }
  ],
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "7518fdb3-29e8-46f7-ae60-ac50d41c70a5",
    "count": 3,
    "total": 3,
    "limit": 5,
    "offset": 0,
    "access_tier": "public"
  }
}
FighterTypeWhat the source saidCause namedSource
Valentina Shevchenkoinjuryinjury that forced Shevchenko to vacate flyweight titlenullMMA Fighting news
Christian Echolsweight missweighed in above the middleweight limitnullUFC.com official
Carlos Ulberginjuryrecovering from an ACL tearacl tearESPN news

One fighter, with nothing on file — the truthful shape of “no news”:

GET /v1/ufc/fighters/{id}/status
{
  "ok": true,
  "data": {
    "fighter": {
      "id": "eed368a5-484b-412f-9d2c-a4fd6d24d019",
      "name": "Jean Silva"
    },
    "current": null,
    "current_note": "No availability event on file. This is the absence of a report, not a confirmation of fitness.",
    "history": []
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "14d45b43-bd5c-447e-a093-2cb79b7e5b78",
    "count": 0,
    "access_tier": "public"
  }
}

One card's changes (empty on a card where nothing has changed):

GET /v1/ufc/events/{id}/card-changes
{
  "ok": true,
  "data": {
    "event": {
      "id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
      "name": "Noche UFC: Silva vs. Delgado",
      "event_date": "2026-09-12"
    },
    "changes": []
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "f1f376b9-ae7e-4885-a086-a84bd18d9fd1",
    "count": 0,
    "access_tier": "public"
  }
}

Production example

See how this is used in a real product: Injuries and availability on PropBetEdge UFC →

The production application lists the same sourced events, and shows an unnamed cause as unknown rather than substituting one.

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
{
  "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"
}

Video API Developer+ Third-party link

GET /v1/ufc/videos returns published official video metadata newest first, filterable by event_id, fighter_id, bout_id, type and limit. Per-entity feeds are /v1/ufc/events/{id}/videos, /v1/ufc/fighters/{id}/videos and /v1/ufc/bouts/{id}/videos.

  • Metadata only. Rows carry the provider, the provider video id, the official URL, embed_url on the provider's privacy-enhanced domain, thumbnail, title, channel, published_at, duration_sec, video_type and links to event, bout and fighters. The footage is not hosted, rehosted or redistributed, and API access conveys no rights to it.
  • Link status. Only link_status = published rows are ever returned; rows in review or rejected never leave the database, so anything you receive is cleared to link.
  • Embed availability varies. Check embeddable before building a player. When it is false, link out to url instead — never render an iframe you were not told would load.
  • Language is not a field. The canonical feed does not carry one, so a content language must be inferred from the channel and title if you need it. The channels in the corpus today are UFC and ESPN MMA (English), UFC Espanol (Spanish) and UFC Brasil (Portuguese).
  • Availability. 503 videos_not_available while the video store is not present.
GET /v1/ufc/videos?event_id=845c3b2c-c201-4873-91eb-f5115d65b549&limit=20 Developer+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://proptechusa-ufc-api.sales-fd3.workers.dev/v1/ufc/videos?event_id=845c3b2c-c201-4873-91eb-f5115d65b549&limit=20
Response → the fight-week deskschema example · captured Sep 30, 2026
Response JSON
GET /v1/ufc/videos?event_id=845c3b2c-c201-4873-91eb-f5115d65b549&limit=20
subset: 2 of the returned rows
{
  "ok": true,
  "data": [
    {
      "id": "c7711b8c-59f1-4f81-95e2-53dd1d5cf40f",
      "provider": "youtube",
      "provider_video_id": "tnokmYNg7Hk",
      "url": "https://www.youtube.com/watch?v=tnokmYNg7Hk",
      "embed_url": "https://www.youtube-nocookie.com/embed/tnokmYNg7Hk",
      "thumbnail_url": "https://i1.ytimg.com/vi/tnokmYNg7Hk/hqdefault.jpg",
      "title": "UFC 332: Embedded | Episódio 3",
      "published_at": "2026-09-30T21:00:05+00:00",
      "duration_sec": null,
      "embeddable": true,
      "live_broadcast_state": null,
      "video_type": "embedded_episode",
      "video_type_label": "Embedded",
      "channel": {
        "id": "UCk8XGxi7fsTqQQRVq9LSraw",
        "name": "UFC Brasil",
        "verified": true
      },
      "links": {
        "event_id": "845c3b2c-c201-4873-91eb-f5115d65b549",
        "bout_id": null,
        "article_id": null,
        "fighter_ids": [
          "3e0936d5-cf48-41ad-83f5-ca006779a5cf",
          "56d860de-6ba5-4e97-a889-2129951e52cf",
          "8d9fbd4b-873f-47ff-831c-7442159df05e",
          "c66c4189-2a2e-4a64-a688-d2b77e7ee01c",
          "f7b46146-4645-4328-9bd8-d4735abbb8f7",
          "fe0355cc-5366-44f9-8ea3-457744bde3c7"
        ]
      },
      "resolver_confidence": "medium",
      "attribution": "YouTube · UFC Brasil",
      "captured_at": "2026-09-30T21:13:44.636302+00:00",
      "updated_at": "2026-09-30T21:13:38.209+00:00"
    },
    {
      "id": "883411aa-94fc-4e2a-a685-f65e2ea92833",
      "provider": "youtube",
      "provider_video_id": "MrXcB62L-54",
      "url": "https://www.youtube.com/watch?v=MrXcB62L-54",
      "embed_url": "https://www.youtube-nocookie.com/embed/MrXcB62L-54",
      "thumbnail_url": "https://i2.ytimg.com/vi/MrXcB62L-54/hqdefault.jpg",
      "title": "I Am Going To Dominate Her | UFC 332 Media Day",
      "published_at": "2026-09-30T20:49:35+00:00",
      "duration_sec": null,
      "embeddable": true,
      "live_broadcast_state": null,
      "video_type": "media_day",
      "video_type_label": "Media day",
      "channel": {
        "id": "UCvgfXK4nTYKudb0rFR6noLA",
        "name": "UFC",
        "verified": true
      },
      "links": {
        "event_id": "845c3b2c-c201-4873-91eb-f5115d65b549",
        "bout_id": null,
        "article_id": null,
        "fighter_ids": [
          "56d860de-6ba5-4e97-a889-2129951e52cf",
          "c66c4189-2a2e-4a64-a688-d2b77e7ee01c"
        ]
      },
      "resolver_confidence": "medium",
      "attribution": "YouTube · UFC",
      "captured_at": "2026-09-30T21:13:43.210091+00:00",
      "updated_at": "2026-09-30T21:13:38.209+00:00"
    }
  ],
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "c30d2b52-16b8-43b3-8c5b-7bf597bf3ffc",
    "count": 40,
    "total": 63,
    "limit": 40,
    "type": null,
    "fighter_id": null,
    "event_id": "845c3b2c-c201-4873-91eb-f5115d65b549",
    "bout_id": null,
    "published_only": true,
    "access_tier": "public"
  }
}

Selected for UFC 332: Silva vs. Wang · fight-week phase early · 60 published clips, 48 on this card · 27 EN · 8 ES · 25 PT · 60 embeddable

  1. Embedded EN UFC 332 Embedded: Vlog Series - Episode 3
    UFC · 2026-09-30 · embeddable
  2. Embedded EN UFC 332 Embedded: Vlog Series - Episode 2
    UFC · 2026-09-29 · embeddable
  3. Embedded EN UFC 332 Embedded: Vlog Series - Episode 1
    UFC · 2026-09-28 · embeddable
  4. Fight preview EN UFC 332: Silva vs Cong - October 3rd | Fight Promo
    UFC · 2026-09-30 · embeddable
  5. Media day EN I Am Going To Dominate Her | UFC 332 Media Day
    UFC · 2026-09-30 · embeddable

Production example

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

The production application renders the same feed as its fight-week video desk, with the same selection policy.

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://proptechusa-ufc-api.sales-fd3.workers.dev/v1/ufc/fighters/ec94d296-2db3-4e0d-be6a-46de4f480672/dna
Response excerpt → Fight DNA panelschema example · captured Sep 14, 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-14",
      "definition_version": 1,
      "sample_bouts": 25,
      "sample_completed_bouts": 25,
      "sample_stat_bouts": 25,
      "sample_rounds": 84,
      "sample_seconds": 24399,
      "coverage_status": "high",
      "metrics": {
        "sig_landed_per_min": {
          "unit": "per_min",
          "value": 5.9757,
          "origin": "pbe_derived",
          "numerator": 2430,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_landed_per_min",
          "denominator": 24399,
          "sample_bouts": 25,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "sig_absorbed_per_min": {
          "unit": "per_min",
          "value": 4.5297,
          "origin": "pbe_derived",
          "numerator": 1842,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_absorbed_per_min",
          "denominator": 24399,
          "sample_bouts": 25,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "sig_accuracy": {
          "unit": "ratio",
          "value": 0.425,
          "origin": "pbe_derived",
          "numerator": 2430,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_accuracy",
          "denominator": 5717,
          "sample_bouts": 25,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "td_attempts_per_15": {
          "unit": "per_15",
          "value": 1.0697,
          "origin": "pbe_derived",
          "numerator": 29,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "td_attempts_per_15",
          "denominator": 24399,
          "sample_bouts": 25,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "finish_rate": {
          "unit": "ratio",
          "value": 0.3333,
          "origin": "pbe_derived",
          "numerator": 6,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "finish_rate",
          "denominator": 18,
          "sample_bouts": 18,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        },
        "pace_retention_r3_vs_r1": {
          "unit": "ratio",
          "value": 1.1202,
          "origin": "pbe_derived",
          "numerator": 13.9542,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "pace_retention_r3_vs_r1",
          "denominator": 12.4569,
          "sample_bouts": 25,
          "sample_rounds": 44,
          "sample_seconds": 12757,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        }
      },
      "stance_splits": {
        "SOUTHPAW": {
          "record": {
            "d": 0,
            "l": 0,
            "w": 3,
            "nc": 0,
            "appearances": 3
          },
          "ko_rate": {
            "unit": "ratio",
            "value": 0,
            "origin": "pbe_derived",
            "numerator": 0,
            "as_of_date": "2026-09-14",
            "confidence": "low",
            "metric_key": "stance_ko_rate",
            "denominator": 3,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "high",
            "source_families": [
              "espn",
              "ufcstats"
            ],
            "definition_version": 1
          },
          "sub_rate": {
            "unit": "ratio",
            "value": 0.3333,
            "origin": "pbe_derived",
            "numerator": 1,
            "as_of_date": "2026-09-14",
            "confidence": "low",
            "metric_key": "stance_sub_rate",
            "denominator": 3,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "high",
            "source_families": [
              "espn",
              "ufcstats"
            ],
            "definition_version": 1
          },
          "kd_per_15": {
            "unit": "per_15",
            "value": 0,
            "origin": "pbe_derived",
            "numerator": 0,
            "as_of_date": "2026-09-14",
            "confidence": "medium",
            "metric_key": "stance_kd_rate_15",
            "denominator": 2073,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "low",
            "source_families": [
              "ufcstats"
            ],
            "definition_version": 1
          },
          "confidence": "low",
          "stat_bouts": 3,
          "finish_rate": {
            "unit": "ratio",
            "value": 0.3333,
            "origin": "pbe_derived",
            "numerator": 1,
            "as_of_date": "2026-09-14",
            "confidence": "low",
            "metric_key": "stance_finish_rate",
            "denominator": 3,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "high",
            "source_families": [
              "espn",
              "ufcstats"
            ],
            "definition_version": 1
          },
          "ko_tko_wins": 0,
          "stat_rounds": 7,
          "decision_wins": 2,
          "record_metric": {
            "unit": "record",
            "value": {
              "d": 0,
              "l": 0,
              "w": 3,
              "nc": 0,
              "appearances": 3
            },
            "origin": "pbe_derived",
            "numerator": null,
            "as_of_date": "2026-09-14",
            "confidence": "low",
            "metric_key": "stance_record",
            "denominator": null,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "high",
            "source_families": [
              "espn"
            ],
            "definition_version": 1
          },
          "submission_wins": 1,
          "observed_seconds": 2073,
          "sig_diff_per_min": {
            "unit": "per_min",
            "value": 2.1418,
            "origin": "pbe_derived",
            "numerator": 74,
            "as_of_date": "2026-09-14",
            "confidence": "medium",
            "metric_key": "stance_sig_diff_per_min",
            "denominator": 2073,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "low",
            "source_families": [
              "ufcstats"
            ],
            "definition_version": 1
          },
          "td_landed_per_15": {
            "unit": "per_15",
            "value": 0.4342,
            "origin": "pbe_derived",
            "numerator": 1,
            "as_of_date": "2026-09-14",
            "confidence": "medium",
            "metric_key": "stance_td_rate_15",
            "denominator": 2073,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "low",
            "source_families": [
              "ufcstats"
            ],
            "definition_version": 1
          }
        },
        "open": {
          "record": {
            "d": 0,
            "l": 0,
            "w": 3,
            "nc": 0,
            "appearances": 3
          },
          "ko_rate": {
            "unit": "ratio",
            "value": 0,
            "origin": "pbe_derived",
            "numerator": 0,
            "as_of_date": "2026-09-14",
            "confidence": "low",
            "metric_key": "stance_ko_rate",
            "denominator": 3,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "high",
            "source_families": [
              "espn",
              "ufcstats"
            ],
            "definition_version": 1
          },
          "sub_rate": {
            "unit": "ratio",
            "value": 0.3333,
            "origin": "pbe_derived",
            "numerator": 1,
            "as_of_date": "2026-09-14",
            "confidence": "low",
            "metric_key": "stance_sub_rate",
            "denominator": 3,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "high",
            "source_families": [
              "espn",
              "ufcstats"
            ],
            "definition_version": 1
          },
          "kd_per_15": {
            "unit": "per_15",
            "value": 0,
            "origin": "pbe_derived",
            "numerator": 0,
            "as_of_date": "2026-09-14",
            "confidence": "medium",
            "metric_key": "stance_kd_rate_15",
            "denominator": 2073,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "low",
            "source_families": [
              "ufcstats"
            ],
            "definition_version": 1
          },
          "confidence": "low",
          "stat_bouts": 3,
          "finish_rate": {
            "unit": "ratio",
            "value": 0.3333,
            "origin": "pbe_derived",
            "numerator": 1,
            "as_of_date": "2026-09-14",
            "confidence": "low",
            "metric_key": "stance_finish_rate",
            "denominator": 3,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "high",
            "source_families": [
              "espn",
              "ufcstats"
            ],
            "definition_version": 1
          },
          "ko_tko_wins": 0,
          "stat_rounds": 7,
          "decision_wins": 2,
          "record_metric": {
            "unit": "record",
            "value": {
              "d": 0,
              "l": 0,
              "w": 3,
              "nc": 0,
              "appearances": 3
            },
            "origin": "pbe_derived",
            "numerator": null,
            "as_of_date": "2026-09-14",
            "confidence": "low",
            "metric_key": "open_stance_record",
            "denominator": null,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "high",
            "source_families": [
              "espn"
            ],
            "definition_version": 1
          },
          "submission_wins": 1,
          "observed_seconds": 2073,
          "sig_diff_per_min": {
            "unit": "per_min",
            "value": 2.1418,
            "origin": "pbe_derived",
            "numerator": 74,
            "as_of_date": "2026-09-14",
            "confidence": "medium",
            "metric_key": "stance_sig_diff_per_min",
            "denominator": 2073,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "low",
            "source_families": [
              "ufcstats"
            ],
            "definition_version": 1
          },
          "td_landed_per_15": {
            "unit": "per_15",
            "value": 0.4342,
            "origin": "pbe_derived",
            "numerator": 1,
            "as_of_date": "2026-09-14",
            "confidence": "medium",
            "metric_key": "stance_td_rate_15",
            "denominator": 2073,
            "sample_bouts": 3,
            "sample_rounds": 7,
            "sample_seconds": 2073,
            "coverage_status": "low",
            "source_families": [
              "ufcstats"
            ],
            "definition_version": 1
          }
        },
        "…": "other stances omitted from this example"
      },
      "round_profile": {
        "rounds": {
          "1": {
            "rounds": 25,
            "seconds": 7249,
            "sig_att_per_min": {
              "unit": "per_min",
              "value": 12.4569,
              "origin": "pbe_derived",
              "numerator": 1505,
              "as_of_date": "2026-09-14",
              "confidence": "high",
              "metric_key": "r1_sig_attempts_per_min",
              "denominator": 7249,
              "sample_bouts": 25,
              "sample_rounds": 25,
              "sample_seconds": 7249,
              "coverage_status": "high",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "absorbed_per_min": {
              "unit": "per_min",
              "value": 4.0309,
              "origin": "pbe_derived",
              "numerator": 487,
              "as_of_date": "2026-09-14",
              "confidence": "high",
              "metric_key": "r1_sig_absorbed_per_min",
              "denominator": 7249,
              "sample_bouts": 25,
              "sample_rounds": 25,
              "sample_seconds": 7249,
              "coverage_status": "high",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "sig_landed_per_min": {
              "unit": "per_min",
              "value": 4.7262,
              "origin": "pbe_derived",
              "numerator": 571,
              "as_of_date": "2026-09-14",
              "confidence": "high",
              "metric_key": "r1_sig_landed_per_min",
              "denominator": 7249,
              "sample_bouts": 25,
              "sample_rounds": 25,
              "sample_seconds": 7249,
              "coverage_status": "high",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            }
          },
          "2": {
            "rounds": 22,
            "seconds": 6242,
            "sig_att_per_min": {
              "unit": "per_min",
              "value": 13.7744,
              "origin": "pbe_derived",
              "numerator": 1433,
              "as_of_date": "2026-09-14",
              "confidence": "medium",
              "metric_key": "r2_sig_attempts_per_min",
              "denominator": 6242,
              "sample_bouts": 22,
              "sample_rounds": 22,
              "sample_seconds": 6242,
              "coverage_status": "medium",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "absorbed_per_min": {
              "unit": "per_min",
              "value": 4.239,
              "origin": "pbe_derived",
              "numerator": 441,
              "as_of_date": "2026-09-14",
              "confidence": "medium",
              "metric_key": "r2_sig_absorbed_per_min",
              "denominator": 6242,
              "sample_bouts": 22,
              "sample_rounds": 22,
              "sample_seconds": 6242,
              "coverage_status": "medium",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "sig_landed_per_min": {
              "unit": "per_min",
              "value": 5.8635,
              "origin": "pbe_derived",
              "numerator": 610,
              "as_of_date": "2026-09-14",
              "confidence": "medium",
              "metric_key": "r2_sig_landed_per_min",
              "denominator": 6242,
              "sample_bouts": 22,
              "sample_rounds": 22,
              "sample_seconds": 6242,
              "coverage_status": "medium",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            }
          },
          "3": {
            "rounds": 19,
            "seconds": 5508,
            "sig_att_per_min": {
              "unit": "per_min",
              "value": 13.9542,
              "origin": "pbe_derived",
              "numerator": 1281,
              "as_of_date": "2026-09-14",
              "confidence": "medium",
              "metric_key": "r3_sig_attempts_per_min",
              "denominator": 5508,
              "sample_bouts": 19,
              "sample_rounds": 19,
              "sample_seconds": 5508,
              "coverage_status": "medium",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "absorbed_per_min": {
              "unit": "per_min",
              "value": 4.4009,
              "origin": "pbe_derived",
              "numerator": 404,
              "as_of_date": "2026-09-14",
              "confidence": "medium",
              "metric_key": "r3_sig_absorbed_per_min",
              "denominator": 5508,
              "sample_bouts": 19,
              "sample_rounds": 19,
              "sample_seconds": 5508,
              "coverage_status": "medium",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "sig_landed_per_min": {
              "unit": "per_min",
              "value": 6.024,
              "origin": "pbe_derived",
              "numerator": 553,
              "as_of_date": "2026-09-14",
              "confidence": "medium",
              "metric_key": "r3_sig_landed_per_min",
              "denominator": 5508,
              "sample_bouts": 19,
              "sample_rounds": 19,
              "sample_seconds": 5508,
              "coverage_status": "medium",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            }
          },
          "4": {
            "rounds": 9,
            "seconds": 2700,
            "sig_att_per_min": {
              "unit": "per_min",
              "value": 15.7778,
              "origin": "pbe_derived",
              "numerator": 710,
              "as_of_date": "2026-09-14",
              "confidence": "medium",
              "metric_key": "r4_sig_attempts_per_min",
              "denominator": 2700,
              "sample_bouts": 9,
              "sample_rounds": 9,
              "sample_seconds": 2700,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "absorbed_per_min": {
              "unit": "per_min",
              "value": 5.2667,
              "origin": "pbe_derived",
              "numerator": 237,
              "as_of_date": "2026-09-14",
              "confidence": "medium",
              "metric_key": "r4_sig_absorbed_per_min",
              "denominator": 2700,
              "sample_bouts": 9,
              "sample_rounds": 9,
              "sample_seconds": 2700,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "sig_landed_per_min": {
              "unit": "per_min",
              "value": 7.3333,
              "origin": "pbe_derived",
              "numerator": 330,
              "as_of_date": "2026-09-14",
              "confidence": "medium",
              "metric_key": "r4_sig_landed_per_min",
              "denominator": 2700,
              "sample_bouts": 9,
              "sample_rounds": 9,
              "sample_seconds": 2700,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            }
          },
          "5": {
            "rounds": 9,
            "seconds": 2700,
            "sig_att_per_min": {
              "unit": "per_min",
              "value": 17.5111,
              "origin": "pbe_derived",
              "numerator": 788,
              "as_of_date": "2026-09-14",
              "confidence": "medium",
              "metric_key": "r5_sig_attempts_per_min",
              "denominator": 2700,
              "sample_bouts": 9,
              "sample_rounds": 9,
              "sample_seconds": 2700,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "absorbed_per_min": {
              "unit": "per_min",
              "value": 6.0667,
              "origin": "pbe_derived",
              "numerator": 273,
              "as_of_date": "2026-09-14",
              "confidence": "medium",
              "metric_key": "r5_sig_absorbed_per_min",
              "denominator": 2700,
              "sample_bouts": 9,
              "sample_rounds": 9,
              "sample_seconds": 2700,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            },
            "sig_landed_per_min": {
              "unit": "per_min",
              "value": 8.1333,
              "origin": "pbe_derived",
              "numerator": 366,
              "as_of_date": "2026-09-14",
              "confidence": "medium",
              "metric_key": "r5_sig_landed_per_min",
              "denominator": 2700,
              "sample_bouts": 9,
              "sample_rounds": 9,
              "sample_seconds": 2700,
              "coverage_status": "low",
              "source_families": [
                "ufcstats"
              ],
              "definition_version": 1
            }
          }
        },
        "pace_retention_r2_vs_r1": {
          "unit": "ratio",
          "value": 1.1058,
          "origin": "pbe_derived",
          "numerator": 13.7744,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "pace_retention_r2_vs_r1",
          "denominator": 12.4569,
          "sample_bouts": 25,
          "sample_rounds": 47,
          "sample_seconds": 13491,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "pace_retention_r3_vs_r1": {
          "unit": "ratio",
          "value": 1.1202,
          "origin": "pbe_derived",
          "numerator": 13.9542,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "pace_retention_r3_vs_r1",
          "denominator": 12.4569,
          "sample_bouts": 25,
          "sample_rounds": 44,
          "sample_seconds": 12757,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "championship_round_delta": {
          "unit": "per_min",
          "value": 3.3205,
          "origin": "pbe_derived",
          "numerator": 16.6444,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "championship_round_delta",
          "denominator": 13.3239,
          "sample_bouts": 25,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "defensive_drift_r3_vs_r1": {
          "unit": "per_min",
          "value": 0.37,
          "origin": "pbe_derived",
          "numerator": 4.4009,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "defensive_drift_r3_vs_r1",
          "denominator": 4.0309,
          "sample_bouts": 25,
          "sample_rounds": 44,
          "sample_seconds": 12757,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        }
      },
      "finish_profile": {
        "finish_rate": {
          "unit": "ratio",
          "value": 0.3333,
          "origin": "pbe_derived",
          "numerator": 6,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "finish_rate",
          "denominator": 18,
          "sample_bouts": 18,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        },
        "finished_by": {
          "ko_tko": 2,
          "submission": 0
        },
        "ko_finish_rate": {
          "unit": "ratio",
          "value": 0.2778,
          "origin": "pbe_derived",
          "numerator": 5,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "ko_finish_rate",
          "denominator": 18,
          "sample_bouts": 18,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        },
        "finish_time_median_sec": {
          "unit": "seconds",
          "value": 525,
          "origin": "pbe_derived",
          "numerator": null,
          "as_of_date": "2026-09-14",
          "confidence": "medium",
          "metric_key": "finish_time_median_sec",
          "denominator": null,
          "sample_bouts": 6,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        },
        "submission_finish_rate": {
          "unit": "ratio",
          "value": 0.0556,
          "origin": "pbe_derived",
          "numerator": 1,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "submission_finish_rate",
          "denominator": 18,
          "sample_bouts": 18,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        },
        "finish_round_distribution": {
          "unit": "distribution",
          "value": {
            "total": 6,
            "buckets": {
              "1": 1,
              "2": 3,
              "3": 2,
              "4": 0,
              "5": 0
            }
          },
          "origin": "pbe_derived",
          "numerator": 6,
          "as_of_date": "2026-09-14",
          "confidence": "medium",
          "metric_key": "finish_round_distribution",
          "denominator": 18,
          "sample_bouts": 6,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        },
        "finished_by_round_distribution": {
          "unit": "distribution",
          "value": {
            "total": 2,
            "buckets": {
              "1": 2,
              "2": 0,
              "3": 0,
              "4": 0,
              "5": 0
            }
          },
          "origin": "pbe_derived",
          "numerator": 2,
          "as_of_date": "2026-09-14",
          "confidence": "low",
          "metric_key": "finished_by_round_distribution",
          "denominator": 7,
          "sample_bouts": 2,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "coverage_status": "high",
          "source_families": [
            "espn",
            "ufcstats"
          ],
          "definition_version": 1
        }
      },
      "context_splits": {
        "…": "omitted from this example"
      },
      "position_profile": {},
      "archetype": null,
      "provenance": {
        "bouts": [
          "486ddaee-33d2-4902-87fa-fc2037761abb",
          "889487e2-ce77-42b7-92bb-a6eab7e76a3c"
        ],
        "record": {
          "d": 0,
          "l": 7,
          "w": 18,
          "nc": 0,
          "appearances": 25
        },
        "builder": "ufc-intelligence/build_fight_dna@v1.1",
        "watermark": {
          "bouts": 25,
          "stats_captured_at": "2026-09-10T16:25:42.248+00:00",
          "results_captured_at": "2026-09-14T06:02:39.812+00:00",
          "round_stats_captured_at": "2026-09-14T11:05:50.056+00:00"
        },
        "build_run_id": "31f29a99-e803-4eef-8edc-d65dc2735cb7",
        "fighter_stance": "ORTHODOX"
      },
      "generated_at": "2026-09-14T11:06:14.037+00:00",
      "origin": "pbe_derived"
    }
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "375d782a-eb67-419d-9077-ee8b93e4ea14",
    "requested_as_of": null,
    "resolved_as_of": "2026-09-14",
    "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-14",
      "definition_version": 1,
      "sample_bouts": 25,
      "sample_rounds": 84,
      "sample_seconds": 24399,
      "coverage_status": "high",
      "metrics": {
        "sig_landed_per_min": {
          "unit": "per_min",
          "value": 5.9757,
          "origin": "pbe_derived",
          "numerator": 2430,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_landed_per_min",
          "denominator": 24399,
          "sample_bouts": 25,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "finish_rate": {
          "unit": "ratio",
          "value": 0.3333,
          "origin": "pbe_derived",
          "numerator": 6,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "finish_rate",
          "denominator": 18,
          "sample_bouts": 18,
          "sample_rounds": 84,
          "sample_seconds": 24399,
          "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-14.1",
    "request_id": "375d782a-eb67-419d-9077-ee8b93e4ea14",
    "requested_as_of": null,
    "resolved_as_of": "2026-09-14",
    "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-14 · def v1
5.98/min Sig. strikes landed high
43% Strike accuracy high
61% Strike defense high
1.07/15 Takedown attempts high
62% Takedown accuracy high
33% Finish rate (wins) high
1.12× Pace retention R3/R1 high
8% Control share high
Confidence high 25 bouts · 84 rounds · 407 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 and the Fight State Ledger and event 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://proptechusa-ufc-api.sales-fd3.workers.dev/v1/ufc/matchups/2c9c2a88-aec1-4bf0-9b16-3ce58adf6fd6/1d296292-4969-43a8-9948-cd0a76a642ce/dna
Response excerpt → matchup cardschema example · captured Sep 14, 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-14",
      "sample_bouts": 10,
      "sample_rounds": 30,
      "coverage_status": "high",
      "…": "full snapshot subset omitted from this example"
    },
    "b": {
      "as_of_date": "2026-09-14",
      "sample_bouts": 16,
      "sample_rounds": 49,
      "coverage_status": "high",
      "…": "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": 5.5661,
          "origin": "pbe_derived",
          "numerator": 798,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_landed_per_min",
          "denominator": 8602,
          "sample_bouts": 10,
          "sample_rounds": 30,
          "sample_seconds": 8602,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "b": {
          "unit": "per_min",
          "value": 4.1892,
          "origin": "pbe_derived",
          "numerator": 1001,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_landed_per_min",
          "denominator": 14337,
          "sample_bouts": 16,
          "sample_rounds": 49,
          "sample_seconds": 14337,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "delta": 1.3769,
        "direction": "a",
        "comparable": true,
        "min_confidence": "high"
      },
      {
        "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": 3.7596,
          "origin": "pbe_derived",
          "numerator": 539,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_absorbed_per_min",
          "denominator": 8602,
          "sample_bouts": 10,
          "sample_rounds": 30,
          "sample_seconds": 8602,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "b": {
          "unit": "per_min",
          "value": 3.779,
          "origin": "pbe_derived",
          "numerator": 903,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_absorbed_per_min",
          "denominator": 14337,
          "sample_bouts": 16,
          "sample_rounds": 49,
          "sample_seconds": 14337,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "delta": -0.0194,
        "direction": "b",
        "comparable": true,
        "min_confidence": "high"
      },
      {
        "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.4086,
          "origin": "pbe_derived",
          "numerator": 798,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_accuracy",
          "denominator": 1953,
          "sample_bouts": 10,
          "sample_rounds": 30,
          "sample_seconds": 8602,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "b": {
          "unit": "ratio",
          "value": 0.4109,
          "origin": "pbe_derived",
          "numerator": 1001,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_accuracy",
          "denominator": 2436,
          "sample_bouts": 16,
          "sample_rounds": 49,
          "sample_seconds": 14337,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "delta": -0.0023,
        "direction": "b",
        "comparable": true,
        "min_confidence": "high"
      }
    ],
    "stance_context": {
      "a_stance": "ORTHODOX",
      "b_stance": "ORTHODOX",
      "context": "same",
      "…": "split blocks omitted from this example"
    },
    "insights": [
      {
        "key": "a_vs_orthodox_record",
        "label": "Manon Fiorot vs orthodox opponents",
        "value": 0.8889,
        "unit": "ratio",
        "record": {
          "w": 8,
          "l": 1,
          "d": 0,
          "nc": 0,
          "appearances": 9
        },
        "sample_bouts": 9,
        "sample_rounds": 25,
        "sample_seconds": 7102,
        "confidence": "high",
        "direction": "contextual",
        "side": "a",
        "metric_keys": [
          "stance_record"
        ],
        "explanation": "Manon Fiorot is 8-1-0 in 9 UFC bouts against orthodox opponents (3 KO/TKO, 0 submission, 5 decision wins), PBE-derived from canonical results as of 2026-09-14.",
        "origin": "pbe_derived"
      },
      {
        "key": "a_vs_orthodox_finish_rate",
        "label": "Finish history vs orthodox opponents",
        "value": 0.375,
        "unit": "ratio",
        "sample_bouts": 8,
        "sample_rounds": 25,
        "sample_seconds": 7102,
        "confidence": "medium",
        "direction": "contextual",
        "side": "a",
        "metric_keys": [
          "stance_finish_rate"
        ],
        "explanation": "38% of Manon Fiorot's 8 wins against orthodox opponents came by finish (3 KO/TKO, 0 submission), across 8 bouts / 25 rounds / 118.4 min as of 2026-09-14.",
        "origin": "pbe_derived"
      }
    ],
    "warnings": [],
    "bettors_edge_evidence": [
      {
        "key": "a_vs_orthodox_record",
        "label": "Manon Fiorot vs orthodox opponents",
        "value": 0.8889,
        "unit": "ratio",
        "side": "a",
        "direction": "contextual",
        "sample": "9 bouts / 25 rounds / 118.4 min",
        "sample_bouts": 9,
        "sample_rounds": 25,
        "sample_seconds": 7102,
        "confidence": "high",
        "origin": "pbe_derived",
        "origin_label": "PBE DERIVED",
        "explanation": "Manon Fiorot is 8-1-0 in 9 UFC bouts against orthodox opponents (3 KO/TKO, 0 submission, 5 decision wins), PBE-derived from canonical results as of 2026-09-14."
      }
    ],
    "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-14.1",
    "request_id": "0c92960f-6815-427e-aea1-302094f74fd2",
    "requested_as_of": null,
    "resolved_as_of": {
      "a": "2026-09-14",
      "b": "2026-09-14"
    },
    "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": 18,
    "insights": 11,
    "warnings": 0,
    "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": 5.5661,
          "origin": "pbe_derived",
          "numerator": 798,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_landed_per_min",
          "denominator": 8602,
          "sample_bouts": 10,
          "sample_rounds": 30,
          "sample_seconds": 8602,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "b": {
          "unit": "per_min",
          "value": 4.1892,
          "origin": "pbe_derived",
          "numerator": 1001,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_landed_per_min",
          "denominator": 14337,
          "sample_bouts": 16,
          "sample_rounds": 49,
          "sample_seconds": 14337,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "delta": 1.3769,
        "direction": "a",
        "comparable": true,
        "min_confidence": "high"
      },
      {
        "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": 3.7596,
          "origin": "pbe_derived",
          "numerator": 539,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_absorbed_per_min",
          "denominator": 8602,
          "sample_bouts": 10,
          "sample_rounds": 30,
          "sample_seconds": 8602,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "b": {
          "unit": "per_min",
          "value": 3.779,
          "origin": "pbe_derived",
          "numerator": 903,
          "as_of_date": "2026-09-14",
          "confidence": "high",
          "metric_key": "sig_absorbed_per_min",
          "denominator": 14337,
          "sample_bouts": 16,
          "sample_rounds": 49,
          "sample_seconds": 14337,
          "coverage_status": "high",
          "source_families": [
            "ufcstats"
          ],
          "definition_version": 1
        },
        "delta": -0.0194,
        "direction": "b",
        "comparable": true,
        "min_confidence": "high"
      }
    ],
    "insights": [
      {
        "key": "a_vs_orthodox_record",
        "label": "Manon Fiorot vs orthodox opponents",
        "value": 0.8889,
        "unit": "ratio",
        "record": {
          "w": 8,
          "l": 1,
          "d": 0,
          "nc": 0,
          "appearances": 9
        },
        "sample_bouts": 9,
        "sample_rounds": 25,
        "sample_seconds": 7102,
        "confidence": "high",
        "direction": "contextual",
        "side": "a",
        "metric_keys": [
          "stance_record"
        ],
        "explanation": "Manon Fiorot is 8-1-0 in 9 UFC bouts against orthodox opponents (3 KO/TKO, 0 submission, 5 decision wins), PBE-derived from canonical results as of 2026-09-14.",
        "origin": "pbe_derived"
      }
    ],
    "warnings": [],
    "…": "stance_context, bettors_edge_evidence, note"
  },
  "meta": {
    "resolved_as_of": {
      "a": "2026-09-14",
      "b": "2026-09-14"
    },
    "insights": 11,
    "warnings": 0
  }
}
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
5.57Pace (sig. landed/min)high / high4.19
41%Strike accuracyhigh / high41%
92%Distance sharehigh / high90%
3.24Takedown attempts /15high / high1.07
29%Takedown accuracyhigh / high35%
0.93×Pace retention R3/R1high / high0.95×
38%Finish rate (wins)medium / high30%
Stance context: same · comparisons 18/18 comparable · as of 2026-09-14 / 2026-09-14. “—” 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
  • Manon Fiorot vs orthodox opponents. Manon Fiorot is 8-1-0 in 9 UFC bouts against orthodox opponents (3 KO/TKO, 0 submission, 5 decision wins), PBE-derived from canonical results as of 2026-09-14. high
  • Finish history vs orthodox opponents. 38% of Manon Fiorot's 8 wins against orthodox opponents came by finish (3 KO/TKO, 0 submission), across 8 bouts / 25 rounds / 118.4 min as of 2026-09-14. medium
Fight DNA is PBE-derived evidence with explicit samples and confidence. It is not a pick, price or probability.

Fight State Ledger and event intelligence Ultra+ PBE derived

GET /v1/ufc/bouts/{id}/ledger?limit= returns append-only snapshots of one bout's state with deterministic diffs between consecutive checkpoints. GET /v1/ufc/events/{id}/intelligence is the same view across a whole card, one entry per bout.

  • Append-only. Snapshots are never rewritten (meta.append_only). Checkpoints are t_minus_72h, t_minus_24h, post_weigh_in and ad_hoc; meta.checkpoints counts each kind.
  • Diffs are mechanical, not interpreted. meta.diff_rules states exactly which paths are compared between consecutive snapshots; each entry in diffs[] carries changed[] (paths) and changes[] (path, from, to) with hours_between. The API reports that a value moved; it never tells you what the move means.
  • Missing sources are named. Each snapshot carries a block per source; anything not wired in yet reports status: "unavailable" and appears in meta.unavailable_sources rather than being silently absent.
  • Not computed is said out loud. card_shock returns { status: "not_computed", reason: … } until that engine exists.
  • Per bout on the event view: ledger_status, snapshots, latest, hours_to_start, dna readiness per fighter, wire_count, result.status and the newest diff.
GET /v1/ufc/events/1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52/intelligence Ultra+
curl \
  -H "Authorization: Bearer $UFC_API_KEY" \
  https://proptechusa-ufc-api.sales-fd3.workers.dev/v1/ufc/events/1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52/intelligence
Event intelligence response
GET /v1/ufc/events/1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52/intelligence
subset: 1 of 13 bouts, ledger fighter state omitted
{
  "ok": true,
  "data": {
    "event": {
      "id": "1d0b22df-81e7-4e5b-8fa5-8e5d03c24c52",
      "name": "Noche UFC: Silva vs. Delgado",
      "event_date": "2026-09-12",
      "venue": "Desert Diamond Arena",
      "city": "Glendale",
      "region": "AZ",
      "country": "USA",
      "card_status": "complete",
      "espn_event_id": "600060772",
      "ufcstats_id": "638cfec7ec559d6e",
      "scheduled_start": "2026-09-12T18:00:00+00:00",
      "hours_to_start": -43.28
    },
    "bouts": [
      {
        "bout": {
          "id": "89e38074-f431-4bc3-b51e-fe42058e60d0",
          "status": "complete",
          "bout_order": 13,
          "card_position": "main",
          "weight_class": "FEATHERWEIGHT",
          "scheduled_rounds": 5,
          "is_title": false,
          "fighter_a": {
            "id": "eed368a5-484b-412f-9d2c-a4fd6d24d019",
            "name": "Jean Silva"
          },
          "fighter_b": {
            "id": "55ef67ad-88fe-4f7a-b4cb-dc9a10c12feb",
            "name": "Jose Miguel Delgado"
          },
          "has_result": true
        },
        "ledger_status": "ok",
        "latest": {
          "id": "9aa961ab-a10f-4d8a-9801-6d88516048d6",
          "checkpoint": "post_result",
          "captured_at": "2026-09-13T01:23:56.322+00:00",
          "ledger_version": 1,
          "scheduled_start": "2026-09-12T18:00:00+00:00",
          "hours_to_start_at_capture": -7.4
        },
        "hours_to_start": -43.28,
        "checkpoints": [
          "post_result",
          "close",
          "t_minus_3h",
          "t_minus_24h",
          "post_weigh_in",
          "ad_hoc",
          "t_minus_72h"
        ],
        "snapshots": 10,
        "bout_state": {
          "event": {
            "city": "Glendale",
            "name": "Noche UFC: Silva vs. Delgado",
            "venue": "Desert Diamond Arena",
            "region": "AZ",
            "country": "USA",
            "card_status": "complete"
          },
          "status": "complete",
          "is_title": false,
          "is_womens": false,
          "bout_order": 13,
          "ufcstats_id": null,
          "weight_class": "FEATHERWEIGHT",
          "card_position": "main",
          "is_main_event": true,
          "replaced_bout_id": null,
          "scheduled_rounds": 5,
          "weight_class_raw": "Featherweight",
          "short_notice_days": null,
          "espn_competition_id": "401914462"
        },
        "fighters": {
          "…": "ledger fighter state omitted from this example"
        },
        "has_dna": {
          "a": true,
          "b": true
        },
        "dna": {
          "a": {
            "status": "ok",
            "as_of_date": "2026-09-10",
            "definition_version": 1
          },
          "b": {
            "status": "ok",
            "as_of_date": "2026-09-10",
            "definition_version": 1
          }
        },
        "wire_count": 90,
        "result": {
          "round": 3,
          "method": "SUB",
          "status": "final",
          "referee": "Dan Miragliotta",
          "time_sec": 177,
          "has_stats": false,
          "winner_id": "eed368a5-484b-412f-9d2c-a4fd6d24d019",
          "method_raw": "Submission",
          "captured_at": "2026-09-13T01:16:21.054+00:00",
          "time_format": "5 Rnd (5-5-5-5-5)",
          "finish_detail": "Rear Naked Choke",
          "result_source": "espn"
        },
        "sources": {
          "weigh_in": "unavailable",
          "odds": "unavailable",
          "market": "unavailable",
          "model": "unavailable"
        },
        "diff": {
          "newer": {
            "id": "9aa961ab-a10f-4d8a-9801-6d88516048d6",
            "checkpoint": "post_result",
            "captured_at": "2026-09-13T01:23:56.322+00:00"
          },
          "older": {
            "id": "e5196e0a-555c-4437-a363-918b7f3f7370",
            "checkpoint": "close",
            "captured_at": "2026-09-12T17:23:43.497+00:00"
          },
          "hours_between": 8,
          "changed": [
            "bout_state.event",
            "bout_state.status",
            "wire.count",
            "result.status"
          ],
          "changes": [
            {
              "path": "bout_state.event",
              "from": {
                "city": "Glendale",
                "name": "Noche UFC: Silva vs. Delgado",
                "venue": "Desert Diamond Arena",
                "region": "AZ",
                "country": "USA",
                "card_status": "announced"
              },
              "to": {
                "city": "Glendale",
                "name": "Noche UFC: Silva vs. Delgado",
                "venue": "Desert Diamond Arena",
                "region": "AZ",
                "country": "USA",
                "card_status": "complete"
              }
            },
            {
              "path": "bout_state.status",
              "from": "announced",
              "to": "complete"
            },
            {
              "path": "wire.count",
              "from": 50,
              "to": 90
            },
            {
              "path": "result.status",
              "from": "pending",
              "to": "final"
            }
          ]
        },
        "card_shock": {
          "status": "not_computed",
          "reason": "card_shock_engine_not_built"
        }
      }
    ],
    "card_shock": {
      "status": "not_computed",
      "reason": "card_shock_engine_not_built"
    },
    "…": "12 more bouts omitted from this example"
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "895442a9-0de9-43af-8758-a8d6cee524b3",
    "generated_at": "2026-09-14T13:16:49.463Z",
    "bouts": 13,
    "bouts_with_ledger": 13,
    "snapshots": 130,
    "snapshots_total": 130,
    "truncated": false,
    "checkpoints": {
      "t_minus_72h": 13,
      "t_minus_24h": 26,
      "post_weigh_in": 13,
      "t_minus_3h": 13,
      "close": 13,
      "post_result": 13,
      "ad_hoc": 39
    },
    "latest_captured_at": "2026-09-13T01:23:56.322+00:00",
    "unavailable_sources": [
      "weigh_in",
      "odds",
      "market",
      "model"
    ],
    "source_status": {
      "weigh_in": {
        "unavailable": 13
      },
      "odds": {
        "unavailable": 13
      },
      "market": {
        "unavailable": 13
      },
      "model": {
        "unavailable": 13
      }
    },
    "card_shock": {
      "status": "not_computed",
      "reason": "card_shock_engine_not_built"
    },
    "diff_rules": "Deterministic shallow diff between consecutive snapshots, no interpretation: top-level keys of bout_state (keys ending in _updated_at ignored), fighters.a/b {id,name,slug_id,stance,record,rankings} and fighters.stance_context, top-level keys of rankings, dna.a/b {status,as_of_date,definition_version}, wire.count, weigh_in/odds/market/model/result .status. Values are compared as JSON.",
    "access_tier": "public"
  }
}

These two routes are the derived fight-week layer and stay on Ultra and above. The source-backed fight-week facts — weigh-ins, availability, card changes and fighter status — are on every plan.

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 2014-01-01. Nothing is synthesized.",
    "detail": {
      "fighter_id": "ec94d296-2db3-4e0d-be6a-46de4f480672",
      "requested_as_of": "2014-01-01",
      "definition_version": 1,
      "reason": "no_snapshot_at_or_before_as_of"
    }
  },
  "meta": {
    "api": "PropSports UFC",
    "version": "2026-09-14.1",
    "request_id": "976471ca-2371-4d64-be70-702061b594ca"
  }
}

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": 5.9757,
  "origin": "pbe_derived",
  "numerator": 2430,
  "as_of_date": "2026-09-14",
  "confidence": "high",
  "metric_key": "sig_landed_per_min",
  "denominator": 24399,
  "sample_bouts": 25,
  "sample_rounds": 84,
  "sample_seconds": 24399,
  "coverage_status": "high",
  "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}/stats → computed.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,results → bouts[] 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. Weigh-ins: /events/{id}/weigh-ins?include=history → coverage for the desk header, results for the rows, history for the trail. Show a null limit as unpublished; show is_confirmation as a confirmation, not a correction.
  4. Availability: /events/{id}/card-changes for this card, /fighters/{id}/status per fighter. Render injury_type: null as an unknown cause and current: null as “no report on file”, never as “fit”.
  5. 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.
  6. Context: /rankings for implications, /events/{id}/videos for official media, /news for PropBetEdge editorial.
  7. Polling: every fight-week fact route is a plain GET. Poll /weigh-ins?since= on detected_at rather than diffing whole cards.

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/weigh-insOfficial weigh-in readings: current reading per fighter per event, with confirmation vs correction and explicit null limitssource factDeveloper
/v1/ufc/events/{id}/weigh-insOne event's weigh-ins with coverage state; include=history returns every stored source readingsource factDeveloper
/v1/ufc/injuriesIndividually sourced availability events: injuries, withdrawals, replacements, suspensions, weight misses, returns (never an inferred diagnosis)source factDeveloper
/v1/ufc/events/{id}/card-changesSourced withdrawals, replacements and other changes to one event's cardsource factDeveloper
/v1/ufc/fighters/{id}/statusOne fighter's current availability event (or null: no report on file, not a fitness claim) and its sourced historysource factDeveloper
/v1/ufc/live-boutsLive and recent bout status for the current card: phase, active bout, on deck, every bout with status, source round and official result, with freshness (ufc-live-bout/1)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, rankings, weigh-ins, availability, card changes, fighter statusNormalized ESPN / UFC Stats / ufc.com facts, official weigh-in readings and individually sourced availability events. Weigh-in and availability rows carry source_url, source_name and source_kind; attribute the source where displayed.
PBE derivedFight DNA, Matchup DNA, computed career rates, Fight State Ledger diffs, event intelligencePropBetEdge 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://proptechusa-ufc-api.sales-fd3.workers.dev (commercial gateway) and https://ufc-api.propbetedge.ai (canonical, first-party). This documentation site is a separate static host and serves no API routes. Import openapi.json into your client generator, or browse the interactive reference.