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

Сервер корта: приём данных

Результаты матчей, статистика, движение, клипы, живой счёт, американо, сетка турнира, уровни и пропуска. Доступ — клубный токен X-Club-Token.

Базовый адрес: https://адрес-вашего-сервера/api · Руководство по разделу: Сервер корта и облако

Результат матча с корта #

POST/v1/ingest/match-result

Доступ: Клубный токен Заголовок X-Club-Token: <клубный токен> — токен сервера корта клуба.

Создаёт матч по счёту с корта и пересчитывает рейтинг участников. В ответе — matchId: на него ссылаются статистика, движение, клипы и розыгрыши. Игрок задаётся user_id, телефоном или кодом пропуска; незнакомый телефон заводит новый профиль, и игрок увидит матч, войдя в приложение с этим номером. Если счёт по сетам равный (не вели или не доиграли), матч принимается, но в рейтинг не идёт (voided=true). Если очков, отмеченных человеком (points_manual), больше, чем от камер (points_auto), матч считается ручным и весит в рейтинге вдвое меньше. Бронь можно передать в booking_id, иначе облако найдёт её по корту, дню и времени. Метод не идемпотентен: каждый успешный вызов создаёт новый матч.

Заголовки

ИмяТипОбязательноОписание
x-club-tokenстрокадаКлубный токен сервера корта

Тело запроса application/json

ПолеТипОбязательноОписание
courtстроканетИмя корта
dayстрокадаДата матча YYYY-MM-DD
timeстрокадаВремя начала HH:MM
setsстрокадаСчёт по сетам «команда1:команда2» через запятую
шаблон ^\d+:\d+(,\d+:\d+)*$
playersмассив [объект]даСостав: 2–4 игрока, обе команды
элементов от 2; элементов до 4
players[].user_idстрока (uuid), или nullнетИдентификатор игрока (по QR или привязке)
players[].phoneстрока, или nullнетТелефон игрока, если id неизвестен
players[].teamцелоедаКоманда: 1 или 2
не меньше 1; не больше 2
players[].nameстроканетИмя с терминала — для нового профиля
players[].pass_codeстрока, или nullнетКод QR-пропуска, который корт не смог проверить сам
длина до 120
booking_idстрока (uuid), или nullнетБронь, из которой открыта сессия; не указана — облако найдёт по корту и времени
points_autoцелое, или nullнетСколько очков засчитали камеры
не меньше 0
points_manualцелое, или nullнетСколько очков отметил человек
не меньше 0

Пример запроса

curl -X POST "https://адрес-вашего-сервера/api/v1/ingest/match-result" \
  -H "X-Club-Token: <клубный токен>" \
  -H "Content-Type: application/json" \
  -d '{
  "court": "court4",
  "day": "2026-10-02",
  "time": "18:00",
  "sets": "6:4,3:6,7:5",
  "players": [
    {"user_id": "3d6e9a10-5b2c-4f8e-a1d7-6c4b2e0f9a83", "team": 1},
    {"phone": "+79000000001", "team": 1, "name": "Олег"},
    {"user_id": "a52e7c14-90bd-4e3f-8c61-7d2f0b9e4a15", "team": 2},
    {"phone": "+79000000002", "team": 2, "name": "Мария"}
  ],
  "points_auto": 54,
  "points_manual": 3
}'

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401bad_club_tokenНеверный клубный токен
400bad_day_or_timeНеверная дата или время (YYYY-MM-DD и HH:MM)
400both_teams_requiredНужны игроки обеих команд
404player_not_found: …Игрок не найден (в тексте — его идентификатор или телефон)
422[…]Ошибка проверки параметров или тела: detail — список ошибок

Пример ответа

{
  "matchId": "8c0f4a52-2d1e-4b7a-9f63-1a5e7d9b3c20",
  "winnerTeam": 1,
  "ratingDeltas": {
    "3d6e9a10-5b2c-4f8e-a1d7-6c4b2e0f9a83": 12,
    "a52e7c14-90bd-4e3f-8c61-7d2f0b9e4a15": -12
  },
  "bookingId": "b71c2e94-0a3f-4d58-8e26-9f1d3c5a7b40",
  "voided": false
}

Статистика матча #

POST/v1/ingest/match-stats

Доступ: Клубный токен Заголовок X-Club-Token: <клубный токен> — токен сервера корта клуба.

