Бюро Цифровых Технологий

База знаний

Документация «Вираж»

База знаний по продуктам и API экосистемы «Вираж»: модули, методы, вебхуки — с примерами.

Обновлено: 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даИдентификатор команды.
fromquerystring (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": "Зал ОФП" }
  ]
}

Поля ответа

ПолеТипОписание
dataarray<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_idstringИдентификатор тренировки.
markedintegerСколько записей посещаемости сохранено.

Статистика игрока

Эндпоинт
GET /players/{id}/stats

Нормативы, посещаемость и матчевая статистика игрока за сезон.

Параметры

ПараметрГдеТипОбязателенОписание
idпутьstringдаИдентификатор игрока.
seasonquerystringнетСезон в формате 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_ratenumberДоля посещённых тренировок от 0 до 1.
matches_playedintegerКоличество сыгранных матчей за сезон.
goalsintegerЗаброшенные шайбы или забитые голы за сезон.

Список команд школы

Эндпоинт
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 }
  ]
}

Поля ответа

ПолеТипОписание
dataarray<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" }
  ]
}

Поля ответа

ПолеТипОписание
playersarray<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"
}

Поля ответа

ПолеТипОписание
idstringИдентификатор созданной тренировки.

Годичный цикл команды

Эндпоинт
GET /teams/{id}/year-plan

Календарный план команды по месяцам сезона: периоды подготовки, план и факт часов по видам нагрузки. Тот же источник, из которого собирается выгрузка годичного цикла в Word по форме школы.

Параметры

ПараметрГдеТипОбязателенОписание
idпутьstringдаИдентификатор команды.
seasonquerystringнетСезон в формате 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 }
  ]
}

Поля ответа

ПолеТипОписание
monthsarray<Month>Месяцы с июля по июнь: month, period, plan_hours, fact_hours.
periodsarray<Period>Периоды сезона с датами начала и конца; подряд идущие месяцы одного периода собираются в один блок.
load_typesarray<LoadType>Виды нагрузки с планом и фактом: ice, dryland, strength, theory.

Нормативы игрока

Эндпоинт
GET /players/{id}/tests

Результаты сдачи нормативов по наборам испытаний с порогами школы — по сезонам, чтобы сравнивать игрока с самим собой год назад.

Параметры

ПараметрГдеТипОбязателенОписание
idпутьstringдаИдентификатор игрока.
seasonquerystringнетСезон в формате 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 }
      ]
    }
  ]
}

Поля ответа

ПолеТипОписание
setsarray<TestSet>Наборы испытаний: name, held_at, результаты по каждому испытанию.
sets[].resultsarray<Result>Испытание с полями test, value, unit, threshold, passed.

Сводка команды за сезон

Эндпоинт
GET /teams/{id}/season-summary

Сводные показатели команды за выбранный сезон: средняя посещаемость, количество тренировок и сыгранных матчей.

Параметры

ПараметрГдеТипОбязателенОписание
idпутьstringдаИдентификатор команды.
seasonquerystringнетСезон в формате 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_heldintegerКоличество проведённых тренировок.
avg_attendance_ratenumberСредняя посещаемость команды, от 0 до 1.
matches_playedintegerСыграно матчей за сезон.

Полезно знать

  • Статусы посещаемости заданы фиксированным набором: present, absent, sick, excused. Добавить свои статусы нельзя, потому что по этой единой шкале строятся отчёты школы.
  • Нормативы и антропометрию тренер обновляет в интерфейсе. GET /players/{id}/stats отдаёт сводные показатели за сезон, протоколы приёма нормативов через этот метод не приходят.
  • Тренировочные планы и упражнения через API доступны только для чтения. Создавать и редактировать сценарии тренировок можно только в панели тренера.
  • Сводку по сезону (/teams/{id}/season-summary) система пересчитывает раз в сутки. Точные цифры на текущий момент дают /trainings и /players/{id}/stats.