Peer standings for a client
const url = 'http://localhost:8000/api/clients/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/peers/';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url http://localhost:8000/api/clients/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/peers/ \ --header 'Authorization: Bearer <token>'Where the athlete stands among ‘others like them’ (#1745, ADR-0044), per activity: the composite-score standing plus per-metric standings for the aggregated top metrics. Each standing names the rung of the fallback ladder it stands on (platform anonymised distribution / norm published band / team same-cell teammates) and the cohort cell, so the UI never pretends precision. Aggregates only — no other athlete’s data is readable through this endpoint; a distribution cell below the k-anonymity floor is absent by construction. Team-scoped — 404 for a client owned by another team.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Responses
Section titled “Responses”Shape of GET /api/clients/{id}/peers/ — a lookup table of peer
standings for the client detail page. Aggregates only: distributions
and published bands, never another athlete’s data (ADR-0044).
object
object
running- Runningwalking- Walkingjump- Vertical Jumpweightlifting- Weightliftingmobility- Mobility Assessmentworkspace_wellness- Workspace Wellnessagility- Agilityfencing- Fencingcycling- Cyclingtennis- Tennispadel- Padel Tennisbowling- Bowlingbaseball- Baseballfootball- Footballbadminton- Badmintoncricket- Cricketbasketball- Basketballscuba_diving- Scuba Divingice_hockey- Ice Hockeyamerican_football- American Footballfri- Falls Risk Indicator
Composite-score standing (latest scored session), or null.
object
platform- platformnorm- normteam- team
Share of peers beaten, 0-100, direction-aware. Null on the norm rung.
Peer count behind the number. Null on the norm rung.
Distinct teams in the cell. Platform rung only.
The cohort cell the standing was resolved against. An empty string means the dimension was widened out (ADR-0044’s ladder), so the UI can say “vs all intermediate females” instead of pretending precision.
object
Norm rung only.
Norm rung only.
The published source behind the band. Norm rung only.
Only metrics where a rung of the fallback ladder resolved.
One metric’s peer standing on the internal client page (#1745).
value is the SI aggregate the standing was resolved against — the
page matches it to its own tiles by key.
object
Where the athlete stands among “others like them”.
source names the rung of the fallback ladder that answered:
platform (anonymised platform-wide cell — percentile + n +
n_teams), norm (published norms band — a position, never a
percentile) or team (same-cell teammates — percentile + n).
object
platform- platformnorm- normteam- team
Share of peers beaten, 0-100, direction-aware. Null on the norm rung.
Peer count behind the number. Null on the norm rung.
Distinct teams in the cell. Platform rung only.
The cohort cell the standing was resolved against. An empty string means the dimension was widened out (ADR-0044’s ladder), so the UI can say “vs all intermediate females” instead of pretending precision.
object
Norm rung only.
Norm rung only.
The published source behind the band. Norm rung only.
Examples
Peer standings
{ "client_id": "f6d52e64-3aa3-4a26-bac2-0fc9d718448d", "activities": [ { "activity": "running", "score": { "source": "platform", "percentile": 78, "n": 84, "n_teams": 7, "cell": { "gender": "female", "age_band": "under_18", "skill_level": "intermediate" }, "band_min": null, "band_max": null, "band_position": null, "band_source": null }, "metrics": [ { "key": "cmj_height", "value": 31.4, "standing": { "source": "norm", "percentile": null, "n": null, "n_teams": null, "cell": { "gender": "female", "age_band": "under_18", "skill_level": "intermediate" }, "band_min": 24, "band_max": 34, "band_position": "inside", "band_source": "NSCA youth jump norms" } } ] } ]}object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Examplegenerated
{ "detail": "example"}object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Examples
404 — No such client on this team
{ "detail": "client_not_found"}