---
title: "Judge Vote"
method: POST
path: "/api/v1/judges/vote"
tags: ["LLM Judges"]
---

# Judge Vote

`POST /api/v1/judges/vote`

## Request

- Base URL: `https://app.aimrank.io` (the document declares no server; this is the origin it was published from)
- URL: `https://app.aimrank.io/api/v1/judges/vote`
- Auth: none declared

Have an LLM judge vote on a single matchup.

Owner-only: only the ranking's owner can invoke paid LLM calls on it.

## Request body

- JudgeVoteRequest
  - `ranking_id` string, required
  - `entity_a_id` string, required
  - `entity_b_id` string, required
  - `judge_id` string
  - `criterion` string, nullable: What the judge should optimize for. Defaults to the ranking's name/description.
  - `randomize_position` boolean: Run A/B and B/A and reconcile — mitigates position bias. 2× the cost.
  - `submit_as_vote` boolean: If true, record the verdict as a vote. If false, return the verdict without persisting.
  - `max_tokens` integer: Output token cap. Default 400 fits the JSON verdict; bump to 800–2000 for verbose rationale used in interpretability training.
  - `thinking` boolean: Enable Anthropic extended thinking on Opus 4.7. Adds ~5–10pp accuracy on adversarial subsets at 2–5× cost. Silently no-op on Sonnet/Haiku because they don't support the field.
  - `apply_constitution` boolean: Prepend the ranking's effective constitution (Phase 9.2 alignment scaffold) to the judge prompt — so the judge applies the same principles humans see in the UI. Set false to bypass.

## Response `201`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/aimrank/apis/aimrank-api.md) · [All operations](https://skmtc.dev/aimrank/apis/aimrank-api/llms.txt) · [OpenAPI document](https://skmtc.dev/aimrank/apis/aimrank-api/revisions/3574d0aff459?raw)
