---
title: "Configure tournament league points"
method: POST
path: "/tournaments/{identifier}/league-points"
tags: ["Tournament: Lifecycle"]
---

# Configure tournament league points

`POST /tournaments/{identifier}/league-points`

## Request

- Base URL: `https://teambattles.gg/api/v1`
- URL: `https://teambattles.gg/api/v1/tournaments/{identifier}/league-points`
- Auth: HTTP bearer

Sets whether a league-hosted tournament awards league points on finalization, and the placement curve it awards them by. LEAGUE HOSTS ONLY - a tournament hosted by a user or an organization answers 400. Editable until the tournament finalizes; a COMPLETED or CANCELLED tournament answers 400. These two settings are NOT material fields, so this endpoint applies them directly and never routes them through re-approval, even on an approved tournament - that is exactly why they are not editable via the update endpoint. Requires an API key holding the tournaments lifecycle capability whose owner is a tournament ADMIN - a tournamentStaff MODERATOR is NOT sufficient and receives 403.

## Path parameters

- `identifier` string, required: Tournament slug.

## Request body

- TournamentLeaguePointsRequestBody: League placement-points configuration.
  - `leaguePointsEnabled` boolean, required: Whether finishing this tournament awards league points to the league season.
  - `leaguePointsByPlacement` TournamentPlacementPointsEntry[]: The placement curve. OMIT the field entirely to fall back to the platform default curve - an empty array is NOT the way to award nothing and is rejected as EMPTY (use `leaguePointsEnabled: false` for that). The table is validated even when `leaguePointsEnabled` is false.
    - `placement` integer, required: Final placement, 1 = champion.
    - `points` number, required: League points awarded, 0-1000.

## Response `200`

The configuration was saved.

- TournamentLeaguePointsResponse: The league placement-points configuration now in effect.
  - `success` true, required
  - `leaguePointsEnabled` boolean, required
  - `placementCount` integer, nullable, required: Number of rows in the stored curve, or null when no explicit curve is stored and the platform default applies.
  - `timestamp` string, required

## Other responses

- `400`: Bad request - includes a machine-readable placement-table reject reason.
- `401`: Missing or invalid API key.
- `403`: API key lacks the required permission.
- `404`: Resource not found.
- `429`: Rate limited.
- `500`: Internal server error.

## Changes

- **2026-07-23** `33b122ff59d0`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/teambattles/apis/teambattles-api/changes/tournaments/:identifier/league-points/post.md)

---

[API](https://skmtc.dev/teambattles/apis/teambattles-api.md) - [All operations](https://skmtc.dev/teambattles/apis/teambattles-api/llms.txt) - [OpenAPI document](https://skmtc.dev/teambattles/apis/teambattles-api/revisions/75b07daef7dc?raw)
