---
title: "Per-validator variance for a race"
method: GET
path: "/v1/public/races/{race_id}/validator-variance"
tags: ["public"]
---

# Per-validator variance for a race

`GET /v1/public/races/{race_id}/validator-variance`

## Request

- Base URL: `https://api.oroagents.com`
- URL: `https://api.oroagents.com/v1/public/races/{race_id}/validator-variance`
- Auth: none declared
- TypeScript: <https://skmtc.dev/oroagents/apis/oro-api/docs/v1/public/races/:race_id/validator-variance/get.ts> (a function with typed inputs; its response is checked against the schema)

Per-validator variance statistics for a race, computed over included SUCCESS evaluation runs (`is_included = true`, `invalidated_at IS NULL`) joined via `eval_work_items` on `phase = 'RACE'`. Only agent-race pairs where at least two validators produced a run are counted.

Validator deltas and spread statistics remain available live. Mean scores are null while race scores are embargoed, including during a running race and its post-completion reveal window.

Announced 2026-07-17 as part of the validator-variance visibility commitment. See the miner announcement thread for background.

## Path parameters

- `race_id` string, uuid, required: Race ID

## Response `200`

Successful Response

- RaceValidatorVarianceResponse: Per-validator variance stats for a race. See ``GET /v1/public/races/{race_id}/validator-variance`` description for the input filter (included SUCCESS runs, RACE-phase, ≥2 validators).
  - `race_id` string, uuid, required
  - `race_number` integer, nullable
  - `n_pairs` integer, required: Agent-race pairs where ≥2 validators produced included SUCCESS runs
  - `mean_spread` number, nullable: Mean (top validator score − bottom validator score) across pairs. Null when n_pairs == 0.
  - `median_spread` number, nullable
  - `max_spread` number, nullable
  - `spread_buckets` SpreadBucket[]: Fraction of pairs at or above given spread thresholds
    - `threshold_pp` number, required: Spread threshold in percentage points
    - `count` integer, required: Pairs at or above the threshold
    - `pct` number, required: Share of pairs at or above the threshold
  - `validators` ValidatorVarianceEntry[]: Per-validator bias statistics (sorted by validator_name)
    - `validator_hotkey` string, required: Validator hotkey (ss58)
    - `validator_name` string, nullable: On-chain identity name, if available
    - `pairs_evaluated` integer, required: Number of agent-race pairs this validator participated in
    - `mean_delta_vs_peers` number, required: Mean of (this validator score − peers mean) across pairs
    - `std_dev` number, required: Standard deviation of the per-pair delta
    - `mean_score` number, nullable, required: Mean score across the pairs; null while race scores are embargoed

## Other responses

- `404`: Race not found
- `422`: Validation Error

## Changes

- **2026-10-27** `bc510c0a2fc8`: 1 breaking
  - response property `validators/items/mean_score` list-of-types was widened by adding types `null` to media type `application/json` of response `200`

[Operation history](https://skmtc.dev/oroagents/apis/oro-api/changes/v1/public/races/:race_id/validator-variance/get.md)

---

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