---
title: "Get Leaderboard"
method: GET
path: "/leaderboard"
tags: ["leaderboard"]
---

# Get Leaderboard

`GET /leaderboard`

## Request

- Base URL: `https://api.verdun.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.verdun.ai/leaderboard`
- Auth: HTTP bearer

Operator leaderboard (BETA). Everyone sees rank, score, alarms and median
pickup; the points breakdown (and overturns) is the caller's own, or any
operator's for a lead.

## Query parameters

- `window` 'today' | 'week' | 'month' | 'last_month': today = since local midnight; week = since Monday 00:00; month = since the 1st 00:00; last_month = the previous calendar month, closed (monitoring-center time zone). Ranked by score except week (points per hour).
- `operator_id` string, uuid, nullable: Leads only: whose points breakdown to return. A non-lead naming anyone but themself gets a 403.

## Response `200`

Successful Response

- GetLeaderboardResponse
  - `window` 'today' | 'week' | 'month' | 'last_month', required: today since local midnight; week since Monday local midnight; month since the 1st local midnight; last_month = the previous calendar month, closed.
  - `starts_at` string, date-time, required: Inclusive window start in UTC.
  - `ends_at` string, date-time, required: Window end in UTC: now for a live window, this month's 1st local midnight for last_month.
  - `timezone` string, required: Monitoring-center IANA time zone used to derive window boundaries.
  - `rank_metric` 'score' | 'points_per_hour', required: Field used to rank the board.
  - `min_hours` number, required: Minimum hours to appear on the board (0 except week).
  - `scoring` LeaderboardScoring, required
    - `handled` integer, required: Points for one handled alarm.
    - `bulk` integer, required: Points for one alarm closed with Close all.
    - `pickup_tiers` array[], required: [[seconds_under, bonus], ...] for a first-view pickup.
      - integer[]
    - `rushed_under_seconds` integer, required: Deciding this fast after the first view zeroes the pickup bonus.
    - `overturn` integer, required: Points for an active overturn (charged to the decider).
    - `catch` integer, required: Points for catching an overturned call: credited to the peer operator whose overturn a lead confirmed.
    - `agent_catch` integer, required: Points for catching a MISS of the AI agent (SCORE_AGENT_CATCH): same rule as `catch`, but the overturned decider was the agent's close and the correct call is more serious than the agent's. An overturn of an agent false alarm (Non-threatening -> False alarm) is auto-confirmed and earns 0.
  - `rows` LeaderboardRow[], required: Eligible operators in rank order.
    - `operator_id` string, uuid, required: The deciding operator.
    - `operator_name` string, required: First and last name.
    - `rank` integer, required: 1-based; ties broken by more alarms, then name.
    - `prev_rank` integer, nullable: Rank one hour ago on the same board; null if the window is younger than an hour or they were not on it.
    - `score` integer, required: Total points including active overturn penalties and catch bonuses.
    - `alarms` integer, required: Handled plus bulk.
    - `fast_pickups` integer, required: Non-bulk decisions that earned a pickup bonus.
    - `catches` integer, required: Other operators' calls this operator overturned that a lead confirmed (and no dispute reversed), confirmed within the window.
    - `overturns` integer, required: This operator's own calls in the window that stand overturned (same rule as the breakdown's `overturns`; each costs `scoring.overturn`).
    - `median_pickup_seconds` number, nullable: Median known first-view pickup time in seconds; null without samples.
    - `hours` number, required: Hours worked within the requested window.
    - `hours_source` 'clocked' | 'active', required: clocked uses time punches; active estimates distinct hours containing decisions.
    - `points_per_hour` number, nullable, required: Score divided by hours, or null without worked hours.
    - `is_self` boolean, required: Whether this row belongs to the caller.
  - `breakdown` LeaderboardBreakdown
    - `operator_id` string, uuid, required: The deciding operator.
    - `operator_name` string, required: First and last name.
    - `handled` integer, required: Number of individually handled alarms.
    - `handled_points` integer, required: Points earned for individually handled alarms.
    - `bulk` integer, required: Number of alarms handled through Close all.
    - `bulk_points` integer, required: Points earned for bulk-closed alarms.
    - `fast_pickups` integer, required: Non-bulk decisions that earned a pickup bonus.
    - `pickup_points` integer, required: Total first-pickup bonus points.
    - `rushed` integer, required: Decisions whose pickup bonus was cancelled for rushing.
    - `overturns` integer, required: Active overturned decisions in the window.
    - `overturn_points` integer, required: Penalty points for active overturns.
    - `catches` integer, required: Confirmed overturns this operator caught on other operators' calls in the window.
    - `catch_points` integer, required: Bonus points for those catches.
    - `score` integer, required: Total points including active overturn penalties and catch bonuses.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/verdun/apis/verdun-api.md) - [All operations](https://skmtc.dev/verdun/apis/verdun-api/llms.txt) - [OpenAPI document](https://skmtc.dev/verdun/apis/verdun-api/revisions/35a2a6ebedda?raw)
