Matches

List matches for a game

Matches for the game, newest scheduled first. An unknown `{game}` 404s cleanly.

GET
/v1/{game}/matches

Matches for the game, newest scheduled first. An unknown {game} 404s cleanly.

Authorization

AuthorizationBearer <token>

Primary auth (live). Authorization: Bearer <api-key> — the header takes precedence over the query fallback. The raw key is hashed (SHA-256, hex) and looked up in api.keys.key_hash; the raw value is never stored.

In: header

Path Parameters

game*string

Game slug. cs2 is the only populated title today; an un-onboarded game 404s cleanly.

Query Parameters

status?string

Filter by match status.

Value in

  • "scheduled"
  • "live"
  • "completed"
tournament?string

Filter by tournament (UUID).

Formatuuid
team?string

Filter by team (UUID).

Formatuuid
date_from?string

Only matches scheduled on or after this day, as YYYY-MM-DD (e.g. 2026-07-01). Compared against scheduled_at in UTC and inclusive of the whole day. A malformed value is a 400, not a silent no-op.

Formatdate
date_to?string

Only matches scheduled on or before this day, as YYYY-MM-DD. Inclusive — date_to=2026-07-01 includes everything on 1 July, not just midnight.

Formatdate
has?string

Keep only matches that actually carry the named sub-resources. Comma-separated and AND-ed, e.g. has=rounds,depth returns only matches with BOTH round data and the per-player depth layer. Values are the same keys as data_available. An unknown name is a 400, never a silently-ignored filter.

limit?integer

Page size. The default and maximum vary per endpoint — this shared definition documents the common case (default 100, max 500); each operation that differs states its own numbers. cursor carries the page position, not limit.

A value above the endpoint's maximum is silently clamped, not rejected. A missing, zero, negative or non-numeric value silently falls back to the default — so ?limit=abc and ?limit=0 both return the default page size rather than a 400. Read meta.count if you need to know how many rows you actually got.

Range1 <= value
Default100
cursor?string

Opaque forward pagination cursor — pass the previous page's meta.next_cursor verbatim. Omit for the first page. Never construct one by hand.

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/cs2/matches"
{  "data": [    {      "id": "019f944a-9457-7881-9a29-fd79968ef033",      "game_id": "019f23d1-fb5b-7d24-935d-e4d68f6f565a",      "tournament_id": "019f940e-f4be-72cc-ac9b-11ac9f3f4f78",      "team_a_id": "019f2858-e253-726e-a8b3-02ae26b60e46",      "team_b_id": "019f23d2-5a34-7a96-bfa4-fd4a8dd308db",      "format": "bo1",      "status": "scheduled",      "stage": "Elisa BreakOut Series 1 Group B",      "scheduled_at": "2026-07-31T18:00:00Z",      "score_a": 0,      "score_b": 0,      "winner_team_id": null,      "created_at": "2026-07-24T13:22:47.374195Z",      "updated_at": "2026-07-25T23:06:56.921667Z",      "team_a_name": "HAVU",      "team_a_short": "HAVU",      "team_b_name": "ROUNDS",      "team_b_short": "RGG",      "tournament_name": "Elisa BreakOut Series 1",      "data_available": {        "maps": false,        "stats": false,        "vetoes": false,        "rounds": false,        "depth": false      }    },    {      "id": "019f944a-9457-7b0e-9e11-21ee84068644",      "game_id": "019f23d1-fb5b-7d24-935d-e4d68f6f565a",      "tournament_id": "019f940e-f4be-72cc-ac9b-11ac9f3f4f78",      "team_a_id": "019f2858-e255-7d70-9764-b53dc5dec428",      "team_b_id": "019f944a-9457-7cee-8190-0a40db33e1f7",      "format": "bo1",      "status": "scheduled",      "stage": "Elisa BreakOut Series 1 Group B",      "scheduled_at": "2026-07-31T16:00:00Z",      "score_a": 0,      "score_b": 0,      "winner_team_id": null,      "created_at": "2026-07-24T13:22:47.374195Z",      "updated_at": "2026-07-25T23:06:56.921667Z",      "team_a_name": "BC.Game",      "team_a_short": null,      "team_b_name": "Trainwrecks eSports",      "team_b_short": null,      "tournament_name": "Elisa BreakOut Series 1",      "data_available": {        "maps": false,        "stats": false,        "vetoes": false,        "rounds": false,        "depth": false      }    }  ],  "meta": {    "count": 2,    "next_cursor": "eyJ2IjoiMjAyNi0wNy0zMVQxNjowMDowMFoiLCJpZCI6IjAxOWY5NDRhLTk0NTctN2IwZS05ZTExLTIxZWU4NDA2ODY0NCJ9"  }}
{  "error": {    "code": "not_found",    "message": "not found",    "request_id": "019f3d18-c15f-7319-81a7-343e8a80a578"  }}
{  "error": {    "code": "not_found",    "message": "not found",    "request_id": "019f3d18-c15f-7319-81a7-343e8a80a578"  }}
{  "error": {    "code": "not_found",    "message": "not found",    "request_id": "019f3d18-c15f-7319-81a7-343e8a80a578"  }}