Get analysis results
Retrieve results for a specific analysis. The response shape and HTTP status code depend on the current analysis status:
| Status | HTTP code | Includes |
|---|---|---|
pending | 200 | video_id, status, percentage |
analyzing | 202 | video_id, status, percentage |
success | 200 | video_id, status, percentage, thumbnail, output_video, biomechanical_analysis |
failed | 400 | video_id, status |
For side_view analyses with success, biomechanical_analysis includes running_styles: an array of all detected styles (title, animal, animal_explanation, percentage, summary, explanation).
Each segment’s texts object includes recap, consequences, and correction for both side view and back view (side view may also include coach_tips). These are flattened from segmented_explanation; the nested key is never returned.
Each biomechanical item in analysis_content includes a search_key.
Use it for internal mapping to your own labels or content. See search_key mapping for the list of keys per analysis type (back view and side view).
Each biomechanical item also includes measured_value, the measured angle used to score the segment. measured_value, range_good, range_okay, and range_bad are always expressed in degrees.
Range boundaries can overlap because the scoring logic uses implicit inclusion/exclusion rules. For example, with range_good: [0, 102] and range_okay: [102, 111], a value up to 102 is considered inside the good range, while values strictly greater than 102 are considered inside the okay range.
For back_view, the explanation field is currently not available for pelvic_drop. For consequences and correction, the returned value can currently be an empty string, a string, or a list of strings depending on the analysis result and metric.
For side_view, total_score is not a simple average of the individual segment scores. It is calculated with weighted segment contributions.
Authorizations
Your API key, passed as a query parameter on every request.
Path Parameters
Analysis ID returned by the start endpoint.
Response
Analysis completed or pending.
"3dde3402-94d7-462e-a784-9306207108dd"
"success"
100
Signed URL to the analysis thumbnail image (expires after 1 hour).
"https://storage.googleapis.com/ochy-7871a.appspot.com/partners/.../output/<analysis_id>_thumbnail.jpg?<signed-url-parameters>"
Signed URL to the annotated output video (expires after 1 hour).
"https://storage.googleapis.com/ochy-7871a.appspot.com/partners/.../output/encoded_analyzed_<analysis_id>.mp4?<signed-url-parameters>"
Full biomechanical analysis results. Shape varies by analysis type.
Side view includes: analysis_content (arm, back_cycle, foot, forward_cycle, head, trunk -- each with score_number, measured_value, range_good, range_okay, and texts with position, search_key, title, recap, exercice, plus consequences, correction, and coach_tips inlined next to recap), running_styles (array of detected styles; objects may include animal, animal_explanation, title, summary, explanation, percentage; asset URLs are omitted), and total_score.
Back view includes: analysis_content (knee_adduction, pelvic_drop, pronation -- each with left/right containing range_bad, range_good, range_okay, score_number, measured_value, and texts with explanation, position, recap, search_key, side, title where applicable, plus consequences and correction inlined next to recap), and total_score. For back view, the explanation field is currently not available for pelvic_drop.
measured_value, range_good, range_okay, and range_bad are always expressed in degrees. Range boundaries may overlap because scoring uses implicit inclusion/exclusion rules. For example, with range_good: [0, 102] and range_okay: [102, 111], values up to 102 are considered good, and values strictly greater than 102 are considered okay.
For both views, consequences and correction come from segmented_explanation flattened into texts; the nested segmented_explanation key is never returned. Those two fields may be an empty string, a string, or an array of strings depending on the metric and result.
For side view, total_score is not a simple average of the individual score_number values. It is based on a weighted calculation.