API поиска авиабилетов: сложные маршруты и поиск в реальном времени

API поиска билетов позволяет получать результаты запросов в режиме реального времени, а также строить сложные маршруты.

Уважаемые партнеры! Обратите внимание, что по умолчанию установлено ограничение: 200 запросов в час с одного IP адреса. Если требуется обрабатывать больше запросов, напишите на support@travelpayouts.com.

Условия использования API поиска авиабилетов

  1. Каждый поисковый запрос должен быть инициирован пользователем, результат запроса должен быть показан пользователю в полном объёме. В результатах каждого запроса должна быть кнопка «купить» рядом с каждым найденным вариантом.
  2. Ссылка для перехода на агентство может быть сгенерирована ТОЛЬКО после нажатия на кнопку «Купить» пользователем. Автоматическая генерация данной ссылки запрещена.
  3. Коэффициент конверсии поисков в клики по кнопке «Купить» не должен быть ниже 9%. Конверсия кликнувших «Купить» в покупателей — не ниже 5%.
  4. Ajax-запросы к API не работают, так как в открытом виде передаётся токен доступа. Необходимо делать запросы к API с сервера, на клиенте сделать это не получится.

Условия получения доступа

Для получения доступа к API поиска билетов вам нужно быть зарегистрированным в партнерской программе Travelpayouts и отпривть заявку на support@travelpayouts.com с указанием следующей информации:

  • URL вашего проекта
  • Как именно будет использоваться API поиска?
  • Почему вам не подходят стандартные методы интеграции (поисковые формы, White Label, API доступа к данным)?
  • Предоставить прототипы/дизайны будущего проекта или существующий проект, где планируется использовать функцию поиска авиабилетов и описание самого проекта.

Туда-обратно (round trip)

Инициализация поиска

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

  • marker — партнерский маркер — это пять уникальных цифр, по которым мы понимаем от какого партнера пришел пользователь (находится в личном кабинете партнера);

  • host — хост автора запроса (необходимо заменить на адрес вашего сайта или название приложения, на котором используется API);
  • user_ip — ip адрес пользователя;
  • locale — язык, на котором отобразится результат запроса (от локали также зависит, по каким агентствам осуществляется поиск). Доступные языки:
    • en — английский;
    • ru — русский;
    • de — немецкий;
    • es — испанский;
    • fr — французский;
    • it — итальянский;
    • pl — польский;
    • th — таиландский.
  • trip_class — класс перелета (Y — эконом, C — бизнес);
  • passengers — информация о пассажирах;
    • adults — количество взрослых;
    • children — количество детей (возраст от 2 до 12 лет);
    • infants — количество младенцев (возраст до 2 лет);
  • segments
    • origin — IATA-код пункта отправления. IATA код указывается буквами верхнего регистра, например MOW;
    • destination — IATA-пункта назначения. IATA код указывается буквами верхнего регистра, например MOW;
    • date — дата отправления.
  • know_english — параметр, отвечающий за наличие англоязычных гейтов в выдаче. Принимаемые значения: true (в случае, если надо отобразить пользователю англоязычные гейты), false.
  • currency — валюта, в которой отобразится цена билета, после перехода на сайт агентства (при условии, что агентство поддерживает данную валюту);
  • signature — md5-подпись запроса, которая получается из сгруппированного в алфавитном порядке списка параметров запроса. Узнайте, как сформировать signature.

Чтобы получить варианты билетов «Туда-обратно», необходимо добавить следующий код в body запроса:

{
  "signature":"55b47124341b5bed8627499b0eb5de80",
  "marker":"ВашМаркер",
  "host":"%server_host%",
  "user_ip":"%user_ip_address%",
  "locale":"ru",
  "trip_class":"Y",
  "passengers":{
    "adults":"1",
    "children":"0",
    "infants":"0"
  },
  "segments":[
  {
    "origin":"NYC",
    "destination":"LAX",
    "date":"2017-11-25"
  },
  {
    "origin":"LAX",
    "destination":"NYC",
    "date":"2017-12-18"
  }
  ]
}

