# Бег

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

> Этот эндпоинт позволяет \*\*администратору\*\* (или суб-администратору) загрузить \*\*видеофайл\*\* для обработки и создать новый ресурс "сессии" \*\*от имени другого пользователя\*\*. Сервер вернет \`session\_id\`, который можно использовать для проверки статуса или получения деталей/результатов сессии.\
> \
> \### Тело запроса (Multipart/Form-Data)\
> \
> Необходимо указать следующие поля:\
> \
> \- \*\*user\_id\*\* \*(строка, обязательно)\*: ID пользователя, от имени которого создается сессия.\
> \- \*\*video\*\* \*(файл, обязательно)\*: Исходный видеофайл для обработки.\
> \- \*\*session\_name\*\* \*(строка, опционально)\*: Человекочитаемое название сессии.\
> \- \*\*incline\_degree\*\* \*(строка или число, опционально)\*: Числовое значение, представляющее угол наклона.\
> \- \*\*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 'incline\_degree=5' \\\
> &#x20;    -F 'body\_joint\_angles=elbow, knee, ankle' \\\
> &#x20;    https\://\<backend-link>/running/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":{"/running/sessions/":{"post":{"operationId":"running_sessions_create","summary":"Создать новую сессию обработки видео","description":"Этот эндпоинт позволяет **администратору** (или суб-администратору) загрузить **видеофайл** для обработки и создать новый ресурс \"сессии\" **от имени другого пользователя**. Сервер вернет `session_id`, который можно использовать для проверки статуса или получения деталей/результатов сессии.\n\n### Тело запроса (Multipart/Form-Data)\n\nНеобходимо указать следующие поля:\n\n- **user_id** *(строка, обязательно)*: ID пользователя, от имени которого создается сессия.\n- **video** *(файл, обязательно)*: Исходный видеофайл для обработки.\n- **session_name** *(строка, опционально)*: Человекочитаемое название сессии.\n- **incline_degree** *(строка или число, опционально)*: Числовое значение, представляющее угол наклона.\n- **body_joint_angles** *(массив строк, опционально)*: Список названий суставов через запятую (например, 'elbow, knee, ankle'). По умолчанию ['all'], если не указано.\n\n### Структура ответа\n\nПри успешном выполнении (HTTP 200) ответ представляет собой JSON-объект с:\n\n- **session_id** *(строка)*: Уникальный идентификатор созданной сессии.\n- **title** *(строка)*: Название сессии (по умолчанию используется резервное значение, если `session_name` не указано).\n\n### Рабочий процесс\n1. Отправьте **POST**-запрос с multipart/form-data, содержащий обязательные поля `user_id` и `video`, а также любые опциональные поля.\n2. Укажите действительный токен API-KEY в заголовке `Authorization`.\n3. У вызывающего должны быть права администратора для успешного создания сессии от имени другого пользователя.\n4. В случае успеха сервер вернет `session_id` и `title`.\n5. В случае ошибки (например, отсутствие обязательных полей, недостаток прав) вернется JSON-объект с ключом `error`.\n\n#### Пример cURL:\n\n```bash\ncurl -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 'incline_degree=5' \\\n     -F 'body_joint_angles=elbow, knee, ankle' \\\n     https://<backend-link>/running/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` или неверные данные формы.\n","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":"Запрещено - пользователь не имеет прав администратора для создания сессий от имени других.\n","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Ошибка, указывающая на недостаточные привилегии.","type":"string"}}}}}},"404":{"description":"Не найдено - указывает на проблемы бизнес-логики или ограничения ресурсов (например, лимит сессий).\n","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":["running"],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"user_id":{"type":"string","description":"**Обязательно.** ID пользователя, для которого создается сессия (форма: текст).\n"},"video":{"type":"string","description":"**Обязательно.** Исходный видеофайл для обработки (форма: файл).\n"},"session_name":{"type":"string","description":"**Опционально.** Описательное название сессии (форма: текст)."},"incline_degree":{"type":"string","description":"**Опционально.** Числовая строка, указывающая угол наклона (форма: текст).\n"},"body_joint_angles":{"type":"array","description":"**Опционально.** Список названий суставов через запятую. Доступные значения: `'ankle'`, `'knee'`, `'elbow'`, `'hip'`, `'shoulder'`. Пример: `ankle,knee,hip`\n"}},"required":["user_id","video"]}}}}}}}}
````

## Получить общие метрики