Статистика игроков матча: максимальная скорость мяча, пробег, удары по видам. Игрок — по user_id или телефону; он должен быть в составе матча. Игрокам с ненулевой скоростью мяча уходит уведомление «AI-разбор готов». Повтор перезаписывает значения.

Заголовки

ИмяТипОбязательноОписание
x-club-tokenстрокадаКлубный токен сервера корта

Тело запроса application/json

ПолеТипОбязательноОписание
match_idстрока (uuid)даmatchId из ответа match-result
avg_rally_shotsчисло, или nullнетСреднее число ударов за розыгрыш
playersмассив [объект]даСтатистика по игрокам
players[].user_idстрока (uuid), или nullнетИгрок
players[].phoneстрока, или nullнетТелефон, если id неизвестен
players[].max_ball_kmhцелое, или nullнетМаксимальная скорость мяча, км/ч
players[].run_mцелое, или nullнетПробег, м
players[].shotsмассив [объект]нетУдары по видам: объекты class, count, avgKmh

Пример запроса

curl -X POST "https://адрес-вашего-сервера/api/v1/ingest/match-stats" \
  -H "X-Club-Token: <клубный токен>" \
  -H "Content-Type: application/json" \
  -d '{
  "match_id": "8c0f4a52-2d1e-4b7a-9f63-1a5e7d9b3c20",
  "avg_rally_shots": 6.8,
  "players": [
    {
      "user_id": "3d6e9a10-5b2c-4f8e-a1d7-6c4b2e0f9a83",
      "max_ball_kmh": 112,
      "run_m": 2350,
      "shots": [{"class": "смэш", "count": 7, "avgKmh": 104}]
    }
  ]
}'

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401bad_club_tokenНеверный клубный токен
404match_not_foundМатч не найден, чужого клуба или вы не участник
404player_not_in_match: …Игрок не участвует в матче
404player_not_found: …Игрок не найден (в тексте — его идентификатор или телефон)
422[…]Ошибка проверки параметров или тела: detail — список ошибок

Пример ответа

{"ok": true}

Движение каждого игрока матча #

POST/v1/ingest/match-movement

Доступ: Клубный токен Заголовок X-Club-Token: <клубный токен> — токен сервера корта клуба.

Движение каждого игрока по трёхмерному трекингу корта: пробег, темп, пиковая скорость, рывки, доли зон, покрытие, сетка присутствия. Повторная отправка обновляет записи без дублей; пустое поле не затирает известное значение. Игрок, узнанный по телефону, но отсутствующий в составе, добавляется в состав без изменения рейтинга (joined). Гость без телефона хранится по имени.

Заголовки

ИмяТипОбязательноОписание
x-club-tokenстрокадаКлубный токен сервера корта

Тело запроса application/json

ПолеТипОбязательноОписание
match_idстрока (uuid)даmatchId
sourceстроканетИсточник трекинга
длина до 16; по умолчанию "court3d"
playersмассив [объект]даИгроки, 1–8
элементов от 1; элементов до 8
players[].user_idстрока (uuid), или nullнетИгрок
players[].phoneстрока, или nullнетТелефон, если id неизвестен
players[].nameстроканетИмя (для гостя без телефона)
players[].teamцелоедаКоманда: 1 или 2
не меньше 1; не больше 2
players[].distance_mчисло, или nullнетПробег, м
не меньше 0
players[].work_rate_m_per_minчисло, или nullнетТемп, м/мин
не меньше 0
players[].top_speed_msчисло, или nullнетПиковая скорость, м/с
не меньше 0
players[].sprintsцелое, или nullнетЧисло рывков
не меньше 0
players[].zonesобъект, или nullнетДоли времени по зонам, %: net, mid, back
players[].coverage_percentчисло, или nullнетПокрытие корта, % (0–100)
не меньше 0; не больше 100
players[].gridмассив [массив [число]]нетСетка присутствия: [x, y, n], до 4000 точек
элементов до 4000

Пример запроса

