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

Брони

Бронирование корта от имени игрока: создание, перенос, отмена, лист ожидания, разделение оплаты, прокат, промокоды. Доступ — токен игрока.

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

Создать бронь #

POST/v1/bookings

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Бронирует корт на слот от имени игрока с оплатой из его кошелька. Корт можно указать в court_id, иначе берётся любой свободный. Сначала проверяются правила клуба для игрока (глубина брони, лимиты в день и активных), затем занятость, затем цена с учётом категории клиента и промокода, затем баланс. Одновременная бронь одного корта двумя игроками приводит к 409 slot_taken у второго.

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

ПолеТипОбязательноОписание
club_idстрокадаКлуб
dayстрокадаДата YYYY-MM-DD
timeстрокадаНачало слота HH:MM — из GET /v1/clubs/{club_id}/slots
court_idстрока, или nullнетКорт из GET /v1/clubs/{club_id}/courts; не указан — любой свободный
promo_codeстрока, или nullнетПромокод клуба

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

curl -X POST "https://адрес-вашего-сервера/api/v1/bookings" \
  -H "Authorization: Bearer <токен игрока>" \
  -H "Content-Type: application/json" \
  -d '{"club_id": "c1", "day": "2026-10-03", "time": "18:00"}'

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh
404club_not_foundКлуб не найден
400bad_day_or_timeНеверная дата или время (YYYY-MM-DD и HH:MM)
400bad_slot_timeВремя не совпадает с началом слота клуба
400slot_in_pastСлот уже прошёл
409too_far_aheadДальше глубины брони клуба; в ответе depth_days
409day_limitПревышен лимит броней в день; в ответе limit
409active_limitПревышен лимит активных броней; в ответе limit
409slot_takenСвободного корта на этот слот нет
402insufficient_fundsНе хватает денег на кошельке; в ответе balance и price
4xx<причина>Код не подходит — причина в detail
422[…]Ошибка проверки параметров или тела: detail — список ошибок

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

{
  "id": "b71c2e94-0a3f-4d58-8e26-9f1d3c5a7b40",
  "clubId": "c1",
  "club": "Флэйм Падел",
  "court": "Корт 4",
  "day": "2026-10-03",
  "time": "18:00",
  "durationMin": 90,
  "price": 3500,
  "status": "confirmed"
}

Мои брони #

GET/v1/bookings/my

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Последние 50 броней игрока, новые первыми, с долями разделённой оплаты.

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

curl -X GET "https://адрес-вашего-сервера/api/v1/bookings/my" \
  -H "Authorization: Bearer <токен игрока>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh

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

{
  "items": [
    {
      "id": "b71c2e94-0a3f-4d58-8e26-9f1d3c5a7b40",
      "clubId": "c1",
      "club": "Флэйм Падел",
      "court": "Корт 4",
      "day": "2026-10-03",
      "time": "18:00",
      "durationMin": 90,
      "price": 3500,
      "status": "confirmed",
      "splits": [{"name": "Анна С.", "amount": 875, "status": "pending"}]
    }
  ]
}

Отменить бронь #

POST/v1/bookings/{booking_id}/cancel

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Отменяет свою бронь. Если до начала осталось не меньше окна бесплатной отмены клуба (с учётом категории клиента), стоимость возвращается на кошелёк, иначе refund=0. Освободившийся слот предлагается первому в листе ожидания.

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

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

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

curl -X POST "https://адрес-вашего-сервера/api/v1/bookings/b71c2e94-0a3f-4d58-8e26-9f1d3c5a7b40/cancel" \
  -H "Authorization: Bearer <токен игрока>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh
404booking_not_foundБронь не найдена или не ваша
400already_cancelledБронь уже отменена
422[…]Ошибка проверки параметров или тела: detail — список ошибок

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

{"ok": true, "refund": 3500}

Перенести бронь #

POST/v1/bookings/{booking_id}/reschedule

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Переносит свою бронь на другой слот того же клуба. Разница цены списывается с кошелька или возвращается на него.

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

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

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

