---
title: "Analyze exercise form from video (max 100MB)"
method: POST
path: "/posture/analyze"
tags: ["Form Analysis"]
---

# Analyze exercise form from video (max 100MB)

`POST /posture/analyze`

## Request

- Base URL: `https://exercise-api.ymove.app/api/v2`
- URL: `https://exercise-api.ymove.app/api/v2/posture/analyze`
- Auth: one of:
  - API key in header `X-API-Key`
  - API key in query parameter `api_key`

Upload an exercise video and get AI-powered form analysis. Returns a form score (0-100), detected issues with plain-language fixes, and corrective exercise recommendations.

## Request body

- object
  - `video` object, required: The exercise video to analyze.
    - `type` 'base64' | 'url', required: How the video is provided: base64-encoded data or a public URL.
    - `data` string, required: Base64-encoded video data, or a public URL to the video file.
    - `media_type` 'video/mp4' | 'video/webm' | 'video/mov' | 'video/quicktime'
  - `exercise_name` string, required: Name of the exercise being performed (e.g. "barbell squat", "deadlift").
  - `analysis_type` 'standing' | 'seated' | 'walking' | 'exercise' | 'general': Type of analysis to perform.
  - `custom_instructions` string: Optional extra instructions for the analysis (e.g. "focus on knee alignment").
  - `num_frames` integer: Number of frames to extract from the video for analysis.

## Response `200`

Form analysis result with score, issues, and corrective exercises

- PostureAnalysisResult
  - `data` object
    - `score` integer: Form score from 0 (poor) to 100 (perfect).
    - `issues` PostureIssue[]
      - `name` string: Issue identifier (e.g. "forward_head", "rounded_shoulders", "knee_valgus").
      - `severity` 'mild' | 'moderate' | 'severe'
      - `description` string: Human-readable description of the issue detected.
      - `how_to_fix` string: Plain-language instructions on how to correct the issue.
      - `exercises` CorrectiveExercise[]: Corrective exercises with video URLs.
        - `id` string
        - `title` string
        - `slug` string
        - `video_url` string, uri, nullable
        - `thumbnail_url` string, uri, nullable
        - `duration` string: Recommended sets/reps (e.g. "30s hold x 3 sets each side").
    - `summary` string: Overall summary of the analysis.
    - `frames_analyzed` integer: Number of video frames analyzed.
    - `analysis_type` 'standing' | 'seated' | 'walking' | 'exercise' | 'general'
    - `exercise_name` string
    - `llm_used` string
    - `disclaimer` string
  - `usage` object
    - `posture_analyses_used` integer
    - `posture_analyses_included` integer
    - `is_overage` boolean
    - `overage_charge` number

## Other responses

- `400`: Validation error or analysis failed
- `401`: Invalid or missing API key
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/ymove/apis/ymove-fitness-api.md) · [All operations](https://skmtc.dev/ymove/apis/ymove-fitness-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ymove/apis/ymove-fitness-api/revisions/6636f2b4a343?raw)
