List matches for a game
Matches for the game, newest scheduled first. An unknown `{game}` 404s cleanly.
Matches for the game, newest scheduled first. An unknown {game} 404s cleanly.
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 slug. cs2 is the only populated title today; an un-onboarded game 404s cleanly.
Query Parameters
Filter by match status.
Value in
- "scheduled"
- "live"
- "completed"
Filter by tournament (UUID).
uuidFilter by team (UUID).
uuidOnly 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.
dateOnly 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.
dateKeep 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.
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.
1 <= value100Opaque 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" }}Map veto (pick/ban) sequence for one match GET
The match's map pick/ban sequence in veto order (a CS2 bo3 runs ban/ban/pick/pick/ban/ban/decider). The decider step carries a null `team_id` — no team makes that choice. Unknown match id yields an empty list. Enveloped: `{"data": [MapVeto, ...], "meta": {...}}` (not cursor-paginated; `next_cursor` is null).
Data & model coverage matrix (honest reliability) GET
The capability × status matrix behind the dashboard Coverage page and the docs coverage doc: per capability, its status and cadence. `docs/data-sourcing/reconciliation-policy.md`.