> Вычисляет и возвращает средние метрики для всех сессий бега администратора, а также детальные метрики и временную метку создания последней сессии.\
> \
> \### Структура ответа (HTTP 200)\
> \
> Ответ представляет собой JSON-объект со следующей структурой:\
> \
> \- \*\*avg\_metrics\*\* \*(объект)\*: Содержит средние значения, рассчитанные по всем сессиям.\
> &#x20; \- \*\*avg\_speed\*\* \*(число)\*: Средняя скорость.\
> &#x20; \- \*\*avg\_power\*\* \*(число)\*: Средняя мощность.\
> &#x20; \- \*\*avg\_cadence\*\* \*(число)\*: Средний каденс.\
> &#x20; \- \*\*avg\_flight\_time\*\* \*(число)\*: Среднее время полета.\
> \
> \- \*\*last\_session\_metrics\*\* \*(объект)\*: Содержит детальные метрики последней сессии.\
> &#x20; \- \*\*speed\*\* \*(объект)\*: Метрики скорости с:\
> &#x20;     \- \*\*avg\*\* \*(число)\*: Средняя скорость.\
> &#x20;     \- \*\*min\*\* \*(число)\*: Минимальная скорость.\
> &#x20;     \- \*\*max\*\* \*(число)\*: Максимальная скорость.\
> &#x20; \- \*\*normalized\_power\*\* \*(объект)\*: Метрики нормализованной мощности с ключами \`avg\`, \`min\`, \`max\`.\
> &#x20; \- \*\*cadence\*\* \*(объект)\*: Метрики каденса с ключами \`avg\`, \`min\`, \`max\`.\
> &#x20; \- \*\*total\_distance\*\* \*(число)\*: Общее расстояние.\
> &#x20; \- \*\*power\*\* \*(объект)\*: Метрики мощности с ключами \`avg\`, \`min\`, \`max\`.\
> &#x20; \- \*\*stride\_time\*\* \*(объект)\*: Метрики времени шага с ключами \`avg\`, \`min\`, \`max\`.\
> &#x20; \- \*\*total\_time\*\* \*(число)\*: Общее время сессии.\
> &#x20; \- \*\*contact\_time\*\* \*(объект)\*: Метрики времени контакта с ключами \`avg\`, \`min\`, \`max\`.\
> &#x20; \- \*\*contact\_angle\*\* \*(объект)\*: Метрики угла контакта с ключами \`avg\`, \`min\`, \`max\`.\
> &#x20; \- \*\*incline\*\* \*(объект)\*: Метрики наклона с ключами \`avg\`, \`min\`, \`max\`.\
> &#x20; \- \*\*pace\*\* \*(объект)\*: Метрики темпа с ключами \`avg\`, \`min\`, \`max\`.\
> &#x20; \- \*\*stride\_length\*\* \*(объект)\*: Метрики длины шага с ключами \`avg\`, \`min\`, \`max\`.\
> &#x20; \- \*\*rbalance\*\* \*(объект)\*: Метрики баланса с ключами \`avg\`, \`min\`, \`max\`.\
> &#x20; \- \*\*flight\_time\*\* \*(объект)\*: Метрики времени полета с ключами \`avg\`, \`min\`, \`max\`.\
> &#x20; \- \*\*footstrike\*\* \*(строка)\*: Тип постановки стопы (например, 'midfoot').\
> \
> \- \*\*last\_session\_created\_at\*\* \*(объект)\*: Временная метка создания последней сессии, содержащая:\
> &#x20; \- \*\*date\*\* \*(строка)\*: Дата в формате ДД/ММ/ГГГГ.\
> &#x20; \- \*\*time\*\* \*(строка)\*: Время в формате ЧЧ:MM AM/PM.\
> \
> \### Обработка ошибок\
> \
> \- \*\*400 Неверный запрос\*\*: Неверные параметры запроса (например, неверный UID администратора).\
> \- \*\*401 Неавторизован\*\*: Отсутствует или недействителен токен доступа.\
> \- \*\*403 Запрещено\*\*: Недостаточно прав для получения общих метрик.\
> \- \*\*404 Не найдено\*\*: Сессии не найдены или метрики недоступны.\
> \- \*\*500 Внутренняя ошибка сервера\*\*: Произошла непредвиденная ошибка на сервере.\
> \
> \### Безопасность\
> \
> В заголовке \`Authorization\` должен быть указан действительный токен API-KEY.<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":{"/running/sessions/metrics/total/":{"get":{"operationId":"running_sessions_metrics_total_list","summary":"Получить общие метрики","description":"Вычисляет и возвращает средние метрики для всех сессий бега администратора, а также детальные метрики и временную метку создания последней сессии.\n\n### Структура ответа (HTTP 200)\n\nОтвет представляет собой JSON-объект со следующей структурой:\n\n- **avg_metrics** *(объект)*: Содержит средние значения, рассчитанные по всем сессиям.\n  - **avg_speed** *(число)*: Средняя скорость.\n  - **avg_power** *(число)*: Средняя мощность.\n  - **avg_cadence** *(число)*: Средний каденс.\n  - **avg_flight_time** *(число)*: Среднее время полета.\n\n- **last_session_metrics** *(объект)*: Содержит детальные метрики последней сессии.\n  - **speed** *(объект)*: Метрики скорости с:\n      - **avg** *(число)*: Средняя скорость.\n      - **min** *(число)*: Минимальная скорость.\n      - **max** *(число)*: Максимальная скорость.\n  - **normalized_power** *(объект)*: Метрики нормализованной мощности с ключами `avg`, `min`, `max`.\n  - **cadence** *(объект)*: Метрики каденса с ключами `avg`, `min`, `max`.\n  - **total_distance** *(число)*: Общее расстояние.\n  - **power** *(объект)*: Метрики мощности с ключами `avg`, `min`, `max`.\n  - **stride_time** *(объект)*: Метрики времени шага с ключами `avg`, `min`, `max`.\n  - **total_time** *(число)*: Общее время сессии.\n  - **contact_time** *(объект)*: Метрики времени контакта с ключами `avg`, `min`, `max`.\n  - **contact_angle** *(объект)*: Метрики угла контакта с ключами `avg`, `min`, `max`.\n  - **incline** *(объект)*: Метрики наклона с ключами `avg`, `min`, `max`.\n  - **pace** *(объект)*: Метрики темпа с ключами `avg`, `min`, `max`.\n  - **stride_length** *(объект)*: Метрики длины шага с ключами `avg`, `min`, `max`.\n  - **rbalance** *(объект)*: Метрики баланса с ключами `avg`, `min`, `max`.\n  - **flight_time** *(объект)*: Метрики времени полета с ключами `avg`, `min`, `max`.\n  - **footstrike** *(строка)*: Тип постановки стопы (например, 'midfoot').\n\n- **last_session_created_at** *(объект)*: Временная метка создания последней сессии, содержащая:\n  - **date** *(строка)*: Дата в формате ДД/ММ/ГГГГ.\n  - **time** *(строка)*: Время в формате ЧЧ:MM AM/PM.\n\n### Обработка ошибок\n\n- **400 Неверный запрос**: Неверные параметры запроса (например, неверный UID администратора).\n- **401 Неавторизован**: Отсутствует или недействителен токен доступа.\n- **403 Запрещено**: Недостаточно прав для получения общих метрик.\n- **404 Не найдено**: Сессии не найдены или метрики недоступны.\n- **500 Внутренняя ошибка сервера**: Произошла непредвиденная ошибка на сервере.\n\n### Безопасность\n\nВ заголовке `Authorization` должен быть указан действительный токен API-KEY.\n","responses":{"200":{"description":"Общие метрики успешно получены.","content":{"application/json":{"schema":{"required":["avg_metrics","last_session_metrics","last_session_created_at"],"type":"object","properties":{"avg_metrics":{"description":"Средние метрики по всем сессиям.","required":["avg_speed","avg_power","avg_cadence","avg_flight_time"],"type":"object","properties":{"avg_speed":{"description":"Средняя скорость.","type":"number"},"avg_power":{"description":"Средняя мощность.","type":"number"},"avg_cadence":{"description":"Средний каденс.","type":"number"},"avg_flight_time":{"description":"Среднее время полета.","type":"number"}}},"last_session_metrics":{"description":"Детальные метрики последней сессии.","required":["speed","normalized_power","cadence","total_distance","power","stride_time","total_time","contact_time","contact_angle","incline","pace","stride_length","rbalance","flight_time","footstrike"],"type":"object","properties":{"speed":{"description":"Метрики скорости.","required":["avg","min","max"],"type":"object","properties":{"avg":{"description":"Средняя скорость.","type":"number"},"min":{"description":"Минимальная скорость.","type":"number"},"max":{"description":"Максимальная скорость.","type":"number"}}},"normalized_power":{"description":"Метрики нормализованной мощности.","required":["avg","min","max"],"type":"object","properties":{"avg":{"description":"Средняя нормализованная мощность.","type":"number"},"min":{"description":"Минимальная нормализованная мощность.","type":"number"},"max":{"description":"Максимальная нормализованная мощность.","type":"number"}}},"cadence":{"description":"Метрики каденса.","required":["avg","min","max"],"type":"object","properties":{"avg":{"description":"Средний каденс.","type":"number"},"min":{"description":"Минимальный каденс.","type":"number"},"max":{"description":"Максимальный каденс.","type":"number"}}},"total_distance":{"description":"Общее расстояние, пройденное в сессии.","type":"number"},"power":{"description":"Метрики мощности.","required":["avg","min","max"],"type":"object","properties":{"avg":{"description":"Средняя мощность.","type":"number"},"min":{"description":"Минимальная мощность.","type":"number"},"max":{"description":"Максимальная мощность.","type":"number"}}},"stride_time":{"description":"Метрики времени шага.","required":["avg","min","max"],"type":"object","properties":{"avg":{"description":"Среднее время шага.","type":"number"},"min":{"description":"Минимальное время шага.","type":"number"},"max":{"description":"Максимальное время шага.","type":"number"}}},"total_time":{"description":"Общее время сессии.","type":"number"},"contact_time":{"description":"Метрики времени контакта.","required":["avg","min","max"],"type":"object","properties":{"avg":{"description":"Среднее время контакта.","type":"number"},"min":{"description":"Минимальное время контакта.","type":"number"},"max":{"description":"Максимальное время контакта.","type":"number"}}},"contact_angle":{"description":"Метрики угла контакта.","required":["avg","min","max"],"type":"object","properties":{"avg":{"description":"Средний угол контакта.","type":"number"},"min":{"description":"Минимальный угол контакта.","type":"number"},"max":{"description":"Максимальный угол контакта.","type":"number"}}},"incline":{"description":"Метрики наклона.","required":["avg","min","max"],"type":"object","properties":{"avg":{"description":"Средний наклон.","type":"number"},"min":{"description":"Минимальный наклон.","type":"number"},"max":{"description":"Максимальный наклон.","type":"number"}}},"pace":{"description":"Метрики темпа.","required":["avg","min","max"],"type":"object","properties":{"avg":{"description":"Средний темп.","type":"number"},"min":{"description":"Минимальный темп.","type":"number"},"max":{"description":"Максимальный темп.","type":"number"}}},"stride_length":{"description":"Метрики длины шага.","required":["avg","min","max"],"type":"object","properties":{"avg":{"description":"Средняя длина шага.","type":"number"},"min":{"description":"Минимальная длина шага.","type":"number"},"max":{"description":"Максимальная длина шага.","type":"number"}}},"rbalance":{"description":"Метрики баланса.","required":["avg","min","max"],"type":"object","properties":{"avg":{"description":"Средний баланс.","type":"number"},"min":{"description":"Минимальный баланс.","type":"number"},"max":{"description":"Максимальный баланс.","type":"number"}}},"flight_time":{"description":"Метрики времени полета.","required":["avg","min","max"],"type":"object","properties":{"avg":{"description":"Среднее время полета.","type":"number"},"min":{"description":"Минимальное время полета.","type":"number"},"max":{"description":"Максимальное время полета.","type":"number"}}},"footstrike":{"description":"Тип постановки стопы (например, 'midfoot').","type":"string"}}},"last_session_created_at":{"description":"Временная метка создания последней сессии.","required":["date","time"],"type":"object","properties":{"date":{"description":"Дата создания в формате ДД/ММ/ГГГГ.","type":"string"},"time":{"description":"Время создания в формате ЧЧ:MM AM/PM.","type":"string"}}}}}}}},"400":{"description":"Неверный запрос - Неверные параметры (например, неверный UID администратора).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Подробное сообщение об ошибке, объясняющее неверный запрос.","type":"string"}}}}}},"401":{"description":"Неавторизован - Отсутствует или недействителен токен доступа.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Ошибка, указывающая, что действительный токен API-KEY не был предоставлен.","type":"string"}}}}}},"403":{"description":"Запрещено - Пользователь не имеет достаточных прав для получения общих метрик.\n","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Ошибка, указывающая на недостаточные разрешения.","type":"string"}}}}}},"404":{"description":"Не найдено - Сессии не найдены или метрики недоступны.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке, указывающее, что сессии или метрики не были найдены.\n","type":"string"}}}}}},"500":{"description":"Внутренняя ошибка сервера - Произошла непредвиденная ошибка на сервере.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Подробное сообщение об ошибке, указывающее на сбой на стороне сервера.","type":"string"}}}}}}},"tags":["running"]}}}}
```