Для получения данных запустите код инициализации поиска (обратите внимание, что в примере указаны параметры marker, host, user_ip, которые необходимо заменить на ваши, описание параметров см. выше):

curl -v -X POST -d '{"signature":"deb5b02159898a6ab6f120624fa2f72c","marker":"ВставьтеСюдаВашМаркер","host":"beta.aviasales.ru","user_ip":"127.0.0.1","locale":"ru","trip_class":"Y","passengers":{"adults":1,"children":0,"infants":0},"segments":[{"origin":"NYC","destination":"LAX","date":"2017-11-25"},{"origin":"LAX","destination":"NYC","date":"2017-12-18"}]}' -H 'Content-type:application/json' http://api.travelpayouts.com/v1/flight_search

В результате будет получен ответ в формате JSON. Ответ содержит следующие параметры:

  • locale — локаль, на языке которой отображается результат поиска;
  • search_id — уникальный идентификатор поиска, используется для запроса результатов поиска;
  • geoip_city — geoip города, из которого сделан запрос;
  • trip_class — класс перелета;
  • affiliate — id партнера;
  • marker — маркер, с которым был сделан поиск;
  • user_ip — ip адрес пользователя;
  • gates_count — общее кол-во агентств;
  • segments — список составляющих перелета:
    • date — дата вылета;
    • origin — IATA-код пункта отправления;
    • destination — IATA-пункта назначения;
  • meta — техническая информация;
    • uuid — уникальный идентификатор запроса;
  • passengers — информация о пассажирах:
    • adults — количество взрослых;
    • infants — количество младенцев;
    • children — количество детей;
  • host — хост откуда был получен запрос;
  • currency_rates — курс валют по отношению к рублю;
  • geoip_country — geoip страны, из которого сделан запрос;
  • banner_info — служебная информация (просто игнорируйте данный блок);
  • preroll_question — блок с вопросами, которые отображаются при поиске на сайте aviasales (просто игнорируйте данный блок).

Получение результатов поиска

В теле ответа содержится параметр search_id, который необходимо вставить в URL:

http://api.travelpayouts.com/v1/flight_search_results?uuid=%search_uuid%

И отправить запрос на сервер за результатами поиска:

curl -v -H 'Accept-Encoding:gzip,deflate,sdch' http://api.travelpayouts.com/v1/flight_search_results?uuid=ebe4fa71-bc07-40df-ae4e-4b72116583da --compressed

где «ebe4fa71-bc07-40df-ae4e-4b72116583da» — это и есть search_id.

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

Запрос необходимо повторять пока вы не получите ассоциативный массив с одним элементом search_id. Периодичность отправки запросов никак не ограничена.

Обратите внимание! На сбор данных нашим сервером требуется время (от 30 до 60 секунд). Вы можете сделать задержку после получения параметра search_id и уведомить пользователя, что идет загрузка — так сделано на сайте aviasales.ru. Или выводить данные на странице, по мере их получения от нас.

Билеты в одну сторону

Инициализация поиска

Поиск билетов в одну сторону происходит по аналогичной схеме с поиском «Туда-обратно». Единственное отличие — это содержимое JSON-запроса. Для инициализации поиска необходимо поместить следующий JSON в body запроса:

{
    "marker": "ВставьтеСюдаВашМаркер",
    "host": "beta.aviasales.ru",
    "user_ip": "127.0.0.1",
    "locale": "ru",
    "trip_class": "Y",
    "passengers": 
        "adults": 1,
        "children": 0,
        "infants": 0
    },
    "segments": [
    {
        "origin": "MOW",
        "destination": "LED",
        "date": "2017-12-18"
    }]
}

Инициируйте поиск, используя приведенный выше запрос:

curl -v -X POST -d '{"signature":"2a3e1bda117d113569bb6f8b60dba075","marker":"ВставьтеСюдаВашМаркер","host":"beta.aviasales.ru","user_ip":"127.0.0.1","locale":"ru","trip_class":"Y","passengers":{"adults":1,"children":0,"infants":0},"segments":[{"origin":"MOW","destination":"LED","date":"2017-12-18"}]}' -H 'Content-type:application/json' http://api.travelpayouts.com/v1/flight_search

Получение результатов поиска

