---
title: "NHL goalie expected goals by strength and shot danger, 2014-2025 (Edge)"
method: GET
path: "/v1/nhl/goalies/xg-splits"
tags: ["nhl"]
---

# NHL goalie expected goals by strength and shot danger, 2014-2025 (Edge)

`GET /v1/nhl/goalies/xg-splits`

## Request

- Base URL: `https://api.bigballsdata.com`
- URL: `https://api.bigballsdata.com/v1/nhl/goalies/xg-splits`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Season-aggregate goalie expected goals against, broken out by ON-ICE
STRENGTH STATE and by SHOT DANGER (low, medium, high), for twelve
complete seasons, 2014 through 2025. Also carries flurry-adjusted
expected goals, and expected versus actual rebounds and freezes.

NOT a replacement for GET /v1/nhl/goalies/gsax, which stays free and
unchanged. That route is our own current-season model and gives one
GSAx number per goalie. This one decomposes the same idea across
strength states and danger zones, over a decade our own model does not
reach, so the two answer different questions. `goals_saved_above_expected`
appears in both and the two numbers are independent estimates; they will
not agree exactly, and comparing them is a legitimate use.

A FROZEN ARCHIVE, as above: no writer, `data.as_of` carries the real
data date for the slice served, and the 2026-27 season is absent and
will stay absent. Ordered by goals saved above expected, descending.

`goalie.id` is `null` where the athlete is not bridged; `goalie.name`
is always present, and unbridged rows are returned rather than dropped.

Requires the Edge plan or higher.

## Query parameters

- `season` integer
- `game_type` 'regular' | 'playoffs'
- `situation` 'all' | '5on5' | '5on4' | '4on5' | 'other'
- `team` string
- `min_games` integer
- `limit` integer

## Response `200`

ok. `{ data, meta }` with a route-local cache stamp. `data.as_of` is the real data date for the slice served, taken from the rows themselves.

- object
  - `data` object, required
  - `meta` object
    - `cached` boolean
    - `cache_age_ms` integer

## Other responses

- `400`: Invalid query parameters.
- `403`: Plan does not include this capability. Requires Edge or higher; the floor is enforced before validation, so a 403 is returned even for an invalid query.
- `404`: No NHL xG season splits available for the requested game_type.

---

[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)
