---
title: "Add a member to your own team's roster"
method: POST
path: "/tournaments/{identifier}/teams/{teamIdentifier}/roster"
tags: ["Tournament Entry"]
---

# Add a member to your own team's roster

`POST /tournaments/{identifier}/teams/{teamIdentifier}/roster`

Adds a user to the tournament roster of a team you lead. The participant edited is derived from the team in the path, so this endpoint can only ever touch your own team's roster - editing another participant's roster is the separate organizer endpoint and requires ADMIN authority over the tournament. Answers 400 error_invalid_input when the team is not entered in this tournament, when the user is not an ACTIVE member of that team, or when the user is already rostered in this tournament (one roster entry per user per tournament, across all teams). Requires the tournaments actor roster capability.

## Path parameters

- `identifier` string, required — Tournament slug.
- `teamIdentifier` string, required — Slug of the team to act as. You must be its captain, co-captain, or the owner of the organization that owns it. A team you do not lead and a slug that does not resolve BOTH answer 403 error_not_team_leader, so that this path is not a team-slug enumeration oracle.

## Request body

- TournamentTeamRosterAddBody — Competitor roster addition payload.
  - `userId` string, required — User ID of the member to add to YOUR team's tournament roster. The participant is resolved from the team in the path and is never supplied in the body.

## Response `200`

The member was added to the roster.

- TournamentWriteAck — Acknowledgement returned by the tournament write endpoints whose backing operation has nothing to return - the organizer writes (endpoints 22-34), the team roster writes (40, 41), and the competitor self actions that neither mint nor resolve a row (38, 39, 44, 45, 47). Endpoints that mint a row answer with that row's id instead, and the two respond endpoints (42, 46) answer with the decision they recorded.
  - `success` true, required — Always true; failures are error responses.
  - `timestamp` string, required — Response generation time (ISO 8601).

## 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.
- `429` — Rate limited.
- `500` — Internal server error.

---

[API](https://skmtc.net/teambattles/apis/teambattles-api.md) · [All operations](https://skmtc.net/teambattles/apis/teambattles-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/teambattles/teambattles-api/versions/2ffe8fb53b7d/schema)
