statshawk
REST APIContests

`GET /v1/contests/{contest_id}/play-by-play` — the Statcast play-by-play

sequence, tier-projected by detail and optionally narrowed to one pitcher/batter (or their head-to-head intersection).

cost 5 unitsany plan
GET
/v1/contests/{contest_id}/play-by-play

sequence, tier-projected by detail and optionally narrowed to one pitcher/batter (or their head-to-head intersection).

X-API-Key<token>

In: header

Path Parameters

contest_id*string

Minted contest id (cst_…)

Query Parameters

detail?string

Projection tier for each pitch (default full).

Value in"sparse" | "standard" | "full"
pitcher_id?string

Narrow to plate appearances this person pitched.

batter_id?string

Narrow to plate appearances this person batted. Combined with pitcher_id, both narrow (the head-to-head intersection).

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/contests/string/play-by-play"
{
  "data": {
    "contest": {
      "away_team": "team_0a1b2c3d4e5f6g7h8i9j0k1l2m",
      "competition": "comp_0a1b2c3d4e5f6g7h8i9j0k1l2m",
      "edition": "edt_0a1b2c3d4e5f6g7h8i9j0k1l2m",
      "event": {
        "id": "evt_0a1b2c3d4e5f6g7h8i9j0k1l2m",
        "kind": "tournament",
        "lineage": "wimbledon",
        "name": "string",
        "span": {
          "end": "2019-08-24T14:15:22Z",
          "start": "2019-08-24T14:15:22Z"
        }
      },
      "home_team": "team_0a1b2c3d4e5f6g7h8i9j0k1l2m",
      "id": "cst_0a1b2c3d4e5f6g7h8i9j0k1l2m",
      "kickoff": "2019-08-24T14:15:22Z",
      "location": {
        "city": "string",
        "country": "string",
        "neutral_site": true,
        "venue_name": "string"
      },
      "score": {
        "away": 0,
        "home": 0
      },
      "status": "scheduled"
    },
    "detail": "sparse",
    "filters": {
      "batter_id": "per_0a1b2c3d4e5f6g7h8i9j0k1l2m",
      "pitcher_id": "per_0a1b2c3d4e5f6g7h8i9j0k1l2m"
    },
    "plate_appearances": [
      {
        "at_bat_index": 0,
        "away_score": 0,
        "bat_side": "string",
        "batter_id": "per_0a1b2c3d4e5f6g7h8i9j0k1l2m",
        "batter_team_id": "team_0a1b2c3d4e5f6g7h8i9j0k1l2m",
        "description": "string",
        "event": "string",
        "event_type": "string",
        "final_balls": 0,
        "final_strikes": 0,
        "half_inning": "top",
        "home_score": 0,
        "inning": 0,
        "is_out": true,
        "is_scoring_play": true,
        "outs_before": 0,
        "pitch_count": 0,
        "pitch_hand": "string",
        "pitcher_id": "per_0a1b2c3d4e5f6g7h8i9j0k1l2m",
        "pitcher_team_id": "team_0a1b2c3d4e5f6g7h8i9j0k1l2m",
        "pitches": [
          {
            "balls": 0,
            "call_code": "string",
            "call_description": "string",
            "is_ball": true,
            "is_in_play": true,
            "is_strike": true,
            "launch_angle": 0,
            "launch_speed": 0,
            "outs": 0,
            "pitch_number": 0,
            "pitch_number_game": 0,
            "pitch_type": "string",
            "pitch_type_code": "string",
            "plate_x": 0,
            "plate_z": 0,
            "spin_rate": 0,
            "start_speed": 0,
            "strikes": 0,
            "total_distance": 0,
            "trajectory": "string",
            "zone": 0
          }
        ],
        "rbi": 0,
        "runners_before": 0
      }
    ],
    "total_pitches": 0,
    "total_plate_appearances": 0
  },
  "meta": {
    "cache": "HIT",
    "fetched_at": "2025-10-15T18:30:00Z",
    "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
    "source": "postgres",
    "version": "v1"
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "property1": null,
    "property2": null
  }
}