В теле ответа содержится параметр search_id, который нужно поместить в URL:

http://api.travelpayouts.com/v1/flight_search_results?uuid=%search_id%

После чего отправить запрос на сервер за результатами поиска:

curl -v -H 'Accept-Encoding:gzip,deflate,sdch' http://api.travelpayouts.com/v1/flight_search_results?uuid=%search_id% --compressed

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

Запрос необходимо повторять пока вы не получите ассоциативный массив с одним элементом search_id. Периодичность отправки запросов никак не ограничена.

Обратите внимание! На сбор данных нашим сервером требуется время (от 30 до 60 секунд). Вы можете сделать задержку после получения параметра search_id и уведомить пользователя, что идет загрузка — так сделано на сайте aviasales.ru. Или выводить данные на странице, по мере их получения от нас.

Составной маршрут

Инициализация поиска

Составные маршруты — это маршруты с несколькими последовательными перелетами из одного города в другой. Например, Москва — Санкт-Петербург — Берлин — Лондон.

Для инициализации поиска необходимо поместить данный JSON в body запроса:

{
    "signature":"64dd4ff2f8a6f690b69d6a72429bf827",
    "marker":"ВставьтеСюдаВашМаркер",
    "host":"beta.aviasales.ru",
    "user_ip":"127.0.0.1",
    "locale":"ru",
    "trip_class":"Y",
    "passengers":{
        "adults":1,
        "children":0,
        "infants":0
    },
    "segments":[
    {
        "origin":"MOW",
        "destination":"LED",
        "date":"2017-12-18"
    },
    {
        "origin":"LED",
        "destination":"BER",
        "date":"2017-12-25"
    },
    {
        "origin":"BER",
        "destination":"LON",
        "date":"2017-01-05"
    }]
}

После чего инициируйте поиск:

curl -v -X POST -d '{"signature":"08caa94413dc805880f835ba9d8ba98f","marker":"ВставьтеСюдаВашМаркер","host":"beta.aviasales.ru","user_ip":"127.0.0.1","locale":"ru","trip_class":"Y","passengers":{"adults":1,"children":0,"infants":0},"segments":[{"origin":"MOW","destination":"LED","date":"2017-11-18"},{"origin":"LED","destination":"BER","date":"2017-12-25"},{"origin":"BER","destination":"LON","date":"2017-01-05"}]}' -H 'Content-type:application/json' http://api.travelpayouts.com/v1/flight_search

Получение результатов поиска

В теле ответа содержится параметр search_id. Поместите его в URL:

http://api.travelpayouts.com/v1/flight_search_results?uuid=%search_id%

И отправьте запрос на сервер за результатами поиска:

curl -v -H 'Accept-Encoding:gzip,deflate,sdch' http://api.travelpayouts.com/v1/flight_search_results?uuid=%search_id% --compressed

Запрос необходимо повторять пока вы не получите ассоциативный массив с одним элементом search_id. Периодичность отправки запросов никак не ограничена.

Обратите внимание! На сбор данных нашим сервером требуется время (от 30 до 60 секунд). Вы можете сделать задержку после получения параметра search_id и уведомить пользователя, что идет загрузка — так сделано на сайте aviasales.ru. Или выводить данные на странице, по мере их получения от нас.

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

Обратите внимание! Ссылка на результаты поиска действует 15 минут. По истечению этого времени поисковый запрос нужно отправлять заново.

