---
title: "Split and majority decisions"
method: GET
path: "/v1/scorecards/splits"
tags: ["Scorecards"]
---

# Split and majority decisions

`GET /v1/scorecards/splits`

## Request

- Base URL: `https://api.ufcalendar.com`
- URL: `https://api.ufcalendar.com/v1/scorecards/splits`
- Auth: HTTP bearer

Completed bouts the judges decided on a split or majority (including majority and split draws), newest first, across the launch promotions or one of them, optionally in a date range. Each row is the bout (same shape as `/v1/fights/{id}`) plus its `event`, the `decision_type`, `official_winner_fighter_id` (`null` on a draw), every judge's card (`cards`, same objects as `/v1/fights/{id}/scorecards`) and `dissenting_judges` — the cards that disagree with the official result (`judge_id`, `judge_name`, `total_a`, `total_b`, `winner_fighter_id`, `is_draw`, `scores_known`). A card with no readable verdict is not counted as a dissent; an outcome-only card (`scores_known: false`) is, flagged. Commission records only — facts as filed, no verdict of our own; sources that publish no decision type are not listed. Up to 50 rows a page.

## Query parameters

- `org` 'ufc' | 'pfl' | 'oktagon' | 'bkfc' | 'rizin'
- `from` string, date
- `to` string, date
- `cursor` string
- `limit` integer

## Response `200`

Split and majority decisions, newest first

- SplitDecisionsResponse: Newest first.
  - `data` SplitDecision[], required
    - `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
    - `decision_type` string, required: `split`, `majority`, `split draw`, `majority draw`, … as the commission record states.
    - `official_winner_fighter_id` integer, nullable, required: Null on a draw.
    - `cards` JudgeCard[], required
      - `judge_id` integer, nullable, required: Null on PFL's US results-post cards (no judge identity published).
      - `judge_name` string, nullable, required
      - `total_a` integer, nullable, required: Oriented to the bout's `fighter_a_id`.
      - `total_b` integer, nullable, required: Oriented to the bout's `fighter_b_id`.
      - `winner_fighter_id` integer, nullable, required: Who THIS judge gave it to.
      - `is_draw` boolean, required
      - `scores_known` boolean, required: false ⇒ the commission published the outcome only; totals are a 1-0 / 1-1 / 0-0 placeholder and `rounds` is empty.
      - `rounds` ScoreRound[], required
        - `round` integer, required
        - `a` integer, nullable, required
        - `b` integer, nullable, required
    - `dissenting_judges` DissentingJudge[], required: Cards that disagree with the official result.
      - `judge_id` integer, nullable, required
      - `judge_name` string, nullable, required
      - `total_a` integer, nullable, required
      - `total_b` integer, nullable, required
      - `winner_fighter_id` integer, nullable, required
      - `is_draw` boolean, required
      - `scores_known` boolean, required: false = an outcome-only card; still a readable verdict, flagged.
  - `meta` object, required
    - `pagination` CursorPagination, required: Cursor pagination WITHOUT the applied `limit` (the newer list routes — changes, fight search, splits, venues, articles — do not echo it).
      - `next_cursor` string, nullable, required: Opaque; pass as `?cursor=`. Null on the last page.
      - `has_more` boolean, required
    - `note` string, required
    - `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.
- `400`: Invalid input (`invalid_org`, `invalid_date`). Dates must be real calendar days (`2026-02-30` is `invalid_date`).
- `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)