curl -X POST "https://адрес-вашего-сервера/api/v1/ingest/match-movement" \
  -H "X-Club-Token: <клубный токен>" \
  -H "Content-Type: application/json" \
  -d '{
  "match_id": "8c0f4a52-2d1e-4b7a-9f63-1a5e7d9b3c20",
  "source": "court3d",
  "players": [
    {
      "user_id": "3d6e9a10-5b2c-4f8e-a1d7-6c4b2e0f9a83",
      "team": 1,
      "distance_m": 2410.5,
      "work_rate_m_per_min": 38.2,
      "top_speed_ms": 5.9,
      "sprints": 14,
      "zones": {"net": 42.0, "mid": 31.0, "back": 27.0},
      "coverage_percent": 63.0,
      "grid": [[2.5, 4.0, 18]]
    },
    {"name": "Гость", "team": 2, "distance_m": 1980.0}
  ]
}'

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401bad_club_tokenНеверный клубный токен
404match_not_foundМатч не найден, чужого клуба или вы не участник
404player_not_found: …Игрок не найден (в тексте — его идентификатор или телефон)
422[…]Ошибка проверки параметров или тела: detail — список ошибок

Пример ответа

{"ok": true, "count": 4, "added": 4, "updated": 0, "joined": 0}

Метаданные клипов от клуба #

POST/v1/ingest/clips

Доступ: Клубный токен Заголовок X-Club-Token: <клубный токен> — токен сервера корта клуба.

Метаданные клипов матча. Клип присылается дважды: сразу после матча — метаданные, затем, когда видео доехало до хранилища, — с object_key. Записи сопоставляются по clip_id, поэтому повтор обновляет клип, а не создаёт дубль; пустые поля не затирают известные. Ракурсы одного момента объединяются общим group.

Заголовки

ИмяТипОбязательноОписание
x-club-tokenстрокадаКлубный токен сервера корта

Тело запроса application/json

ПолеТипОбязательноОписание
match_idстрока (uuid)даmatchId
clipsмассив [объект]даКлипы
clips[].clip_idстроканетИдентификатор клипа на сервере корта — по нему повтор обновляет клип
clips[].kindстроканетВид: highlight, highlight_angle (ракурс), highlight_vertical (копия 9:16); пусто — не менять
clips[].titleстроканетНазвание
clips[].urlстроканетПубличная ссылка, если есть; пусто — видео ещё едет
clips[].object_keyстроканетКлюч объекта в хранилище — приходит вторым сообщением
clips[].preview_urlстроканетСсылка на превью
clips[].duration_sчислонетДлительность, с (дробная допустима)
по умолчанию 0
clips[].groupстроканетОбщий ключ момента для ракурсов
clips[].cameraстроканетПодпись камеры для переключателя в плеере

Пример запроса

curl -X POST "https://адрес-вашего-сервера/api/v1/ingest/clips" \
  -H "X-Club-Token: <клубный токен>" \
  -H "Content-Type: application/json" \
  -d '{
  "match_id": "8c0f4a52-2d1e-4b7a-9f63-1a5e7d9b3c20",
  "clips": [
    {
      "clip_id": "rally-012-cam1",
      "kind": "highlight",
      "title": "Смэш в сетку",
      "duration_s": 12.5,
      "group": "rally-012",
      "camera": "Камера 1"
    },
    {
      "clip_id": "rally-012-cam2",
      "kind": "highlight_angle",
      "duration_s": 12.5,
      "group": "rally-012",
      "camera": "Камера 2"
    }
  ]
}'

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401bad_club_tokenНеверный клубный токен
404match_not_foundМатч не найден, чужого клуба или вы не участник
422[…]Ошибка проверки параметров или тела: detail — список ошибок

Пример ответа

{"ok": true, "count": 2, "added": 2, "updated": 0}

Загрузка файла клипа #

PUT/v1/ingest/clips/file

Доступ: Клубный токен Заголовок X-Club-Token: <клубный токен> — токен сервера корта клуба.

Загружает сам файл клипа (mp4) в облако, если облако хранит видео у себя. Тело — сырой mp4, без JSON. Ключ key вида «<id клуба>/<матч>/<имя>.mp4»: первый сегмент обязан совпадать с клубом токена. После загрузки отправьте POST /v1/ingest/clips с этим object_key — облако будет выдавать игрокам короткоживущую ссылку.

Параметры запроса

ИмяТипОбязательноОписание
keyстрокадаКлюч объекта «<id клуба>/<матч>/<имя>.mp4»

Заголовки

ИмяТипОбязательноОписание
x-club-tokenстрокадаКлубный токен сервера корта

Тело запроса

Тело запроса — файл mp4 целиком (двоичные данные, не JSON).

