# Тяжелая атлетика

## Создать новую сессию обработки видео

> Этот эндпоинт позволяет \*\*администратору\*\* (или суб-администратору) загрузить \*\*видеофайл\*\* для обработки и создать новый ресурс "сессии" \*\*от имени другого пользователя\*\*. Сервер вернет \`session\_id\`, который можно использовать для проверки статуса или получения деталей/результатов сессии.\
> \### Тело запроса (Multipart/Form-Data)\
> Необходимо указать следующие поля:\
> \- \*\*user\_id\*\* \*(строка, обязательно)\*: ID пользователя, от имени которого создается сессия. - \*\*video\*\* \*(файл, обязательно)\*: Исходный видеофайл для обработки. - \*\*session\_name\*\* \*(строка, опционально)\*: Человекочитаемое название сессии. - \*\*exercise\_name\*\* \*(строка, обязательно)\*: Название упражнения. Допустимые значения: 'snatch', 'clean', 'clean\_and\_jerk'. - \*\*barbell\_mass\*\* \*(строка, опционально)\*: Масса штанги (числовая строка). По умолчанию 100 кг (или 220 фунтов). - \*\*body\_joint\_angles\*\* \*(массив строк, опционально)\*: Список названий суставов через запятую (например, 'elbow, knee, ankle'). По умолчанию \['all'].\
> \### Структура ответа\
> При успехе (HTTP 200) ответ содержит JSON-объект с: - \*\*session\_id\*\* \*(строка)\*: Уникальный идентификатор созданной сессии. - \*\*title\*\* \*(строка)\*: Название сессии (используется значение \`session\_name\` или значение по умолчанию).\
> \### Рабочий процесс\
> 1\. Отправить \*\*POST\*\*-запрос с multipart/form-data, содержащий обязательные поля \`user\_id\` и \`video\`, а также опциональные поля. 2. Указать валидный API-KEY токен в заголовке \`Authorization\`. 3. Вызывающий должен иметь права администратора для создания сессии от имени другого пользователя. 4. При успехе сервер вернет \`session\_id\` и \`title\`. 5. При ошибке (например, отсутствие полей, недостаток прав) вернется JSON-объект с ключом \`error\`.\
> \#### Пример cURL:\
> \`\`\`bash curl -X POST \\\
> &#x20;    -H 'Content-Type: multipart/form-data' \\\
> &#x20;    -H 'Authorization: API-KEY \<YOUR\_ADMIN\_TOKEN>' \\\
> &#x20;    -F 'user\_id=someUserId123' \\\
> &#x20;    -F 'video=@/path/to/video.mp4' \\\
> &#x20;    -F 'session\_name=Custom Session' \\\
> &#x20;    -F 'exercise\_name=clean' \\\
> &#x20;    -F 'barbell\_mass=30' \\\
> &#x20;    -F 'body\_joint\_angles=elbow, knee, ankle' \\\
> &#x20;    https\://\<backend-link>/weightlifting/management/sessions/\
> \`\`\`<br>

````json
{"openapi":"3.1.1","info":{"title":"AIKYNETIX WEB API","version":"v2"},"servers":[{"url":"https://api.aikynetix.app"}],"security":[{"Bearer":[]},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","name":"Authorization","in":"header","description":"Укажите ваш Bearer-токен (Firebase auth) в формате: Bearer <токен>"},"ApiKeyAuth":{"type":"apiKey","name":"API-KEY","in":"header","description":"Укажите ваш API-ключ в заголовке: API-KEY: <api_key>"}}},"paths":{"/weightlifting/sessions/":{"post":{"operationId":"weightlifting_sessions_create","summary":"Создать новую сессию обработки видео","description":"Этот эндпоинт позволяет **администратору** (или суб-администратору) загрузить **видеофайл** для обработки и создать новый ресурс \"сессии\" **от имени другого пользователя**. Сервер вернет `session_id`, который можно использовать для проверки статуса или получения деталей/результатов сессии.\n### Тело запроса (Multipart/Form-Data)\nНеобходимо указать следующие поля:\n- **user_id** *(строка, обязательно)*: ID пользователя, от имени которого создается сессия. - **video** *(файл, обязательно)*: Исходный видеофайл для обработки. - **session_name** *(строка, опционально)*: Человекочитаемое название сессии. - **exercise_name** *(строка, обязательно)*: Название упражнения. Допустимые значения: 'snatch', 'clean', 'clean_and_jerk'. - **barbell_mass** *(строка, опционально)*: Масса штанги (числовая строка). По умолчанию 100 кг (или 220 фунтов). - **body_joint_angles** *(массив строк, опционально)*: Список названий суставов через запятую (например, 'elbow, knee, ankle'). По умолчанию ['all'].\n### Структура ответа\nПри успехе (HTTP 200) ответ содержит JSON-объект с: - **session_id** *(строка)*: Уникальный идентификатор созданной сессии. - **title** *(строка)*: Название сессии (используется значение `session_name` или значение по умолчанию).\n### Рабочий процесс\n1. Отправить **POST**-запрос с multipart/form-data, содержащий обязательные поля `user_id` и `video`, а также опциональные поля. 2. Указать валидный API-KEY токен в заголовке `Authorization`. 3. Вызывающий должен иметь права администратора для создания сессии от имени другого пользователя. 4. При успехе сервер вернет `session_id` и `title`. 5. При ошибке (например, отсутствие полей, недостаток прав) вернется JSON-объект с ключом `error`.\n#### Пример cURL:\n```bash curl -X POST \\\n     -H 'Content-Type: multipart/form-data' \\\n     -H 'Authorization: API-KEY <YOUR_ADMIN_TOKEN>' \\\n     -F 'user_id=someUserId123' \\\n     -F 'video=@/path/to/video.mp4' \\\n     -F 'session_name=Custom Session' \\\n     -F 'exercise_name=clean' \\\n     -F 'barbell_mass=30' \\\n     -F 'body_joint_angles=elbow, knee, ankle' \\\n     https://<backend-link>/weightlifting/management/sessions/\n```\n","responses":{"200":{"description":"Сессия обработки видео успешно создана (HTTP 200).","content":{"application/json":{"schema":{"required":["session_id","title"],"type":"object","properties":{"session_id":{"description":"Уникальный идентификатор созданной сессии.","type":"string"},"title":{"description":"Название сессии (значение по умолчанию, если не указано).","type":"string"}}}}}},"400":{"description":"Неверный запрос - отсутствует `user_id`, `video` или неверные данные формы.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Подробное сообщение об ошибке.","type":"string"}}}}}},"401":{"description":"Не авторизован - отсутствует или неверный токен доступа.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об отсутствии или неверном токене.","type":"string"}}}}}},"403":{"description":"Запрещено - у пользователя нет прав администратора для создания сессий от имени других.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение о недостатке привилегий.","type":"string"}}}}}},"404":{"description":"Не найдено - проблемы с бизнес-логикой или ограничениями (например, лимит сессий).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке.","type":"string"}}}}}},"500":{"description":"Внутренняя ошибка сервера - непредвиденная ошибка на сервере.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Подробное сообщение об ошибке.","type":"string"}}}}}}},"tags":["weightlifting"],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"user_id":{"type":"string","description":"**Обязательно.** ID пользователя, для которого создается сессия (текстовое поле формы)."},"video":{"type":"string","description":"**Обязательно.** Видеофайл для обработки (поле формы типа file)."},"session_name":{"type":"string","description":"**Опционально.** Описательное название сессии (текстовое поле формы)."},"exercise_name":{"type":"string","description":"**Обязательно.** Название упражнения. Допустимые значения: \"snatch\", \"clean\", \"clean_and_jerk\"."},"barbell_mass":{"type":"string","description":"**Опционально.** Масса штанги (числовая строка). По умолчанию 100 кг (или 220 фунтов)."},"body_joint_angles":{"type":"array","description":"**Опционально.** Список названий суставов через запятую. Допустимые значения: `ankle`, `knee`, `elbow`, `hip`, `shoulder`. Пример: `ankle,knee,hip`"}},"required":["user_id","video","exercise_name"]}}}}}}}}
````