ПолеТипОбязательноОписание
dayстрокадаНовая дата YYYY-MM-DD
timeстрокадаНовое начало слота HH:MM

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

curl -X POST "https://адрес-вашего-сервера/api/v1/bookings/b71c2e94-0a3f-4d58-8e26-9f1d3c5a7b40/reschedule" \
  -H "Authorization: Bearer <токен игрока>" \
  -H "Content-Type: application/json" \
  -d '{"day": "2026-10-04", "time": "19:30"}'

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh
404booking_not_foundБронь не найдена или не ваша
400<статус>Бронь или доля не в нужном статусе — в detail текущий статус
400bad_day_or_timeНеверная дата или время (YYYY-MM-DD и HH:MM)
400bad_slot_timeВремя не совпадает с началом слота клуба
400slot_in_pastСлот уже прошёл
409slot_takenСвободного корта на этот слот нет
402insufficient_fundsНе хватает денег на кошельке; в ответе balance и price
422[…]Ошибка проверки параметров или тела: detail — список ошибок

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

{
  "id": "b71c2e94-0a3f-4d58-8e26-9f1d3c5a7b40",
  "clubId": "c1",
  "club": "Флэйм Падел",
  "court": "Корт 4",
  "day": "2026-10-04",
  "time": "19:30",
  "durationMin": 90,
  "price": 3500,
  "status": "confirmed"
}

Правила брони для меня в этом клубе #

GET/v1/bookings/rules

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Правила брони клуба для этого игрока с учётом его категории: глубина брони в днях, окно бесплатной отмены в часах, лимиты в день и активных броней.

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

ИмяТипОбязательноОписание
club_idстрокадаИдентификатор клуба

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

curl -X GET "https://адрес-вашего-сервера/api/v1/bookings/rules?club_id=c1" \
  -H "Authorization: Bearer <токен игрока>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh
404club_not_foundКлуб не найден
422[…]Ошибка проверки параметров или тела: detail — список ошибок

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

{
  "depthDays": 14,
  "cancelFreeHours": 24,
  "maxPerDay": 0,
  "maxActive": 0,
  "category": null,
  "categoryId": null,
  "overridden": []
}

Проверка промокода #

GET/v1/promo/check

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Что даст промокод на слот: цена, скидка, к оплате. Ничего не бронирует. Если код не подходит — ответ 4xx с причиной в detail.

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

ИмяТипОбязательноОписание
club_idстрокадаИдентификатор клуба
codeстрокадаПромокод
dayстрока (дата)даДата YYYY-MM-DD
atстрокадаВремя начала слота HH:MM

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

curl -X GET "https://адрес-вашего-сервера/api/v1/promo/check?club_id=c1&code=AUTUMN10&day=2026-10-03&at=18:00" \
  -H "Authorization: Bearer <токен игрока>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh
404club_not_foundКлуб не найден
400bad_timeНеверное время (HH:MM)
4xx<причина>Код не подходит — причина в detail
422[…]Ошибка проверки параметров или тела: detail — список ошибок

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

{"code": "AUTUMN10", "price": 3500, "discount": 350, "total": 3150, "note": ""}

Встать в очередь на занятый слот #

POST/v1/bookings/waitlist

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Встать в очередь на слот, где заняты все корты. Когда бронь на этот слот отменят, уведомление получит только первый в очереди. Повторное нажатие не создаёт вторую запись. В ответе — место в очереди.

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

ПолеТипОбязательноОписание
club_idстрокадаКлуб
dayстрокадаДата YYYY-MM-DD
timeстрокадаНачало слота HH:MM

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

curl -X POST "https://адрес-вашего-сервера/api/v1/bookings/waitlist" \
  -H "Authorization: Bearer <токен игрока>" \
  -H "Content-Type: application/json" \
  -d '{"club_id": "c1", "day": "2026-10-03", "time": "18:00"}'

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh
404club_not_foundКлуб не найден
400bad_day_or_timeНеверная дата или время (YYYY-MM-DD и HH:MM)
400bad_slot_timeВремя не совпадает с началом слота клуба
400slot_in_pastСлот уже прошёл
409slot_freeСлот свободен — очередь не нужна, бронируйте
422[…]Ошибка проверки параметров или тела: detail — список ошибок

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

