Get Organization Matches
Returns matches across all teams in an organization (resolved by id or slug), newest first, with cursor pagination. The authenticated user must be an active member of the organization. Requires the matches.org_matches:read permission.
Permission Required
This endpoint requires thematches.org_matches permission on your API key.
Membership Required
You must be an active member of the organization to access its matches. If you’re not a member, you’ll receive a403 error with code error_org_membership_required.
Organization Identifier
The{identifier} path parameter accepts either:
- Organization ID: The Convex document ID (e.g.,
kd8xyz789ghi012) - Organization Slug: The URL-friendly org name (e.g.,
Esports_Org)
What’s Returned
This endpoint returns matches for all teams within the organization. This is useful for organization admins or dashboards that need to see activity across all teams.Filtering Options
League Teams Only
TheleagueTeamsOnly parameter is unique to this endpoint:
| Parameter | Type | Description |
|---|---|---|
leagueTeamsOnly | boolean | Only include matches involving LEAGUE type teams |
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.org_matches: read |
error_org_membership_required | 403 | You are not an active member of the requested organization |
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_org_not_found | 404 | The {identifier} could not be resolved to an organization |
error_team_not_found | 404 | opponentId could not be resolved to a team |
error_internal | 500 | Unhandled server error - retry or contact support |
Common Use Cases
Get All League Matches
Get Active Matches Across All Teams
Get Completed League Matches for Stats
Get Matches for a Specific Game
Get Organization Match History for a Season
Authorizations
Send your API key as: Authorization: Bearer tb_
Path Parameters
Organization id or slug.
Body
Filters and cursor pagination for listing matches.
Page size (1-100). Defaults to 25.
1 <= x <= 100Opaque continuation cursor from a prior page's continueCursor.
Only include matches with these MatchStatus codes; unknown values are ignored.
Exclude matches with these MatchStatus codes; unknown values are ignored.
Filter to a single game by id.
ISO 8601; only matches scheduled at or after this time.
ISO 8601; only matches scheduled at or before this time.
ISO 8601; only matches created at or after this time.
ISO 8601; only matches created at or before this time.
Filter to matches against this opponent team (team id or slug).