## Получить детали сессии бега

> Получает детальную информацию о конкретной сессии бега, идентифицированной по \`session\_id\`.\
> \
> \### Параметр пути\
> \- \*\*session\_id\*\* \*(строка, обязательно)\*: Уникальный идентификатор сессии для получения.\
> \
> \### Параметр запроса\
> \- \*\*demo\*\* \*(логический, опционально)\*: Установите \`true\`, чтобы получить демонстрационные данные сессии бега вместо реальных.\
> \
> \### Структура ответа\
> При успешном выполнении (HTTP 200) ответ представляет собой JSON-объект, содержащий следующие поля:\
> \
> \- \*\*metrics\*\* \*(объект)\*: Словарь массивов метрик (например, скорость, каденс, расстояние). Каждый ключ соответствует массиву чисел.\
> \- \*\*angles\*\* \*(объект)\*: Словарь массивов углов (например, lhip\_angle, rsho\_angle). Каждый ключ соответствует массиву чисел.\
> \- \*\*all\_timestamps\*\* \*(массив чисел)\*: Список временных меток (в секундах) для данных сессии.\
> \- \*\*analyzed\_video\_url\*\* \*(строка, URI)\*: URL анализированного видео (с наложенными ключевыми точками).\
> \- \*\*video\_url\*\* \*(строка, URI)\*: URL оригинального загруженного видео.\
> \- \*\*segments\*\* \*(целое число)\*: Количество обработанных сегментов.\
> \- \*\*created\_at\*\* \*(объект)\*: Объект, содержащий:\
> &#x20;   \- \*\*date\*\* \*(строка)\*: Дата создания в формате ДД/ММ/ГГГГ.\
> &#x20;   \- \*\*time\*\* \*(строка)\*: Время создания в формате ЧЧ:MM AM/PM.\
> \- \*\*user\_name\*\* \*(строка)\*: Имя пользователя, связанного с сессией.\
> \- \*\*activity\*\* \*(строка)\*: Тип активности (например, 'Running').\
> \- \*\*title\*\* \*(строка)\*: Название сессии.\
> \- \*\*calculated\_metrics\*\* \*(объект)\*: Словарь, содержащий вычисленную статистику (например, средние, минимальные и максимальные значения) для различных метрик.\
> \- \*\*summary\*\* \*(строка)\*: Опциональное текстовое резюме сессии.\
> \
> \### Обработка ошибок\
> \- \*\*400 Неверный запрос\*\*: Неверные параметры запроса (например, неверный UID администратора).\
> \- \*\*401 Неавторизован\*\*: Отсутствует или недействителен токен доступа.\
> \- \*\*403 Запрещено\*\*: Пользователь не имеет достаточных прав для доступа к сессии.\
> \- \*\*404 Не найдено\*\*: Сессия не существует или недействительна для указанной активности.\
> \- \*\*500 Внутренняя ошибка сервера\*\*: Произошла непредвиденная ошибка на стороне сервера.\
> \
> \### Безопасность\
> В заголовке \`Authorization\` должен быть указан действительный токен API-KEY.<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":{"/running/sessions/{session_id}/":{"get":{"operationId":"running_sessions_read","summary":"Получить детали сессии бега","description":"Получает детальную информацию о конкретной сессии бега, идентифицированной по `session_id`.\n\n### Параметр пути\n- **session_id** *(строка, обязательно)*: Уникальный идентификатор сессии для получения.\n\n### Параметр запроса\n- **demo** *(логический, опционально)*: Установите `true`, чтобы получить демонстрационные данные сессии бега вместо реальных.\n\n### Структура ответа\nПри успешном выполнении (HTTP 200) ответ представляет собой JSON-объект, содержащий следующие поля:\n\n- **metrics** *(объект)*: Словарь массивов метрик (например, скорость, каденс, расстояние). Каждый ключ соответствует массиву чисел.\n- **angles** *(объект)*: Словарь массивов углов (например, lhip_angle, rsho_angle). Каждый ключ соответствует массиву чисел.\n- **all_timestamps** *(массив чисел)*: Список временных меток (в секундах) для данных сессии.\n- **analyzed_video_url** *(строка, URI)*: URL анализированного видео (с наложенными ключевыми точками).\n- **video_url** *(строка, URI)*: URL оригинального загруженного видео.\n- **segments** *(целое число)*: Количество обработанных сегментов.\n- **created_at** *(объект)*: Объект, содержащий:\n    - **date** *(строка)*: Дата создания в формате ДД/ММ/ГГГГ.\n    - **time** *(строка)*: Время создания в формате ЧЧ:MM AM/PM.\n- **user_name** *(строка)*: Имя пользователя, связанного с сессией.\n- **activity** *(строка)*: Тип активности (например, 'Running').\n- **title** *(строка)*: Название сессии.\n- **calculated_metrics** *(объект)*: Словарь, содержащий вычисленную статистику (например, средние, минимальные и максимальные значения) для различных метрик.\n- **summary** *(строка)*: Опциональное текстовое резюме сессии.\n\n### Обработка ошибок\n- **400 Неверный запрос**: Неверные параметры запроса (например, неверный UID администратора).\n- **401 Неавторизован**: Отсутствует или недействителен токен доступа.\n- **403 Запрещено**: Пользователь не имеет достаточных прав для доступа к сессии.\n- **404 Не найдено**: Сессия не существует или недействительна для указанной активности.\n- **500 Внутренняя ошибка сервера**: Произошла непредвиденная ошибка на стороне сервера.\n\n### Безопасность\nВ заголовке `Authorization` должен быть указан действительный токен API-KEY.\n","parameters":[{"schema":{"type":"string"},"name":"session_id","in":"path","description":"Уникальный идентификатор сессии.","required":true},{"schema":{"type":"boolean"},"name":"demo","in":"query","description":"Установите `true`, чтобы получить демонстрационные данные сессии бега вместо реальных.\n","required":false}],"responses":{"200":{"description":"Данные сессии успешно получены.","content":{"application/json":{"schema":{"required":["metrics","angles","all_timestamps","activity"],"type":"object","properties":{"metrics":{"description":"Словарь массивов метрик.","type":"object","additionalProperties":{"type":"number"}},"angles":{"description":"Словарь массивов углов.","type":"object","additionalProperties":{"type":"number"}},"all_timestamps":{"description":"Список временных меток, связанных с сессией.","type":"array","items":{"type":"number"}},"analyzed_video_url":{"description":"Публичный URL анализированного видео.","type":"string","format":"uri"},"video_url":{"description":"Публичный URL оригинального видео.","type":"string","format":"uri"},"segments":{"description":"Количество обработанных сегментов.","type":"integer"},"created_at":{"description":"Временная метка создания сессии.","type":"object","properties":{"date":{"description":"Дата создания в формате ДД/ММ/ГГГГ.","type":"string"},"time":{"description":"Время создания в формате ЧЧ:MM AM/PM.","type":"string"}}},"user_name":{"description":"Имя пользователя, связанного с этой сессией.","type":"string"},"activity":{"description":"Тип активности (например, 'Running').","type":"string"},"title":{"description":"Название сессии.","type":"string"},"calculated_metrics":{"description":"Вычисленные метрики (средние, минимальные, максимальные значения) для сессии.","type":"object","additionalProperties":{"type":"number"}},"summary":{"description":"Опциональное резюме сессии.","type":"string"}}}}}},"400":{"description":"Неверный запрос - Неверные параметры или UID администратора.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Подробное сообщение об ошибке, объясняющее неверный запрос.","type":"string"}}}}}},"401":{"description":"Неавторизован - Отсутствует или недействителен токен доступа.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Ошибка, указывающая, что действительный токен API-KEY не был предоставлен.","type":"string"}}}}}},"403":{"description":"Запрещено - Пользователь не авторизован для доступа к этой сессии.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Ошибка, указывающая на недостаточные разрешения для доступа к данным сессии.\n","type":"string"}}}}}},"404":{"description":"Не найдено - Запрошенная сессия не существует или активность не 'Running'.\n","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":["running"]}}}}
```

## Экспортировать данные сессии бега

