Download OpenAPI specification:
API Tourvisor предоставляет возможность осуществлять поиск туров, получать горящие туры и информацию по отелям (описание отелей).
Ответы API возвращаются в формате JSON, в кодировке UTF-8 (Unicode).
Авторизация осуществляется по JWT-токену.
В API доступны следующие разделы, каждый из которых оплачивается отдельно (см.описание)
Поиск туров - основной сервис, содержит:
Описания отелей (оплачивается отдельно).
Описания номеров отелей (оплачивается отдельно).
Горящие туры (оплачивается отдельно).
Кроме ежемесячной абонентской платы за соответствующий раздел API также может взиматься оплата за превышение суточного лимита поисковых запросов. В тариф входит 3000 поисковых запросов в сутки, превышение этого количества оплачивается дополнительно. (тарификация аналогична обычному модулю поиска: тарифы)
Поисковым запросом считаются:
Все остальные типы запросов (справочники, данные тура, информация по отелю, горящие туры) отдельно не тарифицируются и в суточном лимите не учитываются.
Для защиты от возможных ошибок также предусмотрены ограничения на количество запросов в минуту.
Для справочников (а также описания отелей и номеров отелей) - 120 запросов в минуту.
Все остальные методы - 300 запросов в минуту:
Метод получения списка и идентификаторов городов вылета. Можно получить список городов вылета конкретной страны (например, все города Казахстана), либо полный список.
| departureCountryId | integer Enum: 1 2 3 4 5 99 Идентификатор страны вылета: |
[- {
- "id": 0,
- "name": "string",
- "nameGenitive": "string"
}
]Метод получения списка и идентификаторов стран. Можно получить полный список стран либо указать город вылета для получения доступных стран из этого города. Также можно задать параметр для получения только чартерных вылетов.
| departureId | integer Идентификатор города вылета |
| onlyCharter | boolean Признак получения результатов только для чартерных перелётов |
[- {
- "id": 0,
- "name": "string"
}
]Метод получения списка городов прилёта (аэропорт) для конкретного города вылета.
Данный справочник необходим для запуска поиска туров в определенный аэропорт. Например, возможно запустить поиск туров по Турции с прилётом в аэропорт города Анталья.
| departureId required | integer Идентификатор города вылета |
| onlyCharter required | boolean Default: false Признак получения результатов только для чартерных перелётов |
[- {
- "airportCode": "string",
- "countryId": 0,
- "id": 0,
- "name": "string"
}
]Метод получения курсов валют операторов на текущую дату.
| currencyId required | string Идентификатор валюты |
[- {
- "eur": 0,
- "operator": {
- "fullName": "string",
- "id": 0,
- "name": "string",
- "russianName": "string"
}, - "usd": 0
}
]Метод получения перечня услуг в отелях по группам услуг. Выдает сгруппированный список услуг отелей, по которым возможна фильтрация в поиске туров.
| countryId | integer Идентификатор страны |
| regionIds | Array of integers Идентификаторы курортов |
[- {
- "id": 0,
- "items": [
- {
- "id": 0,
- "name": "string"
}
], - "name": "string"
}
]Метод получения типов отелей (отель, апартаменты, вилла, санаторий и т.д.) по конкретной стране. Нужные типы отелей можно использовать в поиске (например, искать только по санаториям), а также получать список отелей нужного типа.
| countryId required | integer Идентификатор страны |
[- {
- "id": 0,
- "name": "string"
}
]Метод получения списка отелей по конкретной стране. Также можно задать дополнительные параметры фильтрации (курорт, категория, тип отеля и т.п.), если требуется получить список с учетом нужных параметров. В списке выдается только базовая информация (идентификатор отеля, название, курорт, рейтинг, координаты и т.п.).
| countryId required | integer Идентификатор страны |
| regionId | integer Идентификатор курорта |
| category | integer <= 5 Категория (от и выше) |
| types | Array of integers Тип отеля |
| rating | number <= 5 Рейтинг (от и выше) |
| page | integer Default: 1 Страница |
| limit | integer Default: 20 Количество элементов на странице |
[- {
- "category": 0,
- "common": {
- "latitude": 0,
- "longitude": 0
}, - "country": {
- "id": 0,
- "name": "string"
}, - "id": 0,
- "name": "string",
- "rating": 0,
- "region": {
- "countryId": 0,
- "id": 0,
- "name": "string"
}, - "subRegion": {
- "id": 0,
- "name": "string",
- "regionId": 0
}, - "type": 0
}
]Метод получения детальной информации по отелю. Выдается полное описание, фотографии, координаты и т.п. Данный метод доступен только при подключении API Описания отелей (не входит в API Поиск туров и оплачивается отдельно). Подробнее см. тарифы.
| hotelId required | integer Идентификатор отеля |
[- {
- "category": 0,
- "country": {
- "id": 0,
- "name": "string"
}, - "id": 0,
- "images": [
- "string"
], - "infrastructure": {
- "beach": "string",
- "territory": "string"
}, - "meals": {
- "description": "string",
- "list": "string"
}, - "name": "string",
- "rating": 0,
- "region": {
- "countryId": 0,
- "id": 0,
- "name": "string"
}, - "roomTypes": "string",
- "services": {
- "animation": "string",
- "available": "string",
- "child": "string",
- "free": "string",
- "inRoom": "string",
- "servicesPay": "string",
- "tags": [
- {
- "id": 0,
- "items": [
- {
- "id": 0,
- "name": "string"
}
], - "name": "string"
}
]
}, - "subRegion": {
- "id": 0,
- "name": "string",
- "regionId": 0
}, - "type": 0,
- "сommon": {
- "address": "string",
- "build": "string",
- "description": "string",
- "latitude": 0,
- "longitude": 0,
- "phone": "string",
- "place": "string",
- "repair": "string",
- "site": "string",
- "square": "string"
}
}
]Получение описаний номеров отелей по их идентификаторам (идентификатор roomId из результатов поиска).
| ids required | Array of integers Идентификаторы (не более 30) |
[- {
- "area": 0,
- "bedroomCount": 0,
- "comment": "string",
- "description": "string",
- "hasBalcony": true,
- "hasKitchen": true,
- "id": 0,
- "images": [
- "string"
], - "location": "string",
- "name": "string",
- "roomCount": 0,
- "services": "string",
- "sleepingPlaces": "string",
- "viewDescription": "string"
}
]Получение списка туроператоров. Выдает полный список активных туроператоров с кодами.
| departureId | integer Идентификатор города вылета |
| countryId | integer Идентификатор страны |
[- {
- "fullName": "string",
- "id": 0,
- "name": "string",
- "russianName": "string"
}
]Метод получения перечня курортов. Без параметров выдает полный список курортов.
| countryId | integer Идентификатор страны |
| arrivalId | integer Идентификатор города прилёта |
[- {
- "countryId": 0,
- "id": 0,
- "name": "string"
}
]Метод получения субкурортов (вложенный уровень детализации некоторых курортов). Без параметров выдается полный список субкурортов (субрегионов). В одном курорте может быть несколько субкурортов, либо для каких-то курортов может вообще не быть субкурортов.
| countryId | integer Идентификатор страны |
| regionId | integer Идентификатор курорта |
[- {
- "id": 0,
- "name": "string",
- "regionId": 0
}
]Получение списка доступных дат туров (вылетов) для конкретного города и страны. Данный список можно использовать, например, для отображения доступных дат в календарике формы поиска. Возможно отфильтровать только чартеры, а также можно задать конкретный аэропорт (например, можно получить доступные даты вылета на чартерах из Екатеринбурга в Хургаду).
| departureId required | integer Идентификатор города вылета |
| countryId required | integer Идентификатор страны |
| arrivalId | integer Идентификатор города прилёта |
| onlyCharter | boolean Признак получения результатов только для чартерных перелётов |
[- "string"
]Поисковый шлюз TourVisor позволяет создавать поисковые запросы и получать их результат в формате JSON, тем самым возможно реализовать полностью индивидуальное оформление поисковой системы и произвольную выдачу результатов пользователям.
Поиск осуществляется в асинхронном режиме и состоит из отдельных этапов:
Схема работы может зависеть от сервиса, который Вы реализуете.
Если Вы разрабатываете форму поиска на свой сайт (в индивидуальном дизайне), либо мобильное приложение, то мы рекомендуем примерно следующую схему работы:
Если Вы разрабатываете сервис отслеживания цен, либо любой сервис где не требуется онлайн отображать изменения пользователю, то Вы можете дождаться полного окончания поиска (через метод проверки статуса) и только после окончания получить полные результаты поиска.
Важно!
Важно понимать, что туроператоры выдают за один запрос строго ограниченное количество туров (не отелей). Это количество варьируется в зависимости от туроператора (примерно от 100 до 400 туров). Невозможно за один запрос получить "всю базу" туров у туроператора.
Если Вам недостаточно туров, которые Вы получили за первый запрос, то можно воспользоваться методом продолжения поиска.
В этом случае осуществляются дополнительные запросы к туроператорам и результаты поиска дополняются (туров и отелей становится больше).
Однако каждое такое продолжение поиска учитывается как отдельный поисковый запрос (в суточном лимите), т.к. осуществляются фактические запросы в системы туроператоров.
Запуск поиска туров. Сам поиск осуществляется в асинхронном (фоновом) режиме.
Часть параметров передается кодами (страна, город вылета и т.п.). Данные коды можно получить из соответствующих справочников (см. группу методов "Справочники").
На выходе - идентификатор поискового запроса, по которому можно отследить статус и получить результаты поиска.
| departureId required | integer Идентификатор города вылета |
| countryId required | integer Идентификатор страны |
| dateFrom required | string Example: dateFrom=2000-12-31 Дата вылета начальная |
| dateTo required | string Example: dateTo=2000-12-31 Дата вылета конечная (диапазон дат не более 21 дня) |
| nightsFrom required | integer [ 1 .. 28 ] Количество ночей от |
| nightsTo required | integer [ 1 .. 28 ] Количество ночей до (диапазон ночей не более 10) |
| adults required | integer [ 1 .. 6 ] Количество взрослых |
| childs | Array of integers [ 0 .. 17 ] Возраст детей (количество детей не более 3-х) |
| meal | integer Минимальный тип питания |
| hotelCategory | integer <= 5 Минимальная категория отеля |
| hotelTypes | Array of integers Тип отеля |
| hotelIds | Array of integers Идентификаторы отелей (количество отелей не более 30) |
| hotelServices | Array of integers Услуги в отеле |
| hotelRating | integer Enum: 0 2 3 4 5 Рейтинг отеля:0 - любой |
| arrivalId | integer Идентификатор города прилёта |
| regionIds | Array of integers Идентификаторы курортов |
| subregionIds | Array of integers Идентификаторы субкурортов |
| operatorIds | Array of integers Идентификаторы туроператоров |
| priceFrom | integer Цена от |
| priceTo | integer Цена до |
| currency required | string ISO-код валюты (поиск в USD/EUR не поддерживается - для поиска по этим валютам используются у.е. (код CU), валюта ответа при этом зависит от страны отдыха) |
| onlyCharter required | boolean Default: false Признак получения результатов только для чартерных перелётов |
| onlyDirect | boolean Default: false Признак получения результатов только с прямыми перелётами |
{- "searchId": 0
}Метод получения результатов поиска.
Если поиск еще не окончен, то выдаются результаты, найденные на текущий момент.
| searchId required | integer Идентификатор поискового запроса |
| limit required | integer Default: 25 Количество получаемых отелей с турами |
[- {
- "category": 0,
- "country": {
- "id": 0,
- "name": "string"
}, - "currency": "string",
- "hasDescription": true,
- "hasPictures": true,
- "hotelDescription": "string",
- "hotelDescriptionLink": "string",
- "id": 0,
- "latitude": 0,
- "longitude": 0,
- "name": "string",
- "picturelink": "string",
- "price": 0,
- "rating": 0,
- "region": {
- "countryId": 0,
- "id": 0,
- "name": "string"
}, - "seaDistance": 0,
- "subRegion": {
- "id": 0,
- "name": "string",
- "regionId": 0
}, - "tours": [
- {
- "adults": 0,
- "childs": 0,
- "currency": "string",
- "date": "string",
- "flightNights": 0,
- "flightPlace": 0,
- "fuelCharge": 0,
- "hotelPlace": 0,
- "id": "string",
- "isCharter": true,
- "isPromo": true,
- "meal": {
- "fullName": "string",
- "fullRussianName": "string",
- "id": 0,
- "name": "string",
- "russianName": "string"
}, - "name": "string",
- "nights": 0,
- "operator": {
- "fullName": "string",
- "id": 0,
- "name": "string",
- "russianName": "string"
}, - "placement": "string",
- "price": 0,
- "roomId": 0,
- "roomType": "string"
}
]
}
]Метод продолжения поиска.
Используется для получения дополнительных результатов поиска в случае, если туров, найденных за первый (основной) запрос недостаточно. Продолжение поиска идет по идентификатору поискового запроса, который был получен при старте поиска. Можно вызвать несколько раз. При этом каждый раз делаются запросы к операторам, результаты поиска дополняются.
Метод "результаты поискового запроса" выдает полные результаты поиска с учетом всех продолжений (накопительно).
| searchId required | integer Идентификатор поискового запроса |
{- "requestCount": 0
}Метод получения статуса выполнения поискового запроса.
| searchId required | integer Идентификатор поискового запроса |
| operatorStatus required | boolean Default: false Признак отображения расширенного статуса по операторам |
{- "minPrice": 0,
- "operatorStatus": [
- {
- "minPrice": 0,
- "operator": {
- "fullName": "string",
- "id": 0,
- "name": "string",
- "russianName": "string"
}, - "status": "string"
}
], - "progress": 0,
- "searchId": 0,
- "status": "string",
- "timePassed": 0
}Получение сведений по туру по его идентификатору. Используется, например, для отображения карточки тура.
| tourId required | integer Идентификатор тура |
| currency required | string ISO-код валюты |
{- "adults": 0,
- "childs": 0,
- "currency": "string",
- "date": "string",
- "departure": {
- "id": 0,
- "name": "string",
- "nameGenitive": "string"
}, - "flightNights": 0,
- "flightPlace": 0,
- "fuelCharge": 0,
- "hotel": {
- "category": 0,
- "common": {
- "latitude": 0,
- "longitude": 0
}, - "country": {
- "id": 0,
- "name": "string"
}, - "id": 0,
- "name": "string",
- "rating": 0,
- "region": {
- "countryId": 0,
- "id": 0,
- "name": "string"
}, - "subRegion": {
- "id": 0,
- "name": "string",
- "regionId": 0
}, - "type": 0
}, - "hotelDescription": "string",
- "hotelPlace": 0,
- "id": "string",
- "isCharter": true,
- "isPromo": true,
- "meal": {
- "fullName": "string",
- "fullRussianName": "string",
- "id": 0,
- "name": "string",
- "russianName": "string"
}, - "name": "string",
- "nights": 0,
- "operator": {
- "fullName": "string",
- "id": 0,
- "name": "string",
- "russianName": "string"
}, - "operatorLink": "string",
- "picture": "string",
- "placement": "string",
- "price": 0,
- "roomId": 0,
- "roomType": "string"
}Метод получения сведений по авиарейсам тура и актуальным ценам тура.
Метод входит в тарификации на число запросов в сутки.
| tourId required | integer Идентификатор тура |
| currency required | string ISO-код валюты |
{- "error": {
- "code": 0,
- "reason": "string"
}, - "flights": [
- {
- "backward": [
- {
- "arrival": {
- "date": "string",
- "port": {
- "id": "string",
- "name": "string",
- "shortName": "string",
- "timeZone": "string"
}, - "time": "string"
}, - "baggage": 0,
- "carryOn": "string",
- "class": "string",
- "company": {
- "id": "string",
- "logo": "string",
- "name": "string",
- "thumb": "string"
}, - "departure": {
- "date": "string",
- "port": {
- "id": "string",
- "name": "string",
- "shortName": "string",
- "timeZone": "string"
}, - "time": "string"
}, - "fuelCharges": [
- {
- "amount": 0,
- "currency": "string",
- "name": "string"
}
], - "noPlaces": true,
- "number": "string",
- "onDemand": true,
- "plane": "string"
}
], - "dateBackward": "string",
- "dateForward": "string",
- "forward": [
- {
- "arrival": {
- "date": "string",
- "port": {
- "id": "string",
- "name": "string",
- "shortName": "string",
- "timeZone": "string"
}, - "time": "string"
}, - "baggage": 0,
- "carryOn": "string",
- "class": "string",
- "company": {
- "id": "string",
- "logo": "string",
- "name": "string",
- "thumb": "string"
}, - "departure": {
- "date": "string",
- "port": {
- "id": "string",
- "name": "string",
- "shortName": "string",
- "timeZone": "string"
}, - "time": "string"
}, - "fuelCharges": [
- {
- "amount": 0,
- "currency": "string",
- "name": "string"
}
], - "noPlaces": true,
- "number": "string",
- "onDemand": true,
- "plane": "string"
}
], - "fuelCharge": {
- "currency": "string",
- "value": 0
}, - "isDefault": true,
- "price": {
- "currency": "string",
- "value": 0
}
}
], - "info": {
- "flags": {
- "noFlight": true,
- "noInsurance": true,
- "noMeal": true,
- "noTransfer": true
}, - "surcharges": [
- {
- "amount": 0,
- "currency": "string",
- "name": "string"
}
]
}
}Метод получения горящих туров.
| departureId required | integer Идентификатор города вылета |
| countryIds | Array of integers Идентификаторы стран |
| dateFrom | string Example: dateFrom=2000-12-31 Начало диапазона дат, на которые выдаются горящие туры |
| dateTo | string Example: dateTo=2000-12-31 Конец диапазона дат, на которые выдаются горящие туры (диапазон дат не более 21 дня) |
| meal | integer Минимальный тип питания |
| hotelCategory | integer <= 5 Минимальная категория отеля |
| noVisa | boolean Признак получения туров по странам без виз (только для России) |
| regionIds | Array of integers Идентификаторы курортов |
| operatorIds | Array of integers Идентификаторы операторов |
| currency required | string ISO-код валюты |
| onlyCharter required | boolean Default: false Признак получения результатов только для чартерных перелётов |
| limit required | integer [ 1 .. 200 ] Количество получаемых горящих туров (от 1 до 200) |
[- {
- "country": {
- "id": 0,
- "name": "string"
}, - "currency": "string",
- "date": "string",
- "departure": {
- "id": 0,
- "name": "string",
- "nameGenitive": "string"
}, - "hotel": {
- "category": 0,
- "country": {
- "id": 0,
- "name": "string"
}, - "hotelDescriptionLink": "string",
- "id": 0,
- "latitude": 0,
- "longitude": 0,
- "name": "string",
- "picturelink": "string",
- "rating": 0,
- "region": {
- "countryId": 0,
- "id": 0,
- "name": "string"
}, - "subRegion": {
- "id": 0,
- "name": "string",
- "regionId": 0
}, - "type": 0
}, - "meal": {
- "fullName": "string",
- "fullRussianName": "string",
- "id": 0,
- "name": "string",
- "russianName": "string"
}, - "nights": 0,
- "operator": {
- "fullName": "string",
- "id": 0,
- "name": "string",
- "russianName": "string"
}, - "price": 0,
- "priceOld": 0,
- "tourId": "string"
}
]