---
title: "Vote On Bracket Match"
method: POST
path: "/api/v1/brackets/{tournament_id}/vote"
tags: ["Brackets"]
---

# Vote On Bracket Match

`POST /api/v1/brackets/{tournament_id}/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/brackets/{tournament_id}/vote`
- Auth: none declared

Record a vote on a specific bracket match and advance the winner.

Creates a normal Vote row (so the underlying ranking's mu/phi update
through the normal pipeline) inside the same atomic transaction that
advances the bracket state. Safe against concurrent votes on the same
match: the second request will get a 409 because the winner field
will already be set.

## Path parameters

- `tournament_id` string, required

## Request body

- BracketVoteRequest
  - `match_id` string, required
  - `winner_id` string, required

## Response `200`

Successful Response

- BracketVoteResponse
  - `match` BracketMatchResponse, required
    - `id` string, required
    - `round` integer, required
    - `position` integer, required
    - `entity_a` EntityLite
      - `id` string, required
      - `name` string, required
      - `image_url` string, nullable
      - `media_url` string, nullable
      - `rating` integer, required
      - `mu` number, required
    - `entity_b` EntityLite
      - `id` string, required
      - `name` string, required
      - `image_url` string, nullable
      - `media_url` string, nullable
      - `rating` integer, required
      - `mu` number, required
    - `winner_id` string, nullable
    - `next_match_id` string, nullable
    - `next_slot` string, nullable
    - `is_ready` boolean, required
    - `is_complete` boolean, required
  - `next_match` BracketMatchResponse
    - `id` string, required
    - `round` integer, required
    - `position` integer, required
    - `entity_a` EntityLite
      - `id` string, required
      - `name` string, required
      - `image_url` string, nullable
      - `media_url` string, nullable
      - `rating` integer, required
      - `mu` number, required
    - `entity_b` EntityLite
      - `id` string, required
      - `name` string, required
      - `image_url` string, nullable
      - `media_url` string, nullable
      - `rating` integer, required
      - `mu` number, required
    - `winner_id` string, nullable
    - `next_match_id` string, nullable
    - `next_slot` string, nullable
    - `is_ready` boolean, required
    - `is_complete` boolean, required
  - `tournament_status` string, required
  - `champion` EntityLite
    - `id` string, required
    - `name` string, required
    - `image_url` string, nullable
    - `media_url` string, nullable
    - `rating` integer, required
    - `mu` number, required

## 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)