{"ok": true, "id": "5a3c7e19-2b8d-4f60-9e1a-c4d7b2f8e053", "position": 1}

Мой лист ожидания #

GET/v1/bookings/waitlist/my

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Записи игрока в листах ожидания на сегодня и позже: ждёт (waiting) или уже уведомлён (notified).

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

curl -X GET "https://адрес-вашего-сервера/api/v1/bookings/waitlist/my" \
  -H "Authorization: Bearer <токен игрока>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh

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

{
  "items": [
    {
      "id": "5a3c7e19-2b8d-4f60-9e1a-c4d7b2f8e053",
      "clubId": "c1",
      "club": "Флэйм Падел",
      "day": "2026-10-03",
      "time": "18:00",
      "status": "waiting"
    }
  ]
}

Выйти из листа ожидания #

POST/v1/bookings/waitlist/{wait_id}/cancel

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Отменяет свою запись в листе ожидания.

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

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

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

curl -X POST "https://адрес-вашего-сервера/api/v1/bookings/waitlist/5a3c7e19-2b8d-4f60-9e1a-c4d7b2f8e053/cancel" \
  -H "Authorization: Bearer <токен игрока>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh
404waitlist_not_foundЗапись в листе ожидания не найдена
422[…]Ошибка проверки параметров или тела: detail — список ошибок

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

{"ok": true}

Разделить оплату брони #

POST/v1/bookings/{booking_id}/split

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Автор брони делит стоимость с одним–тремя игроками: каждому уходит запрос на долю, равную цене, делённой на число участников вместе с автором (с округлением вниз). Повторный запрос тому же игроку — 409.

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

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

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

ПолеТипОбязательноОписание
user_idsмассив [строка (uuid)]даС кем делить: 1–3 игрока (например, из GET /v1/players/recent)
элементов от 1; элементов до 3

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

curl -X POST "https://адрес-вашего-сервера/api/v1/bookings/b71c2e94-0a3f-4d58-8e26-9f1d3c5a7b40/split" \
  -H "Authorization: Bearer <токен игрока>" \
  -H "Content-Type: application/json" \
  -d '{"user_ids": ["a52e7c14-90bd-4e3f-8c61-7d2f0b9e4a15"]}'

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh
404booking_not_foundБронь не найдена или не ваша
400<статус>Бронь или доля не в нужном статусе — в detail текущий статус
404player_not_found: …Игрок не найден (в тексте — его идентификатор или телефон)
409split_already_sentЗапрос на долю этому игроку уже отправлен
422[…]Ошибка проверки параметров или тела: detail — список ошибок

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

{"ok": true, "share": 875, "requests": 3}

Мои доли к оплате #

GET/v1/bookings/splits/my

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Неоплаченные запросы на долю, адресованные игроку.

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

curl -X GET "https://адрес-вашего-сервера/api/v1/bookings/splits/my" \
  -H "Authorization: Bearer <токен игрока>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh

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

{
  "items": [
    {
      "id": "9b1e4d72-3c6a-4f85-a0d2-7e3b9c1f5a64",
      "club": "Флэйм Падел",
      "day": "2026-10-03",
      "time": "18:00",
      "amount": 875
    }
  ]
}

Оплатить свою долю #

POST/v1/bookings/splits/{split_id}/accept

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Игрок оплачивает свою долю из кошелька — деньги переводятся автору брони.

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

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

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

curl -X POST "https://адрес-вашего-сервера/api/v1/bookings/splits/9b1e4d72-3c6a-4f85-a0d2-7e3b9c1f5a64/accept" \
  -H "Authorization: Bearer <токен игрока>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh
404split_not_foundЗапрос на долю не найден
400<статус>Бронь или доля не в нужном статусе — в detail текущий статус
402insufficient_fundsНе хватает денег на кошельке; в ответе balance и price
422[…]Ошибка проверки параметров или тела: detail — список ошибок

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

