v20

OpenAPI 3.1.0raw.githubusercontent.com2026-08-011984401.2 MB
Tournament: Lifecycle

Update a tournament

Applies a partial edit to a tournament, resolved by slug. The result is TRI-STATE and you must branch on applied: before the tournament has ever been approved the edit applies directly (direct); afterwards a material change is staged into a pending set and the tournament flips to AWAITING_APPROVAL (pending), and an edit that changes nothing is a noop. A COMPLETED or CANCELLED tournament rejects every edit with 400. Requires an API key holding the tournaments lifecycle capability whose owner is a tournament ADMIN - a tournamentStaff MODERATOR is NOT sufficient and receives 403.

post/tournaments/{identifier}/update

Path parameters

identifierstring required

Tournament slug.

Tournament slug.

Request body

namestring
descriptionstring
rulesstring
gameIdstring

Convex game id.

playlistIdstring

Convex game playlist id.

teamSizeinteger
format'SINGLE_ELIMINATION' | 'DOUBLE_ELIMINATION' | 'ROUND_ROBIN' | 'SWISS'
minParticipantsinteger
maxParticipantsinteger

Re-checked against the format entrant ceiling AND the host plan's participant limit whenever it or format changes.

registrationMode'OPEN' | 'APPLICATION' | 'INVITE_ONLY'
registrationStartsAtinteger

Unix ms.

registrationEndsAtinteger

Unix ms.

checkInRequiredboolean
checkInOpensMinutesBeforeinteger
startsAtinteger

Unix ms.

endsAtinteger

Unix ms.

prizePoolnumber
prizeCurrencystring
prizeDescriptionstring
bannerStorageIdstring

Convex storage id.

logoStorageIdstring

Convex storage id.

visibility'PUBLIC' | 'UNLISTED'

Response

The edit was accepted. Branch on applied.

applied'direct' | 'pending' | 'noop' required

direct - the tournament has never been approved, so the edit is live immediately. pending - the tournament has been approved before, so the edit was staged in pendingChanges and the approval status flipped to AWAITING_APPROVAL; it is NOT live and the tournament is off the public listing until staff re-approve. noop - the tournament has been approved before and every supplied value already matched the stored one, so nothing was staged and the approval status was left alone.

changedFieldsTournamentMaterialField[]

Present only when applied is pending. The material fields staged for re-approval, which is the merge of this request with any changes already pending.

approvalStatus'NOT_SUBMITTED' | 'AWAITING_APPROVAL' | 'APPROVED' | 'REJECTED'

Present only when applied is pending, where it is always AWAITING_APPROVAL. Omitted otherwise, because the direct and noop arms leave the approval status untouched and echoing a pre-request snapshot would be a guess.

timestampstring required