[{
    "segments":[{
        "destination_country":"RU",
        "original_destination":"LED",
        "origin":"MOW",
        "origin_country":"RU",
        "original_origin":"MOW",
        "date":"2017-11-25",
        "destination":"LED"
    },
    {
        "destination_country":"RU",
        "original_destination":"MOW",
        "origin":"LED",
        "origin_country":"RU",
        "original_origin":"LED",
        "date":"2017-12-18",
        "destination":"MOW"
    }],
    "banner_info":{
    },
    "internal":false,
    "airports":{
        "LED":{
            "name":"Пулково",
            "time_zone":"Europe/Moscow",
            "country":"Россия",
            "rates":"259",
            "city":"Санкт-Петербург"
        },
        "DME":{
            "name":"Домодедово",
            "time_zone":"Europe/Moscow",
            "country":"Россия",
            "rates":"392",
            "city":"Москва"
        },
        "SVO":{
            "rates":"307",
            "country":"Россия",
            "name":"Шереметьево",
            "average_rate":"3.63",
            "city":"Москва",
            "time_zone":"Europe/Moscow"
        },
        "VKO":{
            "name":"Внуково",
            "time_zone":"Europe/Moscow",
            "country":"Россия",
            "rates":"211",
            "city":"Москва"
        }},
        "gates_info":{
            "20":{
                "average_rate":4.43,
                "rates":2967,
                "currency_code":"rub",
                "is_airline":false,
                "productivity":16.9991,
                "label":"OneTwoTrip",
                "airline_iatas":{
                },
                "payment_methods":[
                    "card"
                ],
                "mobile_version":false
             }},
        "city_distance":634,
        "meta":{
            "uuid":"c9c6de8c-3fb4-404e-b88c-e9e0a605f183",
            "gates":[{
                "duration":22.402996063232422,
                "id":20,
                "count":1456,
                "good_count":1456
             }]},
        "airlines":{
        "SU":{
           "average_rate":"4.01",
           "rates":"2362",
           "alliance_name":"SkyTeam",
           "name":"Аэрофлот",
           "id":10
        },
        "UN":{
           "average_rate":"3.98",
           "rates":"2639",
           "alliance_name":null,
           "name":"Трансаэро",
           "id":492
        },
        "S7":{
           "average_rate":"3.95",
           "rates":"2430",
           "alliance_name":"OneWorld",
           "name":"S7",
           "id":444
        },
        "UT":{
           "rates":"1843",
           "alliance_name":null,
           "name":"ЮТэйр",
           "id":507
        },
        "U6":{
           "average_rate":"3.62",
           "rates":"1158",
           "alliance_name":null,
           "name":"Уральские авиалинии",
           "id":503
        }},
      "filters_boundary":{
         "arrival_datetime_0":{
            "min":1418869200,
            "max":1418950500
         },
      "arrival_datetime_1":{
         "min":1419486600,
         "max":1419554400
      },
      "flights_duration":{
         "min":70,
         "max":120
      },
      "stops_count":{
         "0":4431
      },
      "departure_time_1":{
         "min":"04:30",
         "max":"22:55"
      },
      "departure_time_0":{
         "min":"00:50",
         "max":"23:30"
      },
      "departure_minutes_0":{
         "min":50,
         "max":1410
      },
      "departure_minutes_1":{
         "min":270,
         "max":1375
      },
      "price":{
         "min":4431,
         "max":8689
      }},
   "flight_numbers":[
   [
      "SU30",
      "SU32"
   ],
   [
      "SU31",
      "SU33"
   ]],
   "affiliate_has_sales":false,
   "proposals":[{
      "terms":{
         "20":{
         "url":2000000,
         "unified_price":5867,
         "price":5867,
         "currency":"rub"
      }},
   "sign":"7573ea707c2ff84b243241961412ed34",
   "segment":[{
      "flight":[{
         "arrival":"LED",
         "aircraft":"AIRBUS A320",
         "local_departure_timestamp":1434588600,          "operating_carrier":"UT",          "duration":85,
         "local_arrival_timestamp":1432549200,          "departure_date":"2016-11-25",          "departure_time":"11:00",          "arrival_date":"2016-11-25",          "arrival_time":"12:25",          "delay":0,          "departure":"VKO",          "number":369    }]},    {       "flight":[{          "arrival":"DME",
         "aircraft":"AIRBUS A320",
         "local_departure_timestamp":1434588600,          "operating_carrier":"SU",          "duration":90,
         "local_arrival_timestamp":1432549200,          "departure_date":"2016-12-18",          "departure_time":"10:05",          "arrival_date":"2016-12-18",          "arrival_time":"11:35",          "delay":0,          "departure":"LED",          "number":6131    }]}]},    {       "terms":{          "20":{             "url":2000001,             "unified_price":6953,             "price":6953,             "currency":"rub"    }]}],       "validating_carrier": "SU"    }],    "_ga":null,    "signature":"4bb635b9353a1e933907d41841e23414",    "search_id":"c9c6de8c-3fb4-404e-b88c-e9e0a605f183"    },    {    "search_id":"c9c6de8c-3fb4-404e-b88c-e9e0a605f183" }]

