Синхронизация расписания и бронирований с KvestCity
Чтобы расписание ваших квестов было на KvestCity, а клиенты бронировали игры прямо у нас, подготовьте на своём сайте две ссылки для каждого квеста: одну — для расписания, другую — для приёма броней.
1Ссылка на расписание
На неё мы отправляем GET-запрос и в ответ ждём расписание в JSON минимум на 2 недели вперёд — список слотов.
Поля слота
| Поле | Тип | Что передавать |
|---|---|---|
| date* | строка | Дата игры в формате ГГГГ-ММ-ДД |
| time* | строка | Время начала, ЧЧ:ММ, 24 часа |
| is_free* | true / false | true — время можно забронировать. Для прошедшего времени — false |
| price* | число | Цена в рублях, целым числом |
| discount_price | число | Цена со скидкой в рублях |
| price_groups | список | Цены для разного числа игроков: пары persons и price |
| ваши поля | любые | Например, your_slot_id. Вернём их вам при бронировании |
* — обязательные поля
Примеры ответа
У каждого времени одна цена.
[
{
"date": "2026-10-09",
"time": "18:30",
"is_free": true,
"price": 3000,
"your_slot_id": 124
},
{
"date": "2026-10-09",
"time": "20:00",
"is_free": false,
"price": 3500,
"your_slot_id": 125
}
]
Доплата начинается с 6-го игрока.
[
{
"date": "2026-10-09",
"time": "18:30",
"is_free": true,
"price": 3000,
"price_groups": [{"persons": 2, "price": 3000}, {"persons": 3, "price": 3000}, {"persons": 4, "price": 3000}, {"persons": 5, "price": 3000}, {"persons": 6, "price": 3500}],
"your_slot_id": 124
},
{
"date": "2026-10-09",
"time": "20:00",
"is_free": false,
"price": 3500,
"price_groups": [{"persons": 2, "price": 3500}, {"persons": 3, "price": 3500}, {"persons": 4, "price": 3500}, {"persons": 5, "price": 3500}, {"persons": 6, "price": 4000}],
"your_slot_id": 125
}
]
Рядом с обычной ценой — цена со скидкой.
[
{
"date": "2026-10-09",
"time": "18:30",
"is_free": true,
"price": 3000,
"discount_price": 2500,
"your_slot_id": 124
},
{
"date": "2026-10-09",
"time": "20:00",
"is_free": false,
"price": 3500,
"discount_price": 3000,
"your_slot_id": 125
}
]
Скидка уже учтена в price_groups.
[
{
"date": "2026-10-09",
"time": "18:30",
"is_free": true,
"price": 3000,
"discount_price": 2500,
"price_groups": [{"persons": 2, "price": 2500}, {"persons": 3, "price": 2500}, {"persons": 4, "price": 2500}, {"persons": 5, "price": 2500}, {"persons": 6, "price": 3000}],
"your_slot_id": 124
},
{
"date": "2026-10-09",
"time": "20:00",
"is_free": false,
"price": 3500,
"discount_price": 3000,
"price_groups": [{"persons": 2, "price": 3000}, {"persons": 3, "price": 3000}, {"persons": 4, "price": 3000}, {"persons": 5, "price": 3000}, {"persons": 6, "price": 3500}],
"your_slot_id": 125
}
]
2Ссылка для бронирования
На неё мы отправляем POST-запрос, когда клиент бронирует игру.
Какие поля придут
| Поле | Что приходит |
|---|---|
| first_name | Имя клиента |
| family_name | Фамилия клиента |
| phone | Телефон клиента |
| Email клиента | |
| comment | Комментарий клиента, может быть пустым |
| source | Откуда бронь, всегда topkvestov.ru |
| date | Дата игры, ГГГГ-ММ-ДД |
| time | Время игры, ЧЧ:ММ |
| price | Цена игры в рублях |
| players | Число игроков, если клиент его указал |
| tariff | Выбранный тариф, если у квеста есть тарифы |
| ваши поля | Все дополнительные поля из слота расписания |
Поля приходят обычной формой (application/x-www-form-urlencoded), по договорённости — в JSON. Ответ ждём до 15 секунд.
Что ответить
Бронь считается принятой, только если в ответе "success": true. Если время занято — false и причина в message.
Бронь принята
{
"success": true
}Время уже занято
{
"success": false,
"message": "Указанное время занято"
}Пример запроса
{
"first_name": "Иван",
"family_name": "Иванов",
"phone": "+7 (111) 111-11-11",
"email": "test@mail.ru",
"comment": "Комментарий",
"source": "topkvestov.ru",
"date": "2026-10-09",
"time": "18:30",
"price": 3000,
"players": 4,
"your_slot_id": 124
}