Пример запроса

curl -X PUT "https://адрес-вашего-сервера/api/v1/ingest/clips/file?key=c1/8c0f4a52-2d1e-4b7a-9f63-1a5e7d9b3c20/clip-001.mp4" \
  -H "X-Club-Token: <клубный токен>" \
  -H "Content-Type: video/mp4" \
  --data-binary @clip-001.mp4

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401bad_club_tokenНеверный клубный токен
400local_storage_disabledОблако хранит видео не у себя — загрузка файла выключена
403bad_keyКлюч объекта не начинается с id клуба токена или содержит ..
413clip_too_largeФайл больше допустимого размера
507disk_fullНет места на диске облака
507write_failedФайл не записан
422[…]Ошибка проверки параметров или тела: detail — список ошибок

Пример ответа

{
  "ok": true,
  "key": "c1/8c0f4a52-2d1e-4b7a-9f63-1a5e7d9b3c20/clip-001.mp4",
  "bytes": 18734211
}

Хайлайт игрока по ходу матча #

POST/v1/ingest/player-clip

Доступ: Клубный токен Заголовок X-Club-Token: <клубный токен> — токен сервера корта клуба.

Крупный план игрока, уже лежащий в хранилище, отправляется ему уведомлением сразу, не дожидаясь конца матча. Игрок — по user_id или телефону (незнакомый телефон заводит профиль). Ссылка в уведомлении действует неделю.

Заголовки

ИмяТипОбязательноОписание
x-club-tokenстрокадаКлубный токен сервера корта

Тело запроса application/json

ПолеТипОбязательноОписание
user_idстрока (uuid), или nullнетИгрок
phoneстрока, или nullнетТелефон, если id неизвестен
nameстроканетИмя для нового профиля
object_keyстрокадаКлюч объекта, начинается с «<id клуба>/»
titleстроканетНазвание в уведомлении
courtстроканетКорт — для подписи
duration_sчислонетДлительность, с
по умолчанию 0

Пример запроса

curl -X POST "https://адрес-вашего-сервера/api/v1/ingest/player-clip" \
  -H "X-Club-Token: <клубный токен>" \
  -H "Content-Type: application/json" \
  -d '{
  "user_id": "3d6e9a10-5b2c-4f8e-a1d7-6c4b2e0f9a83",
  "name": "",
  "object_key": "c1/8c0f4a52-2d1e-4b7a-9f63-1a5e7d9b3c20/zoom-001.mp4",
  "title": "",
  "court": "court4",
  "duration_s": 9.0
}'

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401bad_club_tokenНеверный клубный токен
403bad_keyКлюч объекта не начинается с id клуба токена или содержит ..
400no_playerНе указан ни user_id, ни phone
409clip_not_storedВидео по ключу ещё не в хранилище
404player_not_found: …Игрок не найден (в тексте — его идентификатор или телефон)
422[…]Ошибка проверки параметров или тела: detail — список ошибок

Пример ответа

{"ok": true, "user_id": "3d6e9a10-5b2c-4f8e-a1d7-6c4b2e0f9a83"}

Живой счёт корта #

POST/v1/ingest/live

Доступ: Клубный токен Заголовок X-Club-Token: <клубный токен> — токен сервера корта клуба.

Текущий счёт корта для табло и трансляций. Хранится 180 секунд и гаснет сам, если не обновлять. Читается публичным методом GET /v1/live/{club_id}.

Заголовки

ИмяТипОбязательноОписание
x-club-tokenстрокадаКлубный токен сервера корта

Тело запроса application/json

ПолеТипОбязательноОписание
courtстрокадаИмя корта
scoreстроканетСтрока счёта для табло
teamsстроканетСтрока состава
set_noцелое, или nullнетНомер сета
on_airлогическоенетИдёт ли видеотрансляция корта
по умолчанию false

Пример запроса

curl -X POST "https://адрес-вашего-сервера/api/v1/ingest/live" \
  -H "X-Club-Token: <клубный токен>" \
  -H "Content-Type: application/json" \
  -d '{
  "court": "court4",
  "score": "6:4 3:2 · 30-15",
  "teams": "Иван/Олег — Анна/Мария",
  "set_no": 2,
  "on_air": true
}'

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401bad_club_tokenНеверный клубный токен
422[…]Ошибка проверки параметров или тела: detail — список ошибок

