Movement Guide — reference bands + plain-English explanation for a movement
const url = 'http://localhost:8000/api/movement-guide/?activity=example&exercise=example';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/movement-guide/?activity=example&exercise=example' \ --header 'Authorization: Bearer <token>'The Movement Norms Library (#1118) entry for one movement. Pass ?activity=cricket&exercise=Cover Drive to receive the per-metric reference table (green-zone band + goal direction + evidence grade + plain-English note) and the movement-level explanation (what it measures, a key evidence-backed fact, demographics and skill notes). Powers the in-session Movement Guide block.
Bands are population reference green-zones, evidence-graded (validated | experimental | assumed) — reference, not diagnostic limits. Bound metrics carry the same team-default band the Threshold configurator shows; reference_only metrics are library variables the platform does not yet compute per session. Returns 404 when the library has no entry for the movement.
Returns 400 (keyed on activity) when activity or exercise is missing or empty.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Activity value, e.g. cricket.
Exercise name, e.g. Cover Drive.
en (default) | ru | es — localises the explanation + per-metric notes. Metric labels + units are localised client-side.
Responses
Section titled “Responses”object
Plain-English description of the movement and what its variables capture.
One evidence-backed fact, with citation where available.
How the bands shift by sex/age.
What improves from beginner to advanced.
Per-metric reference row for the Movement Guide table. min_good/max_good are the team-default reference band (same as the Threshold configurator) in the metric’s canonical unit; evidence_basis is validated | experimental | assumed; reference_only metrics are library variables we don’t yet compute for a session.
object
Examplegenerated
{ "activity": "example", "exercise": "example", "what_it_measures": "example", "key_fact": "example", "demographics": "example", "skill": "example", "metrics": [ { "key": "example", "label": "example", "unit": "example", "higher_is_better": true, "min_good": 1, "max_good": 1, "evidence_basis": "example", "source": "example", "note": "example", "per_athlete": true, "reference_only": true } ]}activity or exercise missing or empty (keyed on activity).
Validation error keyed by parameter name — each key is the offending query parameter, each value the list of human-readable messages for it.
object
Examples
400 — activity/exercise missing or empty
{ "activity": [ "Both `activity` and `exercise` are required." ]}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).
Examplegenerated
{ "detail": "example"}