## Получить детали сессии тяжелой атлетики

> Возвращает детали сессии тяжелой атлетики по указанному \`session\_id\`. Данные включают URL исходного и обработанного видео, время создания, тип упражнения, информацию о пользователе, метрики, углы, метрики отчета и временные метки.\
> \### Параметры пути\
> \- \*\*session\_id\*\* \*(строка, обязательно)\*: Уникальный идентификатор сессии.\
> \### Параметры запроса\
> \- \*\*demo\*\* \*(булево, опционально)\*: Установите \`true\` для получения демо-сессии вместо реальной.\
> \### Структура ответа (HTTP 200)\
> При успехе ответ содержит JSON-объект со следующими полями: - \*\*analyzed\_video\_url\*\* \*(строка, URI)\*: Публичный URL обработанного видео. - \*\*video\_url\*\* \*(строка, URI)\*: Публичный URL исходного видео. - \*\*created\_at\*\* \*(объект)\*: Время создания:\
> &#x20;   \- \*\*date\*\* \*(строка)\*: Дата в формате \`DD/MM/YYYY\`.\
> &#x20;   \- \*\*time\*\* \*(строка)\*: Время в формате \`HH:MM AM/PM\`.\
> \- \*\*exercise\*\* \*(строка)\*: Упражнение (например, 'snatch'). - \*\*user\_name\*\* \*(строка)\*: Имя пользователя, связанного с сессией. - \*\*activity\*\* \*(строка)\*: Тип активности (должно быть 'Weightlifting'). - \*\*title\*\* \*(строка)\*: Название сессии. - \*\*metrics\*\* \*(объект)\*: Числовые метрики (например, скорость, мощность). - \*\*angles\*\* \*(объект)\*: Углы, где каждый ключ соответствует массиву значений. - \*\*report\_metrics\*\* \*(объект)\*: Метрики отчета, где каждый ключ соответствует массиву значений. - \*\*all\_timestamps\*\* \*(массив чисел)\*: Временные метки данных сессии.\
> \### Обработка ошибок\
> \- \*\*400 Неверный запрос\*\*: Неверные параметры. - \*\*401 Не авторизован\*\*: Отсутствует или неверный токен. - \*\*403 Запрещено\*\*: Недостаточно прав. - \*\*404 Не найдено\*\*: Сессия не найдена или активность не 'Weightlifting'. - \*\*500 Ошибка сервера\*\*: Непредвиденная ошибка.\
> \### Безопасность\
> Требуется валидный API-KEY токен в заголовке \`Authorization\`.<br>

```json
{"openapi":"3.1.1","info":{"title":"AIKYNETIX WEB API","version":"v2"},"servers":[{"url":"https://api.aikynetix.app"}],"security":[{"Bearer":[]},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","name":"Authorization","in":"header","description":"Укажите ваш Bearer-токен (Firebase auth) в формате: Bearer <токен>"},"ApiKeyAuth":{"type":"apiKey","name":"API-KEY","in":"header","description":"Укажите ваш API-ключ в заголовке: API-KEY: <api_key>"}}},"paths":{"/weightlifting/sessions/{session_id}/":{"get":{"operationId":"weightlifting_sessions_read","summary":"Получить детали сессии тяжелой атлетики","description":"Возвращает детали сессии тяжелой атлетики по указанному `session_id`. Данные включают URL исходного и обработанного видео, время создания, тип упражнения, информацию о пользователе, метрики, углы, метрики отчета и временные метки.\n### Параметры пути\n- **session_id** *(строка, обязательно)*: Уникальный идентификатор сессии.\n### Параметры запроса\n- **demo** *(булево, опционально)*: Установите `true` для получения демо-сессии вместо реальной.\n### Структура ответа (HTTP 200)\nПри успехе ответ содержит JSON-объект со следующими полями: - **analyzed_video_url** *(строка, URI)*: Публичный URL обработанного видео. - **video_url** *(строка, URI)*: Публичный URL исходного видео. - **created_at** *(объект)*: Время создания:\n    - **date** *(строка)*: Дата в формате `DD/MM/YYYY`.\n    - **time** *(строка)*: Время в формате `HH:MM AM/PM`.\n- **exercise** *(строка)*: Упражнение (например, 'snatch'). - **user_name** *(строка)*: Имя пользователя, связанного с сессией. - **activity** *(строка)*: Тип активности (должно быть 'Weightlifting'). - **title** *(строка)*: Название сессии. - **metrics** *(объект)*: Числовые метрики (например, скорость, мощность). - **angles** *(объект)*: Углы, где каждый ключ соответствует массиву значений. - **report_metrics** *(объект)*: Метрики отчета, где каждый ключ соответствует массиву значений. - **all_timestamps** *(массив чисел)*: Временные метки данных сессии.\n### Обработка ошибок\n- **400 Неверный запрос**: Неверные параметры. - **401 Не авторизован**: Отсутствует или неверный токен. - **403 Запрещено**: Недостаточно прав. - **404 Не найдено**: Сессия не найдена или активность не 'Weightlifting'. - **500 Ошибка сервера**: Непредвиденная ошибка.\n### Безопасность\nТребуется валидный API-KEY токен в заголовке `Authorization`.\n","parameters":[{"schema":{"type":"string"},"name":"session_id","in":"path","description":"Уникальный идентификатор сессии тяжелой атлетики.","required":true},{"schema":{"type":"boolean"},"name":"demo","in":"query","description":"Установите `true` для получения демо-сессии вместо реальной.","required":false}],"responses":{"200":{"description":"Детали сессии успешно получены.","content":{"application/json":{"schema":{"required":["analyzed_video_url","video_url","created_at","exercise","user_name","activity","title","metrics","angles","report_metrics","all_timestamps"],"type":"object","properties":{"analyzed_video_url":{"description":"Публичный URL обработанного видео.","type":"string","format":"uri"},"video_url":{"description":"Публичный URL исходного видео.","type":"string","format":"uri"},"created_at":{"description":"Время создания сессии.","required":["date","time"],"type":"object","properties":{"date":{"description":"Дата в формате DD/MM/YYYY.","type":"string"},"time":{"description":"Время в формате HH:MM AM/PM.","type":"string"}}},"exercise":{"description":"Упражнение (например, 'snatch').","type":"string"},"user_name":{"description":"Имя пользователя, связанного с сессией.","type":"string"},"activity":{"description":"Тип активности (ожидается 'Weightlifting').","type":"string"},"title":{"description":"Название сессии.","type":"string"},"metrics":{"description":"Числовые метрики.","type":"object","additionalProperties":{"type":"number"}},"angles":{"description":"Углы, где ключи соответствуют массивам значений.","type":"object","additionalProperties":{"type":"array","items":{"type":"number"}}},"report_metrics":{"description":"Метрики отчета, где ключи соответствуют массивам значений.","type":"object","additionalProperties":{"type":"array","items":{"type":"number"}}},"all_timestamps":{"description":"Временные метки данных сессии.","type":"array","items":{"type":"number"}}}}}}},"400":{"description":"Неверный запрос - неверные параметры или admin UID.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Подробное сообщение об ошибке.","type":"string"}}}}}},"401":{"description":"Не авторизован - отсутствует или неверный токен.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке токена.","type":"string"}}}}}},"403":{"description":"Запрещено - недостаточно прав.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об отказе в доступе.","type":"string"}}}}}},"404":{"description":"Не найдено - сессия не найдена или неверная активность.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке.","type":"string"}}}}}},"500":{"description":"Внутренняя ошибка сервера - непредвиденная ошибка.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Подробное сообщение об ошибке.","type":"string"}}}}}}},"tags":["weightlifting"]}}}}
```

## Генерация комментариев анализа для сессии тяжелой атлетики

> \### Генерация комментариев анализа\
> \
> Создает отдельные GenAI-треды для каждой метрики анализа (мощность, сила,  скорость штанги, углы суставов и т.д.) для получения лаконичных  тренерских комментариев по каждой.\
> \
> \*\*Пример использования:\*\*\
> \`POST /weightlifting/sessions/{session\_id}/recommendation/\`\
> \
> \*\*Параметры:\*\*\
> \- \`session\_id\` \*(строка, обязательный)\* – Идентификатор сессии для анализа.\
> \- \`measurement\_system\` \*(query, опциональный)\* – \`'metric'\` (по умолчанию) или \`'imperial'\`; определяет единицы измерения в запросе.\
> \
> \*\*Структура ответа:\*\*\
> JSON-объект, сопоставляющий каждую метрику с ID соответствующего GenAI-треда.\
> \
> \*\*Пример ответа:\*\*\
> \`\`\`json {\
> &#x20; "power\_output":           "thread\_a12b34",\
> &#x20; "ground\_reaction\_force":  "thread\_c56d78",\
> &#x20; "barbell\_velocity":       "thread\_e90f12",\
> &#x20; "hip\_velocity":           "thread\_g34h56",\
> &#x20; "shin\_angle":             "thread\_i78j90",\
> &#x20; "hip\_height":             "thread\_k12l34",\
> &#x20; "torso\_angle":            "thread\_m56n78",\
> &#x20; "hip\_angle":              "thread\_o90p12",\
> &#x20; "knee\_angle":             "thread\_q34r56",\
> &#x20; "bar\_height":             "thread\_s78t90",\
> &#x20; "barbell\_trajectory":     "thread\_u12v34",\
> &#x20; "vertical\_shoulder\_height":"thread\_w56x78"\
> } \`\`\`\
> \
> \*\*Примечания:\*\*\
> \- \`session\_id\` должен ссылаться на существующую сессию.\
> \- У вызывающей стороны должны быть соответствующие права (действительный токен и тариф).\
> \- Используйте возвращенные ID тредов для последующего получения комментариев.

````json
{"openapi":"3.1.1","info":{"title":"AIKYNETIX WEB API","version":"v2"},"servers":[{"url":"https://api.aikynetix.app"}],"security":[{"Bearer":[]},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","name":"Authorization","in":"header","description":"Укажите ваш Bearer-токен (Firebase auth) в формате: Bearer <токен>"},"ApiKeyAuth":{"type":"apiKey","name":"API-KEY","in":"header","description":"Укажите ваш API-ключ в заголовке: API-KEY: <api_key>"}}},"paths":{"/weightlifting/sessions/{session_id}/recommendation/":{"post":{"operationId":"weightlifting_sessions_recommendation_create","summary":"Генерация комментариев анализа для сессии тяжелой атлетики","description":"### Генерация комментариев анализа\n\nСоздает отдельные GenAI-треды для каждой метрики анализа (мощность, сила,  скорость штанги, углы суставов и т.д.) для получения лаконичных  тренерских комментариев по каждой.\n\n**Пример использования:**\n`POST /weightlifting/sessions/{session_id}/recommendation/`\n\n**Параметры:**\n- `session_id` *(строка, обязательный)* – Идентификатор сессии для анализа.\n- `measurement_system` *(query, опциональный)* – `'metric'` (по умолчанию) или `'imperial'`; определяет единицы измерения в запросе.\n\n**Структура ответа:**\nJSON-объект, сопоставляющий каждую метрику с ID соответствующего GenAI-треда.\n\n**Пример ответа:**\n```json {\n  \"power_output\":           \"thread_a12b34\",\n  \"ground_reaction_force\":  \"thread_c56d78\",\n  \"barbell_velocity\":       \"thread_e90f12\",\n  \"hip_velocity\":           \"thread_g34h56\",\n  \"shin_angle\":             \"thread_i78j90\",\n  \"hip_height\":             \"thread_k12l34\",\n  \"torso_angle\":            \"thread_m56n78\",\n  \"hip_angle\":              \"thread_o90p12\",\n  \"knee_angle\":             \"thread_q34r56\",\n  \"bar_height\":             \"thread_s78t90\",\n  \"barbell_trajectory\":     \"thread_u12v34\",\n  \"vertical_shoulder_height\":\"thread_w56x78\"\n} ```\n\n**Примечания:**\n- `session_id` должен ссылаться на существующую сессию.\n- У вызывающей стороны должны быть соответствующие права (действительный токен и тариф).\n- Используйте возвращенные ID тредов для последующего получения комментариев.","parameters":[{"schema":{"type":"string"},"name":"session_id","in":"path","description":"Уникальный идентификатор сессии","required":true},{"schema":{"type":"string","enum":["metric","imperial"]},"name":"measurement_system","in":"query","description":"Система измерений, используемая в запросах","required":false}],"responses":{"201":{"description":"Треды успешно созданы.","content":{"application/json":{"schema":{"description":"Сопоставление метрик с ID тредов.","required":["power_output","ground_reaction_force","barbell_velocity","hip_velocity","shin_angle","hip_height","torso_angle","hip_angle","knee_angle","bar_height","barbell_trajectory","vertical_shoulder_height"],"type":"object","properties":{"power_output":{"description":"ID треда для мощности.","type":"string"},"ground_reaction_force":{"description":"ID треда для силы реакции опоры.","type":"string"},"barbell_velocity":{"description":"ID треда для скорости штанги.","type":"string"},"hip_velocity":{"description":"ID треда для скорости бедер.","type":"string"},"shin_angle":{"description":"ID треда для угла голени.","type":"string"},"hip_height":{"description":"ID треда для высоты бедер.","type":"string"},"torso_angle":{"description":"ID треда для угла корпуса.","type":"string"},"hip_angle":{"description":"ID треда для угла тазобедренного сустава.","type":"string"},"knee_angle":{"description":"ID треда для угла коленного сустава.","type":"string"},"bar_height":{"description":"ID треда для максимальной высоты штанги.","type":"string"},"barbell_trajectory":{"description":"ID треда для траектории штанги.","type":"string"},"vertical_shoulder_height":{"description":"ID треда для высоты плеч.","type":"string"}}}}}},"400":{"description":"Неверный запрос - неверные параметры.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Подробное сообщение об ошибке.","type":"string"}}}}}},"401":{"description":"Не авторизован - недействительный токен.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке аутентификации.","type":"string"}}}}}},"403":{"description":"Запрещено - требуются права администратора.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке прав доступа.","type":"string"}}}}}},"404":{"description":"Не найдено - сессия не найдена или у пользователя нет действующего тарифа.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке, указывающее что сессия не найдена или тариф недействителен.","type":"string"}}}}}},"500":{"description":"Внутренняя ошибка сервера.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение о серверной ошибке.","type":"string"}}}}}}},"tags":["weightlifting"]}}}}
````