Пример ответа

{"ok": true, "ttl_s": 180}

Текущая игра американо на корте #

GET/v1/ingest/quick-games

Доступ: Клубный токен Заголовок X-Club-Token: <клубный токен> — токен сервера корта клуба.

Игра текущего раунда американо или мексиканки, назначенная на этот корт и ещё без счёта. Нет такой игры — {"game": null}.

Параметры запроса

ИмяТипОбязательноОписание
courtстрокадаИмя корта, как на сервере корта

Заголовки

ИмяТипОбязательноОписание
x-club-tokenстрокадаКлубный токен сервера корта

Пример запроса

curl -X GET "https://адрес-вашего-сервера/api/v1/ingest/quick-games?court=court4" \
  -H "X-Club-Token: <клубный токен>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401bad_club_tokenНеверный клубный токен
422[…]Ошибка проверки параметров или тела: detail — список ошибок

Пример ответа

{
  "game": {
    "gameId": 17,
    "qtId": "6e2b9f41-c7a0-4d3e-9b15-8f4c2a7d0e93",
    "round": 2,
    "points": 24,
    "format": "americano",
    "team1": [
      {"userId": "3d6e9a10-5b2c-4f8e-a1d7-6c4b2e0f9a83", "name": "Иван П."},
      {"userId": null, "name": "Гость"}
    ],
    "team2": [
      {"userId": "a52e7c14-90bd-4e3f-8c61-7d2f0b9e4a15", "name": "Анна С."},
      {"userId": null, "name": "Олег"}
    ]
  }
}

Счёт игры американо с корта #

POST/v1/ingest/quick-games/{game_id}/score

Доступ: Клубный токен Заголовок X-Club-Token: <клубный токен> — токен сервера корта клуба.

Счёт игры американо с сервера корта (розыгрыши по машинным камерам). Только игра своего клуба. В ответе — текущее состояние американо целиком.

Параметры пути

ИмяТипОбязательноОписание
game_idцелоедаgameId из GET /v1/ingest/quick-games

Заголовки

ИмяТипОбязательноОписание
x-club-tokenстрокадаКлубный токен сервера корта

Тело запроса application/json

ПолеТипОбязательноОписание
score1целоедаОчки команды 1, 0–64
не меньше 0; не больше 64
score2целоедаОчки команды 2, 0–64
не меньше 0; не больше 64

Пример запроса

curl -X POST "https://адрес-вашего-сервера/api/v1/ingest/quick-games/17/score" \
  -H "X-Club-Token: <клубный токен>" \
  -H "Content-Type: application/json" \
  -d '{"score1": 14, "score2": 10}'

Ответы

КодdetailЗначение
200—Успешный ответ
401bad_club_tokenНеверный клубный токен
404game_not_foundИгра не найдена или чужого клуба
409finishedАмерикано уже завершено
422[…]Ошибка проверки параметров или тела: detail — список ошибок

Матч сетки турнира на корте #

GET/v1/ingest/bracket

Доступ: Клубный токен Заголовок X-Club-Token: <клубный токен> — токен сервера корта клуба.

Ближайший несыгранный матч сетки идущего турнира клуба, назначенный на этот корт. Нет — {"match": null}.

Параметры запроса

ИмяТипОбязательноОписание
courtстрокадаИмя корта, как на сервере корта

Заголовки

ИмяТипОбязательноОписание
x-club-tokenстрокадаКлубный токен сервера корта

Пример запроса

curl -X GET "https://адрес-вашего-сервера/api/v1/ingest/bracket?court=court4" \
  -H "X-Club-Token: <клубный токен>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401bad_club_tokenНеверный клубный токен
422[…]Ошибка проверки параметров или тела: detail — список ошибок

Пример ответа

{
  "match": {
    "matchId": "8c0f4a52-2d1e-4b7a-9f63-1a5e7d9b3c20",
    "tournamentId": "6e2b9f41-c7a0-4d3e-9b15-8f4c2a7d0e93",
    "title": "Кубок клуба",
    "round": 1,
    "startAt": "2026-10-04T12:00:00",
    "team1": [
      {"userId": "3d6e9a10-5b2c-4f8e-a1d7-6c4b2e0f9a83", "name": "Иван П."},
      {"userId": null, "name": "Гость"}
    ],
    "team2": [
      {"userId": "a52e7c14-90bd-4e3f-8c61-7d2f0b9e4a15", "name": "Анна С."},
      {"userId": null, "name": "Гость"}
    ]
  }
}

