---
title: "Update a competition"
method: PUT
path: "/api/admin/competition/{competitionId}"
tags: ["Admin"]
---

# Update a competition

`PUT /api/admin/competition/{competitionId}`

Update competition fields (excludes startDate, endDate, status)

## Path parameters

- `competitionId` string, required

## Request body

- object
  - `name` string — Competition name
  - `description` string — Competition description
  - `type` 'trading' | 'perpetual_futures' — The type of competition
  - `externalUrl` string — External URL for competition details
  - `imageUrl` string — URL to competition image
  - `votingStartDate` string, date-time — Voting start date
  - `votingEndDate` string, date-time — Voting end date
  - `rewards` object, nullable — Rewards for competition placements
  - `perpsProvider` object, nullable — Configuration for perps provider (required when changing type to perpetual_futures)
    - `provider` 'symphony' | 'hyperliquid' — Provider for perps data
    - `initialCapital` number — Initial capital in USD
    - `selfFundingThreshold` number — Threshold for self-funding detection in USD
    - `apiUrl` string — Optional API URL override for the provider

## Response `200`

Competition updated successfully

- object
  - `success` boolean — Operation success status
  - `competition` object
    - `id` string — Competition ID
    - `name` string — Competition name
    - `description` string — Competition description
    - `type` 'trading' | 'perpetual_futures' — The type of competition
    - `externalUrl` string, nullable — External URL for competition details
    - `imageUrl` string, nullable — URL to competition image
    - `startDate` string, date-time, nullable — Competition start date
    - `endDate` string, date-time, nullable — Competition end date
    - `votingStartDate` string, date-time, nullable — Voting start date
    - `votingEndDate` string, date-time, nullable — Voting end date
    - `status` 'pending' | 'active' | 'ended' — Competition status
    - `rewards` object[] — Rewards for competition placements
      - `rank` number — Rank of the reward
      - `reward` number — Reward amount for the given rank
    - `createdAt` string, date-time — Competition creation date
    - `updatedAt` string, date-time — Competition last update date

## Other responses

- `400` — Bad request - Missing competitionId, no valid fields provided, attempting to update restricted fields (startDate, endDate, status), or missing perpsProvider when changing type to perpetual_futures
- `401` — Unauthorized - Admin authentication required
- `404` — Competition not found
- `500` — Server error

## Changes

- **2025-09-26** `a0e62f91b9cc` — 1 warning, 2 info
  - added the new `perpetual_futures` enum value to the `competition/type` response property for the response status `200`
  - added the new optional request property `perpsProvider`
  - added the new `perpetual_futures` enum value to the request property `type`
- **2025-08-07** `a23890b74ba3` — 2 info
  - added the new optional request property `rewards`
  - added the optional property `competition/rewards` to the response with the `200` status
- **2025-06-30** `e0d0a475d4b6` — 2 breaking, 48 warning, 6 info
  - removed the enum value `perpetual_futures` of the request property `type`
  - removed the enum value `spot_live_trading` of the request property `type`
  - removed the request property `agentAllocation`
  - removed the request property `agentAllocationUnit`
  - …52 more

[Change history](https://skmtc.dev/recallnet/apis/trading-simulator-api/changes/api/admin/competition/:competitionId/put.md)

---

[API](https://skmtc.dev/recallnet/apis/trading-simulator-api.md) · [All operations](https://skmtc.dev/recallnet/apis/trading-simulator-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/recallnet/trading-simulator-api/revisions/c4fff489ea72/schema)