Полный пример ответа: response-example.json.

Ответ содержит следующие данные:

  • search_id — идентификатор поиска;
  • flight_numbers — номера рейсов;
  • gates — информация о ходе опроса агентств в процессе поиска;
    • tos — содержимое ошибки.
    • good_count — количество билетов соответствующих поиску (если агентство вернуло билет на неправильные даты или с ошибками, они отфильтровываются системой);
    • count — кол-во билетов отданное агентством;
    • duration — время обработки запроса агентством;
    • id — id агентства;
    • error — информация об ошибке;
  • uuid — идентификатор поиска;
  • city_distance — расстояние между городами отправления и назначения;
  • gates_info — информация об агенте, продавце билетов. Цифра — id гейта. Обратите внимание! Если id гейта отрицательное число, его необходимо исключить из показа пользователю. Такой id введен для служебного пользования.
    • currency_code — код валюты оплаты;
    • is_airline — является ли авиакомпанией;
    • average_rate — средний рейтинг агентства;
    • rates — рейтинг агентства (кол-во проголосовавших);
    • mobile_version — наличие мобильной версии сайта;
    • productivity — производительность;
    • airline_iatas — IATA код авиакомпании, если билеты продает она сама;
    • payment_methods — способы оплаты;
    • working_hours — дни и часы работы агентства;
    • email — адрес электронной почты;
    • phone — номер телефона;
    • site — сайт агентства;
    • helplink — ссылка на сайт с помощью;
    • label — название агентства.
  • signature — сигнатура запроса;
  • segments — массив данных о перелетах:
    • destination_country — код страны назначения;
    • original_destination — код города назначения;
    • origin — IATA-код пункта отправления;
    • destination — IATA-пункта назначения;
    • date — дата вылета.
  • flight_numbers — номера рейсов;
  • airlines — информация об авиакомпании:
    • deeplink_site_name — адрес сайта авиакомпании;
    • id — идентификационный номер;
    • site_name — название сайта авиакомпании;
    • alliance_name — альянс, в который входит авиакомпания;
    • average_rate — средний рейтинг;
    • rates — количество оценок;
    • deeplink_id — id ссылки на сайт авиакомпании;
    • name — название.
  • proposals — массив найденных вариантов;
    • flight — информация о рейсе:
      • departure — IATA код аэропорта отправления;
      • duration — продолжительность перелета в минутах;
      • departure_date — дата отправления;
      • departure_time — время отправления по местному времени;
      • local_departure_timestamp — местное время отправления в UNIX формате;
      • arrival_date — дата прибытия;
      • arrival_time — время прибытия по местному времени;
      • arrival_timestamp — время прибытия в UNIX формате;
      • local_arrival_timestamp — местное время прибытия в UNIX формате;
      • aircraft — тип самолета;
      • number — номер рейса (числовое значение). Чтобы сформировать номер полный рейса вида КодАвиакомпанииНомерРейса, используйте параметры number и operating_carrier;
      • delay — время между рейсами (время ожидания в аэропорту) в минутах;
      • operating_carrier — IATA код авиакомпании, выполняющей перевозку;
      • arrival — IATA код аэропорта прибытия.
    • price — цена перелета в оригинальной валюте (указана в поле currency);
    • currency — валюта, в которой указана оригинальная цена;
    • flights_baggage — количество мест багажа и его вес. Принимает одно из значений:
      • "" — нет информации о багаже;
      • false — багаж не включен в стоимость;
      • {int}PC{int} — количество сумок по %somevalue% килограмм. Например, 2PC23 означает два багажных места по 23 кг.
      • {int} — количество сумок не имеет значения, ограничивается суммарная масса.
    • unified_price — цена перелета в базовой валюте (в рублях);
    • url — код для формирования ссылки для покупателей (как формировать ссылку см. ниже).
    • is_direct — true, если перелет без пересадок;
    • segment:
    • segments_airports — IATA коды основных аэропортов отправления и назначения;
    • stops_airports — IATA коды аэропортов отправления, назначения и пересадок;
    • segment_durations — продолжительность перелетов (например, туда и обратно);
    • total_duration — общее время перелета;
    • max_stops — максимальное количество остановок.
    • terms — информация о стоимости перелета (цифра — id гейта). Стоимость перелета всегда указана в рублях. Чтобы получить данные в другой валюте, используйте курс валют, который получаете вместе с search_id.
  • sign — уникальный id билета, для объединения информации от разных агентств в один билет;
  • airports — данные об аэропортах;
    • city — город, в котором находится аэропорт;
    • average_rate — средний рейтинг аэропорта;
    • rates — количество оценок;
    • country — страна, в которой находится аэропорт;
    • name — название аэропорта;
    • time_zone — часовой пояс аэропорта.
    • IATA — IATA код аэропорта;
  • filters_boundary — массив с данными для фильтрации:
    • stops_duration — время между рейсами (максимальное и минимальное);
    • flights_duration — время перелета (максимальное и минимальное среди всех перелетов);
    • arrival_datetime_0 — время прибытия (максимальное и минимальное). Здесь 0, 1 в конце переменной означают номер перелёта (0 - туда, 1 - обратно);
    • price — цена перелета (максимальное и минимальное);
    • departure_time_0 — время отправления (максимальное и минимальное);
    • stops_count — количество пересадок от указанной минимальной стоимости.
  • validating_carrier — IATA код основной авиакомпании.

