AI ПаделДокументация API На сайт

Локальный API сервера корта

Данные игр клуб забирает у себя: итоги матчей, замеры мяча, моменты и видео лежат на сервере корта в сети клуба и отдаются оттуда без интернета. Облако нужно для того, что живёт между клубами и в приложении игрока: брони, кошелёк, рейтинг.

Что откуда брать

ДанныеОткудаДоступ
Итоги матча: счёт, состав, движение игроков, хайлайтыСервер корта — /match/summaryКлюч интеграции
Разбор игроков: удары, техника, уровеньСервер корта — /match/reportКлюч интеграции
Замеры мяча: розыгрыши, скорости, отскоки, тепловые картыСервер корта — /measure/*Ключ интеграции
Видео: моменты, хайлайты, повторы, полные записи матчейСервер корта — /archive/*Ключ интеграции
Состояние кортов, записи и сессийСервер корта — /status, /board.json, /session/…Ключ интеграции
Живой счёт и эфир кортаСервер корта — /live.json, /live/…/state.jsonБез ключа
Брони, слоты, кошелёк, рейтинг игроков, профиль игрокаОблако — справочник APIТокены облака
Платежи из 1С на кошельки игроковОблако — интеграция с 1СТокен 1С

В облако сервер корта отправляет только итоги матча, агрегаты статистики и клипы для приложения игрока (см. «Сервер корта и облако»). Полные записи, моменты со всех камер и сырые замеры мяча остаются в клубе — забрать их можно только локально.

Адрес

http://<адрес сервера корта>:8016

Ключ интеграции

Система клуба (1С, CRM, учёт, хранилище видео) передаёт ключ в заголовке X-Integration-Key. Ключ открывает только чтение данных игр из таблицы ниже. Управлять кортом по нему нельзя: счёт, состав, сессии, перезапуск служб, настройки камер, живое видео и звук остаются за PIN персонала.

curl "http://<адрес сервера корта>:8016/status" \
  -H "X-Integration-Key: <ключ интеграции>"

В итогах и разборе матча есть персональные данные игроков: имена и последние четыре цифры телефона. Храните ключ на сервере своей системы, а не в коде страниц и приложений, и не передавайте полученные данные за пределы клуба без согласия игроков.

Методы

МетодПараметрыЧто возвращает
GET /match/summarycourtПоследний итог матча на корте: время, длительность, счёт по сетам, победитель, игроки с движением (дистанция, темп, максимальная скорость, рывки, зоны), команды, хайлайты и запись матча. Итога нет — 404 no_summary
GET /match/reportcourt, t0 (необязательно — начало матча из итога)Разбор игроков: удары по видам, оценка техники, уровень, ошибки и план, эпизоды. Поле status: ready, pending (ещё считается), failed, missing, offline (нет связи с облаком, отдан сохранённый), unavailable (функция не входит в лицензию)
GET /measure/totalscourtИтоги замеров по корту: розыгрыши, время игры, максимальная и средняя скорость мяча, число измерений за каждой величиной
GET /measure/historycourt, limit (50), match_refРозыгрыши: длительность, скорости
GET /measure/rally/{rally_id}—Сводка по розыгрышу
GET /measure/trajectory/{rally_id}limit (20000), measured_onlyТраектория мяча; достроенные точки помечены interpolated
GET /measure/eventscourt, rally_id, kind, limit (500)События мяча: отскоки, удары, касания стекла — со скоростью и её погрешностью
GET /measure/heatmapcourt, kind (bounce), nx (20), ny (10), match_refТепловая карта событий по клеткам корта со средней скоростью в клетке
GET /measure/daemon—Работает ли служба замеров и успевает ли за камерами
GET /archive/list.jsoncourt, kind (moment, highlight, episode, match), days (7, не больше 90)Видео на диске сервера корта по дням, новые первыми: файлы каждой камеры, длительность, размер, готовность; итоги матчей за те же дни. Не больше 1500 записей — тогда truncated: true
GET /archive/fileroot, path — из списка; download=1 — сохранить файломВидео MP4 или миниатюра JPEG. Поддерживает перемотку: заголовок Range, ответ 206
GET /momentscourtМоменты матча, отмеченные игроками и автоматически: время, подпись, ракурсы
GET /episodes/{court}limit (12)Последние очки с решением системы и основанием
GET /positionscourtГде сейчас игроки и мяч на плане корта
GET /ball/livecourt (необязательно)Где мяч прямо сейчас и как идёт приём телеметрии
GET /session/{court}—Текущая сессия корта: время открытия и окончания, формат, состав, бронь, счёт идущего матча. Сессии нет — 404 no_session_on_court
GET /americano/{court}—Игра американо на корте и её счёт
GET /board.json—Табло клуба: все корты, сессии, счёт, камеры; диск и видеокарта сервера
GET /status—Имена кортов, лицензия, связь с облаком и очередь отправки
GET /rec/status—Запись по камерам, срок хранения записи в часах, занятое место

Без ключа открыты GET /health (сервер жив, сколько кортов играет), GET /live.json (какие корты в эфире) и GET /live/{court}/state.json (идёт ли трансляция и счёт) — в них нет ничего, чего не видно на табло.

Поля ответов /measure/* пока названы по-русски (розыгрышей, скорость_макс_кмч, база_доступна). Если база_доступна: false — база замеров недоступна, и пустой ответ не означает, что розыгрышей не было.

После матча: итог и видео

S="http://<адрес сервера корта>:8016"
K="X-Integration-Key: <ключ интеграции>"
C="%D0%9A%D0%BE%D1%80%D1%82%204"          # «Корт 4»

# 1. Итог последнего матча на корте
curl -H "$K" "$S/match/summary?court=$C"
# → {"court": "Корт 4", "t0": 1790863200, "day": "2026-10-02", "time_from": "18:00", "time_to": "19:28",
#    "sets": [{"team1": 6, "team2": 4, "unfinished": false}, …], "winner": 1,
#    "players": [{"name": "Олег", "team": 1, "phone_tail": "0001", "distance_m": 2350.4,
#                 "top_speed_ms": 6.1, "sprints": 14, …}, …],
#    "highlights": [{"title": "…", "duration_s": 18, "ready": true, "url": "…"}],
#    "match_video": {"duration_s": 5280, "ready": true, "url": "…"}, …}

# 2. Разбор игроков этого матча (t0 — из итога)
curl -H "$K" "$S/match/report?court=$C&t0=1790863200"

# 3. Видео за сегодня: только полные записи матчей
curl -H "$K" "$S/archive/list.json?court=$C&kind=match&days=1"
# → {"items": [{"id": "…", "kind": "match", "day": "2026-10-02", "time": "18:00", "duration_s": 5280,
#               "cams": [{"cam": "hik101", "root": "rec", "path": "…", "size": 1834221568,
#                         "ready": true, …}], …}], "summaries": […], "truncated": false}

# 4. Скачать файл камеры (root и path — из списка, path в кодировке URL)
curl -H "$K" -o match.mp4 "$S/archive/file?root=<root>&path=<path>&download=1"

Ошибки