GET /v1/persons/{per_id}/overview — the composed player overview (issue #208
PR E): identity, current team, capabilities, season stats, and a capped context-rich game log, in one read.
CDN-friendly by design: the successful response carries
[PERSON_OVERVIEW_CACHE_CONTROL] (public, max-age=300, s-maxage=900, stale-while-revalidate=3600) because the statshawk-web public marketing
pages and consumer popups sit behind a CDN — the overview is deliberately
cache-friendly and slightly stale-tolerant, unlike the rest of the read
surface. The header is attached to the built [Response] here (the same
handler-owned-header pattern as the team-logo asset proxy); the
ApiResponse envelope is untouched.
PR E): identity, current team, capabilities, season stats, and a capped context-rich game log, in one read.
CDN-friendly by design: the successful response carries
[PERSON_OVERVIEW_CACHE_CONTROL] (public, max-age=300, s-maxage=900, stale-while-revalidate=3600) because the statshawk-web public marketing
pages and consumer popups sit behind a CDN — the overview is deliberately
cache-friendly and slightly stale-tolerant, unlike the rest of the read
surface. The header is attached to the built [Response] here (the same
handler-owned-header pattern as the team-logo asset proxy); the
ApiResponse envelope is untouched.
Raw API key (sk_live_… or sk_test_…). Preferred for REST clients.
In: header
Path Parameters
Minted person id (per_…)
Query Parameters
Competition slug (e.g. mlb) or minted comp_… id.
Season start year — cross-year leagues (NBA/NHL/NCAA) use the year the season STARTS in (2025 = the 2025-26 season). Omitted ⇒ the latest season with data for this person in the competition.
int32Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/persons/string/overview?competition=string"{
"data": {
"capabilities": [
{
"measure_notes": {
"property1": "string",
"property2": "string"
},
"measures": [
"string"
],
"phase": "string"
}
],
"competition": "comp_0a1b2c3d4e5f6g7h8i9j0k1l2m",
"game_log": [
{
"event": {
"id": "evt_0a1b2c3d4e5f6g7h8i9j0k1l2m",
"kind": "tournament",
"lineage": "wimbledon",
"name": "string",
"span": {
"end": "2019-08-24T14:15:22Z",
"start": "2019-08-24T14:15:22Z"
}
},
"game": "cst_0a1b2c3d4e5f6g7h8i9j0k1l2m",
"home": true,
"kickoff": "2019-08-24T14:15:22Z",
"line": {
"appearance": "apr_0a1b2c3d4e5f6g7h8i9j0k1l2m",
"baseball": {
"batting_entry": 0,
"batting_slot": 0,
"position": "SF"
},
"person": "per_0a1b2c3d4e5f6g7h8i9j0k1l2m",
"phases": [
{
"measures": {},
"phase": "string"
}
],
"team": "team_0a1b2c3d4e5f6g7h8i9j0k1l2m"
},
"opponent": {
"name": "string",
"team_id": "team_0a1b2c3d4e5f6g7h8i9j0k1l2m"
},
"status": "scheduled",
"team": {
"name": "string",
"team_id": "team_0a1b2c3d4e5f6g7h8i9j0k1l2m"
}
}
],
"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"
},
"season": 0,
"season_stats": {},
"sport": "basketball",
"team": {
"name": "string",
"team_id": "team_0a1b2c3d4e5f6g7h8i9j0k1l2m"
}
},
"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
}
}{
"error": {
"code": "string",
"message": "string",
"property1": null,
"property2": null
}
}{
"error": {
"code": "string",
"message": "string",
"property1": null,
"property2": null
}
}{
"error": {
"code": "string",
"message": "string",
"property1": null,
"property2": null
}
}{
"error": {
"code": "string",
"message": "string",
"property1": null,
"property2": null
}
}{
"error": {
"code": "string",
"message": "string",
"property1": null,
"property2": null
}
}