Совет: как определить аэропорт вылета и назначения.

Чтобы выяснить является ли аэропорт пунктом назначения или отправления, необходимо сопоставить данные из двух блоков. Первый — это airports, в нем указан IATA-код города, в котором расположен каждый аэропорт. Второй — блок flight, он содержит параметры arrival и departure — это IATA коды городов назначения и отправления.

Дополнительные данные в ответе

Ряд авиакомпаний и агентств отдают дополнительные данные о рейсах, самолетах и услугах на борту. Ниже описываются поля и их содержимое. Вы можете использовать эту информацию для отображения на сайте или игнорировать её — вся основная информация о билетах приведена выше.

  • banner_info — служебная информация от авиакомпании;
  • airlines/AF/ — в ветке приводятся данные от конкретной авиакомпании (где AF -это IATA код авиакомпании):
    • seatType — тип места в самолете (Angle Lie Flat, Flat Bed — особое место, может раскладываться в кровать и прочее; Standard — обычное место);
    • typeClass — тип класса (Business class, Economy class);
    • seatWidth — ширина сиденья (в дюймах);
    • aircraft — тип самолета;
    • seatPitch — расстояние между сидениями (в дюймах);
    • videoType — тип видео (Overhead TV — на впереди стоящем сиденье, On-Demand TV — общий ТВ с выдачей наушников по требованию, None — отсутствует);
    • wifi — наличие Wi-Fi на борту;
    • id — уникальный id самолета (служебный параметр);
    • powerType — наличие розетки переменного тока в кресле;
    • airline — IATA код авиакомпании;
    • laptopPower — наличие розетки для ноутбука.
    • excess — текстовая информация о максимальных ограничениях провоза багажа;
    • checked — текстовая информация про оплаченный вес багажа и его размер, а так же про необходимость доплатить, если размеры больше;
    • carryOn — текстовая информация о правилах перевоза ручной клади;
    • airline — IATA код авиакомпании;
    • sportMusical — правила перевозки крупных музыкальных и спортивных инструментов.
    • mobileCheckIn — возможность регистрации через мобильное приложение;
    • seatOnlineCheckIn — выбор места при регистрации;
    • onlineCheckInwithBag — онлайн регистрация багажа;
    • airline — IATA код авиакомпании;
    • onlineCheckIn — правила онлайн регистрации;
    • requirementOnlineCheckIn — правила онлайн регистрации;
    • airportCheckIn — правила регистрации в аэропорту;
    • timeBoardingGate — время на посадку до вылета
    • cargo — перевозка в багаже;
    • baggage — правила перевозки в багаже;
    • restriction — ограничения;
    • documentation — требуемая документация;
    • book — бронирование;
    • airline — IATA код авиакомпании;
    • method — метод перевозки;
    • cabin — информация по перевозке в салоне самолета;
    • kennel — дополнительные требования;
    • fee — информация о денежном сборе за провоз животных;
    • age — возраст, до которого распространяется этот тариф;
    • airline — IATA код авиакомпании;
    • booking — информация о бронировании;
    • aboutService — информация о сервисе;
    • flightRestriction — информация об ограничениях;
    • fee — денежный сбор за тариф.
    • payInternational — информация о тарифе;
    • exitRow — ограничения по выбору места на сиденьях рядом с запасным выходом;
    • childTurnTwo — правила тарифа при перелете с несколькими пересадками;
    • reserveSeat — информация о месте для младенце;
    • payInfant — информация по оплате;
    • airline — IATA код авиакомпании;
    • baggage — багаж в билете для младенца;
    • childRestraintDevices — информация по перевозки вещей младенца (коляска, сумка переноска и пр.);
    • infantAmenitites — информация о дополнительных услугах в самолете для младенца;
    • payDomestic — дополнительный сбор.
    • jets — данные о самолетах авиакомпании:
    • ageOfPlanes — средний возраст самолетов в авиакомпании;
    • alliance — альянс, в который входит авиакомпания;
    • economyLegroom — среднее расстояние между креслами в эконом классе (в дюймах);
    • freeStandardCarryOn — наличие бесплатного места для ручной клади;
    • infantsLapCost — возраст, с которого ребенок считается не младенцем;
    • minorsNotTravelAloneFrom — возможность несовершеннолетним путешествовать в одиночку;
    • iata — IATA код авиакомпании;
    • checkedBaggagePrice1st — стоимость регистрации багажа;
    • baggage — информация о багаже на рейсе;
    • frequentFlyerPrograms — программа лояльности для клиентов;
    • aircrafts — количество самолетов у авиакомпании;
    • carryOnStandard — наличие стандарта перевозки ручной клади;
    • lowcost — является ли лоукосетром;
    • freeCheckedBag — возможность бесплатной провозки багажа в пределе ограничений.
    • meals — типы меню на рейсах авиакомпании;
    • checkin — способы регистрации на рейсах авиакомпании:
    • minorsNotTravelAloneTo — возраст несовершеннолетних, до которого нельзя путешествовать без взрослых;
    • pet — информация по перевозке животных авиакомпанией:
    • minor — информация о тарифе для подростков:
    • infant — информация о тарифе для младенцев:

Лоукостеры в результатах поиска

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

Вы можете по своему усмотрению оставлять билеты от данных компаний в результатах поиска или фильтровать их перед тем, как отобразить вашим пользователям. Однако имейте ввиду — это компании лоукостеры, т. е. у них, как правило, самые низкие цены на билеты. И если их убрать, поисковая выдача станет гораздо менее интересной для пользователей.

Список компаний, не поддерживающих работу с партнерским маркером:

Как получить ссылку для перехода на сайт агентства

Внимание! Получение ссылки на сайт агентства может инициироваться только при нажатии пользователем кнопки «Купить». Автоматический сбор всех ссылок из ответа запрещен. Нарушение этого правила приводит к отключению API поиска у партнера.

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

1. Отправить запрос на адрес:

http://api.travelpayouts.com/v1/flight_searches/%search_id%/clicks/%terms.url%.json

где search_id — id поиска из ответа, terms.url — значение параметра url из ответа.

2. В результате будет получен ответ вида:

{
   "params": {},
 "method": "GET",
   "url": "https://www.svyaznoy.travel/?utm_source=aviasales.ru&utm_medium=cpa&utm_campaign=meta_avia#MOW0906/BKK1506/A1/C0/I0/S0/22316/EK-132;EK-374/EK-373;EK-131&marker=7uh46i0v2",
   "gate_id": 62,
   "click_id": 22135952358110
}

Для перехода к бронированию посетителю отдается ссылка из параметра url, т. е. в нашем примере это ссылка вида:

https://www.svyaznoy.travel/?utm_source=aviasales.ru&utm_medium=cpa&utm_campaign=meta_avia#MOW0906/BKK1506/A1/C0/I0/S0/22316/EK-132;EK-374/EK-373;EK-131&marker=7uh46i0v2

Важно! Время «жизни» подобной ссылки 15 минут, после чего потребуется произвести поиск заново для получения актуальных цен и генерации новой ссылки на переход.

Особенности формирования ссылок на некоторые гейты

Ряд гейтов не отдают прямые ссылки, а передают данные в массиве params. Такие агентства содержат в массиве параметр method со значением «POST» (у обычных гейтов этот параметр равен «GET»). Пример такого ответа:

{
  "params": {
    "FlightNumber1": "7793",
    "PointOfSaleCountry": "US",
    "Origin2": "BLQ",
    "UserLanguage": "en",
    "Adult": "1",
    "Destination2": "MLA",
    "DisplayedPriceCurrency": "EUR",
    "DepartureDate2": "2016-08-18",
    "Origin1": "MLA",
    "FlightNumber2": "7794",
    "ReferralId": "GoogleFlightSearch",
    "Destination1": "BLQ",
    "TripType": "RoundTrip", 
    "UserCurrency": "RUB",
    "DisplayedPrice": "153.98",
    "BookingCode1": "Y",
    "Carrier1": "FR",
    "Cabin1": "Economy", 
    "DepartureDate1": "2016-07-25", 
    "BookingCode2": "Y",
    "Cabin2": "Economy",
    "Carrier2": "FR"
    },
  "click_id": 56773565449083,
  "gate_id": "50",
  "method": "POST",
  "url": "https://www.bookryanair.com/SkySales/booking.aspx?utm_source=aviasales_ru"
}

Чтобы перенаправить пользователя на сайт подобного агентства и отследить переход, необходимо сделать страницу-редирект.

Для отслеживания партнерского маркера страница должна содержать такой код:

<img width="0" height="0" id="pixel" src="//yasen.aviasales.ru/adaptors/pixel_click.png?click_id=CLICK_ID&gate_id=GATE_ID">

где click_id — это значение параметра из массива с ответом (в примере выше этот параметр равен 56773565449083), gate_id — идентификатор гейта (в примере выше равен 50).

Чтобы изображение наверняка загрузилось, на странице добавляется пауза, во время которой пользователю отображается сообщение, что идет перенаправление на сайт агентства.

На странице добавляется так же проверка параметра method и в зависимости от результата выполняется один из сценариев:

  • если метод GET — выполняется редирект по прямой ссылке из параметра url;
  • если метод POST — формируется форма с параметрами из массива params и пользователь перенаправляется с этой страницы по ссылке из поля url в ответе выше.

Вариант страницы-редиректа, можно посмотреть здесь.

Как реализовать автокомплит аэропортов и городов

Чтобы реализовать в поиске автокомплит города или аэропорта, используется запрос следующего вида:

http://autocomplete.travelpayouts.com/jravia?locale=ru&with_countries=false&q=Мос&callback=function

где

  • q — основной параметр, задается в виде текста;
  • locale — язык вывода;
  • with_countries — используется, если автокомплит создается для страны (false — ответ не содержит информацию о стране, true — ответ содержит информацию о стране);
  • callback — название функции, в которой возвращается ответ.

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

{
"_id": 4eda62088792904be4004489,
"coordinates": {
"lon": 37.2921,
"lat": 55.60315
},
"city_fullname": Москва, Россия,
"city_code": MOW,
"name": Внуково,
"_type": airport,
"_score": 49.935055,
"city_name": Москва,
"title": Внуково,
"country_code": RU,
"country_name": Россия,
"code": VKO
}

Логотипы авиакомпаний

Логотипы авиакомпаний доступны по адресу: http://pics.avs.io/width/height/iata.png

где, width — ширина логотипа, height — высота логотипа, iata — IATA код авиакомпании. Размер может быть любым.

Пример: http://pics.avs.io/200/200/UN.png.

Была ли эта статья полезной?

Еще есть вопросы? Отправить запрос