Get Team Matches
Returns matches for a specific team. The identifier can be a Convex team ID or team slug. Requires API key with matches.team_matches permission. User must be an active member of the team.
Documentation Index
Fetch the complete documentation index at: https://teambattles.gg/docs/llms.txt
Use this file to discover all available pages before exploring further.
Permission Required
This endpoint requires thematches.team_matches permission on your API key.
Membership Required
You must be an active member of the team to access its matches. If you’re not a member, you’ll receive a403 error with code error_team_membership_required.
Team Identifier
The{identifier} path parameter accepts either:
- Team ID: The Convex document ID (e.g.,
jh7abc123def456) - Team Slug: The URL-friendly team name (e.g.,
Team_Alpha)
Filtering Options
Status Filtering
Filter matches by their status:- includeStatuses: Only return matches with these statuses (takes precedence)
- excludeStatuses: Return all matches except those with these statuses
Date Filtering
Filter by scheduled or creation dates using ISO 8601 format:- scheduledAfter / scheduledBefore: Filter by scheduled match time
- createdAfter / createdBefore: Filter by when the match was created
Other Filters
- gameId: Filter by a specific game
- opponentId: Filter by opponent team (accepts team ID or slug)
Pagination
Results are paginated with a default of 25 matches per page (maximum 100).Request Fields
| Parameter | Type | Description |
|---|---|---|
numItems | number | Number of items per page, 1-100, default 25 |
cursor | string | Opaque cursor string from a prior response (optional) |
Response Fields
| Field | Type | Description |
|---|---|---|
page | array | Array of matches for this page |
isDone | boolean | true when there are no more pages to fetch |
continueCursor | string | Pass back as cursor on the next request |
Errors
| Code | HTTP Status | When |
|---|---|---|
error_api_key_required | 401 | Missing Authorization header |
error_api_key_invalid | 401 | API key is unknown, revoked, or expired |
error_api_key_permission_denied | 403 | The key does not hold matches.team_matches: read |
error_team_membership_required | 403 | You are not an active member of the requested team |
error_invalid_num_items | 400 | numItems is outside the allowed 1-100 range |
error_invalid_limit | 400 | Reserved for limit-style page sizes (registry-level error code) |
error_invalid_cursor | 400 | cursor is malformed or no longer valid |
error_invalid_date_format | 400 | One of the scheduled*/created* filters is not ISO 8601 |
error_team_not_found | 404 | The {identifier} or opponentId could not be resolved |
error_internal | 500 | Unhandled server error - retry or contact support |
Common Use Cases
Get Active Team Matches
Get Matches Against a Specific Opponent
Get Upcoming Scheduled Matches
Get Match History for a Date Range
Authorizations
API key authentication. Generate an API key from Settings > Developer in the TeamBattles app. Format: tb_xxxxxxxx...
Path Parameters
Team ID or slug
Body
Optional filters and pagination options
Only include matches with these statuses. Takes precedence over excludeStatuses.
Current status of a match
PENDING, ACCEPTED, READY, IN_PROGRESS, COMPLETED, CANCELLED, DISPUTED, FORFEITED Exclude matches with these statuses. Ignored if includeStatuses is provided.
Current status of a match
PENDING, ACCEPTED, READY, IN_PROGRESS, COMPLETED, CANCELLED, DISPUTED, FORFEITED Filter by game ID
Filter to matches scheduled after this date (ISO 8601)
Filter to matches scheduled before this date (ISO 8601)
Filter to matches created after this date (ISO 8601)
Filter to matches created before this date (ISO 8601)
Filter by opponent team (ID or slug)
Maximum number of matches to return (1-100)
1 <= x <= 100Pagination cursor from previous response (opaque Convex cursor string)