---
title: "One division in one promotion"
method: GET
path: "/v1/orgs/{slug}/divisions/{division}"
tags: ["Orgs"]
---

# One division in one promotion

`GET /v1/orgs/{slug}/divisions/{division}`

## Request

- Base URL: `https://api.ufcalendar.com`
- URL: `https://api.ufcalendar.com/v1/orgs/{slug}/divisions/{division}`
- Auth: HTTP bearer

One weight class in one promotion, in one call: `division` (`slug`, canonical `name`, `weight_limit_lbs` — `null` where no standard limit applies), `rankings` (the promotion's current official board for this division — same object as `/v1/rankings/{org}?division=` — or `null` when it publishes none), `upcoming` (up to 50 bouts booked at this weight, soonest first), `recent` (the 15 latest completed or no-contest bouts, newest first) and `roster` (up to 30 fighters who have fought at this weight, most recent first, each with `last_fought_at`). Bouts are the `/v1/fights/{id}` shape plus their `event` (`id`, `slug`, `title`, `org`, `starts_at`); a bout is matched on its recorded weight class, so catchweights are not counted. When every list is empty `meta.note` says so. An unknown org or division 404s; the division 404 lists the allowed slugs.

## Path parameters

- `slug` 'ufc' | 'pfl' | 'oktagon' | 'bkfc' | 'rizin', required
- `division` 'strawweight' | 'flyweight' | 'bantamweight' | 'featherweight' | 'lightweight' | 'welterweight' | 'super-welterweight' | 'middleweight' | 'light-heavyweight' | 'heavyweight' | 'super-heavyweight' | 'womens-strawweight' | 'womens-flyweight' | 'womens-bantamweight' | 'womens-featherweight' | 'atomweight' | 'ironweight', required

## Response `200`

The division

- DivisionResponse: `meta.note` is set only when every list is empty.
  - `data` Division, required: One weight class in one promotion.
    - `org` string, required
    - `division` object, required
      - `slug` 'strawweight' | 'flyweight' | 'bantamweight' | 'featherweight' | 'lightweight' | 'welterweight' | 'super-welterweight' | 'middleweight' | 'light-heavyweight' | 'heavyweight' | 'super-heavyweight' | 'womens-strawweight' | 'womens-flyweight' | 'womens-bantamweight' | 'womens-featherweight' | 'atomweight' | 'ironweight', required: API division slug.
      - `name` string, required: Canonical weight-class name.
      - `weight_limit_lbs` integer, nullable, required: Null where no standard limit applies.
    - `rankings` DivisionRankings, required
      - `org` string, required
      - `board` 'official' | 'meta', required: `official` for every org (for UFC that is the media-panel vote ufc.com publishes); UFC additionally has `meta`.
      - `snapshot_date` string, date, required
      - `division` string, required
      - `entries` RankingEntry[], required
        - `rank` integer, required: 0 = champion.
        - `is_champion` boolean, required
        - `fighter_id` integer, nullable, required
        - `fighter_slug` string, nullable, required
        - `name` string, required
        - `nationality` string, nullable, required: Country NAME as the source spells it.
        - `country_code` string, nullable, required: ISO 3166-1 alpha-2 derived from `nationality`.
        - `fighter` RankedFighterRef, required
          - `id` integer, required
          - `slug` string, nullable, required
          - `name` string, required
        - `movement` integer, nullable, required: Previous rank minus current rank: positive = moved up, 0 = held, null = not on the previous board (or no previous snapshot).
        - `is_new` boolean, required: true when a previous snapshot exists and this fighter was not ranked in this division on it.
    - `upcoming` FightDetail[], required: Up to 50 bouts booked at this weight, soonest first.
      - `id` integer, required
      - `ordering` integer, nullable, required: 1 = the headliner; ascends down the card.
      - `card_section` 'main' | 'prelims' | 'early_prelims', required: Which part of the card the bout sits on.
      - `sport` string, required: Sport slug — `mma`, `bare-knuckle-boxing`. Open: a new sport lands as a new value.
      - `weight_class` string, nullable, required: Source spelling (`Featherweight`, `Catchweight 150 lbs`).
      - `division_slug` string, nullable, required: Slug twin in the rankings vocabulary (`womens-strawweight`, `catchweight`); null when the text matches no division.
      - `is_title` boolean, required
      - `is_main` boolean, required
      - `scheduled_rounds` integer, nullable, required
      - `status` 'announced' | 'confirmed' | 'cancelled' | 'completed' | 'no_contest', required: Bout lifecycle. `no_contest` is a settled bout with no winner.
      - `fighter_a` FighterRef, required: The one fighter-reference shape every card, fight and search row carries.
        - `id` integer, required
        - `slug` string, required
        - `name` string, required
        - `nickname` string, nullable, required
        - `nationality` string, nullable, required: Country NAME as the source spells it (e.g. `United States`).
        - `country_code` string, nullable, required: ISO 3166-1 alpha-2 derived from `nationality`; null when the name is unknown to our table.
      - `fighter_b` FighterRef, required: The one fighter-reference shape every card, fight and search row carries.
        - `id` integer, required
        - `slug` string, required
        - `name` string, required
        - `nickname` string, nullable, required
        - `nationality` string, nullable, required: Country NAME as the source spells it (e.g. `United States`).
        - `country_code` string, nullable, required: ISO 3166-1 alpha-2 derived from `nationality`; null when the name is unknown to our table.
      - `result` FightResult, required
        - `winner_fighter_id` integer, nullable, required: Null on a draw or no-contest.
        - `method` string, nullable, required: Source spelling (`Decision - Split`, `KO/TKO`, `Submission (Rear-Naked Choke)`).
        - `method_normalized` 'ko_tko' | 'submission' | 'technical_submission' | 'decision_unanimous' | 'decision_split' | 'decision_majority' | 'decision' | 'draw' | 'no_contest' | 'dq' | 'other', required: Closed vocabulary over every source spelling of a result method (`normalize.ts`). `other` = a non-empty method nothing matched.
        - `finish_detail` string, nullable, required: The parenthesised / trailing detail of `method`, cleaned (`Rear-Naked Choke`, `Doctor's Stoppage`).
        - `round` integer, nullable, required
        - `time` string, nullable, required: `m:ss` into the round.
        - `time_seconds` integer, nullable, required: `time` in seconds.
        - `details` string, nullable, required: Free text from the source — judges' totals on a decision, the strike on a KO.
      - `referee` string, nullable, required
      - `bonus` string, nullable, required: Post-fight bonus label when awarded (`Performance of the Night`, `Fight of the Night`).
      - `event` object, required
        - `id` integer, required
        - `slug` string, required
        - `title` string, required
        - `org` string, required
        - `starts_at` string, date-time, nullable, required
      - `odds` OddsPair: One UFCalendar consensus point: the mean, in decimal space, across the sportsbooks we track, converted back to American. Information only, not betting advice.
        - `a` OddsLine, required: One corner's side of a consensus point.
          - `american` integer, required: American moneyline (`-152`, `+131`).
          - `decimal` number, required: Decimal odds, 3 places.
          - `implied_probability` number, required: Raw implied probability (market margin included), 4 places.
        - `b` OddsLine, required: One corner's side of a consensus point.
          - `american` integer, required: American moneyline (`-152`, `+131`).
          - `decimal` number, required: Decimal odds, 3 places.
          - `implied_probability` number, required: Raw implied probability (market margin included), 4 places.
        - `favourite` 'a' | 'b' | 'null', nullable, required: The corner the market prices as more likely; null on an even pair.
        - `fair_probability_a` number, required: Probability of corner a with the market margin removed (pA / (pA + pB)), 4 places.
        - `sources` integer, required: How many sportsbooks backed this consensus point. Book identities are never exposed.
        - `recorded_at` string, date-time, required: When this consensus point was recorded.
    - `recent` FightDetail[], required: The 15 latest completed or no-contest bouts, newest first.
      - `id` integer, required
      - `ordering` integer, nullable, required: 1 = the headliner; ascends down the card.
      - `card_section` 'main' | 'prelims' | 'early_prelims', required: Which part of the card the bout sits on.
      - `sport` string, required: Sport slug — `mma`, `bare-knuckle-boxing`. Open: a new sport lands as a new value.
      - `weight_class` string, nullable, required: Source spelling (`Featherweight`, `Catchweight 150 lbs`).
      - `division_slug` string, nullable, required: Slug twin in the rankings vocabulary (`womens-strawweight`, `catchweight`); null when the text matches no division.
      - `is_title` boolean, required
      - `is_main` boolean, required
      - `scheduled_rounds` integer, nullable, required
      - `status` 'announced' | 'confirmed' | 'cancelled' | 'completed' | 'no_contest', required: Bout lifecycle. `no_contest` is a settled bout with no winner.
      - `fighter_a` FighterRef, required: The one fighter-reference shape every card, fight and search row carries.
        - `id` integer, required
        - `slug` string, required
        - `name` string, required
        - `nickname` string, nullable, required
        - `nationality` string, nullable, required: Country NAME as the source spells it (e.g. `United States`).
        - `country_code` string, nullable, required: ISO 3166-1 alpha-2 derived from `nationality`; null when the name is unknown to our table.
      - `fighter_b` FighterRef, required: The one fighter-reference shape every card, fight and search row carries.
        - `id` integer, required
        - `slug` string, required
        - `name` string, required
        - `nickname` string, nullable, required
        - `nationality` string, nullable, required: Country NAME as the source spells it (e.g. `United States`).
        - `country_code` string, nullable, required: ISO 3166-1 alpha-2 derived from `nationality`; null when the name is unknown to our table.
      - `result` FightResult, required
        - `winner_fighter_id` integer, nullable, required: Null on a draw or no-contest.
        - `method` string, nullable, required: Source spelling (`Decision - Split`, `KO/TKO`, `Submission (Rear-Naked Choke)`).
        - `method_normalized` 'ko_tko' | 'submission' | 'technical_submission' | 'decision_unanimous' | 'decision_split' | 'decision_majority' | 'decision' | 'draw' | 'no_contest' | 'dq' | 'other', required: Closed vocabulary over every source spelling of a result method (`normalize.ts`). `other` = a non-empty method nothing matched.
        - `finish_detail` string, nullable, required: The parenthesised / trailing detail of `method`, cleaned (`Rear-Naked Choke`, `Doctor's Stoppage`).
        - `round` integer, nullable, required
        - `time` string, nullable, required: `m:ss` into the round.
        - `time_seconds` integer, nullable, required: `time` in seconds.
        - `details` string, nullable, required: Free text from the source — judges' totals on a decision, the strike on a KO.
      - `referee` string, nullable, required
      - `bonus` string, nullable, required: Post-fight bonus label when awarded (`Performance of the Night`, `Fight of the Night`).
      - `event` object, required
        - `id` integer, required
        - `slug` string, required
        - `title` string, required
        - `org` string, required
        - `starts_at` string, date-time, nullable, required
      - `odds` OddsPair: One UFCalendar consensus point: the mean, in decimal space, across the sportsbooks we track, converted back to American. Information only, not betting advice.
        - `a` OddsLine, required: One corner's side of a consensus point.
          - `american` integer, required: American moneyline (`-152`, `+131`).
          - `decimal` number, required: Decimal odds, 3 places.
          - `implied_probability` number, required: Raw implied probability (market margin included), 4 places.
        - `b` OddsLine, required: One corner's side of a consensus point.
          - `american` integer, required: American moneyline (`-152`, `+131`).
          - `decimal` number, required: Decimal odds, 3 places.
          - `implied_probability` number, required: Raw implied probability (market margin included), 4 places.
        - `favourite` 'a' | 'b' | 'null', nullable, required: The corner the market prices as more likely; null on an even pair.
        - `fair_probability_a` number, required: Probability of corner a with the market margin removed (pA / (pA + pB)), 4 places.
        - `sources` integer, required: How many sportsbooks backed this consensus point. Book identities are never exposed.
        - `recorded_at` string, date-time, required: When this consensus point was recorded.
    - `roster` object[], required: Up to 30 fighters who have fought at this weight, most recent first.
      - `id` integer, required
      - `slug` string, required
      - `name` string, required
      - `nickname` string, nullable, required
      - `nationality` string, nullable, required
      - `country_code` string, nullable, required: ISO-2 derived from `nationality`.
      - `last_fought_at` string, date-time, nullable, required: Start of their latest bout at this weight (never a future booking).
  - `meta` object, required
    - `note` string
    - `ignored_params` string[]: Present only when the request carried query parameters this endpoint does not take — they were ignored. Same list as the `X-UFCalendar-Ignored-Params` header. Sorted, unique.

## Other responses

- `304`: Not Modified — `If-None-Match` matched the current weak `ETag`. Empty body.
- `401`: Missing/invalid API key (`unauthorized`).
- `403`: No active plan on the key's account (`subscription_required`) — choose a plan or start the free 1-day trial at https://www.ufcalendar.com/account/api.
- `404`: Not found (`not_found`; staged-org data 404s until the org is promoted).
- `429`: Rate limited (`rate_limited`) or monthly quota reached (`quota_exceeded`). Honor `Retry-After`.
- `500`: Something broke on our side (`internal_error`). It has been logged under the `request_id`.

---

[API](https://skmtc.dev/ufcalendar/apis/ufcalendar-fight-api.md) · [All operations](https://skmtc.dev/ufcalendar/apis/ufcalendar-fight-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ufcalendar/apis/ufcalendar-fight-api/revisions/9623cc8fb70b?raw)
