Брони
Бронирование корта от имени игрока: создание, перенос, отмена, лист ожидания, разделение оплаты, прокат, промокоды. Доступ — токен игрока.
Базовый адрес: https://адрес-вашего-сервера/api · Руководство по разделу: Клубы, корты, слоты и брони
Содержание · 16 методов
Создать бронь #
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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh 404 club_not_foundКлуб не найден 400 bad_day_or_timeНеверная дата или время (YYYY-MM-DD и HH:MM) 400 bad_slot_timeВремя не совпадает с началом слота клуба 400 slot_in_pastСлот уже прошёл 409 too_far_aheadДальше глубины брони клуба; в ответе depth_days 409 day_limitПревышен лимит броней в день; в ответе limit 409 active_limitПревышен лимит активных броней; в ответе limit 409 slot_takenСвободного корта на этот слот нет 402 insufficient_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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh 404 booking_not_foundБронь не найдена или не ваша 400 already_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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh 404 booking_not_foundБронь не найдена или не ваша 400 <статус> Бронь или доля не в нужном статусе — в detail текущий статус 400 bad_day_or_timeНеверная дата или время (YYYY-MM-DD и HH:MM) 400 bad_slot_timeВремя не совпадает с началом слота клуба 400 slot_in_pastСлот уже прошёл 409 slot_takenСвободного корта на этот слот нет 402 insufficient_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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh 404 club_not_foundКлуб не найден 422 […] Ошибка проверки параметров или тела: detail — список ошибок
Пример ответа Копировать {
"depthDays": 14,
"cancelFreeHours": 24,
"maxPerDay": 0,
"maxActive": 0,
"category": null,
"categoryId": null,
"overridden": []
}
Встать в очередь на занятый слот #
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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh 404 club_not_foundКлуб не найден 400 bad_day_or_timeНеверная дата или время (YYYY-MM-DD и HH:MM) 400 bad_slot_timeВремя не совпадает с началом слота клуба 400 slot_in_pastСлот уже прошёл 409 slot_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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh 404 waitlist_not_foundЗапись в листе ожидания не найдена 422 […] Ошибка проверки параметров или тела: detail — список ошибок
Пример ответа
Разделить оплату брони #
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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh 404 booking_not_foundБронь не найдена или не ваша 400 <статус> Бронь или доля не в нужном статусе — в detail текущий статус 404 player_not_found: …Игрок не найден (в тексте — его идентификатор или телефон) 409 split_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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh 404 split_not_foundЗапрос на долю не найден 400 <статус> Бронь или доля не в нужном статусе — в detail текущий статус 402 insufficient_fundsНе хватает денег на кошельке; в ответе balance и price 422 […] Ошибка проверки параметров или тела: detail — список ошибок
Пример ответа
Инвентарь напрокат в клубе #
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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh 404 booking_not_foundБронь не найдена или не ваша 409 booking_not_activeБронь не активна 409 booking_finishedИгра по брони уже закончилась 404 item_not_foundПозиция проката не найдена 409 not_enoughСвободных единиц меньше; в ответе available 402 insufficient_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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh 404 booking_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 — Успешный ответ; пример ниже 401 no_tokenНет токена в заголовке Authorization 401 invalid_tokenТокен просрочен или подделан — обновите его через /v1/auth/refresh 404 booking_not_foundБронь не найдена или не ваша 409 booking_not_activeБронь не активна 422 […] Ошибка проверки параметров или тела: detail — список ошибок
Пример ответа Копировать {"qr": "<код QR>", "items": [], "status": "empty", "waiting": 0}