---
title: "Per-player special-teams time on ice for a match"
method: GET
path: "/v1/stored/matches/{id}/special-teams-toi"
tags: ["stored"]
---

# Per-player special-teams time on ice for a match

`GET /v1/stored/matches/{id}/special-teams-toi`

## Request

- Base URL: `https://api.bigballsdata.com`
- URL: `https://api.bigballsdata.com/v1/stored/matches/{id}/special-teams-toi`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Per-player power-play, short-handed, even-strength and overtime ice time for one match, in whole seconds, plus total ice time and shift count. Ice hockey requires the Edge plan or higher. Access for every other sport on this shared route is unchanged. UNITS AND ARITHMETIC: every value is whole seconds, and `even_strength_time_on_ice_seconds + power_play_time_on_ice_seconds + short_handed_time_on_ice_seconds` equals `time_on_ice_seconds`. `overtime_time_on_ice_seconds` is an OVERLAY that is already counted inside those three and must not be added to them. `player_id` is null when we have not yet bridged that player to a Big Balls player id; `player_name` is always present. Coverage is partial and is being extended by season, so a match we do not yet hold returns 200 with an empty `players` array and a `meta.coverage` note rather than a 404.

## Path parameters

- `id` string, uuid, required

## Response `200`

ok. `{ data: { match_id, players }, meta: { count, field_notes, coverage? } }`, a route-specific meta, not the standard ResponseMeta (no error wrapper).

- object
  - `data` object, required
    - `match_id` string, uuid, required
    - `players` object[], required
      - `player_id` string, uuid, nullable
      - `player_name` string
      - `position` string, nullable
      - `team_id` string, uuid, nullable
      - `side` 'home' | 'away', nullable
      - `time_on_ice_seconds` integer, nullable
      - `even_strength_time_on_ice_seconds` integer, nullable
      - `power_play_time_on_ice_seconds` integer, nullable
      - `short_handed_time_on_ice_seconds` integer, nullable
      - `overtime_time_on_ice_seconds` integer, nullable
      - `shifts` integer, nullable
  - `meta` object, required
    - `count` integer, required
    - `field_notes` object
      - `units` string
      - `components` string
      - `player_id` string
    - `coverage` string, nullable

## Other responses

- `400` (unresolved $ref)
- `403`: forbidden. The plan on the key is below the Edge floor for this sport. The message names the plan held and the plan required, and links the docs and pricing pages.
- `404` (unresolved $ref)

---

[API](https://skmtc.dev/bigballsdata/apis/big-ball-sports-api.md) · [All operations](https://skmtc.dev/bigballsdata/apis/big-ball-sports-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bigballsdata/apis/big-ball-sports-api/revisions/31fb54ac414e?raw)
