---
title: "Update competition"
method: POST
path: "/admin/competitions/{slug}"
tags: ["Admin"]
---

# Update competition

`POST /admin/competitions/{slug}`

## Request

- Base URL: `https://api.testnet.rise.trade`
- URL: `https://api.testnet.rise.trade/admin/competitions/{slug}`
- Auth: none required
- TypeScript: <https://skmtc.dev/rise/apis/risex-rest-api/docs/admin/competitions/:slug/post.ts> (a function with typed inputs; its response is checked against the schema)

Update an existing competition (internal). Fails with NOT_FOUND if the slug does not exist. Fields omitted from the request keep their stored values.

## Path parameters

- `slug` string, required

## Request body

- CompetitionServiceUpdateCompetitionBody: UpdateCompetitionRequest carries a partial update: only fields present in the request change. An empty string (name/description/prize_pool/*_json) or a 0 timestamp (start_time/end_time) means "leave the stored value unchanged", so callers can edit a single field (e.g. just prize_table_json) in isolation.
  - `name` string
  - `description` string
  - `start_time` string, int64
  - `end_time` string, int64
  - `prize_pool` string
  - `prize_table_json` string
  - `scoring_config_json` string

## Response `200`

A successful response.

- ApiUpdateCompetitionResponse
  - `competition` ApiCompetitionMeta
    - `id` string, int64
    - `slug` string
    - `name` string
    - `description` string
    - `start_time` string, int64
    - `end_time` string, int64
    - `prize_pool` string
    - `state` string
    - `participant_count` integer
    - `created_at` string, int64: Unix seconds when the competition row was created / last updated.
    - `updated_at` string, int64
  - `prize_table_json` string: prize_table JSON as a string, matching GetCompetition (a "winner takes all" table is derived from prize_pool when none was configured).
  - `scoring_config_json` string: scoring_config JSON as a string. Unlike GetCompetition's, this one still carries registration_code — this service is internal-only, and echoing it is how an admin reads back the code they just set.

## Other responses

- `default`: An unexpected error response.

## Changes

- **2026-11-03** `98eabcd6a6ad`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/rise/apis/risex-rest-api/changes/admin/competitions/:slug/post.md)

---

[API](https://skmtc.dev/rise/apis/risex-rest-api.md) - [All operations](https://skmtc.dev/rise/apis/risex-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/rise/apis/risex-rest-api/revisions/98eabcd6a6ad?raw)