{"ok": true}

Инвентарь напрокат в клубе #

GET/v1/bookings/rental

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Инвентарь клуба напрокат: цена за выдачу и сколько единиц свободно прямо сейчас.

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

ИмяТипОбязательноОписание
club_idстрокадаИдентификатор клуба

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

curl -X GET "https://адрес-вашего-сервера/api/v1/bookings/rental?club_id=c1" \
  -H "Authorization: Bearer <токен игрока>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh
422[…]Ошибка проверки параметров или тела: detail — список ошибок

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

{
  "items": [
    {
      "id": "c9d4e2a7-1f83-4a6b-b0c5-3e7d9a1f2b58",
      "name": "Ракетка",
      "price": 500,
      "available": 6
    }
  ]
}

Добавить инвентарь к своей броне #

POST/v1/bookings/{booking_id}/rental

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Добавляет инвентарь (1–4 единицы) к своей активной брони, пока игра не закончилась. Стоимость списывается с кошелька.

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

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

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

ПолеТипОбязательноОписание
item_idстрока (uuid)даПозиция проката из GET /v1/bookings/rental
qtyцелоенетКоличество, 1–4
не меньше 1; не больше 4; по умолчанию 1

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

curl -X POST "https://адрес-вашего-сервера/api/v1/bookings/b71c2e94-0a3f-4d58-8e26-9f1d3c5a7b40/rental" \
  -H "Authorization: Bearer <токен игрока>" \
  -H "Content-Type: application/json" \
  -d '{"item_id": "c9d4e2a7-1f83-4a6b-b0c5-3e7d9a1f2b58", "qty": 2}'

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh
404booking_not_foundБронь не найдена или не ваша
409booking_not_activeБронь не активна
409booking_finishedИгра по брони уже закончилась
404item_not_foundПозиция проката не найдена
409not_enoughСвободных единиц меньше; в ответе available
402insufficient_fundsНе хватает денег на кошельке; в ответе balance и price
422[…]Ошибка проверки параметров или тела: detail — список ошибок

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

{
  "ok": true,
  "id": "4e8a2c61-7d9b-4f03-b5e1-2a6c8d0f4b97",
  "charged": 1000,
  "available": 4
}

Что уже взято на эту бронь #

GET/v1/bookings/{booking_id}/rental

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

Что уже взято на эту бронь и возвращено ли.

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

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

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

curl -X GET "https://адрес-вашего-сервера/api/v1/bookings/b71c2e94-0a3f-4d58-8e26-9f1d3c5a7b40/rental" \
  -H "Authorization: Bearer <токен игрока>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh
404booking_not_foundБронь не найдена или не ваша
422[…]Ошибка проверки параметров или тела: detail — список ошибок

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

{
  "items": [
    {
      "id": "4e8a2c61-7d9b-4f03-b5e1-2a6c8d0f4b97",
      "name": "Ракетка",
      "qty": 2,
      "price": 1000,
      "returned": false
    }
  ]
}

QR брони для стойки проката #

GET/v1/bookings/{booking_id}/rental-pass

Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.

QR брони для стойки проката. Показывается и без заказанного инвентаря: по нему стойка может выдать инвентарь на месте.

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

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

Заголовки

ИмяТипОбязательноОписание
AuthorizationстрокадаBearer <токен игрока>

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

curl -X GET "https://адрес-вашего-сервера/api/v1/bookings/b71c2e94-0a3f-4d58-8e26-9f1d3c5a7b40/rental-pass" \
  -H "Authorization: Bearer <токен игрока>"

Ответы

КодdetailЗначение
200—Успешный ответ; пример ниже
401no_tokenНет токена в заголовке Authorization
401invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh
404booking_not_foundБронь не найдена или не ваша
409booking_not_activeБронь не активна
422[…]Ошибка проверки параметров или тела: detail — список ошибок

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

{"qr": "<код QR>", "items": [], "status": "empty", "waiting": 0}