---
title: "Accept or decline a tournament invite"
method: POST
path: "/tournaments/{identifier}/invites/{inviteId}/respond"
tags: ["Tournament Entry"]
---

# Accept or decline a tournament invite

`POST /tournaments/{identifier}/invites/{inviteId}/respond`

Answers an organizer's invite for a team you lead. The invite must still be PENDING; an already-answered or revoked invite answers 400 error_invalid_input.

ACCEPTING IS ENTRY, and carries entry's full refusal set. Supply roster - it is required whenever accept is true, and omitting it is rejected as an invalid request rather than silently failing later. The array must hold at least the tournament's teamSize active members of the invited team, or the request answers 400 error_roster_too_small. Acceptance also enforces the pre-start window (400 error_registration_closed), capacity (409 error_tournament_full), and one live entry per team (409 error_already_entered). On success the response carries the participantId, which is the handle for check-in and withdraw.

DECLINING IS ALWAYS AVAILABLE. roster is ignored when accept is false, and the competitive-ban gate applies only to acceptance - a captain serving a ban can decline an invite so the organizer can move on, but receives 403 error_competitive_banned if they try to accept.

Authority comes from the invite: you must be the captain, co-captain, or organization owner of the invited team. An inviteId belonging to a different tournament answers 404 error_tournament_not_found. Invite IDs are returned by GET /tournaments/{identifier}/me. Requires the tournaments actor entry capability at read-write.

## Path parameters

- `identifier` string, required — Tournament slug.
- `inviteId` string, required — Tournament invite ID, as returned by GET /tournaments/{identifier}/me for a team you lead.

## Request body

- TournamentInviteRespondBody — Captain response to a tournament invite.
  - `accept` boolean, required — true to accept the invite and enter the tournament, false to decline it. A competitive ban blocks accepting but never declining.
  - `roster` string[] — User IDs to register as the team's tournament roster. REQUIRED when accept is true and ignored when it is false. Every entry must be an ACTIVE member of the invited team, and the array must hold at least the tournament's teamSize members - a shorter roster answers 400 error_roster_too_small.

## Response `200`

The response was recorded.

- TournamentInviteRespondResponse — Outcome of accepting or declining a tournament invite.
  - `accepted` boolean, required — Echoes the request's accept flag once the response has been recorded.
  - `participantId` string — The participant row the acceptance created or reused. Present only when accepted is true; store it, because check-in and withdraw are keyed by it.
  - `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.
- `409` — Conflict.
- `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/revisions/2ffe8fb53b7d/schema)
