> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ochy.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 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](/guides/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.




## OpenAPI

````yaml /openapi.yaml get /analysis/{analysis_id}/results
openapi: 3.0.1
info:
  title: Ochy Partner API
  version: 1.0.0
  description: >
    The Ochy Partner API lets you integrate running biomechanical analysis into
    your application.

    Upload a video of a runner, receive detailed biomechanical metrics, joint
    angles, running style

    classification, and frame-by-frame position data.
servers:
  - url: https://partner-api.ochy-prod.com
    description: Production
security:
  - apiKey: []
paths:
  /analysis/{analysis_id}/results:
    get:
      tags:
        - Analysis
      summary: Get analysis results
      description: >
        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](/guides/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.
      operationId: getAnalysisResults
      parameters:
        - name: analysis_id
          in: path
          required: true
          description: Analysis ID returned by the start endpoint.
          schema:
            type: string
          example: 3dde3402-94d7-462e-a784-9306207108dd
      responses:
        '200':
          description: Analysis completed or pending.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalysisSuccessResponse'
              examples:
                side_view_success:
                  summary: Completed side view analysis
                  value:
                    video_id: cac1f6d4-deec-4ca0-801c-773f07a0eb5a
                    status: success
                    percentage: 100
                    thumbnail: >-
                      https://storage.googleapis.com/ochy-7871a.appspot.com/partners/.../output/cac1f6d4_thumbnail.jpg?<signed-url-parameters>
                    output_video: >-
                      https://storage.googleapis.com/ochy-7871a.appspot.com/partners/.../output/encoded_analyzed_cac1f6d4.mp4?<signed-url-parameters>
                    biomechanical_analysis:
                      analysis_content:
                        arm:
                          range_good:
                            - 75
                            - 85
                          range_okay:
                            - 71
                            - 89
                          score_number: 0.5775
                          measured_value: 80
                          texts:
                            exercice:
                              - bi_stretch
                              - trapeze_cervical_stretch
                            explanation: >-
                              An overly bent arm movement limits the range of
                              motion of the upper body during running. This can
                              affect balance and coordination. Improper arm
                              movement can result in excessive tension in the
                              upper body and lead to a feeling of fatigue during
                              training.

                              Your arms should not only swing forward but also
                              backward, contributing to the efficiency of
                              propulsion. Avoid clenching your fists and focus
                              on keeping your shoulders relaxed.

                              Practice the movement of your arms in front of a
                              mirror with the intention of keeping your
                              shoulders relaxed.
                            position: Moderate flexion
                            recap:
                              - Elbow too closed.
                              - Increase arm swinging.
                              - Relax shoulders and loosen fists.
                              - Upper body range restricted.
                            consequences: >-
                              An overly bent arm movement limits the range of
                              motion of the upper body during running. This can
                              affect balance and coordination. Improper arm
                              movement can result in excessive tension in the
                              upper body and lead to a feeling of fatigue during
                              training.
                            correction: >-
                              Your arms should not only swing forward but also
                              backward, contributing to the efficiency of
                              propulsion. Avoid clenching your fists and focus
                              on keeping your shoulders relaxed.
                            coach_tips: >-
                              Practice the movement of your arms in front of a
                              mirror with the intention of keeping your
                              shoulders relaxed.
                            search_key: ArmOT
                            title: Arms position
                        back_cycle:
                          range_good:
                            - 0
                            - 97
                          range_okay:
                            - 97
                            - 106
                          score_number: 0.26310810810810814
                          measured_value: 105
                          texts:
                            exercice:
                              - ab_reinforcement
                              - ischio_reinforcement
                              - psoas_reinforcement
                            explanation: >-
                              A restricted leg cycle imposes limitations on the
                              range of motion in the hip, thereby affecting
                              propulsion efficiency. This restriction can also
                              have adverse effects on the knees and ankles,
                              increasing the risk of injury. Adopting shorter
                              strides significantly amplifies the energy
                              expenditure required to maintain a given speed.
                              This increased energy demand can result in early
                              fatigue.

                              Being mindful of the range of motion in your leg
                              and hip movements will allow you to have better
                              technique. Incorporate sprints or accelerations to
                              encourage more dynamic movements of the back leg.
                              Including mobility and proprioception exercises
                              would also be beneficial.

                              Visualize your rear heel being tethered to a
                              balloon, lifting it behind you with each stride.
                            position: Low heel kick
                            recap:
                              - Need for more energy to maintain speed.
                              - Restriction of movement amplitude.
                              - Sprint exercises to improve amplitude.
                              - The back knee is too open.
                            search_key: BackCycleB
                            title: Back knee angle at foot landing
                        foot:
                          foot_strike_pattern: midfoot
                          range_good:
                            - -10
                            - 10
                          range_okay:
                            - 10
                            - 20
                          score_number: 0.32093333333333335
                          measured_value: 16.2
                          texts:
                            foot_strike_explanation: >-
                              Landing on the mid-foot at this angle
                              significantly amplifies the impact on the
                              musculo-tendinous structures of the lower limbs.
                              The body struggles to manage the forces involved
                              in such an exaggerated position, heightening the
                              risk of injury.
                            overstride_explanation: >-
                              When the foot lands more than 10┬░ in front of the
                              center of gravity, it causes considerable strain
                              on the joints, muscles, and tendons of the lower
                              limb. This could lead to injuries if not
                              addressed. It is critical to engage in specific
                              strength training exercises and corrective running
                              drills to return to a safer stride.
                            overstride_title: Mid-foot strike in front of the center of gravity
                            phases:
                              amortisation: >-
                                The ankle is forced into extreme dorsiflexion,
                                compromising stability. The posterior chain
                                muscles must work excessively to absorb the
                                force, which may lead to fatigue and injury.
                              impact: >-
                                The mid-foot lands far in front of the center of
                                gravity, generating high-stress forces that may
                                impact the knee and hip joints. There is a
                                significant risk of overloading the stabilizing
                                structures of the ankle.
                              propulsion: >-
                                Propulsion efficiency is severely reduced due to
                                the excessive stress on the lower limb, and
                                there may be significant compensation through
                                the upper body or other muscle groups.
                            position: Flat foot landing
                            title: Foot landing
                        forward_cycle:
                          range_good:
                            - 145
                            - 180
                          range_okay:
                            - 136
                            - 145
                          score_number: 0.864
                          measured_value: 161
                          texts:
                            exercice:
                              - ab_reinforcement
                              - ischio_reinforcement
                            explanation: >-
                              If the leading leg is too bent during foot
                              placement on the ground while running, it can lead
                              to a loss of efficiency and potentially increase
                              the risk of injuries.

                              Keep practicing, concentrating on keeping your
                              knee in this position.

                              While running, imagine an invisible string
                              attached to your knee, gently pulling upward. With
                              each step, lift your knee slightly toward this
                              invisible line, then let it come down naturally.
                            position: Ideal Position
                            recap:
                              - Continue to practice in this position.
                              - Optimal running efficiency.
                              - The front knee angle is ideal.
                            search_key: ForwardCycleG
                            title: Front knee angle at foot landing
                        head:
                          range_good:
                            - -14
                            - -4
                          range_okay:
                            - -18
                            - 0
                          score_number: 0.29700000000000004
                          measured_value: 0
                          texts:
                            exercice:
                              - trapeze_cervical_stretch
                            explanation: >-
                              Excessive upward gaze can lead to muscle tension
                              both in the neck and along the spine, causing
                              fatigue and discomfort. Looking too high can also
                              result in less effective breathing, leading to a
                              decrease in oxygen supply to the muscles.

                              Keep your head in a neutral position, aligning
                              your gaze with the horizon. Avoid excessively
                              lifting your chin; this will help you maintain a
                              more balanced head position and improve your
                              posture and awareness of the environment during
                              the run.

                              Imagine that you are holding a balloon between
                              your chin and your chest, and try to maintain this
                              slight pressure during the run. Also, practice
                              looking about 20 meters ahead of you.
                            position: Gaze too much skyward
                            recap:
                              - Align your gaze with the horizon.
                              - Gaze too high.
                              - Pain in the cervical area.
                            consequences: >-
                              Excessive upward gaze can lead to muscle tension
                              both in the neck and along the spine, causing
                              fatigue and discomfort. Looking too high can also
                              result in less effective breathing, leading to a
                              decrease in oxygen supply to the muscles.
                            correction: >-
                              Keep your head in a neutral position, aligning
                              your gaze with the horizon. Avoid excessively
                              lifting your chin; this will help you maintain a
                              more balanced head position and improve your
                              posture and awareness of the environment during
                              the run.
                            coach_tips: >-
                              Imagine that you are holding a balloon between
                              your chin and your chest, and try to maintain this
                              slight pressure during the run. Also, practice
                              looking about 20 meters ahead of you.
                            search_key: HeadBT
                            title: Head position
                        trunk:
                          range_good:
                            - 6
                            - 12
                          range_okay:
                            - 2
                            - 16
                          score_number: 0.3159574468085106
                          measured_value: -5
                          texts:
                            exercice:
                              - ab_reinforcement
                            explanation: >-
                              A torso not leaning forward enough can accentuate
                              the load on the lower back muscles, leading to
                              early fatigue and increasing the risk of lower
                              back pain. To compensate for the backward-leaning
                              posture, the gluteal muscles may be excessively
                              engaged, leading to muscle tension in that region.
                              A backward-leaning torso can shift the center of
                              gravity backward, overloading the leg muscles.
                              This will reduce the ability to propel the body
                              forward, resulting in a loss of efficiency and an
                              increase in energy expenditure.

                              Engaging the abdominal muscles will help support
                              the lumbar region and maintain a posture with an
                              intention to move forward. Also, ensure that your
                              pelvis is neutral, neither tilted forward nor
                              backward, to avoid overuse of the gluteal muscles.

                              During the run, focus on vertical alignment by
                              imagining an invisible cord pulling upward from
                              the top of your head.
                            position: Not leaning forward enough
                            recap:
                              - Overload on the lumbar and gluteal muscles.
                              - Properly brace by keeping a neutral pelvis.
                              - Risks of lower back pain.
                              - Torso too leaned back.
                            search_key: TrunkBT
                            title: Back position
                      running_styles:
                        - animal: Bear
                          animal_explanation: >-
                            Bears, especially when not sprinting, have a gait
                            that involves longer contact times with the ground.
                            This "stick" style offers stability, especially
                            beneficial given their body structure and weight.
                          title: Stick
                          summary: >-
                            Running style characterized by an intermediate step
                            frequency, a long stance phase and a short flight
                            phase.
                          explanation: >-
                            This running style can be beneficial at low running
                            speeds, or in conditions in which high vertical peak
                            forces are unbeneficial.
                          percentage: 100
                      total_score: 0.413
                back_view_success:
                  summary: Completed back view analysis
                  value:
                    video_id: 7d9861cd-1e1d-4284-9ab2-f54d2e576839
                    status: success
                    percentage: 100
                    thumbnail: >-
                      https://storage.googleapis.com/ochy-7871a.appspot.com/partners/.../output/7d9861cd_thumbnail.jpg?<signed-url-parameters>
                    output_video: >-
                      https://storage.googleapis.com/ochy-7871a.appspot.com/partners/.../output/encoded_analyzed_7d9861cd.mp4?<signed-url-parameters>
                    biomechanical_analysis:
                      analysis_content:
                        knee_adduction:
                          left:
                            range_bad:
                              - -10
                              - 10
                            range_good:
                              - -3
                              - 3
                            range_okay:
                              - -5
                              - 5
                            score_number: 0.741
                            measured_value: 1.2
                            texts:
                              position: Knee aligned
                              explanation: Tibial movement parallel to the midline.
                              recap:
                                - Knee positioned in line with the hip and ankle
                                - Ideal knee position
                                - Good efficiency
                              consequences:
                                - Musculoskeletal disorder limitations
                              correction:
                                - Keep this knee position
                                - >-
                                  Keep this leg alignement when your foot is on
                                  the ground
                              search_key: KneeAligned
                              side: Left
                          right:
                            range_bad:
                              - -10
                              - 10
                            range_good:
                              - -3
                              - 3
                            range_okay:
                              - -5
                              - 5
                            score_number: 0.8433
                            measured_value: -1
                            texts:
                              position: Knee aligned
                              explanation: Tibial movement parallel to the midline.
                              recap:
                                - Knee positioned in line with the hip and ankle
                                - Ideal knee position
                                - Good efficiency
                              consequences:
                                - Musculoskeletal disorder limitations
                              correction:
                                - Keep this knee position
                                - >-
                                  Keep this leg alignement when your foot is on
                                  the ground
                              search_key: KneeAligned
                              side: Right
                        pelvic_drop:
                          left:
                            range_bad:
                              - 4
                              - 8
                            range_good:
                              - 0
                              - 2
                            range_okay:
                              - 2
                              - 4
                            score_number: 0.70351
                            measured_value: 1.4
                            texts:
                              title: Pelvic drop
                              position: Pelvis aligned
                              recap:
                                - >-
                                  Right and left sides of pelvis are at the same
                                  height
                                - The pelvis is in an ideal position
                                - Keep having this ideal posture
                              consequences:
                                - Musculoskeletal disorder limitations
                              correction:
                                - Keep this pelvis position
                                - >-
                                  Keep this fluid intension when you run so you
                                  reduce the impact when your foot touches the
                                  ground
                              search_key: PelvicG
                              side: Left
                          right:
                            range_bad:
                              - 4
                              - 8
                            range_good:
                              - 0
                              - 2
                            range_okay:
                              - 2
                              - 4
                            score_number: 0.76028
                            measured_value: 1.1
                            texts:
                              title: Pelvic drop
                              position: Pelvis aligned
                              recap:
                                - >-
                                  Right and left sides of pelvis are at the same
                                  height
                                - The pelvis is in an ideal position
                                - Keep having this ideal posture
                              consequences:
                                - Musculoskeletal disorder limitations
                              correction:
                                - Keep this pelvis position
                                - >-
                                  Keep this fluid intension when you run so you
                                  reduce the impact when your foot touches the
                                  ground
                              search_key: PelvicG
                              side: Right
                        pronation:
                          left:
                            range_bad:
                              - -10
                              - 10
                            range_good:
                              - -3
                              - 3
                            range_okay:
                              - -5
                              - 5
                            score_number: 0.77501
                            measured_value: -1.2
                            texts:
                              title: Neutral
                              explanation: >-
                                A neutral foot corresponds to a straight of the
                                foot. No pronation or supination is involved
                                (Petro et al. 2021). This means that the foot is
                                neither moviong inward or outward during walking
                                or running.
                              position: Neutral
                              recap:
                                - >-
                                  Possibility to reinforce your foot with
                                  proprioception.
                                - Good position
                              consequences: >-
                                A neutral position is ideal for an optimal
                                performance. Starting with laying the foot
                                outward and leading to rolling the foot inward
                                to propel forward.
                              correction: ''
                              search_key: Neutral
                              side: Left
                          right:
                            range_bad:
                              - -10
                              - 10
                            range_good:
                              - -3
                              - 3
                            range_okay:
                              - -5
                              - 5
                            score_number: 0.98026
                            measured_value: 0.4
                            texts:
                              title: Neutral
                              explanation: >-
                                A neutral foot corresponds to a straight of the
                                foot. No pronation or supination is involved
                                (Petro et al. 2021). This means that the foot is
                                neither moviong inward or outward during walking
                                or running.
                              position: Neutral
                              recap:
                                - >-
                                  Possibility to reinforce your foot with
                                  proprioception.
                                - Good position
                              consequences: >-
                                A neutral position is ideal for an optimal
                                performance. Starting with laying the foot
                                outward and leading to rolling the foot inward
                                to propel forward.
                              correction: ''
                              search_key: Neutral
                              side: Right
                      total_score: 0.658
                pending:
                  summary: Analysis queued
                  value:
                    video_id: 3dde3402-94d7-462e-a784-9306207108dd
                    status: pending
                    percentage: 0
        '202':
          description: Analysis in progress.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalysisProgressResponse'
              example:
                video_id: 3dde3402-94d7-462e-a784-9306207108dd
                status: analyzing
                percentage: 45
        '400':
          description: Analysis failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalysisFailedResponse'
              example:
                video_id: 3dde3402-94d7-462e-a784-9306207108dd
                status: failed
        '401':
          description: Missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthErrorResponse'
        '403':
          description: Invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthErrorResponse'
        '404':
          description: Analysis not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                detail: Analysis not found
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    AnalysisSuccessResponse:
      type: object
      properties:
        video_id:
          type: string
          example: 3dde3402-94d7-462e-a784-9306207108dd
        status:
          type: string
          example: success
        percentage:
          type: integer
          example: 100
        thumbnail:
          type: string
          description: Signed URL to the analysis thumbnail image (expires after 1 hour).
          example: >-
            https://storage.googleapis.com/ochy-7871a.appspot.com/partners/.../output/<analysis_id>_thumbnail.jpg?<signed-url-parameters>
        output_video:
          type: string
          description: Signed URL to the annotated output video (expires after 1 hour).
          example: >-
            https://storage.googleapis.com/ochy-7871a.appspot.com/partners/.../output/encoded_analyzed_<analysis_id>.mp4?<signed-url-parameters>
        biomechanical_analysis:
          type: object
          description: >
            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.
    AnalysisProgressResponse:
      type: object
      properties:
        video_id:
          type: string
          example: 3dde3402-94d7-462e-a784-9306207108dd
        status:
          type: string
          example: analyzing
        percentage:
          type: integer
          description: Progress from 0 to 100.
          example: 45
    AnalysisFailedResponse:
      type: object
      properties:
        video_id:
          type: string
          example: 3dde3402-94d7-462e-a784-9306207108dd
        status:
          type: string
          example: failed
    AuthErrorResponse:
      type: object
      properties:
        detail:
          type: string
          example: API Key is missing
    ErrorResponse:
      type: object
      properties:
        detail:
          type: string
          example: Internal server error
        code:
          type: string
          description: Machine-readable error code (present on some errors).
          example: insufficient_credits
  securitySchemes:
    apiKey:
      type: apiKey
      in: query
      name: apiKey
      description: Your API key, passed as a query parameter on every request.

````