---
title: "Judge directory"
method: GET
path: "/v1/judges"
tags: ["Scorecards"]
---

# Judge directory

`GET /v1/judges`

## Request

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

Every official who has scored a launch-org bout (~550), busiest first, with their career shape: fights, rounds scored, rounds scored 10-8 or wider, three-judge cards that came back split, and `lone_dissents` — cards where this judge alone picked the other corner.

Filter with `q` (name), `org`, and `min_fights` (the rates mean little below ~10 fights).

`meta.league` is the whole directory's baseline, never the filtered subset: `judges`, `fights` (judge-cards), `rounds_scored`, and the pooled rates `wide_round_rate` (wide rounds / rounds), `split_rate` (split / three-judge cards) and `lone_dissent_rate` (lone dissents / three-judge cards).

## Query parameters

- `q` string
- `org` 'ufc' | 'pfl' | 'oktagon' | 'bkfc' | 'rizin'
- `min_fights` integer
- `cursor` string
- `limit` integer

## Response `200`

Judges page

- JudgesPageResponse
  - `data` Judge[], required
    - `id` integer, required
    - `name` string, required
    - `fights` integer, required: Bouts scored in launch scope.
    - `rounds_scored` integer, required
    - `wide_rounds` integer, required: Rounds scored 10-8 or wider.
    - `split_fights` integer, required: Three-judge cards of theirs where the panel did not agree.
    - `three_judge_fights` integer, required
    - `lone_dissents` integer, required: Three-judge cards where this judge alone picked the other corner.
    - `first_scored` string, date, nullable, required
    - `last_scored` string, date, nullable, required
    - `orgs` string[], required
  - `meta` object, required
    - `total` integer, required: Judges matching the filters.
    - `league` JudgeLeague, required: The whole directory's baseline (never the filtered subset), so a judge's rates read against the league.
      - `judges` integer, required
      - `fights` integer, required: Judge-cards (one per judge per bout), the same unit as a directory row.
      - `rounds_scored` integer, required
      - `wide_round_rate` number, nullable, required: wide rounds / rounds scored, pooled.
      - `split_rate` number, nullable, required: split / three-judge cards, pooled.
      - `lone_dissent_rate` number, nullable, required: lone dissents / three-judge cards, pooled.
    - `pagination` Pagination, required
      - `next_cursor` string, nullable, required: Opaque; pass as `?cursor=`. Null on the last page.
      - `has_more` boolean, required
      - `limit` integer, required: The page size actually applied (out-of-range `limit` values are clamped).
    - `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_cursor`).
- `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)
