Групповое бронирование — это резервирование двух и более номеров в рамках одного заказа.
Создание групповых бронирований через TL: Partner API для партнеров (туроператоры, OTA (онлайн-турагентство, далее — OTA)):
Для средств размещения:
Групповые бронирования создаются с помощью существующих API методов платформы TravelLine.
Чтобы начать работу, необходимо получить дополнительные права доступа. Они выдаются после успешного тестирования и сертификации. Отправьте запрос для получение прав на электронную почту connectivity@travelline.ru.
Методы:
● POST /v1/properties/room-stays/search — агрегационный поиск.
● GET /v1/properties/{propertyId}/room-stays — поиск по одному средству размещения.
Как работать с методами, читайте в статье «Search API — поиск доступных размещений».
Канал продаж самостоятельно комбинирует проживания на своей стороне и отображает их клиенту.
Логика работы:
Канал направляет несколько запросов на агрегационный поиск или поиск по одному средству размещения в зависимости от состава группового бронирования. Например, первый запрос на 2 взрослых, второй запрос на 1 взрослого + 1 ребенка, и самостоятельно объединяет их в своем интерфейсе. Если состав гостей во всех номерах идентичен, направляется только один запрос.
Каналу продаж необходимо учитывать остаток номеров. Если доступность категории номера равна 1, этот номер нельзя предлагать другой группе гостей в рамках одного заказа.
Метод POST /v1/bookings/verify — проверка возможности создания бронирования
Как работать с методами, читайте в статье «Reservation API — бронирование».
Логика работы:
Платформа TravelLine поддерживает выбор нескольких проживаний (room-stay) с разными тарифами и категориями номеров в одном заказе.
В ответе на запрос верификации будет выдан уникальный токен (createBookingToken), который объединит все номера. Платформа TravelLine позволяет указать одного заказчика для одного бронирования и разных гостей для каждого конкретного номера. Также возможно добавление раннего заезда и позднего выезда и дополнительных услуг индивидуально для каждого номера.
Если на этом этапе один из вариантов проживания станет недоступен, платформа TravelLine в ответе на верификацию вернет альтернативное предложение (alternative Booking).
Метод POST /v1/bookings — создание бронирования.
Как работать с методами, читайте в статье «Reservation API — бронирование».
Логика работы:
Применяется принцип «все или ничего». Если хотя бы один номер из группы не удалось забронировать на стороне средства размещения, групповое бронирование будет недоступно.
Методы:
● GET /v1/bookings/{number}/calculate-cancellation-penalty — расчет текущего размера штрафа.
● POST /v1/bookings/{number}/cancel — отмена бронирования.
Как работать с методами, читайте в статье «Reservation API — бронирование».
Логика работы:
Платформа TravelLine позволяет аннулировать все номера в группе одним действием.
Если в номерах используются разные тарифы, метод GET/v1/bookings/{number}/calculate-cancellation-penalty рассчитает суммарный штраф по всем номерам.
Отмена выполняется методом POST /v1/bookings/{number}/cancel с указанием общего полученного штрафа.
Методы:
Как работать с методами, читайте в статье «Reservation API — бронирование».
Доступные модификации в групповом бронировании:
Особенности:
Пример запроса для проверки возможности создания бронирования, с указанием нескольких проживаний (room-stay):
{
"booking": {
"propertyId": "7291",
"roomStays": [
{
"stayDates": { "arrivalDateTime": "2026-04-09T13:00", "departureDateTime": "2026-04-11T11:00" },
"ratePlan": { "id": "526233" },
"roomType": { "id": "340935" },
"guests": [{ "firstName": "Иван", "lastName": "Иванов" }],
"guestCount": { "adultCount": 2 },
"checksum": "base64_hash_1..."
},
{
"stayDates": { "arrivalDateTime": "2026-04-09T13:00", "departureDateTime": "2026-04-11T10:00" },
"ratePlan": { "id": "457584" },
"roomType": { "id": "340936" },
"guests": [{ "firstName": "Мария", "lastName": "Иванова" }],
"guestCount": { "adultCount": 1, "childAges": [7] },
"checksum": "base64_hash_2..."
}
],
"customer": {
"firstName": "Иван",
"lastName": "Иванов",
"contacts": {
"phones": [{ "phoneNumber": "+7 900 000 0000" }],
"emails": [{ "emailAddress": "test@example.com" }]
}
}
}
}
При чтении данных группового бронирования каждому объекту в массиве roomStays присваивается уникальный параметр roomStayIndex. Этот индекс является ключевым идентификатором для редактирования конкретного проживания в рамках группового бронирования.
Пример ответа на запрос чтения бронирования (GET /v1/bookings/{number}):
{
"booking": {
"number": "20260409-7291-23379645",
"status": "Confirmed",
"total": { "priceBeforeTax": 2120, "currencyCode": "RUB" },
"cancellationPolicy": {
"freeCancellationPossible": false,
"penaltyAmount": 1010},
"roomStays": [
{"roomStayIndex": 1,
"stayDates": { "arrivalDateTime": "2026-04-09T13:00", "departureDateTime": "2026-04-11T11:00" },
"total": { "priceBeforeTax": 100 },
"ratePlan": { "id": "526233", "name": "Тест с НДС 0%" },
"roomType": { "id": "407809", "name": "люкс" },
"guests": [{ "firstName": "Иван", "lastName": "Иванов" }],
"checksum": "eyJDaGVja3..."
},
{
"roomStayIndex": 2,
"stayDates": { "arrivalDateTime": "2026-04-09T13:00", "departureDateTime": "2026-04-11T11:00" },
"total": { "priceBeforeTax": 2020 },
"ratePlan": { "id": "429622", "name": "Тариф Платёжки" },
"roomType": { "id": "407809", "name": "люкс" },
"guestCount": { "adultCount": 1, "childAges": [7] },
"checksum": "eyJDaGVja3..."}],
"customer": {
"firstName": "Иван",
"lastName": "Иванов",
"contacts": {
"phones": [{"phoneNumber": "+7 900 000 0000"}],
"emails": [{"emailAddress": "test@example.com"}]
}
},
"prepayment": { "paymentType": "PrePay", "prepaidSum": 2120 }
}
}
1. С помощью метода GET /v1/bookings/{number} получите актуальное состояние бронирования.
2. Выполните запрос к методу POST /v1/bookings/{number}/verify:
3. Выполните финальный запрос POST /v1/bookings/{number}/modify. Используйте данные из верифицированного ответа из пункта 2.
Обратите внимание. Обязательно передайте новый параметр checksum, полученный на этапе проверки возможности создания бронирования, чтобы подтвердить согласие с изменением стоимости или условий.
При выполнении запросов на проверку возможности создания бронирования и модификацию исключите соответствующий объект roomStay из массива roomStays.
Система автоматически пересчитает общую стоимость бронирования без учета удаленного номера.
Обратите внимание. Частичная отмена возможна только для номеров с бесплатной аннуляцией.