Обновлено: 22.09.2026
Спортивная школа
Тренировочные планы, посещаемость и статистика игроков для модуля «Вираж СпортШкола». Годовой план и упражнения тренер создаёт в админ-панели. API отдаёт фактические данные по занятиям.
Обзор методов
| Метод | Путь | Описание |
|---|---|---|
GET | /teams/{team_id}/trainings | Расписание тренировок |
POST | /trainings/{id}/attendance | Отметить посещаемость |
GET | /players/{id}/stats | Статистика игрока |
GET | /teams | Список команд школы |
GET | /teams/{id}/players | Состав команды |
POST | /trainings | Запланировать тренировку |
GET | /teams/{id}/year-plan | Годичный цикл команды |
GET | /players/{id}/tests | Нормативы игрока |
GET | /teams/{id}/season-summary | Сводка команды за сезон |
Расписание тренировок
GET /teams/{team_id}/trainingsБлижайшие и прошедшие тренировки команды с площадкой и типом нагрузки.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
team_id | путь | string | да | Идентификатор команды. |
from | query | string (ISO 8601) | нет | Показывать тренировки начиная с этой даты. |
curl "https://api.virazh.io/v1/teams/team_2013/trainings?from=2026-08-25" \
-H "Authorization: Bearer sk_test_51H..."{
"data": [
{ "id": "tr_9911", "starts_at": "2026-08-26T16:00:00Z", "type": "ice", "venue": "Лёд №1" },
{ "id": "tr_9912", "starts_at": "2026-08-27T17:00:00Z", "type": "ofp", "venue": "Зал ОФП" }
]
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array<Training> | Тренировки с полями id, starts_at, type, venue. |
Отметить посещаемость
POST /trainings/{id}/attendanceПроставляет статус каждому игроку: был, болел, пропуск по уважительной причине, не был.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
id | путь | string | да | Идентификатор тренировки. |
records | тело | array<AttendanceRecord> | да | Список { player_id, status }, где status принимает значения present, absent, sick, excused. |
curl https://api.virazh.io/v1/trainings/tr_9911/attendance \
-X POST \
-H "Authorization: Bearer sk_test_51H..." \
-H "Content-Type: application/json" \
-d '{
"records": [
{ "player_id": "plr_412", "status": "present" },
{ "player_id": "plr_413", "status": "sick" }
]
}'{
"training_id": "tr_9911",
"marked": 2
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
training_id | string | Идентификатор тренировки. |
marked | integer | Сколько записей посещаемости сохранено. |
Статистика игрока
GET /players/{id}/statsНормативы, посещаемость и матчевая статистика игрока за сезон.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
id | путь | string | да | Идентификатор игрока. |
season | query | string | нет | Сезон в формате 2026-2027. По умолчанию текущий. |
curl https://api.virazh.io/v1/players/plr_412/stats?season=2026-2027 \
-H "Authorization: Bearer sk_test_51H..."{
"player_id": "plr_412",
"season": "2026-2027",
"attendance_rate": 0.91,
"matches_played": 14,
"goals": 6
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
attendance_rate | number | Доля посещённых тренировок от 0 до 1. |
matches_played | integer | Количество сыгранных матчей за сезон. |
goals | integer | Заброшенные шайбы или забитые голы за сезон. |
Список команд школы
GET /teamsВсе возрастные группы ДЮСШ клуба с тренером и количеством игроков в составе.
curl https://api.virazh.io/v1/teams \
-H "Authorization: Bearer sk_test_51H..."{
"data": [
{ "id": "team_2013", "name": "2013 г.р.", "coach": "Сергей Волков", "players": 22 },
{ "id": "team_2015", "name": "2015 г.р.", "coach": "Дмитрий Реутов", "players": 19 }
]
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array<Team> | Команды с полями id, name, coach, players. |
Состав команды
GET /teams/{id}/playersСписок игроков команды с амплуа и датой зачисления в школу.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
id | путь | string | да | Идентификатор команды. |
curl https://api.virazh.io/v1/teams/team_2013/players \
-H "Authorization: Bearer sk_test_51H..."{
"team_id": "team_2013",
"players": [
{ "id": "plr_412", "name": "Артём Ким", "position": "forward", "joined_at": "2023-09-01" },
{ "id": "plr_413", "name": "Олег Титов", "position": "defense", "joined_at": "2022-09-01" }
]
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
players | array<Player> | Игроки с полями id, name, position, joined_at. |
Запланировать тренировку
POST /trainingsСоздаёт тренировку в расписании команды с типом нагрузки и площадкой.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
team_id | тело | string | да | Идентификатор команды. |
starts_at | тело | string (ISO 8601) | да | Дата и время начала тренировки. |
type | тело | string | да | Тип нагрузки: ice, ofp, gym и т.д. |
venue | тело | string | да | Площадка проведения. |
curl https://api.virazh.io/v1/trainings \
-X POST \
-H "Authorization: Bearer sk_test_51H..." \
-H "Content-Type: application/json" \
-d '{
"team_id": "team_2013",
"starts_at": "2026-08-28T16:00:00Z",
"type": "ice",
"venue": "Лёд №1"
}'{
"id": "tr_9915",
"team_id": "team_2013",
"starts_at": "2026-08-28T16:00:00Z"
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | string | Идентификатор созданной тренировки. |
Годичный цикл команды
GET /teams/{id}/year-planКалендарный план команды по месяцам сезона: периоды подготовки, план и факт часов по видам нагрузки. Тот же источник, из которого собирается выгрузка годичного цикла в Word по форме школы.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
id | путь | string | да | Идентификатор команды. |
season | query | string | нет | Сезон в формате 2026-2027. По умолчанию — текущий. |
curl "https://api.virazh.io/v1/teams/team_2013/year-plan?season=2026-2027" \
-H "Authorization: Bearer sk_test_51H..."{
"team_id": "team_2013",
"season": "2026-2027",
"months": [
{ "month": "2026-07", "period": "Подготовительный", "plan_hours": 48, "fact_hours": 44 },
{ "month": "2026-08", "period": "Подготовительный", "plan_hours": 62, "fact_hours": 62 }
],
"load_types": [
{ "type": "ice", "plan_hours": 320, "fact_hours": 298 },
{ "type": "dryland", "plan_hours": 180, "fact_hours": 176 }
]
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
months | array<Month> | Месяцы с июля по июнь: month, period, plan_hours, fact_hours. |
periods | array<Period> | Периоды сезона с датами начала и конца; подряд идущие месяцы одного периода собираются в один блок. |
load_types | array<LoadType> | Виды нагрузки с планом и фактом: ice, dryland, strength, theory. |
Нормативы игрока
GET /players/{id}/testsРезультаты сдачи нормативов по наборам испытаний с порогами школы — по сезонам, чтобы сравнивать игрока с самим собой год назад.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
id | путь | string | да | Идентификатор игрока. |
season | query | string | нет | Сезон в формате 2026-2027. Без параметра возвращается вся история. |
curl "https://api.virazh.io/v1/players/plr_4471/tests?season=2026-2027" \
-H "Authorization: Bearer sk_test_51H..."{
"player_id": "plr_4471",
"sets": [
{
"name": "Осенние нормативы",
"held_at": "2026-09-05",
"results": [
{ "test": "Бег 30 м", "value": 4.42, "unit": "с", "threshold": 4.6, "passed": true },
{ "test": "Подтягивания", "value": 9, "unit": "раз", "threshold": 12, "passed": false }
]
}
]
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
sets | array<TestSet> | Наборы испытаний: name, held_at, результаты по каждому испытанию. |
sets[].results | array<Result> | Испытание с полями test, value, unit, threshold, passed. |
Сводка команды за сезон
GET /teams/{id}/season-summaryСводные показатели команды за выбранный сезон: средняя посещаемость, количество тренировок и сыгранных матчей.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
id | путь | string | да | Идентификатор команды. |
season | query | string | нет | Сезон в формате 2026-2027. |
curl https://api.virazh.io/v1/teams/team_2013/season-summary?season=2026-2027 \
-H "Authorization: Bearer sk_test_51H..."{
"team_id": "team_2013",
"season": "2026-2027",
"trainings_held": 64,
"avg_attendance_rate": 0.88,
"matches_played": 12
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
trainings_held | integer | Количество проведённых тренировок. |
avg_attendance_rate | number | Средняя посещаемость команды, от 0 до 1. |
matches_played | integer | Сыграно матчей за сезон. |
Полезно знать
- Статусы посещаемости заданы фиксированным набором:
present,absent,sick,excused. Добавить свои статусы нельзя, потому что по этой единой шкале строятся отчёты школы. - Нормативы и антропометрию тренер обновляет в интерфейсе.
GET /players/{id}/statsотдаёт сводные показатели за сезон, протоколы приёма нормативов через этот метод не приходят. - Тренировочные планы и упражнения через API доступны только для чтения. Создавать и редактировать сценарии тренировок можно только в панели тренера.
- Сводку по сезону (
/teams/{id}/season-summary) система пересчитывает раз в сутки. Точные цифры на текущий момент дают/trainingsи/players/{id}/stats.
