statshawk
REST APIAnalysis

`GET /v1/analysis/player-prop?person_id=&stat=&line=` — person-keyed.

cost 10 unitspaid plan
GET
/v1/analysis/player-prop
X-API-Key<token>

In: header

Path Parameters

person_id*string

The person to analyse (minted per_… id). Required.

stat*string

The measure to analyse. Required. May be phase-qualified as phase.measure (e.g. pitching.so, passing.yards) to disambiguate a measure that exists in more than one phase — this is the canonical form; a bare so matches the first phase that carries it. A curated set of friendly aliases is also accepted (e.g. pitcher_k, a baseball two-way disambiguator that resolves to pitching.so) — see [crate::stats::measure::resolve_stat_alias].

line*|
Formatdouble
competition*|

Competition slug (e.g. mlb) or minted comp_… id. When supplied and season/edition/from/to are all omitted, the window defaults to this competition's latest edition with at least one final contest rather than every edition ever ingested.

season*integer

Restrict to one season year. Supplying this opts out of the default edition window.

Formatint32
edition*string

Restrict to one edition. Supplying this opts out of the default edition window.

from*|

Lower bound (inclusive) on game kickoff. Supplying this opts out of the default edition window.

Formatdate-time
to*|

Upper bound (inclusive) on game kickoff. Supplying this opts out of the default edition window.

Formatdate-time
stage*string

Contest-stage filter (issue #164). Omitted defaults to regular-season (plus unknown-stage) appearances only — the same window the season fold uses. stage=all removes the filter entirely (every stage, including preseason/exhibition/allstar); an explicit stage (preseason/regular/postseason/exhibition/allstar) narrows to exactly that value. An unrecognized value is a 400.

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/v1/analysis/player-prop"
{
  "data": {
    "average": 0.1,
    "averages": {
      "away": 0.1,
      "home": 0.1,
      "last_10": 0.1,
      "last_5": 0.1,
      "season": 0.1
    },
    "context": {
      "avg_exit_velo": 0,
      "handedness_edge": "string",
      "hard_hit_rate": 0,
      "platoon_split_rate": 0,
      "sport": "baseball"
    },
    "game_log": [
      0.1
    ],
    "games": 0,
    "hit_rate": {
      "games": 0,
      "hits": 0,
      "line": 0.1,
      "over_rate": 0.1
    },
    "hit_rates": {
      "last_10": {
        "games": 0,
        "hits": 0,
        "line": 0.1,
        "over_rate": 0.1
      },
      "last_5": {
        "games": 0,
        "hits": 0,
        "line": 0.1,
        "over_rate": 0.1
      },
      "season": {
        "games": 0,
        "hits": 0,
        "line": 0.1,
        "over_rate": 0.1
      }
    },
    "person": {
      "bio": {
        "birth_country": "BRA",
        "display_name": "string",
        "dob": "2019-08-24",
        "full_name": "string",
        "headshot_url": "string",
        "height_inches": 0,
        "position": "SF",
        "weight_lbs": 0
      },
      "id": "per_0a1b2c3d4e5f6g7h8i9j0k1l2m"
    },
    "stat": "string"
  },
  "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
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "property1": null,
    "property2": null
  }
}