> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ticktock.bet/llms.txt
> Use this file to discover all available pages before exploring further.

# Match Players

> Per-player per-map stats for one match — kills, deaths, opening duels, multi-kills, ADR, KAST, Rating

## What it returns

Per-player rows grouped by map for one match. Each row carries:

* **Box score** — `kills`, `deaths`, `assists`, `headshots`, `headshot_pct`
* **ScoreBot derived** — `survived_rounds`, `opening_kills`, `opening_deaths`, `double_kills`, `triple_kills`, `quad_kills`, `ace_kills`
* **HLTV authoritative** (post-match only) — `adr`, `kast`, `rating`

For live matches and matches whose post-match HLTV scoreboard hasn't been scraped yet, `adr` / `kast` / `rating` are `null`. The ScoreBot-derived fields are available throughout the match — derived from the per-round event blob the tracker writes to each round.

When the HLTV scoreboard *is* available, our box-score fields (`kills`, `deaths`, `headshots`, …) are reconciled against HLTV — HLTV wins for those, ScoreBot wins for the per-round derived ones.

## Required scope

* **Minimum:** `cs2:matches:detail`

## Query

| Param        | Description                                                                     |
| ------------ | ------------------------------------------------------------------------------- |
| `map_number` | Filter to a single map (`1`, `2`, `3`, …). Omit to get every map in the series. |

## Example

```bash theme={null}
curl -H "X-API-Key: $TT_KEY" \
  "https://ticktock.bet/cs2/v1/matches/52ef…/players?map_number=2"
```

```json theme={null}
{
  "data": {
    "match_id": "52ef…",
    "team_a": "Sashi",
    "team_b": "OG",
    "maps": [
      {
        "map_id": "…",
        "map_number": 2,
        "map_name": "Mirage",
        "rounds_played": 22,
        "players": [
          {
            "player_name": "s1mple",
            "team_name": "OG",
            "side": "CT",
            "kills": 24,
            "deaths": 16,
            "assists": 4,
            "headshots": 12,
            "headshot_pct": 0.5,
            "survived_rounds": 8,
            "opening_kills": 5,
            "opening_deaths": 2,
            "adr": 92.4,
            "kast": 0.78,
            "rating": 1.31,
            "double_kills": 6,
            "triple_kills": 2,
            "quad_kills": 1,
            "ace_kills": 0
          }
        ]
      }
    ]
  }
}
```

## Use cases

* **Player props grading** — opening kill, multi-kill, headshot props.
* **Post-match performance dashboards** — show ADR/KAST/Rating side-by-side.
* **Form aggregation** — feed multiple matches into your own player-form model.


## OpenAPI

````yaml openapi/cs2-api.json GET /cs2/v1/matches/{match_id}/players
openapi: 3.1.0
info:
  title: TickTock B2B API
  description: >-
    Unified CS2 API (``/cs2/v1/*``) plus sport-agnostic ``/v1/*`` meta
    endpoints. Tenant-authenticated via ``X-API-Key`` or ``x-access-token``
    header (REST), or ``api_key`` query parameter (WebSocket). Field visibility
    is gated by per-key scopes — see ``docs/CS2_API_REFERENCE.md`` for the
    catalog and migration.
  version: 1.0.0
servers:
  - url: https://ticktock.bet
    description: Production (same-origin proxy)
  - url: https://feed.ticktock.bet
    description: Production (B2B subdomain)
security: []
paths:
  /cs2/v1/matches/{match_id}/players:
    get:
      tags:
        - CS2
      summary: Per-player per-map stats for one match
      description: >-
        Aggregates per-round ScoreBot data into per-player per-map rows: kills,
        deaths, assists, headshots, headshot %, opening kills/deaths, survived
        rounds, double/triple/quad/ace kills.


        ADR / KAST / Rating come from the post-match HLTV scoreboard and are
        populated only after the match finishes and the scrape runs — fields are
        ``null`` for live or unscraped matches.


        Use ``map_number`` to filter to a single map.
      operationId: get_match_players_cs2_v1_matches__match_id__players_get
      parameters:
        - name: match_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
            title: Match Id
        - name: map_number
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: Filter to a specific map (1, 2, 3…). Omit for all maps.
            title: Map Number
          description: Filter to a specific map (1, 2, 3…). Omit for all maps.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: >-
                  Response Get Match Players Cs2 V1 Matches  Match Id  Players
                  Get
              example:
                data:
                  id: 52ef0d9c-7c1f-4c4e-9b3a-4a5e2f8b1c10
                  team_a: Sashi
                  team_b: OG
                  team_a_logo: https://images.ticktock.bet/teams/sashi.png
                  team_b_logo: https://images.ticktock.bet/teams/og.png
                  hltv_event_id: 7438
                  team_a_hltv_id: 7187
                  team_b_hltv_id: 5995
                  event: ESL Pro League S20
                  bo_type: bo3
                  status: live
                  scheduled_at: '2026-05-10T17:00:00+00:00'
                  score_a: 1
                  score_b: 0
                  map_name: de_mirage
            application/xml: {}
        '401':
          description: >-
            Missing API key. Pass either `X-API-Key: <your-key>` or
            `$x$access-token: <your-key>` on REST calls (or `?api_key=` on
            WebSocket handshakes).
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Human-readable error message.
                required:
                  - detail
              example:
                detail: Missing X-API-Key or $x$access-token header
        '403':
          description: >-
            API key authenticated but lacks the scope required for this
            endpoint, or the path's sport is not in the key's `sport_allowlist`.
            Use `GET /v1/whoami` to inspect the granted scope set.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Human-readable error message.
                required:
                  - detail
              example:
                detail: >-
                  Required scope 'cs2:matches:detail' is not granted to this API
                  key. Contact your account manager to extend the key's scopes.
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Human-readable error message.
                required:
                  - detail
              example:
                detail: Match not found
        '422':
          description: >-
            Validation error — a query/path parameter failed validation. The
            body lists the offending fields.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
              example:
                detail:
                  - type: enum
                    loc:
                      - query
                      - time_filter
                    msg: 'Input should be one of: 3m, 6m, 1y, all'
                    input: 2w
        '429':
          description: >-
            Tenant rate limit exceeded. Default is 600 req/min per tenant;
            configurable per contract. WebSocket connections are not
            rate-limited at the request layer.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Human-readable error message.
                required:
                  - detail
              example:
                detail: Rate limit exceeded (600 req/min)
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
                example: 30
      security:
        - XAPIKeyHeader: []
        - XAccessTokenHeader: []
        - UOFAccessTokenHeader: []
components:
  schemas:
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    XAPIKeyHeader:
      type: apiKey
      description: Tenant API key issued during onboarding
      in: header
      name: X-API-Key
    XAccessTokenHeader:
      type: apiKey
      description: UOF-standard alias for the tenant API key
      in: header
      name: x-access-token
    UOFAccessTokenHeader:
      type: apiKey
      description: Deprecated alias for x-access-token (backward compatibility)
      in: header
      name: $x$access-token

````