---
title: "Submit a single map's score"
method: POST
path: "/game/matches/{matchId}/scores/{mapIndex}"
tags: ["Game: Scores"]
---

# Submit a single map's score

`POST /game/matches/{matchId}/scores/{mapIndex}`

## Request

- Base URL: `https://teambattles.gg/api/v1`
- URL: `https://teambattles.gg/api/v1/game/matches/{matchId}/scores/{mapIndex}`
- Auth: HTTP bearer

Submits the score for one map (mapIndex from the path); game-developer scores are auto-confirmed. Requires the game.scores:write permission.

## Path parameters

- `matchId` string, required: Match ID.
- `mapIndex` string, required: Zero-based index of the map within the series.

## Request body

- GameSingleMapScoreBody: Request body for submitting a single map's score (mapIndex comes from the path).
  - `mapId` string, required: Identifier of the map that was played.
  - `creatorTeamScore` integer, required: Score for the creator team (integer, 0-1000).
  - `opponentTeamScore` integer, required: Score for the opponent (accepted) team (integer, 0-1000).
  - `screenshotUrls` string[]: Optional external screenshot URLs supporting the reported score. Each must be a public https URL. Prefer screenshotStorageIds (validated blobs) where possible.
  - `screenshotStorageIds` string[]: Optional storage IDs for screenshots uploaded via POST /uploads/image-url. Preferred over screenshotUrls: each is validated (size, content-type, ownership) and resolved to a URL server-side.
  - `playerStats` object: Optional per-player stats keyed by user ID.

## Response `200`

The map score was submitted and confirmed.

- GameSingleMapScoreResponse: Result of submitting a single map score.
  - `success` true, required
  - `mapIndex` integer, required: Index of the map that was scored.
  - `scoreStatus` string, required: Confirmation state, always "CONFIRMED" on success.

## Other responses

- `400`: Bad request (invalid body, cursor, limit, or date).
- `401`: Missing or invalid API key.
- `403`: API key lacks the required permission.
- `404`: Resource not found.

## Changes

- **2026-06-10** `82f2480cdb83`: 2 info
  - api tag `Game: Scores` added
  - api tag `Game` removed
- **2026-06-08** `4bed7522e6f8`: 2 breaking, 2 warning
  - the `creatorTeamScore` request property type changed from `number` to `integer`
  - the `opponentTeamScore` request property type changed from `number` to `integer`
  - the `creatorTeamScore` request property's max was set to `1000.00`
  - the `opponentTeamScore` request property's max was set to `1000.00`
- **2026-06-08** `33b01a4694a7`: 1 info
  - added the new optional request property `screenshotStorageIds`
- **2026-06-04** `f22bd61fd595`: 1 warning, 4 info
  - removed the request property `screenshotStorageIds`
  - api tag `Game` added
  - api tag `Game: Scores` removed
  - the `creatorTeamScore` request property type was generalized from `integer` to `number`
  - …1 more

[Operation history](https://skmtc.dev/teambattles/apis/teambattles-api/changes/game/matches/:matchId/scores/:mapIndex/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)