Итог матча сетки с сервера корта #

POST/v1/ingest/bracket/{match_id}/result

Доступ: Клубный токен Заголовок X-Club-Token: <клубный токен> — токен сервера корта клуба.

Итог матча сетки по автосчёту. Повтор после обрыва связи безопасен: если победитель уже записан, ответ {"ok": true, "already": true} и ничего не меняется.

Параметры пути

ИмяТипОбязательноОписание
match_idстрока (uuid)даИдентификатор матча

Заголовки

ИмяТипОбязательноОписание
x-club-tokenстрокадаКлубный токен сервера корта

Тело запроса application/json

ПолеТипОбязательноОписание
scoreстрокадаСчёт по сетам «6:4,3:6,7:5»
шаблон ^\d+:\d+(,\d+:\d+)*$
winnerцелоедаПобедившая команда: 1 или 2
не меньше 1; не больше 2

Пример запроса

curl -X POST "https://адрес-вашего-сервера/api/v1/ingest/bracket/8c0f4a52-2d1e-4b7a-9f63-1a5e7d9b3c20/result" \
  -H "X-Club-Token: <клубный токен>" \
  -H "Content-Type: application/json" \
  -d '{"score": "6:4,3:6,7:5", "winner": 1}'

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401bad_club_tokenНеверный клубный токен
404match_not_foundМатч не найден, чужого клуба или вы не участник
422[…]Ошибка проверки параметров или тела: detail — список ошибок

Пример ответа

{"ok": true}

Уровни игроков для терминала #

GET/v1/ingest/levels

Доступ: Клубный токен Заголовок X-Club-Token: <клубный токен> — токен сервера корта клуба.

Рейтинг AISOLUS игроков состава — для показа рядом с именем на терминале корта. До 16 идентификаторов (ids) и до 16 телефонов (phones) через запятую. Ответ — словарь, где один и тот же уровень лежит и под id, и под телефоном; игроки без рейтинга не возвращаются. Номер без «+» в адресе дополняется до «+7…».

Параметры запроса

ИмяТипОбязательноОписание
idsстроканетИдентификаторы игроков через запятую, до 16
phonesстроканетТелефоны через запятую, до 16

Заголовки

ИмяТипОбязательноОписание
x-club-tokenстрокадаКлубный токен сервера корта

Пример запроса

curl -X GET "https://адрес-вашего-сервера/api/v1/ingest/levels?ids=3d6e9a10-5b2c-4f8e-a1d7-6c4b2e0f9a83&phones=%2B79000000001" \
  -H "X-Club-Token: <клубный токен>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401bad_club_tokenНеверный клубный токен
422[…]Ошибка проверки параметров или тела: detail — список ошибок

Пример ответа

{
  "levels": {
    "3d6e9a10-5b2c-4f8e-a1d7-6c4b2e0f9a83": {"value": 3.25, "step": "Уверенный любитель", "games": 14},
    "+79000000001": {"value": 3.25, "step": "Уверенный любитель", "games": 14}
  }
}

Проверка пропуска игрока облаком #

POST/v1/ingest/player-pass

Доступ: Клубный токен Заголовок X-Club-Token: <клубный токен> — токен сервера корта клуба.

Терминал у корта не смог проверить QR-пропуск игрока сам (нет ключа дня в лицензии) — проверка облаком. Возвращаются только id и короткое имя.

Заголовки

ИмяТипОбязательноОписание
x-club-tokenстрокадаКлубный токен сервера корта

Тело запроса application/json

ПолеТипОбязательноОписание
codeстрокадаКод из QR-пропуска игрока
длина до 120

Пример запроса

curl -X POST "https://адрес-вашего-сервера/api/v1/ingest/player-pass" \
  -H "X-Club-Token: <клубный токен>" \
  -H "Content-Type: application/json" \
  -d '{"code": "<код пропуска>"}'

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401bad_club_tokenНеверный клубный токен
404pass_not_foundПропуск не распознан
410pass_expiredСрок пропуска истёк
422[…]Ошибка проверки параметров или тела: detail — список ошибок

Пример ответа

{"userId": "3d6e9a10-5b2c-4f8e-a1d7-6c4b2e0f9a83", "name": "Иван П."}