> Получает детальные данные сессии для экспорта конкретной сессии бега, идентифицированной по \`session\_id\`.\
> \
> \### Параметр пути\
> \- \*\*session\_id\*\* \*(строка, обязательно)\*: Уникальный идентификатор сессии для экспорта.\
> \
> \### Параметр запроса\
> \- \*\*demo\*\* \*(логический, опционально)\*: Установите \`true\`, чтобы получить предварительно сгенерированные демонстрационные данные сессии бега вместо реальных.\
> \
> \### Структура ответа (HTTP 200)\
> Ответ представляет собой JSON-объект, который включает:\
> \
> \- \*\*metrics\*\* \*(объект)\*: Словарь, где каждый ключ представляет метрику (например, 'speed', 'cadence'), а его значение - массив чисел.\
> \- \*\*keypoints\*\* \*(объект)\*: Словарь, где каждый ключ представляет ключевую точку (например, 'lknev', 'ltoev'), а его значение - массив чисел.\
> \- \*\*angles\*\* \*(объект)\*: Словарь, где каждый ключ представляет угол (например, 'lelb\_angle', 'lhip\_angle'), а его значение - массив чисел.\
> \- \*\*all\_timestamps\*\* \*(массив чисел)\*: Массив временных меток (в секундах), соответствующих точкам данных.\
> \- \*\*contact\*\* \*(массив логических значений)\*: Массив логических значений, указывающих статус контакта.\
> \- \*\*activity\*\* \*(строка)\*: Тип активности (например, 'Running').\
> \
> \### Обработка ошибок\
> \- \*\*400 Неверный запрос\*\*: Неверные параметры запроса (например, неверный UID администратора).\
> \- \*\*401 Неавторизован\*\*: Отсутствует или недействителен токен доступа.\
> \- \*\*403 Запрещено\*\*: Пользователь не имеет достаточных прав для доступа к данным этой сессии.\
> \- \*\*404 Не найдено\*\*: Запрошенная сессия не существует или недействительна для активности.\
> \- \*\*500 Внутренняя ошибка сервера\*\*: Произошла непредвиденная ошибка сервера.\
> \
> \### Безопасность\
> В заголовке \`Authorization\` должен быть указан действительный токен API-KEY.<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":{"/running/sessions/{session_id}/export/":{"get":{"operationId":"running_sessions_export_list","summary":"Экспортировать данные сессии бега","description":"Получает детальные данные сессии для экспорта конкретной сессии бега, идентифицированной по `session_id`.\n\n### Параметр пути\n- **session_id** *(строка, обязательно)*: Уникальный идентификатор сессии для экспорта.\n\n### Параметр запроса\n- **demo** *(логический, опционально)*: Установите `true`, чтобы получить предварительно сгенерированные демонстрационные данные сессии бега вместо реальных.\n\n### Структура ответа (HTTP 200)\nОтвет представляет собой JSON-объект, который включает:\n\n- **metrics** *(объект)*: Словарь, где каждый ключ представляет метрику (например, 'speed', 'cadence'), а его значение - массив чисел.\n- **keypoints** *(объект)*: Словарь, где каждый ключ представляет ключевую точку (например, 'lknev', 'ltoev'), а его значение - массив чисел.\n- **angles** *(объект)*: Словарь, где каждый ключ представляет угол (например, 'lelb_angle', 'lhip_angle'), а его значение - массив чисел.\n- **all_timestamps** *(массив чисел)*: Массив временных меток (в секундах), соответствующих точкам данных.\n- **contact** *(массив логических значений)*: Массив логических значений, указывающих статус контакта.\n- **activity** *(строка)*: Тип активности (например, 'Running').\n\n### Обработка ошибок\n- **400 Неверный запрос**: Неверные параметры запроса (например, неверный UID администратора).\n- **401 Неавторизован**: Отсутствует или недействителен токен доступа.\n- **403 Запрещено**: Пользователь не имеет достаточных прав для доступа к данным этой сессии.\n- **404 Не найдено**: Запрошенная сессия не существует или недействительна для активности.\n- **500 Внутренняя ошибка сервера**: Произошла непредвиденная ошибка сервера.\n\n### Безопасность\nВ заголовке `Authorization` должен быть указан действительный токен API-KEY.\n","parameters":[{"schema":{"type":"string"},"name":"session_id","in":"path","description":"Уникальный идентификатор сессии.","required":true},{"schema":{"type":"boolean"},"name":"demo","in":"query","description":"Установите `true`, чтобы получить предварительно сгенерированные демонстрационные данные сессии бега вместо реальных.\n","required":false}],"responses":{"200":{"description":"Данные сессии успешно экспортированы.","content":{"application/json":{"schema":{"required":["metrics","keypoints","angles","all_timestamps","contact","activity"],"type":"object","properties":{"metrics":{"description":"Словарь массивов метрик (например, скорость, каденс и т.д.).","type":"object","additionalProperties":{"type":"number"}},"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"}},"contact":{"description":"Массив, указывающий статус контакта (true/false).","type":"array","items":{"type":"boolean"}},"activity":{"description":"Тип активности (например, 'Running').","type":"string"}}}}}},"400":{"description":"Неверный запрос - Неверные параметры запроса (например, неверный UID администратора).\n","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":"Запрещено - Пользователь не имеет достаточных прав для доступа к данным этой сессии.\n","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Сообщение об ошибке, указывающее на недостаточные разрешения.","type":"string"}}}}}},"404":{"description":"Не найдено - Запрошенная сессия не существует или активность недействительна.\n","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":["running"]}}}}
```

## Анализ беговой формы

