Skip to main content
POST
/
matches
/
{matchId}
/
attendance
curl -X POST https://teambattles.gg/api/v1/matches/jm7match123/attendance \
  -H "Authorization: Bearer tb_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"status": "ATTENDING"}'
{
  "success": true,
  "timestamp": "<string>",
  "reclaimedSpot": true,
  "replacedBy": "<string>",
  "message": "<string>"
}

Permission Required

This endpoint requires matches.user_matches:read-write on your API key. A free (api_free) key receives 403 error_api_feature_required; this requires an api_pro+ plan.

Access / Membership Rules

This updates the API key owner’s own attendance, derived from the key itself - it is never accepted as a body field, so a key can only change its own status. The owner must already be rostered in the match. When attendance changes, the platform may automatically swap active and bench players (reflected in reclaimedSpot and replacedBy). A personal key can only act on matches its owner is rostered in - the route binding is a no-op and this authorization is enforced inside Convex. A non-personal key receives 403 API_KEY_PERMISSION_DENIED. This route accepts an optional Idempotency-Key header so retries are safe.

Request Body

FieldTypeRequiredDescription
statusstringYesThe owner’s attendance status: ATTENDING, NOT_ATTENDING, or TENTATIVE.

What’s Returned

Returns success, plus the optional reclaimedSpot (boolean), replacedBy (user ID), and message fields describing any roster swap, and a timestamp. Mintlify renders the full schema from the spec below.
curl -X POST https://teambattles.gg/api/v1/matches/jm7match123/attendance \
  -H "Authorization: Bearer tb_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"status": "ATTENDING"}'

Authorizations

Authorization
string
header
required

Send your API key as: Authorization: Bearer tb_

Path Parameters

matchId
string
required

Match ID.

Body

application/json

Updates the API key owner's own attendance status for a match.

status
enum<string>
required

The API key owner's attendance status for this match.

Available options:
ATTENDING,
NOT_ATTENDING,
TENTATIVE

Response

The attendance status was updated.

success
boolean
required
timestamp
string
required
reclaimedSpot
boolean
replacedBy
string
message
string