## Экспорт данных сессии тяжелой атлетики

> Возвращает данные сессии тяжелой атлетики из Firestore, включая ключевые точки, углы и временные метки. Активность сессии должна быть 'Weightlifting'.\
> \### Параметры пути\
> \- \*\*session\_id\*\* \*(строка, обязательно)\*: Уникальный идентификатор сессии.\
> \### Параметры запроса\
> \- \*\*demo\*\* \*(булево, опционально)\*: Установите \`true\` для получения демо-сессии.\
> \### Структура ответа (HTTP 200)\
> При успехе ответ содержит JSON-объект с: - \*\*keypoints\*\* \*(объект)\*: Ключевые точки, где каждый ключ соответствует массиву чисел. - \*\*angles\*\* \*(объект)\*: Углы, где каждый ключ соответствует массиву чисел. - \*\*all\_timestamps\*\* \*(массив чисел)\*: Временные метки. - \*\*metrics\*\* \*(объект)\*: Числовые метрики. - \*\*activity\*\* \*(строка)\*: Активность (ожидается 'Weightlifting').\
> \### Обработка ошибок\
> \- \*\*400 Неверный запрос\*\*: Неверные параметры. - \*\*401 Не авторизован\*\*: Отсутствует или неверный токен. - \*\*403 Запрещено\*\*: Недостаточно прав. - \*\*404 Не найдено\*\*: Сессия не найдена или неверная активность. - \*\*500 Ошибка сервера\*\*: Непредвиденная ошибка.\
> \### Безопасность\
> Требуется валидный API-KEY токен в заголовке \`Authorization\`.<br>

```json
{"openapi":"3.1.1","info":{"title":"AIKYNETIX WEB API","version":"v2"},"servers":[{"url":"https://api.aikynetix.app"}],"security":[{"Bearer":[]},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","name":"Authorization","in":"header","description":"Укажите ваш Bearer-токен (Firebase auth) в формате: Bearer <токен>"},"ApiKeyAuth":{"type":"apiKey","name":"API-KEY","in":"header","description":"Укажите ваш API-ключ в заголовке: API-KEY: <api_key>"}}},"paths":{"/weightlifting/sessions/{session_id}/export/":{"get":{"operationId":"weightlifting_sessions_export_list","summary":"Экспорт данных сессии тяжелой атлетики","description":"Возвращает данные сессии тяжелой атлетики из Firestore, включая ключевые точки, углы и временные метки. Активность сессии должна быть 'Weightlifting'.\n### Параметры пути\n- **session_id** *(строка, обязательно)*: Уникальный идентификатор сессии.\n### Параметры запроса\n- **demo** *(булево, опционально)*: Установите `true` для получения демо-сессии.\n### Структура ответа (HTTP 200)\nПри успехе ответ содержит JSON-объект с: - **keypoints** *(объект)*: Ключевые точки, где каждый ключ соответствует массиву чисел. - **angles** *(объект)*: Углы, где каждый ключ соответствует массиву чисел. - **all_timestamps** *(массив чисел)*: Временные метки. - **metrics** *(объект)*: Числовые метрики. - **activity** *(строка)*: Активность (ожидается 'Weightlifting').\n### Обработка ошибок\n- **400 Неверный запрос**: Неверные параметры. - **401 Не авторизован**: Отсутствует или неверный токен. - **403 Запрещено**: Недостаточно прав. - **404 Не найдено**: Сессия не найдена или неверная активность. - **500 Ошибка сервера**: Непредвиденная ошибка.\n### Безопасность\nТребуется валидный API-KEY токен в заголовке `Authorization`.\n","parameters":[{"schema":{"type":"string"},"name":"session_id","in":"path","description":"ID сессии для экспорта данных.","required":true},{"schema":{"type":"boolean"},"name":"demo","in":"query","description":"Установите `true` для получения демо-сессии.","required":false}],"responses":{"200":{"description":"Данные сессии успешно получены.","content":{"application/json":{"schema":{"required":["keypoints","angles","all_timestamps","metrics","activity"],"type":"object","properties":{"keypoints":{"description":"Ключевые точки, где ключи соответствуют массивам чисел.","type":"object","additionalProperties":{"type":"array","items":{"type":"number"}}},"angles":{"description":"Углы, где ключи соответствуют массивам чисел.","type":"object","additionalProperties":{"type":"array","items":{"type":"number"}}},"all_timestamps":{"description":"Временные метки (в секундах).","type":"array","items":{"type":"number"}},"metrics":{"description":"Числовые метрики, где ключи соответствуют числам.","type":"object","additionalProperties":{"type":"number"}},"activity":{"description":"Активность (ожидается 'Weightlifting').","type":"string"}}}}}},"400":{"description":"Неверный запрос - неверные параметры или admin UID.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке.","type":"string"}}}}}},"401":{"description":"Не авторизован - отсутствует или неверный токен.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке токена.","type":"string"}}}}}},"403":{"description":"Запрещено - недостаточно прав.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об отказе в доступе.","type":"string"}}}}}},"404":{"description":"Не найдено - сессия не найдена или неверная активность.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке.","type":"string"}}}}}},"500":{"description":"Внутренняя ошибка сервера - непредвиденная ошибка.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Подробное сообщение об ошибке.","type":"string"}}}}}}},"tags":["weightlifting"]}}}}
```

## Анализ подъема в тяжелой атлетике

> Выполняет полный биомеханический анализ сессии тяжелой атлетики (\`рывок\`, \`толчок\` и др.).\
> \
> \### Параметр пути\
> \- \*\*session\_id\*\* \*(строка, обязательный)\* – Уникальный ID сессии тяжелой атлетики.\
> \
> \### Параметр запроса (опциональный)\
> \- \*\*demo\*\* \*(логический)\* – Установите \`true\` для получения предварительно сгенерированного демо-анализа.\
> \
> \### Структура ответа (\`HTTP 200\`)\
> Возвращает JSON-отчет с разделенными по кадрам метриками,  временем фаз и информацией о пользователе.\
> \
> \`\`\`json {\
> &#x20; "exercise": "рывок",\
> &#x20; "key\_metrics": {\
> &#x20;   "power\_output":           \[ 2350, 2425, 2510, 2600, 2705 ],\
> &#x20;   "ground\_reaction\_force":  \[ 1120, 1180, 1215, 1260, 1300 ],\
> &#x20;   "barbell\_velocity":       \[ 0.90, 1.05, 1.28, 1.55, 2.02 ]\
> &#x20; },\
> &#x20; "body\_positioning": {\
> &#x20;   "hip\_velocity": \[ 0.45, 0.52, 0.60 ],\
> &#x20;   "shin\_angle":   \[ 75.0, 72.5, 70.2 ],\
> &#x20;   "hip\_height":   \[ 450, 455, 468 ],\
> &#x20;   "torso\_angle":  \[ 40.0, 38.5, 36.8 ]\
> &#x20; },\
> &#x20; "joint\_angles": {\
> &#x20;   "hip\_angle":  \[ 165, 159, 152 ],\
> &#x20;   "knee\_angle": \[ 155, 147, 138 ]\
> &#x20; },\
> &#x20; "barbell\_positioning": {\
> &#x20;   "bar\_height":              \[ 120, 385, 610 ],\
> &#x20;   "barbell\_trajectory":      \[ 0, -8, -2 ],\
> &#x20;   "vertical\_shoulder\_height":\[ 1380, 1400, 1440 ]\
> &#x20; },\
> &#x20; "phase\_data": {\
> &#x20;   "start\_of\_lifting":        { "image\_url": "<https://storage.googleapis.com>..." },\
> &#x20;   "first\_pull\_end":   { "image\_url": "<https://storage.googleapis.com>..." }\
> &#x20; },\
> &#x20; "chart\_data": {\
> &#x20;   "setup":       { "start": 0,    "end": 536 },\
> &#x20;   "first\_pull":  { "start": 536,  "end": 952 }\
> &#x20; },\
> &#x20; "user\_information": {\
> &#x20;   "display\_name": "Ахрор Жабборов",\
> &#x20;   "age": 28,\
> &#x20;   "weight": 75,\
> &#x20;   "height": 178\
> &#x20; },\
> &#x20; "session\_date": "18/05/2025",\
> &#x20; "comments": {}\
> } \`\`\`\
> \
> \### Коды ошибок\
> \- \*\*400 Bad Request\*\* – Некорректные параметры.\
> \- \*\*401 Unauthorized\*\* – Отсутствует/недействительный токен.\
> \- \*\*403 Forbidden\*\* – У пользователя нет действующего платного тарифа.\
> \- \*\*404 Not Found\*\* – Сессия не существует.\
> \- \*\*500 Internal Server Error\*\* – Непредвиденная ошибка сервера.\
> \
> \### Безопасность\
> Требуется действительный токен API-KEY в заголовке \`Authorization\`.

````json
{"openapi":"3.1.1","info":{"title":"AIKYNETIX WEB API","version":"v2"},"servers":[{"url":"https://api.aikynetix.app"}],"security":[{"Bearer":[]},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","name":"Authorization","in":"header","description":"Укажите ваш Bearer-токен (Firebase auth) в формате: Bearer <токен>"},"ApiKeyAuth":{"type":"apiKey","name":"API-KEY","in":"header","description":"Укажите ваш API-ключ в заголовке: API-KEY: <api_key>"}}},"paths":{"/weightlifting/sessions/{session_id}/lift-analysis/":{"post":{"operationId":"weightlifting_sessions_lift-analysis_create","summary":"Анализ подъема в тяжелой атлетике","description":"Выполняет полный биомеханический анализ сессии тяжелой атлетики (`рывок`, `толчок` и др.).\n\n### Параметр пути\n- **session_id** *(строка, обязательный)* – Уникальный ID сессии тяжелой атлетики.\n\n### Параметр запроса (опциональный)\n- **demo** *(логический)* – Установите `true` для получения предварительно сгенерированного демо-анализа.\n\n### Структура ответа (`HTTP 200`)\nВозвращает JSON-отчет с разделенными по кадрам метриками,  временем фаз и информацией о пользователе.\n\n```json {\n  \"exercise\": \"рывок\",\n  \"key_metrics\": {\n    \"power_output\":           [ 2350, 2425, 2510, 2600, 2705 ],\n    \"ground_reaction_force\":  [ 1120, 1180, 1215, 1260, 1300 ],\n    \"barbell_velocity\":       [ 0.90, 1.05, 1.28, 1.55, 2.02 ]\n  },\n  \"body_positioning\": {\n    \"hip_velocity\": [ 0.45, 0.52, 0.60 ],\n    \"shin_angle\":   [ 75.0, 72.5, 70.2 ],\n    \"hip_height\":   [ 450, 455, 468 ],\n    \"torso_angle\":  [ 40.0, 38.5, 36.8 ]\n  },\n  \"joint_angles\": {\n    \"hip_angle\":  [ 165, 159, 152 ],\n    \"knee_angle\": [ 155, 147, 138 ]\n  },\n  \"barbell_positioning\": {\n    \"bar_height\":              [ 120, 385, 610 ],\n    \"barbell_trajectory\":      [ 0, -8, -2 ],\n    \"vertical_shoulder_height\":[ 1380, 1400, 1440 ]\n  },\n  \"phase_data\": {\n    \"start_of_lifting\":        { \"image_url\": \"https://storage.googleapis.com...\" },\n    \"first_pull_end\":   { \"image_url\": \"https://storage.googleapis.com...\" }\n  },\n  \"chart_data\": {\n    \"setup\":       { \"start\": 0,    \"end\": 536 },\n    \"first_pull\":  { \"start\": 536,  \"end\": 952 }\n  },\n  \"user_information\": {\n    \"display_name\": \"Ахрор Жабборов\",\n    \"age\": 28,\n    \"weight\": 75,\n    \"height\": 178\n  },\n  \"session_date\": \"18/05/2025\",\n  \"comments\": {}\n} ```\n\n### Коды ошибок\n- **400 Bad Request** – Некорректные параметры.\n- **401 Unauthorized** – Отсутствует/недействительный токен.\n- **403 Forbidden** – У пользователя нет действующего платного тарифа.\n- **404 Not Found** – Сессия не существует.\n- **500 Internal Server Error** – Непредвиденная ошибка сервера.\n\n### Безопасность\nТребуется действительный токен API-KEY в заголовке `Authorization`.","parameters":[{"schema":{"type":"string"},"name":"session_id","in":"path","description":"Идентификатор сессии для анализа","required":true},{"schema":{"type":"boolean"},"name":"demo","in":"query","description":"Установите `true` для получения демо-анализа вместо реального.","required":false}],"responses":{"200":{"description":"Отчет анализа подъема успешно сгенерирован.","content":{"application/json":{"schema":{"type":"object","properties":{"exercise":{"type":"string"},"key_metrics":{"type":"object","additionalProperties":{"type":"array","items":{"type":"number"}}},"body_positioning":{"type":"object","additionalProperties":{"type":"array","items":{"type":"number"}}},"joint_angles":{"type":"object","additionalProperties":{"type":"array","items":{"type":"number"}}},"barbell_positioning":{"type":"object","additionalProperties":{"type":"array","items":{"type":"number"}}},"phase_data":{"type":"object","additionalProperties":{"type":"object","properties":{"average_time_ms":{"type":"integer"}}}},"chart_data":{"type":"object","additionalProperties":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}}},"user_information":{"type":"object","additionalProperties":{"type":"string"}},"session_date":{"type":"string","format":"date"},"comments":{"type":"object"}}}}}},"400":{"description":"Неверный запрос - неверные параметры.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Подробное сообщение об ошибке.","type":"string"}}}}}},"401":{"description":"Не авторизован - недействительный токен.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке аутентификации.","type":"string"}}}}}},"403":{"description":"Запрещено - требуются права администратора.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке прав доступа.","type":"string"}}}}}},"404":{"description":"Не найдено - сессия не найдена или у пользователя нет действующего тарифа.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке, указывающее что сессия не найдена или тариф недействителен.","type":"string"}}}}}},"500":{"description":"Внутренняя ошибка сервера.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение о серверной ошибке.","type":"string"}}}}}}},"tags":["weightlifting"]}}}}
````


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.aikynetix.app/ru/api-documentation/developer-resources-and-api-reference/api-reference/weightlifting.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