> Получение детального отчета по анализу беговой формы для указанной сессии. Требуется действительный токен администратора и активная подписка (Pro, Premium, Enterprise или Standard).\
> \
> \### Запрос\
> \- \*\*Параметр пути\*\*:\
> &#x20; \- \*\*session\_id\*\* \*(строка, обязательно)\*: Уникальный идентификатор сессии, для которой запрашивается отчет.\
> \
> \- \*\*Параметр запроса\*\*:\
> &#x20; \- \*\*demo\*\* \*(логический, опционально)\*: Установите \`true\` для получения демо-отчета вместо реального.\
> \
> \### Структура ответа (HTTP 200)\
> Ответ в формате JSON содержит:\
> \
> \- \*\*metrics\*\* \*(объект)\*: Усредненные показатели шага, такие как \`speed\`, \`balance\`, \`cadence\`, \`contact\_angle\`, \`eversion\_velocity\`, \`knee\_flexion\`, \`posture\_angle\`, \`ankle\_angle\`, \`com\_oscillation\`, \`stride\_angle\`, \`mean\_h\`.\
> \- \*\*images\*\* \*(объект)\*: Три ключевых снимка с тегами \`contact\_angle\`, \`push\_angle\`, \`knee\_ankle\`; каждый содержит публичный URL изображения.\
> \- \*\*user\_info\*\* \*(объект)\*: Информация о пользователе:\
> &#x20; \- \*\*age\*\* \*(целое число)\*\
> &#x20; \- \*\*gender\*\* \*(строка)\*\
> &#x20; \- \*\*height\*\* \*(число, см)\*\
> &#x20; \- \*\*weight\*\* \*(число, кг)\*\
> &#x20; \- \*\*email\*\* \*(строка, email)\*\
> &#x20; \- \*\*uid\*\*, \*\*display\_name\*\*, \*\*admin\_name\*\*, \*\*last\_session\*\*, \*\*phone\*\*, \*\*brand\*\*, \*\*shoeModel\*\*, \*\*shoeSize\*\*, \*\*leg\_length\*\*, \*\*ycom\*\* \*(разные типы)\*\
> \
> \- \*\*form\_comments\*\* \*(объект, опционально)\*: Рекомендации GenAI по блокам \`contact\_angle\`, \`hip\_extension\_at\_foot\_takeoff\`, \`foot\_contact\_angle\_and\_torso\_lean\`.\
> \- \*\*date\*\* \*(строка)\*: Дата генерации отчета в формате ДД/ММ/ГГГГ.\
> \
> \### Обработка ошибок\
> \- \*\*400 Bad Request\*\*: Неверный токен или параметры.\
> \- \*\*401 Unauthorized\*\*: Токен отсутствует или недействителен.\
> \- \*\*403 Forbidden\*\*: Требуются права администратора.\
> \- \*\*404 Not Found\*\*: Сессия не найдена или у пользователя нет активного тарифа.\
> \- \*\*500 Internal Server Error\*\*: Непредвиденная ошибка сервера.\
> \
> \### Безопасность\
> В заголовке \`Authorization\` должен быть указан действительный API-KEY токен.

```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":{"/running/sessions/{session_id}/form-analysis/":{"post":{"operationId":"running_sessions_form-analysis_create","summary":"Анализ беговой формы","description":"Получение детального отчета по анализу беговой формы для указанной сессии. Требуется действительный токен администратора и активная подписка (Pro, Premium, Enterprise или Standard).\n\n### Запрос\n- **Параметр пути**:\n  - **session_id** *(строка, обязательно)*: Уникальный идентификатор сессии, для которой запрашивается отчет.\n\n- **Параметр запроса**:\n  - **demo** *(логический, опционально)*: Установите `true` для получения демо-отчета вместо реального.\n\n### Структура ответа (HTTP 200)\nОтвет в формате JSON содержит:\n\n- **metrics** *(объект)*: Усредненные показатели шага, такие как `speed`, `balance`, `cadence`, `contact_angle`, `eversion_velocity`, `knee_flexion`, `posture_angle`, `ankle_angle`, `com_oscillation`, `stride_angle`, `mean_h`.\n- **images** *(объект)*: Три ключевых снимка с тегами `contact_angle`, `push_angle`, `knee_ankle`; каждый содержит публичный URL изображения.\n- **user_info** *(объект)*: Информация о пользователе:\n  - **age** *(целое число)*\n  - **gender** *(строка)*\n  - **height** *(число, см)*\n  - **weight** *(число, кг)*\n  - **email** *(строка, email)*\n  - **uid**, **display_name**, **admin_name**, **last_session**, **phone**, **brand**, **shoeModel**, **shoeSize**, **leg_length**, **ycom** *(разные типы)*\n\n- **form_comments** *(объект, опционально)*: Рекомендации GenAI по блокам `contact_angle`, `hip_extension_at_foot_takeoff`, `foot_contact_angle_and_torso_lean`.\n- **date** *(строка)*: Дата генерации отчета в формате ДД/ММ/ГГГГ.\n\n### Обработка ошибок\n- **400 Bad Request**: Неверный токен или параметры.\n- **401 Unauthorized**: Токен отсутствует или недействителен.\n- **403 Forbidden**: Требуются права администратора.\n- **404 Not Found**: Сессия не найдена или у пользователя нет активного тарифа.\n- **500 Internal Server Error**: Непредвиденная ошибка сервера.\n\n### Безопасность\nВ заголовке `Authorization` должен быть указан действительный API-KEY токен.","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":["metrics","images","user_info","date"],"type":"object","properties":{"metrics":{"description":"Усредненные метрики шага.","required":["speed","balance","cadence","contact_angle","eversion_velocity","knee_flexion","posture_angle","ankle_angle","com_oscillation","stride_angle","mean_h"],"type":"object","properties":{"speed":{"type":"number"},"balance":{"type":"number"},"cadence":{"type":"number"},"contact_angle":{"type":"number"},"eversion_velocity":{"type":"number"},"knee_flexion":{"type":"number"},"posture_angle":{"type":"number"},"ankle_angle":{"type":"number"},"com_oscillation":{"type":"number"},"stride_angle":{"type":"number"},"mean_h":{"type":"number"}}},"images":{"description":"URL трех ключевых снимков.","type":"object","additionalProperties":{"type":"string","format":"uri"}},"user_info":{"description":"Информация о пользователе.","required":["age","height","weight","email","uid"],"type":"object","properties":{"age":{"type":"integer"},"gender":{"type":"string"},"height":{"type":"number"},"weight":{"type":"number"},"email":{"type":"string","format":"email"},"uid":{"type":"string"},"display_name":{"type":"string"},"admin_name":{"type":"string"},"last_session":{"type":"string"},"phone":{"type":"string"},"brand":{"type":"string"},"shoeModel":{"type":"string"},"shoeSize":{"type":"integer"},"leg_length":{"type":"number"},"ycom":{"type":"number"}}},"form_comments":{"description":"(Опционально) Рекомендации по блокам.","type":"object","additionalProperties":{"type":"string"}},"date":{"description":"Дата отчета в формате ДД/ММ/ГГГГ.","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":["running"]}}}}
```

## Создание комментариев к анализу формы

> Генерация персонализированных комментариев GenAI для каждого блока беговой формы (contact-angle, hip-extension at foot take-off, foot-contact angle & torso lean) \*\*плюс\*\* общая рекомендация. Возвращает идентификаторы тредов.\
> \
> \### Запрос\
> \- \*\*session\_id\*\* (параметр пути, обязательно): ID сессии для генерации комментариев.\
> \
> \### Ответ (201)\
> JSON-объект с идентификаторами тредов:\
> \- \*\*contact\_angle\*\*: ID треда для блока contact angle. - \*\*push\_angle\*\*: ID треда для блока push angle. - \*\*knee\_ankle\*\*: ID треда для блока knee-ankle. - \*\*general\_form\_recommendation\*\*: ID треда для общей рекомендации.\
> \
> \### Обработка ошибок\
> \- \*\*403 Forbidden\*\*: Отсутствует активный тариф. - \*\*404 Not Found\*\*: Сессия не найдена. - \*\*500 Internal Server Error\*\*: Непредвиденная ошибка сервера.\
> \
> \### Безопасность\
> Требуется действительный API-KEY токен или ключ в заголовках.

```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":{"/running/sessions/{session_id}/form-recommendations/":{"post":{"operationId":"running_sessions_form-recommendations_create","summary":"Создание комментариев к анализу формы","description":"Генерация персонализированных комментариев GenAI для каждого блока беговой формы (contact-angle, hip-extension at foot take-off, foot-contact angle & torso lean) **плюс** общая рекомендация. Возвращает идентификаторы тредов.\n\n### Запрос\n- **session_id** (параметр пути, обязательно): ID сессии для генерации комментариев.\n\n### Ответ (201)\nJSON-объект с идентификаторами тредов:\n- **contact_angle**: ID треда для блока contact angle. - **push_angle**: ID треда для блока push angle. - **knee_ankle**: ID треда для блока knee-ankle. - **general_form_recommendation**: ID треда для общей рекомендации.\n\n### Обработка ошибок\n- **403 Forbidden**: Отсутствует активный тариф. - **404 Not Found**: Сессия не найдена. - **500 Internal Server Error**: Непредвиденная ошибка сервера.\n\n### Безопасность\nТребуется действительный API-KEY токен или ключ в заголовках.","parameters":[{"schema":{"type":"string"},"name":"session_id","in":"path","description":"ID целевой сессии","required":true}],"responses":{"201":{"description":"Треды успешно созданы","content":{"application/json":{"schema":{"description":"Соответствие блоков и ID тредов.","required":["contact_angle","push_angle","knee_ankle","general_form_recommendation"],"type":"object","properties":{"contact_angle":{"description":"ID треда для contact angle.","type":"string"},"push_angle":{"description":"ID треда для push angle.","type":"string"},"knee_ankle":{"description":"ID треда для knee-ankle.","type":"string"},"general_form_recommendation":{"description":"ID треда для общей рекомендации.","type":"string"}}}}}},"403":{"description":"Отсутствует активный тариф","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"404":{"description":"Сессия не найдена","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"500":{"description":"Ошибка сервера","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"tags":["running"]}}}}
```

## Анализ походки

> Получение детального отчета по анализу походки для указанной сессии. Требуется действительный токен администратора и активная подписка (Pro, Premium, Enterprise или Standard).\
> \
> \### Запрос\
> \- \*\*Параметр пути\*\*:\
> &#x20; \- \*\*session\_id\*\* \*(строка, обязательно)\*: Уникальный идентификатор сессии.\
> \
> \- \*\*Параметр запроса\*\*:\
> &#x20; \- \*\*demo\*\* \*(логический, опционально)\*: Установите \`true\` для получения демо-отчета.\
> \
> \### Структура ответа (HTTP 200)\
> JSON-объект содержит:\
> \
> \- \*\*left\*\* \*(объект)\* и \*\*right\*\* \*(объект)\*: Данные для левой/правой стороны:\
> &#x20; \- \*\*peak\_time\*\* \*(число)\*: Пиковое время в анализе.\
> &#x20; \- \*\*initiator\*\* \*(строка)\*: Инициатор цикла походки.\
> &#x20; \- \*\*phases\*\* \*(объект)\*: Фазы (\`flight\`, \`takeoff\`, \`mid\_stance\`, \`strike\`, \`new\_strike\`):\
> &#x20;   \- \*\*video\_frame\*\* \*(целое число)\*: Номер кадра.\
> &#x20;   \- \*\*graph\_phase\*\* \*(целое число)\*: Фаза на графике.\
> &#x20;   \- \*\*video\_phase\*\* \*(целое число)\*: Фаза в видео.\
> &#x20;   \- \*\*image\_url\*\* \*(строка, URI)\*: URL снимка фазы.\
> &#x20; \- \*\*angles\*\* \*(объект)\*: Углы (\`posture\_angle\`, \`lhip\_angle\` и др.):\
> &#x20;   \- \*\*current\*\* \*(массив\[число])\*: Текущие значения.\
> &#x20;   \- \*\*next\*\* \*(массив\[число])\*: Прогнозируемые значения.\
> &#x20;   \- \*\*std\_dev\*\* \*(массив\[число])\*: Стандартные отклонения.\
> &#x20; \- \*\*graph\_timestamps\*\* \*(массив\[число])\*: Временные метки (мс).\
> \
> \- \*\*user\_info\*\* \*(объект)\*: Информация о пользователе (аналогично form-analysis).\
> \- \*\*report\_comments\*\* \*(объект, опционально)\*: Рекомендации по углам.\
> \- \*\*date\*\* \*(строка)\*: Дата отчета в формате ДД/ММ/ГГГГ.\
> \
> \### Обработка ошибок\
> Аналогично endpoints form-analysis.\
> \
> \### Безопасность\
> Требуется действительный API-KEY токен.

```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":{"/running/sessions/{session_id}/gait-analysis/":{"post":{"operationId":"running_sessions_gait-analysis_create","summary":"Анализ походки","description":"Получение детального отчета по анализу походки для указанной сессии. Требуется действительный токен администратора и активная подписка (Pro, Premium, Enterprise или Standard).\n\n### Запрос\n- **Параметр пути**:\n  - **session_id** *(строка, обязательно)*: Уникальный идентификатор сессии.\n\n- **Параметр запроса**:\n  - **demo** *(логический, опционально)*: Установите `true` для получения демо-отчета.\n\n### Структура ответа (HTTP 200)\nJSON-объект содержит:\n\n- **left** *(объект)* и **right** *(объект)*: Данные для левой/правой стороны:\n  - **peak_time** *(число)*: Пиковое время в анализе.\n  - **initiator** *(строка)*: Инициатор цикла походки.\n  - **phases** *(объект)*: Фазы (`flight`, `takeoff`, `mid_stance`, `strike`, `new_strike`):\n    - **video_frame** *(целое число)*: Номер кадра.\n    - **graph_phase** *(целое число)*: Фаза на графике.\n    - **video_phase** *(целое число)*: Фаза в видео.\n    - **image_url** *(строка, URI)*: URL снимка фазы.\n  - **angles** *(объект)*: Углы (`posture_angle`, `lhip_angle` и др.):\n    - **current** *(массив[число])*: Текущие значения.\n    - **next** *(массив[число])*: Прогнозируемые значения.\n    - **std_dev** *(массив[число])*: Стандартные отклонения.\n  - **graph_timestamps** *(массив[число])*: Временные метки (мс).\n\n- **user_info** *(объект)*: Информация о пользователе (аналогично form-analysis).\n- **report_comments** *(объект, опционально)*: Рекомендации по углам.\n- **date** *(строка)*: Дата отчета в формате ДД/ММ/ГГГГ.\n\n### Обработка ошибок\nАналогично endpoints form-analysis.\n\n### Безопасность\nТребуется действительный API-KEY токен.","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":["left","right","user_info","date"],"type":"object","properties":{"left":{"description":"Данные для левой стороны.","required":["peak_time","phases","initiator","angles","graph_timestamps"],"type":"object","properties":{"peak_time":{"type":"number"},"phases":{"description":"Фазы цикла походки.","type":"object","properties":{"flight":{"required":["video_frame","graph_phase","video_phase","image_url"],"type":"object","properties":{"video_frame":{"type":"integer"},"graph_phase":{"type":"integer"},"video_phase":{"type":"integer"},"image_url":{"type":"string","format":"uri"}}},"takeoff":{"required":["video_frame","graph_phase","video_phase","image_url"],"type":"object","properties":{"video_frame":{"type":"integer"},"graph_phase":{"type":"integer"},"video_phase":{"type":"integer"},"image_url":{"type":"string","format":"uri"}}},"mid_stance":{"required":["video_frame","graph_phase","video_phase","image_url"],"type":"object","properties":{"video_frame":{"type":"integer"},"graph_phase":{"type":"integer"},"video_phase":{"type":"integer"},"image_url":{"type":"string","format":"uri"}}},"new_strike":{"required":["video_frame","graph_phase","video_phase","image_url"],"type":"object","properties":{"video_frame":{"type":"integer"},"graph_phase":{"type":"integer"},"video_phase":{"type":"integer"},"image_url":{"type":"string","format":"uri"}}},"strike":{"required":["video_frame","graph_phase","video_phase","image_url"],"type":"object","properties":{"video_frame":{"type":"integer"},"graph_phase":{"type":"integer"},"video_phase":{"type":"integer"},"image_url":{"type":"string","format":"uri"}}}}},"initiator":{"type":"string"},"angles":{"type":"object"},"graph_timestamps":{"type":"array","items":{"type":"number"}}}},"right":{"description":"Данные для правой стороны.","required":["peak_time","phases","initiator","angles","graph_timestamps"],"type":"object","properties":{"peak_time":{"type":"number"},"phases":{"description":"Фазы цикла походки.","type":"object","properties":{"flight":{"required":["video_frame","graph_phase","video_phase","image_url"],"type":"object","properties":{"video_frame":{"type":"integer"},"graph_phase":{"type":"integer"},"video_phase":{"type":"integer"},"image_url":{"type":"string","format":"uri"}}},"takeoff":{"required":["video_frame","graph_phase","video_phase","image_url"],"type":"object","properties":{"video_frame":{"type":"integer"},"graph_phase":{"type":"integer"},"video_phase":{"type":"integer"},"image_url":{"type":"string","format":"uri"}}},"mid_stance":{"required":["video_frame","graph_phase","video_phase","image_url"],"type":"object","properties":{"video_frame":{"type":"integer"},"graph_phase":{"type":"integer"},"video_phase":{"type":"integer"},"image_url":{"type":"string","format":"uri"}}},"new_strike":{"required":["video_frame","graph_phase","video_phase","image_url"],"type":"object","properties":{"video_frame":{"type":"integer"},"graph_phase":{"type":"integer"},"video_phase":{"type":"integer"},"image_url":{"type":"string","format":"uri"}}},"strike":{"required":["video_frame","graph_phase","video_phase","image_url"],"type":"object","properties":{"video_frame":{"type":"integer"},"graph_phase":{"type":"integer"},"video_phase":{"type":"integer"},"image_url":{"type":"string","format":"uri"}}}}},"initiator":{"type":"string"},"angles":{"type":"object"},"graph_timestamps":{"type":"array","items":{"type":"number"}}}},"user_info":{"description":"Информация о пользователе.","required":["age","height","weight","email","uid"],"type":"object","properties":{"age":{"type":"integer"},"gender":{"type":"string"},"height":{"type":"number"},"weight":{"type":"number"},"email":{"type":"string","format":"email"},"uid":{"type":"string"},"display_name":{"type":"string"},"admin_name":{"type":"string"},"last_session":{"type":"string"},"session_count":{"type":"number"},"phone":{"type":"string"},"brand":{"type":"string"},"shoeModel":{"type":"string"},"shoeSize":{"type":"integer"},"leg_length":{"type":"number"},"ycom":{"type":"number"}}},"report_comments":{"description":"(Опционально) Рекомендации по углам.","type":"object"},"date":{"description":"Дата отчета в формате ДД/ММ/ГГГГ.","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":["running"]}}}}
```

## Создание рекомендаций по анализу походки

> \### Создание рекомендаций по анализу походки\
> \
> Этот эндпоинт генерирует персонализированные рекомендации для конкретной сессии на основе анализа беговой походки пользователя. Каждая рекомендация содержит биомеханические инсайты, советы по осанке и рекомендации по тренировкам для различных углов суставов.\
> \
> \*\*Пример использования:\*\*\
> Отправьте \`POST\` запрос на \`/running/sessions/{session\_id}/recommendation/\`, где \`{session\_id}\` — уникальный идентификатор сессии.\
> \
> \*\*Параметры:\*\*\
> \- \`session\_id\` \*(строка, обязательно)\*: Уникальный ID сессии, для которой генерируются рекомендации.\
> \
> \*\*Структура ответа (HTTP 201):\*\*\
> Возвращает JSON-объект, сопоставляющий каждый показатель угла походки с ID рекомендации, включая левую и правую стороны:\
> \- \*\*left\_posture\_angle\*\*, \*\*left\_hip\_angle\*\*, \*\*left\_knee\_angle\*\*, \*\*left\_ankle\_angle\*\*\
> \- \*\*right\_posture\_angle\*\*, \*\*right\_hip\_angle\*\*, \*\*right\_knee\_angle\*\*, \*\*right\_ankle\_angle\*\*\
> \
> \*\*Примечания:\*\*\
> \- Сессия должна быть валидной и соответствовать отчету по анализу походки.\
> \- Требуется активный тарифный план (Pro, Premium, Enterprise или Standard).

```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":{"/running/sessions/{session_id}/recommendation/":{"post":{"operationId":"running_sessions_recommendation_create","summary":"Создание рекомендаций по анализу походки","description":"### Создание рекомендаций по анализу походки\n\nЭтот эндпоинт генерирует персонализированные рекомендации для конкретной сессии на основе анализа беговой походки пользователя. Каждая рекомендация содержит биомеханические инсайты, советы по осанке и рекомендации по тренировкам для различных углов суставов.\n\n**Пример использования:**\nОтправьте `POST` запрос на `/running/sessions/{session_id}/recommendation/`, где `{session_id}` — уникальный идентификатор сессии.\n\n**Параметры:**\n- `session_id` *(строка, обязательно)*: Уникальный ID сессии, для которой генерируются рекомендации.\n\n**Структура ответа (HTTP 201):**\nВозвращает JSON-объект, сопоставляющий каждый показатель угла походки с ID рекомендации, включая левую и правую стороны:\n- **left_posture_angle**, **left_hip_angle**, **left_knee_angle**, **left_ankle_angle**\n- **right_posture_angle**, **right_hip_angle**, **right_knee_angle**, **right_ankle_angle**\n\n**Примечания:**\n- Сессия должна быть валидной и соответствовать отчету по анализу походки.\n- Требуется активный тарифный план (Pro, Premium, Enterprise или Standard).","parameters":[{"schema":{"type":"string"},"name":"session_id","in":"path","description":"Уникальный идентификатор сессии.","required":true}],"responses":{"201":{"description":"Рекомендации успешно созданы.","content":{"application/json":{"schema":{"description":"Словарь, сопоставляющий метрики анализа походки с ID рекомендаций.","required":["left_hip_angle","left_posture_angle","left_ankle_angle","left_knee_angle","right_posture_angle","right_knee_angle","right_hip_angle","right_ankle_angle"],"type":"object","properties":{"left_hip_angle":{"description":"ID рекомендации для угла левого бедра.","type":"string"},"left_posture_angle":{"description":"ID рекомендации для угла левой осанки.","type":"string"},"left_ankle_angle":{"description":"ID рекомендации для угла левой лодыжки.","type":"string"},"left_knee_angle":{"description":"ID рекомендации для угла левого колена.","type":"string"},"right_posture_angle":{"description":"ID рекомендации для угла правой осанки.","type":"string"},"right_knee_angle":{"description":"ID рекомендации для угла правого колена.","type":"string"},"right_hip_angle":{"description":"ID рекомендации для угла правого бедра.","type":"string"},"right_ankle_angle":{"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":["running"]}}}}
```

## Получить сводку по беговой сессии

> Получить подробную сводку по беговой сессии, используя её уникальный \`session\_id\`. Эта сводка включает как количественные метрики производительности, так и опциональную качественную сводку, сгенерированную GenAI, если она доступна.\
> \
> \*\*Инструкции по использованию:\*\*\
> 1\. Отправьте GET запрос с \`session\_id\` в параметре пути.\
> 2\. Эндпоинт вернет JSON-объект, содержащий различные разделы сводки сессии.\
> \
> \### Параметр запроса\
> \- \*\*demo\*\* \*(логический, опционально)\*: Установите \`true\`, чтобы получить предварительно сгенерированную демо-сводку для этой беговой сессии.\
> \
> \*\*Структура ответа:\*\*\
> \
> \- \*\*summary\_text\*\* \*(объект, опционально)\*: Содержит комментарии, сгенерированные GenAI, если доступны. Этот объект может включать следующие ключи:\
> &#x20;   \- \*\*balance\_and\_posture\*\*: Комментарии по балансу и осанке атлета (например, советы по улучшению баланса при беге).\
> &#x20;   \- \*\*performance\_metrics\*\*: Общие комментарии по производительности, такие как изменения скорости, каденса и мощности.\
> &#x20;   \- \*\*running\_mechanics\*\*: Наблюдения по механике бега, включая время контакта, время полета, время шага и длину шага.\
> &#x20;   \- \*\*final\_summary\*\*: Итоговое общее замечание, суммирующее производительность сессии.\
> &#x20;   \- \*\*distance\_and\_duration\*\*: Комментарии по общему расстоянию и продолжительности сессии.\
> \
> \- \*\*performance\_metrics\*\* \*(объект)\*: Содержит агрегированные метрики производительности с их минимальными, максимальными, средними значениями и сырыми данными в виде массива, включая:\
> &#x20;   \- \*\*speed\*\* (в м/с)\
> &#x20;   \- \*\*pace\*\* (в мин/км)\
> &#x20;   \- \*\*cadence\*\* (шагов/мин)\
> &#x20;   \- \*\*power\*\* (в Ваттах)\
> &#x20;   \- \*\*normalized\_power\*\* (в Вт/кг)\
> \
> \- \*\*running\_mechanics\*\* \*(объект)\*: Содержит данные по механике бега:\
> &#x20;   \- \*\*contact\_time\*\* (в секундах)\
> &#x20;   \- \*\*flight\_time\*\* (в секундах)\
> &#x20;   \- \*\*stride\_time\*\* (в секундах)\
> &#x20;   \- \*\*stride\_length\*\* (в метрах)\
> &#x20;   \- \*\*footstrike\*\*: Строка, описывающая наиболее распространенный тип постановки стопы (например, 'forefoot').\
> \
> \- \*\*balance\_and\_posture\*\* \*(объект)\*: Содержит метрики, связанные с балансом и осанкой:\
> &#x20;   \- \*\*balance\*\*: Включает минимальный, максимальный, средний баллы баланса и массив значений баланса.\
> &#x20;   \- \*\*contact\_angle\*\*: Включает минимальный, максимальный, средний углы контакта (в градусах) и массив значений углов контакта.\
> \
> \- \*\*distance\_and\_duration\*\* \*(объект)\*: Содержит сырые значения для:\
> &#x20;   \- \*\*total\_distance\*\* (в метрах)\
> &#x20;   \- \*\*total\_time\*\* (в секундах)\
> \
> \- \*\*user\_information\*\* \*(объект)\*: Содержит детальную информацию о пользователе, включая:\
> &#x20;   \- \*\*ycom\*\*: Значение YCOM пользователя\
> &#x20;   \- \*\*weight\*\*: Вес пользователя в килограммах\
> &#x20;   \- \*\*age\*\*: Возраст пользователя\
> &#x20;   \- \*\*height\*\*: Рост пользователя в сантиметрах\
> &#x20;   \- \*\*leg\_length\*\*: Длина ноги пользователя\
> &#x20;   \- \*\*shoeSize\*\*: Размер обуви пользователя\
> &#x20;   \- \*\*gender\*\*: Пол пользователя\
> &#x20;   \- \*\*user\*\*: Уникальный ID пользователя\
> &#x20;   \- \*\*brand\*\*: Информация о бренде обуви (если есть)\
> &#x20;   \- \*\*shoeModel\*\*: Информация о модели обуви (если есть)\
> &#x20;   \- \*\*email\*\*: Email пользователя\
> &#x20;   \- \*\*display\_name\*\*: Отображаемое имя пользователя\
> \
> \- \*\*session\_date\*\* \*(строка)\*: Дата сессии в формате строки (например, 'ДД/ММ/ГГГГ').\
> \
> \*\*Примечание:\*\* Поле \`summary\_text\` будет присутствовать только если для сессии сохранены комментарии, сгенерированные GenAI.

```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":{"/running/sessions/{session_id}/summary/":{"get":{"operationId":"running_sessions_summary_list","summary":"Получить сводку по беговой сессии","description":"Получить подробную сводку по беговой сессии, используя её уникальный `session_id`. Эта сводка включает как количественные метрики производительности, так и опциональную качественную сводку, сгенерированную GenAI, если она доступна.\n\n**Инструкции по использованию:**\n1. Отправьте GET запрос с `session_id` в параметре пути.\n2. Эндпоинт вернет JSON-объект, содержащий различные разделы сводки сессии.\n\n### Параметр запроса\n- **demo** *(логический, опционально)*: Установите `true`, чтобы получить предварительно сгенерированную демо-сводку для этой беговой сессии.\n\n**Структура ответа:**\n\n- **summary_text** *(объект, опционально)*: Содержит комментарии, сгенерированные GenAI, если доступны. Этот объект может включать следующие ключи:\n    - **balance_and_posture**: Комментарии по балансу и осанке атлета (например, советы по улучшению баланса при беге).\n    - **performance_metrics**: Общие комментарии по производительности, такие как изменения скорости, каденса и мощности.\n    - **running_mechanics**: Наблюдения по механике бега, включая время контакта, время полета, время шага и длину шага.\n    - **final_summary**: Итоговое общее замечание, суммирующее производительность сессии.\n    - **distance_and_duration**: Комментарии по общему расстоянию и продолжительности сессии.\n\n- **performance_metrics** *(объект)*: Содержит агрегированные метрики производительности с их минимальными, максимальными, средними значениями и сырыми данными в виде массива, включая:\n    - **speed** (в м/с)\n    - **pace** (в мин/км)\n    - **cadence** (шагов/мин)\n    - **power** (в Ваттах)\n    - **normalized_power** (в Вт/кг)\n\n- **running_mechanics** *(объект)*: Содержит данные по механике бега:\n    - **contact_time** (в секундах)\n    - **flight_time** (в секундах)\n    - **stride_time** (в секундах)\n    - **stride_length** (в метрах)\n    - **footstrike**: Строка, описывающая наиболее распространенный тип постановки стопы (например, 'forefoot').\n\n- **balance_and_posture** *(объект)*: Содержит метрики, связанные с балансом и осанкой:\n    - **balance**: Включает минимальный, максимальный, средний баллы баланса и массив значений баланса.\n    - **contact_angle**: Включает минимальный, максимальный, средний углы контакта (в градусах) и массив значений углов контакта.\n\n- **distance_and_duration** *(объект)*: Содержит сырые значения для:\n    - **total_distance** (в метрах)\n    - **total_time** (в секундах)\n\n- **user_information** *(объект)*: Содержит детальную информацию о пользователе, включая:\n    - **ycom**: Значение YCOM пользователя\n    - **weight**: Вес пользователя в килограммах\n    - **age**: Возраст пользователя\n    - **height**: Рост пользователя в сантиметрах\n    - **leg_length**: Длина ноги пользователя\n    - **shoeSize**: Размер обуви пользователя\n    - **gender**: Пол пользователя\n    - **user**: Уникальный ID пользователя\n    - **brand**: Информация о бренде обуви (если есть)\n    - **shoeModel**: Информация о модели обуви (если есть)\n    - **email**: Email пользователя\n    - **display_name**: Отображаемое имя пользователя\n\n- **session_date** *(строка)*: Дата сессии в формате строки (например, 'ДД/ММ/ГГГГ').\n\n**Примечание:** Поле `summary_text` будет присутствовать только если для сессии сохранены комментарии, сгенерированные GenAI.","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":["summary_text","performance_metrics","running_mechanics","balance_and_posture","distance_and_duration","user_information","session_date"],"type":"object","properties":{"summary_text":{"description":"Опциональная текстовая сводка сессии (только если доступны комментарии GenAI).","type":"object","properties":{"balance_and_posture":{"description":"Комментарии по балансу и осанке атлета.","type":"string"},"performance_metrics":{"description":"Комментарии по скорости, каденсу, мощности и общей производительности.","type":"string"},"running_mechanics":{"description":"Комментарии по механике бега, включая время контакта и полета, а также детали шага.","type":"string"},"final_summary":{"description":"Итоговое заключение по сессии.","type":"string"},"distance_and_duration":{"description":"Комментарии по общему расстоянию и продолжительности сессии.","type":"string"}}},"performance_metrics":{"type":"object","properties":{"speed":{"type":"object","properties":{"min":{"description":"Минимальная скорость (м/с)","type":"number"},"max":{"description":"Максимальная скорость (м/с)","type":"number"},"avg":{"description":"Средняя скорость (м/с)","type":"number"},"values":{"description":"Массив отдельных значений скорости","type":"array","items":{"type":"number"}}}},"pace":{"type":"object","properties":{"min":{"description":"Минимальный темп (мин/км)","type":"number"},"max":{"description":"Максимальный темп (мин/км)","type":"number"},"avg":{"description":"Средний темп (мин/км)","type":"number"},"values":{"description":"Массив отдельных значений темпа","type":"array","items":{"type":"number"}}}},"cadence":{"type":"object","properties":{"min":{"description":"Минимальный каденс (шагов/мин)","type":"number"},"max":{"description":"Максимальный каденс (шагов/мин)","type":"number"},"avg":{"description":"Средний каденс (шагов/мин)","type":"number"},"values":{"description":"Массив отдельных значений каденса","type":"array","items":{"type":"number"}}}},"power":{"type":"object","properties":{"min":{"description":"Минимальная мощность (Вт)","type":"number"},"max":{"description":"Максимальная мощность (Вт)","type":"number"},"avg":{"description":"Средняя мощность (Вт)","type":"number"},"values":{"description":"Массив отдельных значений мощности","type":"array","items":{"type":"number"}}}},"normalized_power":{"type":"object","properties":{"min":{"description":"Минимальная нормализованная мощность (Вт/кг)","type":"number"},"max":{"description":"Максимальная нормализованная мощность (Вт/кг)","type":"number"},"avg":{"description":"Средняя нормализованная мощность (Вт/кг)","type":"number"},"values":{"description":"Массив отдельных значений нормализованной мощности","type":"array","items":{"type":"number"}}}}}},"running_mechanics":{"type":"object","properties":{"contact_time":{"type":"object","properties":{"min":{"description":"Минимальное время контакта (с)","type":"number"},"max":{"description":"Максимальное время контакта (с)","type":"number"},"avg":{"description":"Среднее время контакта (с)","type":"number"},"values":{"description":"Массив значений времени контакта","type":"array","items":{"type":"number"}}}},"flight_time":{"type":"object","properties":{"min":{"description":"Минимальное время полета (с)","type":"number"},"max":{"description":"Максимальное время полета (с)","type":"number"},"avg":{"description":"Среднее время полета (с)","type":"number"},"values":{"description":"Массив значений времени полета","type":"array","items":{"type":"number"}}}},"stride_time":{"type":"object","properties":{"min":{"description":"Минимальное время шага (с)","type":"number"},"max":{"description":"Максимальное время шага (с)","type":"number"},"avg":{"description":"Среднее время шага (с)","type":"number"},"values":{"description":"Массив измерений времени шага","type":"array","items":{"type":"number"}}}},"stride_length":{"type":"object","properties":{"min":{"description":"Минимальная длина шага (м)","type":"number"},"max":{"description":"Максимальная длина шага (м)","type":"number"},"avg":{"description":"Средняя длина шага (м)","type":"number"},"values":{"description":"Массив измерений длины шага","type":"array","items":{"type":"number"}}}},"footstrike":{"description":"Наиболее распространенный тип постановки стопы (например, 'forefoot')","type":"string"}}},"balance_and_posture":{"type":"object","properties":{"balance":{"type":"object","properties":{"min":{"description":"Минимальный балл баланса при беге","type":"number"},"max":{"description":"Максимальный балл баланса при беге","type":"number"},"avg":{"description":"Средний балл баланса при беге","type":"number"},"values":{"description":"Массив значений баланса","type":"array","items":{"type":"number"}}}},"contact_angle":{"type":"object","properties":{"min":{"description":"Минимальный угол контакта (градусы)","type":"number"},"max":{"description":"Максимальный угол контакта (градусы)","type":"number"},"avg":{"description":"Средний угол контакта (градусы)","type":"number"},"values":{"description":"Массив значений угла контакта","type":"array","items":{"type":"number"}}}}}},"distance_and_duration":{"type":"object","properties":{"total_distance":{"description":"Общее пройденное расстояние (м)","type":"number"},"total_time":{"description":"Общая продолжительность сессии (с)","type":"number"}}},"user_information":{"description":"Детальная информация о пользователе из данных сессии.","type":"object","properties":{"ycom":{"description":"Значение YCOM пользователя","type":"number"},"weight":{"description":"Вес пользователя (кг)","type":"number"},"age":{"description":"Возраст пользователя","type":"string"},"height":{"description":"Рост пользователя (см)","type":"number"},"leg_length":{"description":"Длина ноги пользователя (м)","type":"number"},"shoeSize":{"description":"Размер обуви пользователя","type":"number"},"gender":{"description":"Пол пользователя","type":"string"},"user":{"description":"Уникальный идентификатор пользователя","type":"string"},"brand":{"description":"Предпочитаемый бренд обуви (если доступен)","type":"string"},"shoeModel":{"description":"Модель обуви (если доступна)","type":"string"},"email":{"description":"Email пользователя","type":"string"},"display_name":{"description":"Отображаемое имя пользователя","type":"string"}}},"session_date":{"description":"Дата сессии в формате строки (например, '07/04/2025')","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":["running"]}}}}
```

## Сгенерировать сводку для беговой сессии

> Запустить генерацию сводки для беговой сессии. Этот эндпоинт создает отдельные сводки для каждого блока на основе метрик сессии, включая метрики производительности, механику бега, баланс и осанку, а также расстояние/продолжительность, а также итоговую общую сводку. Возвращает JSON-объект, содержащий 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":{"/running/sessions/{session_id}/summary/":{"post":{"operationId":"running_sessions_summary_create","summary":"Сгенерировать сводку для беговой сессии","description":"Запустить генерацию сводки для беговой сессии. Этот эндпоинт создает отдельные сводки для каждого блока на основе метрик сессии, включая метрики производительности, механику бега, баланс и осанку, а также расстояние/продолжительность, а также итоговую общую сводку. Возвращает JSON-объект, содержащий 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":"Система измерений: 'metric' или 'imperial'","required":false}],"responses":{"201":{"description":"Сводки успешно сгенерированы.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"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":["running"]}}}}
```


---

# 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/running.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.
