NAV Navbar

API Documentation

API endpoint

http://partners.api.skyscanner.net/apiservices/

Skyscanner Travel APIs connect you to all the data you need to build an innovative website or app.

Build tools that solve problems for millions of travellers and travel retail businesses around the world.

Authentication

Skyscanner uses API keys to allow access to the APIs. To request an API key please contact us.

You must include the API key in all API requests to the server, either as a parameter in the query or in the query header. Please refer to each endpoint for details.

Getting Started

Flights

Flights - Browse Prices

API endpoint Description
Browse Quotes Returns the cheapest quotes that meet your query. The prices come from our cached prices resulting from our users’ searches.
Browse Routes Similar to Browse Quotes but with the quotes grouped by routes. This provides the cheapest destinations (countries, cities or airports) from our cached data.
Browse Dates Similar to Browse Quotes but with the quotes grouped by outbound and inbound date. Useful to find the lowest price for a given route, over either a month or a 12 month period.
Browse Grid Similar to Browse Dates but with some pre-processing on our side to output a two-dimensional array to easily display the response in calendar format.

Flights - Live Prices

API endpoint Description
Live prices Returns live prices from all our suppliers for the requested flight itinerary (in the selected market).

Car Hire

Car Hire Live Prices

API endpoint Description
Live prices Returns live prices from all our suppliers for car hire deals (in the selected market).

Hotels

Hotels Live Prices

API endpoint Description
Live prices
NEW
Returns live prices from all our suppliers for hotel deals (in the selected market).

Flights Browse Prices

Browse Quotes

Retrieve the cheapest quotes from our cache prices.

curl "http://partners.api.skyscanner.net/apiservices/browsequotes/v1.0/{country}/{currency}/{locale}/
  {originPlace}/
  {destinationPlace}/
  {outboundPartialDate}/
  {inboundPartialDate}?
  apiKey={apiKey}"
  -X GET
  -H "Accept: application/json"

API endpoint

GET /browsequotes/v1.0/{country}/{currency}/{locale}/{originPlace}/{destinationPlace}/{outboundPartialDate}/{inboundPartialDate}

TRY IT OUT

Run in Postman

HEADER VALUES

Header Value
Accept
OPTIONAL
application/json or application/xml
The default response format is XML

REQUEST PARAMETERS

Parameter Description
country
REQUIRED
The market country your user is in
currency
REQUIRED
The currency you want the prices in
locale
REQUIRED
The locale you want the results in (ISO locale)
originPlace
REQUIRED
The origin place (see places)
destinationPlace
REQUIRED
The destination place (see places)
outboundPartialDate
REQUIRED
The outbound date. Format “yyyy-mm-dd”, “yyyy-mm” or “anytime”.
inboundPartialDate
OPTIONAL
The return date. Format “yyyy-mm-dd”, “yyyy-mm” or “anytime”. Use empty string for oneway trip.
apiKey
REQUIRED
The API Key to identify the customer

The following tables show the level of precision supported for the origin and destination places, and the outbound and return dates:

diagram

diagram

Example response from US to anywhere:

{
  "Quotes": [
    {
      "QuoteId": 1,
      "MinPrice": 381,
      "Direct": true,
      "OutboundLeg": {
        "CarrierIds": [
          470
        ],
        "OriginId": 68033,
        "DestinationId": 42833,
        "DepartureDate": "2017-02-03T00:00:00"
      },
      "InboundLeg": {
        "CarrierIds": [
          470
        ],
        "OriginId": 42833,
        "DestinationId": 68033,
        "DepartureDate": "2017-02-06T00:00:00"
      },
      "QuoteDateTime": "2016-11-09T21:20:00"
    },
  ...
  ],
  "Places": [
    {
      "PlaceId": 837,
      "Name": "United Arab Emirates",
      "Type": "Country",
      "SkyscannerCode": "AE"
    },
  ...
  ],
  "Carriers": [
    {
      "CarrierId": 29,
      "Name": "Mombasa Air Safari"
    },
    {
      "CarrierId": 173,
      "Name": "Silver Airways"
    },
  ...
  ],
  "Currencies": [
    {
      "Code": "EUR",
      "Symbol": "€",
      "ThousandsSeparator": " ",
      "DecimalSeparator": ",",
      "SymbolOnLeft": false,
      "SpaceBetweenAmountAndSymbol": true,
      "RoundingCoefficient": 0,
      "DecimalDigits": 2
    }
  ]
}

RESPONSE PARAMETERS

Parameter Description
Quotes Contains the list of markets (array of countries as name-value pairs).
Places Contains the list of markets (array of countries as name-value pairs).
Carriers Contains the list of markets (array of countries as name-value pairs).
Currencies Contains the list of markets (array of countries as name-value pairs).

Browse Routes

Retrieve the cheapest routes from our cache prices. Similar to the Browse Quotes API but with the routes built for you from the individual quotes.

curl "http://partners.api.skyscanner.net/apiservices/browseroutes/v1.0/{country}/{currency}/{locale}/
  {originPlace}/
  {destinationPlace}/
  {outboundPartialDate}/
  {inboundPartialDate}?
  apiKey={apiKey}"
  -X GET
  -H "Accept: application/json"

API endpoint

GET /browseroutes/v1.0/{country}/{currency}/{locale}/{originPlace}/{destinationPlace}/{outboundPartialDate}/{inboundPartialDate}

TRY IT OUT

Run in Postman

HEADER VALUES

Header Value
Accept
OPTIONAL
application/json or application/xml
The default response format is XML

REQUEST PARAMETERS

Parameter Description
country
REQUIRED
The market country your user is in
currency
REQUIRED
The currency you want the prices in
locale
REQUIRED
The locale you want the results in (ISO locale)
originPlace
REQUIRED
The origin place (see places)
destinationPlace
REQUIRED
The destination place (see places)
outboundPartialDate
REQUIRED
The outbound date. Format “yyyy-mm-dd”, “yyyy-mm” or “anytime”.
inboundPartialDate
OPTIONAL
The return date. Format “yyyy-mm-dd”, “yyyy-mm” or “anytime”. Use empty string for oneway trip.
apiKey
REQUIRED
The API Key to identify the customer

The following tables show the level of precision supported for the origin and destination places, and the outbound and return dates:

diagram

diagram

Example response from US to anywhere:

{
  "Routes": [
    {
      "OriginId": 1811,
      "DestinationId": 1845,
      "QuoteIds": [
        1,
        2
      ],
      "Price": 326,
      "QuoteDateTime": "2016-11-13T01:30:00"
    },
    {
      "OriginId": 1811,
      "DestinationId": 929,
      "QuoteIds": [
        3
      ],
      "Price": 150,
      "QuoteDateTime": "2016-11-09T17:44:00"
    },
  ...
  ],
  "Quotes": [
    {
      "QuoteId": 1,
      "MinPrice": 381,
      "Direct": true,
      "OutboundLeg": {
        "CarrierIds": [
          470
        ],
        "OriginId": 68033,
        "DestinationId": 42833,
        "DepartureDate": "2017-02-03T00:00:00"
      },
      "InboundLeg": {
        "CarrierIds": [
          470
        ],
        "OriginId": 42833,
        "DestinationId": 68033,
        "DepartureDate": "2017-02-06T00:00:00"
      },
      "QuoteDateTime": "2016-11-09T21:20:00"
    },
  ...
  ],
  "Places": [
    {
      "PlaceId": 837,
      "Name": "United Arab Emirates",
      "Type": "Country",
      "SkyscannerCode": "AE"
    },
  ...
  ],
  "Carriers": [
    {
      "CarrierId": 29,
      "Name": "Mombasa Air Safari"
    },
    {
      "CarrierId": 173,
      "Name": "Silver Airways"
    },
  ...
  ],
  "Currencies": [
    {
      "Code": "EUR",
      "Symbol": "€",
      "ThousandsSeparator": " ",
      "DecimalSeparator": ",",
      "SymbolOnLeft": false,
      "SpaceBetweenAmountAndSymbol": true,
      "RoundingCoefficient": 0,
      "DecimalDigits": 2
    }
  ]
}

RESPONSE PARAMETERS

Parameter Description
Routes Contains the list of routes available, assembled from the individual quotes.
Quotes Contains the list of markets (array of countries as name-value pairs).
Places Contains the list of markets (array of countries as name-value pairs).
Carriers Contains the list of markets (array of countries as name-value pairs).
Currencies Contains the list of markets (array of countries as name-value pairs).

Browse Dates

Retrieve the cheapest dates for a given route from our cache.

curl "http://partners.api.skyscanner.net/apiservices/browsedates/v1.0/{country}/{currency}/{locale}/
  {originPlace}/
  {destinationPlace}/
  {outboundPartialDate}/
  {inboundPartialDate}?
  apiKey={apiKey}"
  -X GET
  -H "Accept: application/json"

API endpoint

GET /browsedates/v1.0/{country}/{currency}/{locale}/{originPlace}/{destinationPlace}/{outboundPartialDate}/{inboundPartialDate}

TRY IT OUT

Run in Postman

HEADER VALUES

Header Value
Accept
OPTIONAL
application/json or application/xml
The default response format is XML

REQUEST PARAMETERS

Parameter Description
country
REQUIRED
The market country your user is in
currency
REQUIRED
The currency you want the prices in
locale
REQUIRED
The locale you want the results in (ISO locale)
originPlace
REQUIRED
The origin place (see places)
destinationPlace
REQUIRED
The destination place (see places)
outboundPartialDate
REQUIRED
The outbound date. Format “yyyy-mm-dd”, “yyyy-mm” or “anytime”.
inboundPartialDate
OPTIONAL
The return date. Format “yyyy-mm-dd”, “yyyy-mm” or “anytime”. Use empty string for oneway trip.
apiKey
REQUIRED
The API Key to identify the customer

The following tables show the level of precision supported for the origin and destination places, and the outbound and return dates:

diagram

diagram

Example response from London to Paris:

{
  "Dates": {
    "OutboundDates": [
      {
        "PartialDate": "2016-11",
        "QuoteIds": [
          1,
          2,
          3,
          4,
          5
        ],
        "Price": 66,
        "QuoteDateTime": "2016-11-08T17:28:00"
      },
    ...
    ],
    "InboundDates": [
      {
        "PartialDate": "2016-11",
        "QuoteIds": [
          1
        ],
        "Price": 93,
        "QuoteDateTime": "2016-11-21T17:19:00"
      },
      ...
    ]
  },
  "Quotes": [
    {
      "QuoteId": 1,
      "MinPrice": 381,
      "Direct": true,
      "OutboundLeg": {
        "CarrierIds": [
          470
        ],
        "OriginId": 68033,
        "DestinationId": 42833,
        "DepartureDate": "2017-02-03T00:00:00"
      },
      "InboundLeg": {
        "CarrierIds": [
          470
        ],
        "OriginId": 42833,
        "DestinationId": 68033,
        "DepartureDate": "2017-02-06T00:00:00"
      },
      "QuoteDateTime": "2016-11-09T21:20:00"
    },
  ...
  ],
  "Places": [
    {
      "PlaceId": 837,
      "Name": "United Arab Emirates",
      "Type": "Country",
      "SkyscannerCode": "AE"
    },
  ...
  ],
  "Carriers": [
    {
      "CarrierId": 29,
      "Name": "Mombasa Air Safari"
    },
    {
      "CarrierId": 173,
      "Name": "Silver Airways"
    },
  ...
  ],
  "Currencies": [
    {
      "Code": "EUR",
      "Symbol": "€",
      "ThousandsSeparator": " ",
      "DecimalSeparator": ",",
      "SymbolOnLeft": false,
      "SpaceBetweenAmountAndSymbol": true,
      "RoundingCoefficient": 0,
      "DecimalDigits": 2
    }
  ]
}

RESPONSE PARAMETERS

Parameter Description
Dates The list of outbound and inbound dates for which quotes are available.
Quotes Contains the list of markets (array of countries as name-value pairs).
Places Contains the list of markets (array of countries as name-value pairs).
Carriers Contains the list of markets (array of countries as name-value pairs).
Currencies Contains the list of markets (array of countries as name-value pairs).

Browse Dates (grid)

Retrieve the cheapest dates for a given route from our cache, with the results formatted as a two-dimensional array to be easily displayed as a calendar.

curl "http://partners.api.skyscanner.net/apiservices/browsegrid/v1.0/{country}/{currency}/{locale}/
  {originPlace}/
  {destinationPlace}/
  {outboundPartialDate}/
  {inboundPartialDate}?
  apiKey={apiKey}"
  -X GET
  -H "Accept: application/json"

API endpoint

GET /browsegrid/v1.0/{country}/{currency}/{locale}/{originPlace}/{destinationPlace}/{outboundPartialDate}/{inboundPartialDate}

TRY IT OUT

Run in Postman

HEADER VALUES

Header Value
Accept
OPTIONAL
application/json or application/xml
The default response format is XML

REQUEST PARAMETERS

Parameter Description
country
REQUIRED
The market country your user is in
currency
REQUIRED
The currency you want the prices in
locale
REQUIRED
The locale you want the results in (ISO locale)
originPlace
REQUIRED
The origin place (see places)
destinationPlace
REQUIRED
The destination place (see places)
outboundPartialDate
REQUIRED
The outbound date. Format “yyyy-mm-dd”, “yyyy-mm” or “anytime”.
inboundPartialDate
OPTIONAL
The return date. Format “yyyy-mm-dd”, “yyyy-mm” or “anytime”. Use empty string for oneway trip.
apiKey
REQUIRED
The API Key to identify the customer

The following tables show the level of precision supported for the origin and destination places, and the outbound and return dates:

diagram

diagram

Example response from US to anywhere:

{
  "Dates": [
    [
      null,
      {
        "DateString": "2017-01"
      },
      {
        "DateString": "2017-02"
      },
      {
        "DateString": "2017-03"
      },
    ...
    ],
    ...
  ],
  "Places": [
    {
      "PlaceId": 837,
      "Name": "United Arab Emirates",
      "Type": "Country",
      "SkyscannerCode": "AE"
    },
  ...
  ],
  "Carriers": [
    {
      "CarrierId": 29,
      "Name": "Mombasa Air Safari"
    },
    {
      "CarrierId": 173,
      "Name": "Silver Airways"
    },
  ...
  ],
  "Currencies": [
    {
      "Code": "EUR",
      "Symbol": "€",
      "ThousandsSeparator": " ",
      "DecimalSeparator": ",",
      "SymbolOnLeft": false,
      "SpaceBetweenAmountAndSymbol": true,
      "RoundingCoefficient": 0,
      "DecimalDigits": 2
    }
  ]
}

RESPONSE PARAMETERS

Parameter Description
Dates Matrix of all the dates available with associated price.
Places Contains the list of markets (array of countries as name-value pairs).
Carriers Contains the list of markets (array of countries as name-value pairs).
Currencies Contains the list of markets (array of countries as name-value pairs).

Flights Live Prices

The Live Pricing Service Session must be created before any pricing data can be obtained. The request contains details of the locations, dates, passengers, cabin class and user details. These parameters define the session, and cannot be changed within the session (with the exception of passenger numbers).

diagram

Creating the session

Request

curl "http://partners.api.skyscanner.net/apiservices/pricing/v1.0"
    -X POST
    -H "Content-Type: application/x-www-form-urlencoded"
    -d 'cabinclass=Economy
    &country=UK
    &currency=GBP
    &locale=en-GB
    &locationSchema=iata
    &originplace=EDI
    &destinationplace=LHR
    &outbounddate=2017-05-30
    &inbounddate=2017-06-02
    &adults=1
    &children=0
    &infants=0
    &apikey=prtl6749387986743898559646983194'

API endpoint

POST /pricing/v1.0

TRY IT OUT

Run in Postman

or go to our test harness

HEADER VALUES

Header Value
Content-Type
REQUIRED
application/x-www-form-urlencoded
X-Forwarded-For
REQUIRED
user’s IP address
Accept
OPTIONAL
application/json or application/xml
The default response format is XML

REQUEST PARAMETERS (FORM)

Parameter Description
country
REQUIRED
The market/country your user is in
currency
REQUIRED
The currency you want the prices in
locale
REQUIRED
The locale you want the results in (ISO locale)
originPlace
REQUIRED
The origin place (see places)
destinationPlace
REQUIRED
The destination place (see places)
outboundDate
REQUIRED
The outbound date. Format “yyyy-mm-dd”.
inboundDate
OPTIONAL
The return date. Format “yyyy-mm-dd”. Use empty string for oneway trip.
cabinClass
OPTIONAL
The cabin class. Can be “economy”, “premiumeconomy”, “business”, “first”
adults
REQUIRED
Number of adults (16+ years). Must be between 1 and 8.
children
OPTIONAL
Number of children (1-16 years). Can be between 0 and 8.
infants
OPTIONAL
Number of infants (under 12 months). Can be between 0 and 8.
apiKey
REQUIRED
Your API Key.

Response

Example response with polling url:

Location "http://partners.api.skyscanner.net/apiservices/pricing/uk1/v1.0/
    {SessionKey}"

A successful response contains no content. The URL to poll the results is provided in the Location header of the response.

RESPONSE PARAMETERS

Element Detail
Location Header Contains the URL for polling the results in the newly created session

Polling the results

Request

Example request with polling url:

Location "http://partners.api.skyscanner.net/apiservices/pricing/uk1/v1.0/
    {SessionKey}?apiKey={apiKey}
    &stops=0
    &duration=360
    &includeCarriers=ba;u2;af"

API endpoint

GET /pricing/v1.0/{SessionKey}

TRY IT OUT

Run in Postman

or go to our test harness

HEADER VALUES

Header Value
Accept
OPTIONAL
application/json or application/xml
The default response format is XML

REQUEST PARAMETERS (FORM)

Parameter Description
sortType
OPTIONAL
The parameter to sort results on. Can be carrier, duration, outboundarrivetime, outbounddeparttime, inboundarrivetime, inbounddeparttime, price*
sortOrder
OPTIONAL
The sort order. ‘asc’ or 'desc’
duration
OPTIONAL
Filter for maximum duration in minutes. Integer between 0 and 1800
includeCarriers
OPTIONAL
Filter flights by the specified carriers. Must be semicolon-separated IATA codes.
excludeCarriers
OPTIONAL
Filter flights by any but the specified carriers. Must be semicolon-separated IATA codes.
originAirports
OPTIONAL
Origin airports to filter on. List of airport codes delimited by ‘;’
destinationAirports
OPTIONAL
Destination airports to filter on. List of airport codes delimited by ‘;’
stops
OPTIONAL
Filter by number of stops.
0: direct flights only
1: flights with one stop only
to show all flights do not use (only supports values 0 and 1)
outboundDepartTime
OPTIONAL
Filter for outbound departure time by time period of the day (i.e. morning, afternoon, evening). List of day time period delimited by ‘;’ (acceptable values are M, A, E)
outboundDepartStartTime
OPTIONAL
Filter for start of range for outbound departure time. Format ‘hh:mm’.
outboundDepartEndTime
OPTIONAL
Filter for end of range for outbound departure time. Format ‘hh:mm’.
outboundArriveStartTime
OPTIONAL
Filter for start of range for outbound arrival time. Format ‘hh:mm’.
outboundArriveEndTime
OPTIONAL
Filter for end of range for outbound arrival time. Format ‘hh:mm’.
inboundDepartTime
OPTIONAL
Filter for inbound departure time by time period of the day (i.e. morning, afternoon, evening). List of day time period delimited by ‘;’ (acceptable values are M, A, E)
inboundDepartStartTime
OPTIONAL
Filter for start of range for inbound departure time. Format ‘hh:mm’.
inboundDepartEndTime
OPTIONAL
Filter for start of range for inbound departure time. Format ‘hh:mm’.
inboundArriveStartTime
OPTIONAL
Filter for start of range for inbound departure time. Format ‘hh:mm’.
inboundArriveEndTime
OPTIONAL
Filter for end of range for inbound arrival time. Format ‘hh:mm’.
apiKey
REQUIRED
Your API Key.

Pagination and payload

Example polling request with pagination:

Location "http://partners.api.skyscanner.net/apiservices/pricing/uk1/v1.0/
    {SessionKey}?apiKey={apiKey}
    &pageIndex=0
    &pageSize=10"

If you want to supply results in pages, rather than show all the results available, you can use the parameters below.

REQUEST PARAMETERS (PAGINATION)

Parameter Description
pageIndex The desired page number.
pageSize The number of itineraries per page. Defaults to 10 if not specified.

Keep requesting page 0 until you get UpdatesComplete with pageIndex=0 at half a second to one second interval. Once you get UpdatesComplete you may request any page and page size.

For more information about polling the results please see our FAQ

We have no facility to tell you how many pages exist. Beyond the end of results, you will receive successful, empty, responses.


Response

Example polling request response:

{
  "SessionKey": "ab5b948d616e41fb954a4a2f6b8dde1a_ecilpojl_7CAAD17D0CFC34BFDE68DEBFDFD548C7",
  "Query": {
    "Country": "GB",
    "Currency": "GBP",
    "Locale": "en-gb",
    "Adults": 1,
    "Children": 0,
    "Infants": 0,
    "OriginPlace": "2343",
    "DestinationPlace": "13554",
    "OutboundDate": "2017-05-30",
    "InboundDate": "2017-06-02",
    "LocationSchema": "Default",
    "CabinClass": "Economy",
    "GroupPricing": false
  },
  "Status": "UpdatesComplete",
  "Itineraries": [
    {
      "OutboundLegId": "11235-1705301925--32480-0-13554-1705302055",
      "InboundLegId": "13554-1706020700--32480-0-11235-1706020820",
      "PricingOptions": [
        {
          "Agents": [
            4499211
          ],
          "QuoteAgeInMinutes": 0,
          "Price": 83.41,
          "DeeplinkUrl": "http://partners.api.skyscanner.net/apiservices/deeplink/v2?_cje=jzj5DawL5zJyT%2bnfe1..."
        },
        ...
        ],
      "BookingDetailsLink": {
        "Uri": "/apiservices/pricing/v1.0/ab5b948d616e41fb954a4a2f6b8dde1a_ecilpojl_7CAAD17D0CFC34BFDE68DEBFDFD548C7/booking",
        "Body": "OutboundLegId=11235-1705301925--32480-0-13554-1705302055&InboundLegId=13554-1706020700--32480-0-11235-1706020820",
        "Method": "PUT"
      }
    },
    ...
   ],
  "Legs": [
    {
      "Id": "11235-1705300650--32302,-32480-1-13554-1705301100",
      "SegmentIds": [
        0,
        1
      ],
      "OriginStation": 11235,
      "DestinationStation": 13554,
      "Departure": "2017-05-30T06:50:00",
      "Arrival": "2017-05-30T11:00:00",
      "Duration": 250,
      "JourneyMode": "Flight",
      "Stops": [
        13880
      ],
      "Carriers": [
        885,
        881
      ],
      "OperatingCarriers": [
        885,
        881
      ],
      "Directionality": "Outbound",
      "FlightNumbers": [
        {
          "FlightNumber": "290",
          "CarrierId": 885
        },
        {
          "FlightNumber": "1389",
          "CarrierId": 881
        }
      ]
    },
    ...
   ],
   "Segments": [
    {
      "Id": 0,
      "OriginStation": 11235,
      "DestinationStation": 13880,
      "DepartureDateTime": "2017-05-30T06:50:00",
      "ArrivalDateTime": "2017-05-30T07:55:00",
      "Carrier": 885,
      "OperatingCarrier": 885,
      "Duration": 65,
      "FlightNumber": "290",
      "JourneyMode": "Flight",
      "Directionality": "Outbound"
    },
    ...
  ],
    "Carriers": [
    {
      "Id": 885,
      "Code": "BE",
      "Name": "Flybe",
      "ImageUrl": "http://s1.apideeplink.com/images/airlines/BE.png",
      "DisplayCode": "BE"
    },
    ...
  ],
  "Agents": [
    {
      "Id": 1963108,
      "Name": "Mytrip",
      "ImageUrl": "http://s1.apideeplink.com/images/websites/at24.png",
      "Status": "UpdatesComplete",
      "OptimisedForMobile": true,
      "BookingNumber": "+448447747881",
      "Type": "TravelAgent"
    },
    ...
  ],
  "Places": [
    {
      "Id": 11235,
      "ParentId": 2343,
      "Code": "EDI",
      "Type": "Airport",
      "Name": "Edinburgh"
    },
    ...
  ],
  "Currencies": [
    {
      "Code": "GBP",
      "Symbol": "£",
      "ThousandsSeparator": ",",
      "DecimalSeparator": ".",
      "SymbolOnLeft": true,
      "SpaceBetweenAmountAndSymbol": false,
      "RoundingCoefficient": 0,
      "DecimalDigits": 2
    },
    ...
  ]
}

The response contains a list of itineraries with, for each one, a list of pricing options containing:

RESPONSE PARAMETERS

Parameter Description
SessionKey The Session key to identify the session.
Query A copy of the query which was submitted.
Status The status of the session – ‘UpdatesPending’ or ‘UpdatesComplete’.
Itineraries A list of itineraries - see below for the itinerary object.
Legs Details of the legs that make up the itineraries: airports, times, overall duration, stops and carrier ids.
Segements Details of the segments of each leg. Including the carrier (or marketing carrier) and the operating carrier.
Carriers Details of the carriers.
Agents Details of the agents who sell the tickets. Can be an airline or a travel agent.
Places A list of all the places that appear in the itineraries.
Currencies A list of the currencies shown in the response.

ITINERARY PARAMETERS

Element Description
OutboundLegId Id of the Outbound Leg
InboundLegId Id of the Inbound Leg
PricingOptions pricing options with agent(s)
the quote age
price (total for all passengers)
deeplink to the agent (the absolute URL needed to make the booking).
In the case where deeplinks are not supplied, you can obtain them with a further step. Refer to the Create/Poll Booking Details documentation.
BookingDetailsLink In some cases such as for group prices you will need to make a second call to retrieve the deeplinks. See the next section Get booking details for details

Please note that you must not force users to your deeplink. Once they have made a search you should provide them with a list of results, and an option to filter that list, in order to pick the flight that best suits their needs.

Get booking details

Request

curl "http://partners.api.skyscanner.net/apiservices/pricing/v1.0/
    {SessionKey}/booking&apikey={apiKey}"
    -d 'OutboundLegId={OutboundLegId}&InboundLegId={InboundLegId}'
    -X PUT
    -H "Content-Type: application/x-www-form-urlencoded"

For group pricing a Booking Details request must be made to get the deeplink with additional information such as number of passengers.

The url is provided in the response of the live prices:

{
  "BookingDetailsLink": {
      "Uri": "/apiservices/pricing/v1.0/abb2a69708624a7ca82762ed73493598_ecilpojl_DCE634A426CBDA30CE7EA3E9068CD053/booking",
      "Body": "OutboundLegId=11235-1705301925--32480-0-13554-1705302055&InboundLegId=13554-1706020700--32480-0-11235-1706020820",
      "Method": "PUT"
  }
}

The full url and body content are provided in the response from the live pricing results.

API endpoint

PUT /pricing/v1.0/{SessionKey}/booking

TRY IT OUT

Run in Postman

or go to our test harness

REQUEST PARAMETERS

Parameter Description
apiKey
REQUIRED
Your API Key.

REQUEST BODY (from live pricing response)

Parameter Description
OutboundLegId
REQUIRED
The outbound leg Id of the itinerary
InboundLegId
OPTIONAL
The inbound leg Id of the itinerary for return flights
adults
OPTIONAL
Number of adults (16+ years). Must be between 1 and 8.
children
OPTIONAL
Number of children (1-16 years). Can be between 0 and 8.
infants
OPTIONAL
Number of infants (under 12 months). Can be between 0 and 8.

Response

Example response:

Location "http://partners.api.skyscanner.net/apiservices/pricing/uk1/v1.0/
    {SessionKey}/booking/
    {OutboundLegId};{InboundLegId}"

A successful response contains no content. The URL to poll the booking details is specified in the Location header of the response.

RESPONSE PARAMETERS

Element Detail
Location Header Contains the URL for polling the booking details results

Polling the booking details

Request

curl "http://partners.api.skyscanner.net/apiservices/pricing/uk1/v1.0/
    {SessionKey}/booking/
    {OutboundLegId};{InboundLegId}
    ?apiKey={apiKey}"
    -X GET

API endpoint

GET /pricing/v1.0/{SessionKey}/booking/{OutboundLegId};{InboundLegId}

TRY IT OUT

Run in Postman

or go to our test harness

REQUEST PARAMETERS

Parameter Description
apiKey
REQUIRED
Your API Key.

REQUEST BODY (from live pricing response)

Parameter Description
OutboundLegId
REQUIRED
The outbound leg Id of the itinerary
InboundLegId
OPTIONAL
The inbound leg Id of the itinerary for return flights
adults
OPTIONAL
Number of adults (16+ years). Must be between 1 and 8.
children
OPTIONAL
Number of children (1-16 years). Can be between 0 and 8.
infants
OPTIONAL
Number of infants (under 12 months). Can be between 0 and 8.

Response

{
  "Segments": [
    {
      "Id": 1,
      "OriginStation": 11235,
      "DestinationStation": 13554,
      "DepartureDateTime": "2017-05-30T19:25:00",
      "ArrivalDateTime": "2017-05-30T20:55:00",
      "Carrier": 881,
      "OperatingCarrier": 881,
      "Duration": 90,
      "FlightNumber": "1463",
      "JourneyMode": "Flight",
      "Directionality": "Outbound"
    },
    ...
  ],
  "BookingOptions": [
    {
      "BookingItems": [
        {
          "AgentID": 4499211,
          "Status": "Current",
          "Price": 83.41,
          "Deeplink": "http://partners.api.skyscanner.net/apiservices/deeplink/v2?_cje=jzj5DawL5[...]",
          "SegmentIds": [
            1,
            2
          ]
        }
      ]
    },
  ],
    "Places": [
    {
      "Id": 13554,
      "ParentId": 4698,
      "Code": "LHR",
      "Type": "Airport",
      "Name": "London Heathrow"
    },
    ...
  ],
  "Carriers": [
    {
      "Id": 881,
      "Code": "BA",
      "Name": "British Airways",
      "ImageUrl": "http://s1.apideeplink.com/images/airlines/BA.png"
    }
  ],
  "Query": {
    "Country": "GB",
    "Currency": "GBP",
    "Locale": "en-gb",
    "Adults": 1,
    "Children": 0,
    "Infants": 0,
    "OriginPlace": "2343",
    "DestinationPlace": "13554",
    "OutboundDate": "2017-05-30",
    "InboundDate": "2017-06-02",
    "LocationSchema": "Default",
    "CabinClass": "Economy",
    "GroupPricing": false
  }
 }

The response contains a list of itineraries with, for each one, a list of pricing options containing:

RESPONSE PARAMETERS

Parameter Description
SessionKey The Session key to identify the session.
Query A copy of the query which was submitted.
Status The status of the session – ‘UpdatesPending’ or ‘UpdatesComplete’.
Itineraries A list of itineraries - see below for the itinerary object.
Legs Details of the legs that make up the itineraries: airports, times, overall duration, stops and carrier ids.
Segements Details of the segments of each leg. Including the carrier (or marketing carrier) and the operating carrier.
Carriers Details of the carriers.
Agents Details of the agents who sell the tickets. Can be an airline or a travel agent.
Places A list of all the places that appear in the itineraries.
Currencies A list of the currencies shown in the response.

Car Hire Live Prices

Retrieve live prices for car hire providers.

The live updates are performed asynchronously so you need to create a session and then poll for updates. Please note that it may take up to a minute to update all the results. After you create a session, you will immediately get the results of the first poll.

The Create Session request (HTTP GET) contains all query parameters, such as pickup and dropoff locations. The URL which should be used to poll the session is returned in the HTTP Response Header “Location”.

The Poll Session (HTTP GET) should be used to poll the session at a suitable interval (e.g. every 1-3 seconds) whilst there are still updates pending.

Creating the session

curl "http://partners.api.skyscanner.net/apiservices/carhire/liveprices/v2/
  {market}/{currency}/{locale}/
  {pickupplace}/{dropoffplace}/
  {pickupdatetime}/{dropoffdatetime}/
  {driverage}?apiKey={apiKey}&userip={userip}}"
  -X GET
  -H "Content-Type: application/x-www-form-urlencoded"
  -H "Accept: application/jsonp"

Request

API endpoint

GET /carhire/liveprices/v2/{market}/{currency}/{locale}/{pickupplace}/{dropoffplace}/{pickupdatetime}/{dropoffdatetime}/{driverage}

TRY IT OUT

Run in Postman

or go to the test harness

HEADER VALUES

Header Value
Content-Type
REQUIRED
application/x-www-form-urlencoded
Accept
OPTIONAL
application/json, application/jsonp or application/xml
The default response format is XML

REQUEST PARAMETERS

Parameter Description
country
REQUIRED
The market country your user is in
currency
REQUIRED
The currency you want the prices in
locale
REQUIRED
The locale you want the results in (ISO locale)
pickupPlace
REQUIRED
The pickup location. IATA code or a latitude,longitude pair formatted as lat,lon-latlong e.g. /55.95,-3.37-latlong/
dropoffPlace
REQUIRED
The dropoff location. IATA code or a latitude,longitude pair formatted as lat,lon-latlong e.g. /55.95,-3.37-latlong/
pickupDateTime
REQUIRED
Date and time for pickup. Formatted as ISO Date and Time format: YYYY-MM-DDThh:mm
dropoffDateTime
OPTIONAL
Date and time for dropoff. Formatted as ISO Date and Time format: YYYY-MM-DDThh:mm
driverAge
REQUIRED
Must be between 21 and 75 (inclusive).
userIp
REQUIRED
The IP address of the end user (IPv4 only). Format: 188.39.95.93
apiKey
REQUIRED
Your API key

Response

Example response with polling url in the header:

Location "/apiservices/carhire/liveprices/v2/eyJvIjpbImRhdGFhcGkiLCJHQiIsImVuLUdCIiwiR0JQIiwiRURJIiwiMjAxNy0wNy0wMVQxMDowMDowMCIsIjIwMTctMDctMDdUMTc6MDA6MDAiLCJFREkiLDM1LCIxMjcuMC4wLjEiXSwibiI6LTI1OTAzfQ2?apikey=_aiX_D_g9kkg_cu_2ybJepzeH7dUcY0gh8q-oXHKdD0RuHu1itrfqIeyKIaVJ5m8vkR5euhcsN4XDFGFk1ofaDw%3D%3D&deltaExcludeWebsites=easc%2Cecon"

A successful session creation will immediately 302 to the first poll. This poll will respond as follows, with the URL to subsequently poll the session included in the Location header.

RESPONSE PARAMETERS

Element Detail
Location Header Contains the URL for polling the results.

Polling the results

Polling the session will return the details of all possible car hire quotes that satisfy the request query parameters. Prices will be obtained for the car hire quotes during the session. The calling application should poll the session in 1-3 second intervals until all updates are complete (all returned websites have inProgress equal to false), and all prices have been populated. This can take from a few seconds to a minute depending on the query.

Please allow at least one second between polls.

A note about delta results

In your polling requests you may specify a parameter called ‘deltaExcludeWebsites’. This is a CSV or semicolon-separated list of website IDs. The server will set this in the Location headers to exclude whatever websites have finished sending results (inProgress equal to false). Excluding any given provider will remove its cars and website information from your result. Merely supplying&deltaExcludeWebsites= removes all images, the query, and the car classes lookup. The Location header in the first poll will include this parameter, even if it’s an empty string, in order that you don’t fetch that information multiple times.

curl "http://partners.api.skyscanner.net/apiservices/carhire/liveprices/v2/{sessionKey}?apiKey={apiKey}&deltaExcludeWebsites={a,b,c...}""

Request

API ENDPOINT

GET /carhire/liveprices/v2/{sessionKey}

TRY IT OUT

Run in Postman

or go to the test harness

REQUEST PARAMETERS

Parameter Description
deltaExcludeWebsites
OPTIONAL
A list of website IDs whose results you want to discard, or an empty string. CSV or semicolon-separated values.
apiKey
REQUIRED
Your API key

Example response with polling url in the header:

{
  "submitted_query": {
    "market": "GB",
    "currency": "GBP",
    "locale": "en-GB",
    "pickup_place": "EDI",
    "dropoff_place": "EDI",
    "pickup_date_time": "2017-07-01T10:00",
    "drop_off_date_time": "2017-07-07T17:00",
    "driver_age": "35"
  },
  "cars": [
    {
      "sipp": "CDMD",
      "image_id": 523911,
      "price_all_days": 262.6,
      "seats": 5,
      "doors": 5,
      "bags": 3,
      "manual": true,
      "air_conditioning": true,
      "mandatory_chauffeur": false,
      "website_id": "argu",
      "vehicle": "Opel Astra or similar",
      "deeplink_url": "http://partners.api.skyscanner.net/apiservices/deeplink/v2?_c[...]",
      "car_class_id": 3,
      "location": {
        "pick_up": {
          "address": "CAR RENTAL CENTRE EDINBURGH APT 176 JUBILEE ROAD, EDINBURGH, EH12 9FT",
          "distance_to_search_location_in_km": 0.0992002183,
          "geo_info": [
            55.95,
            -3.362
          ]
        }
      },
      "value_add": {
        "fuel": {
          "type": "diesel",
          "policy": "full_to_full",
          "fair": true
        },
        "insurance": {
          "theft_protection": true,
          "third_party_cover": true,
          "free_collision_waiver": true
        },
        "free_cancellation": true,
        "free_breakdown_assistance": true,
        "additional_drivers": {
          "paid": {
            "currency_id": "GBP",
            "price": 84
          }
        },
        "included_mileage": {
          "unlimited": true
        }
      }
    },
  ...
  ],
  "websites": [
    {
      "id": "erac",
      "name": "Enterprise",
      "image_url": "http://logos.skyscnr.com/images/websites/erac.png",
      "in_progress": false,
      "optimised_for_mobile": true
    },
  ...
  ],
  "images": [
    {
      "id": 356029,
      "url": "http://logos.skyscnr.com/images/carhire/sippmaps/citroen_berlingo.jpg"
    },
  ...
  ],
  "car_classes": [
    {
      "id": 1,
      "sort_order": 0,
      "name": "Mini"
    },
    ...
  ]
}

Response

Parameter Description
submitted_query Contains the URL for polling the results.
cars The list of available cars. See Car Details below.
websites A reference list of websites where the cars can be hired, including website logo url. The boolean field “in_progress” indicates whether or not there are still updates pending for that website.
images Contains the images of the car types.
car_classes Contains the URL for polling the results.

CAR DETAILS

Parameter Description
sipp SIPP code (see codes guide)
image_id reference to the images set
price_all_days total price
seats number of seats
doors number of doors
bags number of bags
manual Boolean
air_conditioning Boolean
mandatory_chauffeur Boolean. Indicates whether the vehicle comes with a driver. This is particularly frequent in countries like India where it is common for a driver to be supplied with a car.
website_id reference to the website set
vehicle vehicle (name and type)
deeplink_url contains the URL to deeplink through to the partner website. Please add the no-follow attribute when you link to the deeplink. See How do I add the nofollow attribute? in the FAQ section.
car_class_id reference to the car_classes set
location location containing address, lat/lon and distance to search location for pick up and drop off places (drop off can be not available even though the query contains a drop off place)
value_add See below

CAR VALUE_ADD

Parameter Description
fuel containing 'type’ (one of “petrol”, “diesel”, “lpg”, “electric” or null); 'policy’ (one of “full_to_full”, “quarter_to_quarter”, “half_to_half”, “free_full_tank”, “half_to_empty”, “quarter_to_empty” or null); 'fair’ (boolean)
free_equipments subset of [radio, gps, roof_rack, ski_rack, snow_chains, snow_tyres, baby_seat, child_seat, booster_seat]
insurance containing 'theft_protection’ (boolean or null), 'third_party_cover’ (boolean or null), 'free_collision_waiver’ (boolean or null), 'free_damage_refund’ (boolean or null)
young_driver_surcharge Boolean or null
one_way_surcharge Boolean or null
free_cancellation Boolean or null
free_breakdown_assistance Boolean or null
additional_drivers containing 'free’ (int of how many free drivers); paid (containing currency_id and price); original_price (containing currency_id and price)
included_mileage containing 'unlimited’ (boolean or null); 'unit’ (can be “km” or “mile”); 'included’ (int how many km/miles included in the booking)

Hotels Live Prices

This service responsible for finding the best hotels with rates around a given entity. It provides endpoints to search prices, a map version of it and a hotel prices one.

Endpoint

The Hotels API provides a global endpoint: https://gateway.skyscanner.net/hotels/v{version}/ where version points to a specific release.

Headers

The API expects the header:

For example:

x-user-agent: M;B2B

Use flow

All the /prices endpoints are intended to be queried using a polling mechanism using the same parameters as the one that started the polling. The flow of the service is described below:

  1. On the first request that a user does, the service will reply with empty results and the status attribute inside the meta object set to PENDING. Metadata PENDING state.
  2. The client needs to keep polling the service with the same query while the status attribute inside the meta object in the response is PENDING. On each query, the number of results will grow. Metadata PENDING state, partial results.
  3. The status attribute will eventually change to COMPLETED. Meaning that the search cycle has finished. Metadata COMPLETED state.
  4. Clients should implement a self-healing mechanism that should include:
    • Finish the polling after X seconds in the scenarios of having the status PENDING for so long.
    • Retry mechanism in the scenario of a service failure (Ex: retry after 1 seconds)

Search Prices

Entity Request

Given an entity_id, this endpoint will give back hotels with prices around the provided entity. The supported entities are any, from cities, islands, nations, places to Hotels.

The Hotels API, first of all, tries to search for the hotels related to an entity using an explicit relation - cities, administration zones and nations, and if the results are less than a minimum number of hotels the query turns out in a geographical query. This geographical query seeks for hotels using different distances, from 500 meters to 50km, till finding this minimum amount or get the maximum distance.

When a Hotel is used as the entity queried for, the service will treat this as an ad-hoc case. The hotel used as an entity will be serialized into the hotel_pivot object with its offers. Meanwhile, it will be removed from the results object.

The following URL shows how the search prices endpoint can be used to retrieve prices for those hotels that are placed in Barcelona

API endpoint

GET /v1/prices/search/entity/{entity_id}

GET "https://gateway.skyscanner.net/hotels/v1/prices/search/entity/{entity_id}
  ?market={market}&locale={locale}&checkin_date={checkin_date}&checkout_date={checkout_date}
  &currency={currency}&adults={adults}&rooms={rooms}&images={images}&image_resolution={resolution}
  &image_type={type}&boost_official_partners={boost}&sort={sort_method}&limit={limit}&offset={offset}
  &partners_per_hotel={num_partners}&enhanced={enhanced}"

TRY IT OUT

Run in Postman

HEADER VALUES

Header Value
x-user-agent
REQUIRED
Indicates which is the device and the platform related to the client. The format for that header is device;B2B, where:
Device is:
T for tablet
D for desktop
M for mobile
N if you are not able to detect the device type

URI PARAMETERS

Parameter Description
entity_id
REQUIRED
Entity to search for hotels prices in it
version
REQUIRED
API version

QUERY PARAMETERS

Parameter Description
market
REQUIRED
Matching [A-Z]{2}
locale
REQUIRED
Matching [a-z]{2}-[A-Z]{2}
currency
REQUIRED
Currency code
checkin_date
REQUIRED
YYYY-MM-DD
checkout_date
REQUIRED
YYYY-MM-DD
rooms
REQUIRED
Number of rooms
default: 1
adults
REQUIRED
Number of adults
default: 2
apikey
REQUIRED
This parameter is required to be on every single request any client does
images
OPTIONAL
Maximum number of images to retrieve per each hotel
between 1-30, default: 3
image_resolution
OPTIONAL
Resolution options
high or low, default: high
image_type
OPTIONAL
The format of the images
thumbnail or gallery
boost_official_partners
OPTIONAL
Indicates whether prices from official partners must be shown in the first place [1] or not [0]
default: 0
sort
OPTIONAL
Sort by a given attribute. By default the relevance sorting is applied
One of: relevance, -relevance, price, -price, distance, -distance, rating, -rating, stars, -stars
price_min
OPTIONAL
Filter. Return only hotels where the cheaper price is at least price_min (included). Cannot be used together with price_buckets
price_max
OPTIONAL
Filter. Return only hotels where the cheaper price is at most price_max (included). Cannot be used together with price_buckets
price_buckets
OPTIONAL
OR filter. Return only hotels with offers inside the specified buckets. Cannot be used together with price_min/price_max
district
OPTIONAL
OR filter. Return only results where a district matches
stars
OPTIONAL
OR filter. Return only results where a star category matches. The values must be TravelAPI ids
city
OPTIONAL
OR filter. When the search is done for an entity that contains different cities, this filter is available. Returns only results where the cities match. The values must be TravelAPI entity ids
chain
OPTIONAL
OR filter. Return only results where a hotel chains matches. The values must be TravelAPI ids
amenities
OPTIONAL
AND filter. Return only results where all amenities match. The values must be TravelAPI ids
cancellation
OPTIONAL
OR filter. Return only results where a cancellation policies matches. Options are:
free_cancellation, non_refundable, refundable, special_conditions
meal_plan
OPTIONAL
OR filter. Return only results where a meal plan matches. Options are:
room_only, breakfast_included, half_board, full_board, all_inclusive
property_type
OPTIONAL
OR filter. Return only results where an accommodation type matches. The values must be TravelAPI ids
hotel_name
OPTIONAL
Filter. Return only results where hotel name matches
limit
OPTIONAL
Number of results to retrieve
between 1-30, default: 30
offset
OPTIONAL
How many results to skip from the first position. Useful for paginating
default: 0
partners_per_hotel
OPTIONAL
Maximum numbers of partners to retrieve per each hotel. Note that 0 means all the available partners
default: 3
enhanced
OPTIONAL
This parameter allows you to add additional content to the default response. Available options are:
filters: Returns extra object in the response including the filters like stars, district, city, etc.
price_slider: Return the price_slider.
partners: Returns information about the active partners in the system. is_official, the logo, the name and the website_id.
images: Returns images for the hotels. With the partner website_id and the urls.
amenities: Returns the hotels amenities.
query_location: Returns the location (higher level entities according to the searched entity) and map boundary (the coordinates of the search area).
extras: Returns the hotel chain of the hotels.
translations: Returns a dictionary with all literals and their corresponding translations using the request locale.

Note: The OR and AND filters allow multiple values coma separated. For example: &amenities=Lift,Bar

Response

Example response:

{
  "correlation_id": "42be633f-edde-4631-ad8f-87e3fd2b4bf4",
  "meta": {
    "total_available": 1675,
    "hotels_filtered": 4406,
    "offers": 34757,
    "total": 4406,
    "status": "COMPLETED",
    "completion_percentage": 100
  },
  "count": 15,
  "results": {
    "filters": {
      "district": [
        {
          "max_price": null,
          "id": "27562177",
          "count": 350,
          "min_price": 20
        },
        ...
      ],
      "meal_plan": [
        {
          "max_price": null,
          "id": "room_only",
          "count": 1391,
          "min_price": 20
        },
        ...
      ],
      "city": [
        {
          "max_price": null,
          "id": "27544008",
          "count": 4406,
          "min_price": 18
        },
        ...
      ],
      "property_type": [
        {
          "max_price": null,
          "id": "Hotel",
          "count": 1754,
          "min_price": 32
        },
        ...
      ],
      "price_buckets": [
        {
          "max_price": 80,
          "id": "PR_BK_0",
          "count": 91,
          "min_price": null
        },
        ...
      ],
      "stars": [
        {
          "max_price": null,
          "id": "4",
          "count": 735,
          "min_price": 124
        },
        ...
      ],
      "cancellation": [
        {
          "max_price": null,
          "id": "non_refundable",
          "count": 1437,
          "min_price": 20
        },
        ...
      ],
      "chain": [
        {
          "max_price": null,
          "id": "Hilton",
          "count": 14,
          "min_price": 241
        },
        ...
      ],
      "amenities": [
        {
          "max_price": null,
          "id": "WifiService",
          "count": 1993,
          "min_price": 18
        },
        ...
      ]
    },
    "partners": [
      {
        "website_id": "h_mb",
        "logo": "www.skyscanner.net/images/websites/220x80/h_mb.png",
        "is_official": true,
        "name": "Marina Bay Sands"
      },
      ...
    ],
    "hotel_pivot": null,
    "entity": {
      "name": "London",
      "official_center": {
        "coordinates": [
          -0.12801,
          51.50813
        ],
        "type": "Point"
      },
      "entity_id": "27544008",
      "entity_type": "City",
      "centroid": {
        "coordinates": [
          -0.09435,
          51.50412
        ],
        "type": "Point"
      }
    },
    "hotels": [
      {
        "district": "[]",
        "city": "27544008",
        "offers": [
          {
            "cancellation": null,
            "meal_plan": "breakfast_included",
            "closed_user_groups": null,
            "is_official": false,
            "room_type": [
              "generic_room"
            ],
            "partner_id": "h_dr",
            "price_gbp": 239,
            "price": 239,
            "strike_through": 286,
            "deeplink": "www.skyscanner.net/hotel_deeplink/4.0/UK/en-GB/GBP/h_dr/137554756/2017-05-07/2017-05-09/hotel/hotel/hotels?q_datetime_utc=2017-04-24T15%3A42%3A50&appVersion=2.0&rooms=1&legacy_provider_id=926990&deeplink_ids=eu-west-1.prod_b332e152f682d33ec1cc4b3ef6c5b4ac&request_id=f6b76e8d-18ed-45d9-95f5-d87d93f44167&guests=1&ticket_price=239&appName=web&max_price=325.0",
            "available": null,
            "cancellation_text": null
          }
        ],
        "images": [
          {
            "thumbnail": "http://d3ba47lalua02r.cloudfront.net/available/66922450/rmt.jpg",
            "provider": "h_dp",
            "gallery": "http://d3ba47lalua02r.cloudfront.net/available/66922450/rmca.jpg"
          }
        ],
        "amenities": [
          "InternetAccessService",
          "CurrencyExchangeService",
          ...
        ],
        "property_type": "Hotel",
        "distance": 1523.6670209587,
        "reviews_count": 129,
        "stars": "3",
        "name": "Imperial",
        "rating": {
          "desc": "rating_good",
          "value": 7
        },
        "hotel_id": "137554756",
        "coordinates": [
          -0.12403,
          51.52162
        ]
      },
      ...
    ],
    "map_boundary": {
      "s_w_lat": 51.49591,
      "n_e_lat": 51.52918,
      "n_e_lng": -0.07762,
      "s_w_lng": -0.19137
    },
    "location": [
      {
        "name": "England",
        "entity_id": "44293288",
        "entity_type": "FirstLevelNationAdministrativeDivision"
      },
      {
        "name": "United Kingdom",
        "entity_id": "29475375",
        "entity_type": "Nation"
      }
    ]
  },
  "translations": {
    "CUG_create_account_to_unlock_deals_msg": "Create an account to unlock exclusive deals",
    "CUG_deal": "DEAL",
    ...
  }
}

RESPONSE PARAMETERS

Element Detail
correlation_id An identifier of the request
meta Contains metadata regarding the search cycle such as it’s status
count Number of hotels
results An object containing the hotels and the enhancers if requested
translations Only with the translations enhanced. Dictionary with all literals that can be translated

Location Request

This endpoint gives back hotels with prices too but instead from an entity, around specific coordinates. It takes the coordinades as an input to provide the hotels. Provides the search by current location functionality.

API endpoint

GET /v1/prices/search/location/{lon,lat}

GET "https://gateway.skyscanner.net/hotels/v1/prices/search/location/{lon,lat}
  ?market={market}&locale={locale}&checkin_date={checkin_date}&checkout_date={checkout_date}
  &currency={currency}&adults={adults}&rooms={rooms}&images={images}&image_resolution={resolution}
  &image_type={type}&boost_official_partners={boost}&sort={sort_method}&limit={limit}&offset={offset}
  &partners_per_hotel={num_partners}&enhanced={enhanced}"

TRY IT OUT

Run in Postman

HEADER VALUES

Header Value
apikey
REQUIRED
This header is required to be on every single request any client does (it could also be accepted via query parameter)
x-user-agent
REQUIRED
Indicates which is the device and the platform related to the client. The format for that header is device;B2B, where:
Device is:
T for tablet
D for desktop
M for mobile
N if you are not able to detect the device type

URI PARAMETERS

Parameter Description
location
REQUIRED
Location to search hotels near it. Following the format: lon,lat
version
REQUIRED
API version

QUERY PARAMETERS

Parameter Description
market
REQUIRED
Matching [A-Z]{2}
locale
REQUIRED
Matching [a-z]{2}-[A-Z]{2}
currency
REQUIRED
Currency code
checkin_date
REQUIRED
YYYY-MM-DD
checkout_date
REQUIRED
YYYY-MM-DD
rooms
REQUIRED
Number of rooms
default: 1
adults
REQUIRED
Number of adults
default: 2
apikey
REQUIRED
This parameter is required to be on every single request any client does
images
OPTIONAL
Maximum number of images to retrieve per each hotel
between 1-30, default: 3
image_resolution
OPTIONAL
Resolution options
high or low, default: high
image_type
OPTIONAL
The format of the images
thumbnail or gallery
boost_official_partners
OPTIONAL
Indicates whether prices from official partners must be shown in the first place [1] or not [0]
default: 0
sort
OPTIONAL
Sort by a given attribute. By default the relevance sorting is applied
One of: relevance, -relevance, price, -price, distance, -distance, rating, -rating, stars, -stars
price_min
OPTIONAL
Filter. Return only hotels where the cheaper price is at least price_min (included). Cannot be used together with price_buckets
price_max
OPTIONAL
Filter. Return only hotels where the cheaper price is at most price_max (included). Cannot be used together with price_buckets
price_buckets
OPTIONAL
OR filter. Return only hotels with offers inside the specified buckets. Cannot be used together with price_min/price_max
district
OPTIONAL
OR filter. Return only results where a district matches
stars
OPTIONAL
OR filter. Return only results where a star category matches. The values must be TravelAPI ids
city
OPTIONAL
OR filter. When the search is done for an entity that contains different cities, this filter is available. Returns only results where the cities match. The values must be TravelAPI entity ids
chain
OPTIONAL
OR filter. Return only results where a hotel chains matches. The values must be TravelAPI ids
amenities
OPTIONAL
AND filter. Return only results where all amenities match. The values must be TravelAPI ids
cancellation
OPTIONAL
OR filter. Return only results where a cancellation policies matches. Options are:
free_cancellation, non_refundable, refundable, special_conditions
meal_plan
OPTIONAL
OR filter. Return only results where a meal plan matches. Options are:
room_only, breakfast_included, half_board, full_board, all_inclusive
property_type
OPTIONAL
OR filter. Return only results where an accommodation type matches. The values must be TravelAPI ids
hotel_name
OPTIONAL
Filter. Return only results where hotel name matches
limit
OPTIONAL
Number of results to retrieve
between 1-30, default: 30
offset
OPTIONAL
How many results to skip from the first position. Useful for paginating
default: 0
partners_per_hotel
OPTIONAL
Maximum numbers of partners to retrieve per each hotel. Note that 0 means all the available partners
default: 3
enhanced
OPTIONAL
This parameter allows you to add additional content to the default response. The available options are:
filters: Returns extra object in the response including the filters like stars, district, city, etc.
price_slider: Return the price_slider.
partners: Returns information about the active partners in the system. is_official, the logo, the name and the website_id.
images: Returns images for the hotels. With the partner website_id and the urls.
amenities: Returns the hotels amenities.
query_location: Returns the location (higher level entities according to the searched entity) and map boundary (the coordinates of the search area).
extras: Returns the hotel chain of the hotels.
translations: Returns a dictionary with all literals and their corresponding translations using the request locale.

Note: The OR and AND filters allow multiple values coma separated. For example: &amenities=Lift,Bar

Response

The response is the same as the search entity one but without the hotel_pivot

RESPONSE PARAMETERS

Element Detail
correlation_id An identifier of the request
meta Contains metadata regarding the search cycle such as it’s status
count Number of hotels
results An object containing the hotels and the enhancers if requested
translations Only with the translations enhanced. Dictionary with all literals that can be translated

Search Prices, map version

Entity Request

Given an entity, this endpoint will give you back the hotels with prices around the provided entity, having the same intentions than the regular search prices but modifying the response to suit it in environments where the information has to be rendered in a map. These differences can be summarized into the following points:

API endpoint

GET /v1/prices/map/entity/{entity_id}

GET "https://gateway.skyscanner.net/hotels/v1/prices/map/entity/{entity_id}
  ?market={market}&locale={locale}&checkin_date={checkin_date}&checkout_date={checkout_date}
  &currency={currency}&adults={adults}&rooms={rooms}&images={images}&image_resolution={resolution}
  &image_type={type}&boost_official_partners={boost}&sort={sort_method}&limit={limit}&offset={offset}
  &partners_per_hotel={num_partners}&enhanced={enhanced}&bbox={left,bottom,right,top}"

TRY IT OUT

Run in Postman

HEADER VALUES

Header Value
apikey
REQUIRED
This header is required to be on every single request any client does (it could also be accepted via query parameter)
x-user-agent
REQUIRED
Indicates which is the device and the platform related to the client. The format for that header is device;B2B, where:
Device is:
T for tablet
D for desktop
M for mobile
N if you are not able to detect the device type

URI PARAMETERS

Parameter Description
entity_id
REQUIRED
Entity to search for hotels prices in it
version
REQUIRED
API version

QUERY PARAMETERS

Parameter Description
market
REQUIRED
Matching [A-Z]{2}
locale
REQUIRED
Matching [a-z]{2}-[A-Z]{2}
currency
REQUIRED
Currency code
checkin_date
REQUIRED
YYYY-MM-DD
checkout_date
REQUIRED
YYYY-MM-DD
rooms
REQUIRED
Number of rooms
default: 1
adults
REQUIRED
Number of adults
default: 2
apikey
REQUIRED
This parameter is required to be on every single request any client does
images
OPTIONAL
Maximum number of images to retrieve per each hotel
between 1-30, default: 3
image_resolution
OPTIONAL
Resolution options
high or low, default: high
image_type
OPTIONAL
The format of the images
thumbnail or gallery
boost_official_partners
OPTIONAL
Indicates whether prices from official partners must be shown in the first place [1] or not [0]
default: 0
sort
OPTIONAL
Sort by a given attribute. By default the relevance sorting is applied
One of: relevance, -relevance, price, -price, distance, -distance, rating, -rating, stars, -stars
price_min
OPTIONAL
Filter. Return only hotels where the cheaper price is at least price_min (included). Cannot be used together with price_buckets
price_max
OPTIONAL
Filter. Return only hotels where the cheaper price is at most price_max (included). Cannot be used together with price_buckets
price_buckets
OPTIONAL
OR filter. Return only hotels with offers inside the specified buckets. Cannot be used together with price_min/price_max
district
OPTIONAL
OR filter. Return only results where a district matches
stars
OPTIONAL
OR filter. Return only results where a star category matches. The values must be TravelAPI ids
city
OPTIONAL
OR filter. When the search is done for an entity that contains different cities, this filter is available. Returns only results where the cities match. The values must be TravelAPI entity ids
chain
OPTIONAL
OR filter. Return only results where a hotel chains matches. The values must be TravelAPI ids
amenities
OPTIONAL
AND filter. Return only results where all amenities match. The values must be TravelAPI ids
cancellation
OPTIONAL
OR filter. Return only results where a cancellation policies matches. Options are:
free_cancellation, non_refundable, refundable, special_conditions
meal_plan
OPTIONAL
OR filter. Return only results where a meal plan matches. Options are:
room_only, breakfast_included, half_board, full_board, all_inclusive
property_type
OPTIONAL
OR filter. Return only results where an accommodation type matches. The values must be TravelAPI ids
hotel_name
OPTIONAL
Filter. Return only results where hotel name matches
limit
OPTIONAL
Number of results to retrieve
between 1-100, default: 100
offset
OPTIONAL
How many results to skip from the first position. Useful for paginating
default: 0
partners_per_hotel
OPTIONAL
Maximum numbers of partners to retrieve per each hotel. Note that 0 means all the available partners. Map only supports 1 partner per hotel
default: 1
enhanced
OPTIONAL
This parameter allows you to add additional content to the default response. The available options are:
filters: Returns extra object in the response including the filters like stars, district, city, etc.
price_slider: Return the price_slider.
query_location: Returns the location (higher level entities according to the searched entity) and map boundary (the coordinates of the search area).
translations: Returns a dictionary with all literals and their corresponding translations using the request locale.
bbox
OPTIONAL
Bounding Box coordinates in which to look for hotels as bbox=left,bottom,right,top
Example: -4.051,50.478,1.853,52.909

Note: The OR and AND filters allow multiple values coma separated. For example: &amenities=Lift,Bar

Response

Example response:

{
  "correlation_id": "d93ddb4d-c97c-4979-9627-e188e02c8409",
  "meta": {
    "status": "COMPLETED",
    "total": 5500,
    "total_available": 4092,
    "completion_percentage": 100,
    "offers": 67275,
    "hotels_filtered": 0
  },
  "count": 15,
  "results": {
    "filters": {
      "district": [
        {
          "id": "27562177",
          "min_price": 45,
          "max_price": null,
          "count": 94
        },
        ...
      ],
      "chain": [
        {
          "id": "Holiday Inn",
          "min_price": 74,
          "max_price": null,
          "count": 74
        },
        ...
      ],
      "cancellation": [
        {
          "id": "free_cancellation",
          "min_price": 36,
          "max_price": null,
          "count": 2207
        },
        ...
      ],
      "city": [
        {
          "id": "27544008",
          "min_price": 32,
          "max_price": null,
          "count": 856
        },
        ...
      ],
      "amenities": [
        {
          "id": "WifiService",
          "min_price": 32,
          "max_price": null,
          "count": 3327
        },
        ...
      ],
      "price_buckets": [
        {
          "id": "PR_BK_0",
          "min_price": null,
          "max_price": 80,
          "count": 130
        },
        ...
      ],
      "stars": [
        {
          "id": "4",
          "min_price": 58,
          "max_price": null,
          "count": 1220
        },
        ...
      ],
      "meal_plan": [
        {
          "id": "room_only",
          "min_price": 32,
          "max_price": null,
          "count": 2060
        },
        ...
      ],
      "property_type": [
        {
          "id": "Hotel",
          "min_price": 32,
          "max_price": null,
          "count": 3486
        },
        ...
      ]
    },
    "map_boundary": {
      "n_e_lng": 1.72864,
      "s_w_lng": -2.04675,
      "s_w_lat": 50.63341,
      "n_e_lat": 52.7619
    },
    "hotel_pivot": null,
    "hotels": [
      {
        "reviews_count": 284,
        "coordinates": [
          1.2961,
          51.12328
        ],
        "hotel_id": "46997257",
        "images": [
          {
            "provider": "h_dp",
            "gallery": "http://d3ba47lalua02r.cloudfront.net/available/50049482/mca.jpg",
            "thumbnail": "http://d3ba47lalua02r.cloudfront.net/available/50049482/mt.jpg"
          }
        ],
        "name": "The West Bank Guest House",
        "offers": [
          {
            "price_gbp": 58,
            "price": 58,
            "deeplink": "www.skyscanner.net/hotel_deeplink/4.0/UK/en-GB/GBP/h_xp/46997257/2017-04-30/2017-05-02/hotel/hotel/hotels?guests=1&ticket_price=58&rooms_left=1&appVersion=2.0&q_datetime_utc=2017-04-25T13%3A37%3A37&rooms=1&deeplink_ids=eu-west-1.prod_ae42baa45b08402e0a109287d1780528&request_id=b745fa26-f166-478f-b52c-2fcee3f413fe&appName=web&legacy_provider_id=1&max_price=132.0",
            "closed_user_groups": null
          }
        ],
        "stars": "4",
        "rating": {
          "value": 7.7,
          "desc": "rating_good"
        }
      },
      ...
    ],
    "location": [
      {
        "name": "United Kingdom",
        "entity_id": "29475375",
        "entity_type": "Nation"
      }
    ]
  },
  "translations": {
    "CUG_create_account_to_unlock_deals_msg": "Create an account to unlock exclusive deals",
    "CUG_deal": "DEAL",
    ...
  }
}

RESPONSE PARAMETERS

Element Detail
correlation_id An identifier of the request
meta Contains metadata regarding the search cycle such as it’s status
count Number of hotels
results An object containing the hotels and the enhancers if requested
translations Only with the translations enhanced. Dictionary with all literals that can be translated

Location Request

This endpoint gives back hotels with prices too with map specific features but instead from an entity, around specific coordinates.

Provides the search by current location functionality.

API endpoint

GET /v1/prices/map/location/{lon,lat}

GET "https://gateway.skyscanner.net/hotels/v1/prices/map/location/{lon,lat}
  ?market={market}&locale={locale}&checkin_date={checkin_date}&checkout_date={checkout_date}
  &currency={currency}&adults={adults}&rooms={rooms}&images={images}&image_resolution={resolution}
  &image_type={type}&boost_official_partners={boost}&sort={sort_method}&limit={limit}&offset={offset}
  &partners_per_hotel={num_partners}&enhanced={enhanced}&bbox={left,bottom,right,top}"

TRY IT OUT

Run in Postman

HEADER VALUES

Header Value
apikey
REQUIRED
This header is required to be on every single request any client does (it could also be accepted via query parameter)
x-user-agent
REQUIRED
Indicates which is the device and the platform related to the client. The format for that header is device;B2B, where:
Device is:
T for tablet
D for desktop
M for mobile
N if you are not able to detect the device type

URI PARAMETERS

Parameter Description
location
REQUIRED
Location to search hotels near it. Following the format: lon,lat
version
REQUIRED
API version

QUERY PARAMETERS

Parameter Description
market
REQUIRED
Matching [A-Z]{2}
locale
REQUIRED
Matching [a-z]{2}-[A-Z]{2}
currency
REQUIRED
Currency code
checkin_date
REQUIRED
YYYY-MM-DD
checkout_date
REQUIRED
YYYY-MM-DD
rooms
REQUIRED
Number of rooms
default: 1
adults
REQUIRED
Number of adults
default: 2
apikey
REQUIRED
This parameter is required to be on every single request any client does
images
OPTIONAL
Maximum number of images to retrieve per each hotel
between 1-30, default: 3
image_resolution
OPTIONAL
Resolution options
high or low, default: high
image_type
OPTIONAL
The format of the images
thumbnail or gallery
boost_official_partners
OPTIONAL
Indicates whether prices from official partners must be shown in the first place [1] or not [0]
default: 0
sort
OPTIONAL
Sort by a given attribute. By default the relevance sorting is applied
One of: relevance, -relevance, price, -price, distance, -distance, rating, -rating, stars, -stars
price_min
OPTIONAL
Filter. Return only hotels where the cheaper price is at least price_min (included). Cannot be used together with price_buckets
price_max
OPTIONAL
Filter. Return only hotels where the cheaper price is at most price_max (included). Cannot be used together with price_buckets
price_buckets
OPTIONAL
OR filter. Return only hotels with offers inside the specified buckets. Cannot be used together with price_min/price_max
district
OPTIONAL
OR filter. Return only results where a district matches
stars
OPTIONAL
OR filter. Return only results where a star category matches. The values must be TravelAPI ids
city
OPTIONAL
OR filter. When the search is done for an entity that contains different cities, this filter is available. Returns only results where the cities match. The values must be TravelAPI entity ids
chain
OPTIONAL
OR filter. Return only results where a hotel chains matches. The values must be TravelAPI ids
amenities
OPTIONAL
AND filter. Return only results where all amenities match. The values must be TravelAPI ids
cancellation
OPTIONAL
OR filter. Return only results where a cancellation policies matches. Options are:
free_cancellation, non_refundable, refundable, special_conditions
meal_plan
OPTIONAL
OR filter. Return only results where a meal plan matches. Options are:
room_only, breakfast_included, half_board, full_board, all_inclusive
property_type
OPTIONAL
OR filter. Return only results where an accommodation type matches. The values must be TravelAPI ids
hotel_name
OPTIONAL
Filter. Return only results where hotel name matches
limit
OPTIONAL
Number of results to retrieve
between 1-100, default: 100
offset
OPTIONAL
How many results to skip from the first position. Useful for paginating
default: 0
partners_per_hotel
OPTIONAL
Maximum numbers of partners to retrieve per each hotel. Note that 0 means all the available partners. Map only supports 1 partner per hotel
default: 1
enhanced
OPTIONAL
This parameter allows you to add additional content to the default response. The available options are:
filters: Returns extra object in the response including the filters like stars, district, city, etc.
price_slider: Return the price_slider.
query_location: Returns the location (higher level entities according to the searched entity) and map boundary (the coordinates of the search area).
translations: Returns a dictionary with all literals and their corresponding translations using the request locale.
bbox
OPTIONAL
Bounding Box coordinates in which to look for hotels as bbox=left,bottom,right,top
Example: -4.051,50.478,1.853,52.909

Note: The OR and AND filters allow multiple values coma separated. For example: &amenities=Lift,Bar

Response

The response is the same as the search map entity one

RESPONSE PARAMETERS

Element Detail
correlation_id An identifier of the request
meta Contains metadata regarding the search cycle such as it’s status
count Number of hotels
results An object containing the hotels and the enhancers if requested
translations Only with the translations enhanced. Dictionary with all literals that can be translated

Hotel Prices

Request

Given a hotel, this endpoint will give back the hotel with all the information and live prices. To reuse the prices already fetched by previous calls to the search endpoint the parameter entity_id must be filled with the same entity id. Otherwise, the system will start fetching prices from the beginning for this specific hotel. Is a regular practice following the user flow first of all search for prices using the search prices endpoint and then retrieve more specific information - perhaps the detailed reviews - about one of the hotels using the hotel prices endpoint.

API endpoint

GET /v1/prices/hotel/{hotel_id}

GET "https://gateway.skyscanner.net/hotels/v1/prices/hotel/{hotel_id}
  ?entity_id=27539733&market={market}&locale={locale}&checkin_date={checkin_date}&checkout_date={checkout_date}
  &currency={currency}&adults={adults}&rooms={rooms}&images={images}&image_resolution={resolution}
  &image_type={type}&boost_official_partners={boost}&partners_per_hotel={num_partners}"

TRY IT OUT

Run in Postman

HEADER VALUES

Header Value
apikey
REQUIRED
This header is required to be on every single request any client does (it could also be accepted via query parameter)
x-user-agent
REQUIRED
Indicates which is the device and the platform related to the client. The format for that header is device;B2B, where:
Device is:
T for tablet
D for desktop
M for mobile
N if you are not able to detect the device type

URI PARAMETERS

Parameter Description
hotel_id
REQUIRED
Hotel to search prices for
version
REQUIRED
API version

QUERY PARAMETERS

Parameter Description
market
REQUIRED
Matching [A-Z]{2}
locale
REQUIRED
Matching [a-z]{2}-[A-Z]{2}
currency
REQUIRED
Currency code
checkin_date
REQUIRED
YYYY-MM-DD
checkout_date
REQUIRED
YYYY-MM-DD
rooms
REQUIRED
Number of rooms
default: 1
adults
REQUIRED
Number of adults
default: 2
apikey
REQUIRED
This parameter is required to be on every single request any client does
images
OPTIONAL
Maximum number of images to retrieve per each hotel
between 1-30, default: 3
image_resolution
OPTIONAL
Resolution options
high or low, default: high
image_type
OPTIONAL
The format of the images
thumbnail or gallery
boost_official_partners
OPTIONAL
Indicates whether prices from official partners must be shown in the first place [1] or not [0]
default: 0
partners_per_hotel
OPTIONAL
Maximum numbers of partners to retrieve per each hotel. Note that 0 means all the available partners
default: 3
enhanced
OPTIONAL
This parameter allows you to add additional content to the default response. The available options are:
location: Returns the higher level entities according to the search entity.
translations: Returns a dictionary with all literals and their corresponding translations using the request locale.
entity_id
OPTIONAL
This field should be present when this endpoint has been called when the user has already looked for prices in an upper entity containing the hotel in order to reuse the cached prices.
For example: A user searches for prices in Paris (the service stores Paris prices). And then, the user opens a hotel details page. In this case, the request to the service must have the entity_id param fulfilled with the Paris entity_id in order to reuse the prices.

Response

Example response:

{
  "meta": {
    "offers": 2,
    "status": "COMPLETED",
    "completion_percentage": 100
  },
  "results": {
    "location": [
      {
        "name": "Barcelona",
        "entity_id": "27548283",
        "entity_type": "City"
      },
      ...
    ],
    "hotel": {
      "district": "27562628",
      "name_en": "Hotel Via Augusta",
      "name": "Hotel Via Augusta",
      "hotel_id": "46958001",
      "total_rooms": 207,
      "stars": "2",
      "reviews_count": 1496,
      "amenities": [
        "Lift",
        "Laundry",
        "AirConditioning",
        "DailyNewspaperService",
        "Balcony",
        "FrontDesk24hService",
        "SafeDepositBox",
        "WifiService",
        "Parking",
        "DisabledFacility",
        "LuggageStorage",
        "MultilingualStaffService"
      ],
      "city": "27548283",
      "offers": [
        {
          "price_gbp": 1669,
          "closed_user_groups": null,
          "room_type": [
            "triple",
            "triple",
            "triple"
          ],
          "meal_plan": "breakfast_included",
          "strike_through": 1967,
          "deeplink": "www.skyscanner.net/hotel_deeplink/4.0/UK/en-GB/GBP/h_ka/46958001/2017-06-29/2017-07-05/hotel/hotel/hotels?request_id=15834838-f028-400a-bb4f-ed39025cf9e1&deeplink_ids=eu-west-1.prod_092a61636486890f4d9c56373a981f94&appName=web&ticket_price=1669&guests=7&q_datetime_utc=2017-04-24T15%3A15%3A07&legacy_provider_id=249&appVersion=2.0&rooms=3&max_price=1967.0",
          "cancellation": null,
          "partner_id": "h_ka",
          "available": null,
          "cancellation_text": null,
          "is_official": false,
          "price": 1669
        },
        ...
      ],
      "address": {
        "district": "Sant Gervasi",
        "city": "Barcelona",
        "adm1": "Catalonia",
        "nation": "Spain",
        "postcode": "08006",
        "street_address": "Via Augusta, 63"
      },
      "description": "https://d19i3hu78g2w6f.cloudfront.net/75be_HOTEL_18576_148_en-GB",
      "rating": {
        "value": 8.2,
        "desc": "rating_very_good"
      },
      "chain": null,
      "reviews": {
        "guest_types": [
          {
            "value": "couple",
            "score": 82,
            "perc": 51
          },
          ...
        ],
        "count": 1496,
        "summary": "Very good budget hotel. Close to restaurants, bars and public transportation. Popular among solo travelers. “Friendly staff”. “Good breakfast”. ",
        "categories": [
          {
            "entries": [
              "Fantastic service",
              "Friendly staff",
              "Very friendly multilingual staff",
              "Good service"
            ],
            "score": 94,
            "name": "Service"
          },
          ...
        ]
      },
      "property_type": "Hotel",
      "coordinates": [
        2.15145,
        41.40005
      ],
      "images": [
        {
          "provider": "h_dp",
          "thumbnail": "http://d3ba47lalua02r.cloudfront.net/available/47224844/rmt.jpg",
          "gallery": "http://d3ba47lalua02r.cloudfront.net/available/47224844/rmca.jpg"
        },
        ...
      ]
    },
    "partners": [
      {
        "is_official": true,
        "name": "Adagio Access",
        "logo": "www.skyscanner.net/images/websites/220x80/h_as.png",
        "website_id": "h_as"
      },
      ...
    ]
  },
  "translations": {
    "CUG_create_account_to_unlock_deals_msg": "Create an account to unlock exclusive deals",
    "CUG_deal": "DEAL",
    ...
  }
}

RESPONSE PARAMETERS

Element Detail
meta Contains metadata regarding the search cycle such as it’s status
results An object containing the hotel and the enhancers if requested
translations Only with the translations enhanced. Dictionary with all literals that can be translated

Localisation

All Skyscanner services are localised by market, language and currency, so these three parameters must be added to every request.

Locales

Retrieve the locales that we support to translate your content.

GET "http://partners.api.skyscanner.net/apiservices/
    reference/v1.0/locales?
    apiKey={apiKey}"

API endpoint

GET /reference/v1.0/locales

Try it out

Run in Postman

REQUEST PARAMETERS

Parameter Description
apiKey
REQUIRED
Your API Key.

Example response

{
  "Locales": [
    {
      "Code": "ar-AE",
      "Name": "العربية (الإمارات العربية المتحدة)"
    },
    {
      "Code": "az-AZ",
      "Name": "Azərbaycan­ılı (Azərbaycan)"
    },
    {
      "Code": "bg-BG",
      "Name": "български (България)"
    },
    {
      "Code": "ca-ES",
      "Name": "català (català)"
    },
  ...
  ]
}

RESPONSE PARAMETERS

Parameter Description
Locales Contains the list of locales that we support with name and code.

Currencies

Retrieve the currencies that we support.

GET "http://partners.api.skyscanner.net/apiservices/
    reference/v1.0/currencies?
    apiKey={apiKey}"

API endpoint

GET /reference/v1.0/currencies

Try it out

Run in Postman

REQUEST PARAMETERS

Parameter Description
apiKey
REQUIRED
Your API Key.

Example response

{
  "Currencies": [
      {
          "Code": "USD",
          "Symbol": "$",
          "ThousandsSeparator": ",",
          "DecimalSeparator": ".",
          "SymbolOnLeft": true,
          "SpaceBetweenAmountAndSymbol": false,
          "RoundingCoefficient": 0,
          "DecimalDigits": 2
      },
  ...
  ]
}

RESPONSE PARAMETERS

Parameter Description
Currencies The list of currencies that we support, with corresponding symbol and formatting information for internationalisation.

Markets

Retrieve the market countries that we support.

Most suppliers (airlines, travel agents and car hire dealers) set their fares based on the market (or country of purchase). It is therefore necessary to specify the market country in every query.

GET "http://partners.api.skyscanner.net/apiservices/
    reference/v1.0/countries/
    {locale}?
    apiKey={apiKey}"

API endpoint

GET /reference/v1.0/countries/{locale}

Try it out

Run in Postman

REQUEST PARAMETERS

Parameter Description
locale
REQUIRED
The language you want the results in (ISO locale). See locales for locales that we support.
apiKey
REQUIRED
Your API Key.

Example response

{
  "Countries": [
    {
      "Code": "AD",
      "Name": "Andorra"
    },
    {
      "Code": "AE",
      "Name": "United Arab Emirates"
    },
    {
      "Code": "AF",
      "Name": "Afghanistan"
    },
  ...
  ]
}

RESPONSE PARAMETERS

Parameter Description
Countries Contains the list of markets (array of countries as name-value pairs).

Places

Places can be of 4 different types:

  1. Country
  2. City
  3. Airport
  4. Anywhere (flights browse API)

You can use any of the following endpoints to get information about places:

List of places

Get a list of places that match a query string.

GET "http://partners.api.skyscanner.net/apiservices/
    autosuggest/v1.0/{country}/{currency}/{locale}?
    query={query}&
    apiKey={apiKey}"

API endpoint

GET /autosuggest/v1.0/{market}/{currency}/{locale}

Try it out

Run in Postman

REQUEST PARAMETERS

Parameter Description
country
REQUIRED
The market/country your user is in
currency
REQUIRED
The currency you want the prices in
locale
REQUIRED
The locale you want the results in (ISO locale)
query
REQUIRED
The query string, must be at least 2 characters long.
apiKey
REQUIRED
Your API Key.

Example response for query=pari

{
  "Places": [
    {
      "PlaceId": "PARI-sky",
      "PlaceName": "Paris",
      "CountryId": "FR-sky",
      "RegionId": "",
      "CityId": "PARI-sky",
      "CountryName": "France"
    },
    {
      "PlaceId": "CDG-sky",
      "PlaceName": "Paris Charles de Gaulle",
      "CountryId": "FR-sky",
      "RegionId": "",
      "CityId": "PARI-sky",
      "CountryName": "France"
    },
    {
      "PlaceId": "ORY-sky",
      "PlaceName": "Paris Orly",
      "CountryId": "FR-sky",
      "RegionId": "",
      "CityId": "PARI-sky",
      "CountryName": "France"
    },
  ...
  ]
}

RESPONSE PARAMETERS

Parameter Description
Places Contains the list of places that match the query string. The places can be countries, cities or airports.

Place Information

Get information about a country, city or airport using its ID.

API endpoint

GET /autosuggest/v1.0/{country}/{currency}/{locale}

Try it out

Run in Postman

GET "http://partners.api.skyscanner.net/apiservices/
    autosuggest/v1.0/{market}/{currency}/{locale}?
    id={place_id}&
    apiKey={apiKey}"

REQUEST PARAMETERS

Parameter Description
country
REQUIRED
The market/country your user is in
currency
REQUIRED
The currency you want the prices in
locale
REQUIRED
The locale you want the results in (ISO locale)
id
REQUIRED
The place id (e.g. “CDG-sky”) or the user’s ip address (e.g. “188.39.95.140-ip”)
apiKey
REQUIRED
Your API Key

Example response for United Kingdom: id=uk

{
  "Places": [
    {
      "PlaceId": "UK-sky",
      "PlaceName": "United Kingdom",
      "CountryId": "UK-sky",
      "CityId": "-sky",
      "CountryName": "United Kingdom"
    }
  ]
}

Example response for Charles de Gaulle airport: id=cdg

{
  "Places": [
    {
      "PlaceId": "CDG-sky",
      "PlaceName": "Paris Charles de Gaulle",
      "CountryId": "FR-sky",
      "CityId": "PARI-sky",
      "CountryName": "France"
    }
  ]
}

Example response for user IP address 188.39.95.140: id=188.39.95.140-ip

{
  "Places": [
    {
      "PlaceId": "LOND-sky",
      "PlaceName": "London",
      "CountryId": "UK-sky",
      "CityId": "LOND-sky",
      "CountryName": "United Kingdom"
    }
  ]
}

RESPONSE PARAMETERS

Parameter Description
Places Contains the information about the place such as name (in chosen locale), city, country.

Geo Catalog

Get the full list of all the places that we support.

GET "http://partners.api.skyscanner.net/apiservices/
    geo/v1.0?
    apiKey={apiKey}"

API endpoint

GET /geo/v1.0

Try it out

Run in Postman

REQUEST PARAMETERS

Parameter Description
apiKey
REQUIRED
Your API Key.

Response extract:

{
  "Continents": [
    {
      "Countries": [
        {
          "CurrencyId": "AFN",
          "Regions": [],
          "Cities": [
            {
              "SingleAirportCity": true,
              "Airports": [
                {
                  "CityId": "BINA",
                  "CountryId": "AF",
                  "Location": "67.823611, 34.804167",
                  "Id": "BIN",
                  "Name": "Bamiyan"
                }
              ],
              "CountryId": "AF",
              "Location": "67.823611, 34.804167",
              "IataCode": "BIN",
              "Id": "BINA",
              "Name": "Bamiyan"
            },
            ...
          ]
        },
        ...
      ]
    },
    ...
  ]
 }

RESPONSE PARAMETERS

Parameter Description
Continents Contains the list of all the continents.
Countries Contains the list of all the countries.
Regions Contains the list of all the regions.
Cities Contains the list of all the cities.
Airports Contains the list of all the airports.

Schemas

Example place codes:

EDIN-sky
CDG-iata
-37.4849,144.5747-latlong

Each place can be referred to via different schemas, described below.

SCHEMAS

Parameter Description
sky Skyscanner code. The response from Autosuggest provides these ids.
iata / iso Airports and cities often use the internationally recognized IATA and ISO schemas.
For Flights we recommend that you use the Skyscanner code which is very similar but solves ambiguous cases where a city and one of its airports share the same code. For Car Hire please use the IATA code.
latlong Latitude and longitude of the place in the following form: “latitude,longitude”. The nearest city with airport will be used.
ip IP of a user. The nearest city with airport will be used. Format: 188.39.95.93
GeoNameCodes GeoNameCodes from the GeoNames schema (see geonames.org)
GeoNameIDs GeoNameIDs from the GeoNames schema (see geonames.org)

If the default Skyscanner schema is not used, the schema name must be appended to the place id as follows: placeCode-locationSchema

Hotels Autosuggest

Retrieve a list of hotels and/or geographical locations which can then be used witht the hotels and car hire APIs. In the case of car hire, use this if you want downtown (non-airport) searches.

GET "http://gateway.skyscanner.net/autosuggest/v3/hotels?
    q=lond&
    market=US&
    locale=en-US

REQUEST PARAMETERS

Parameter Description
q User query. If empty, will return most popular places for the market based on market distance and number of hotels
locale The locale you want the results in (ISO locale)
market The market your user is in
limit_geopolitical Only show results that are contained within any of the provided geopolitical entities (specified by its IDs, comma separated).
exclude_geopolitical Only show results that are NOT contained in any of the provided geopolitical entities (specified by its IDs, comma separated).

Example response for ’?q=lond&locale=en-GB’

{
  "results": [
    {
      "id": "27544008",
      "localised_name": "London",
      "localised_type": "City",
      "type": "City",
      "geo_containers": [
        {
          "id": "44293288",
          "localised_name": "England",
          "localised_type": "Region",
          "type": "FirstLevelNationAdministrativeDivision"
        },
        {
          "id": "29475375",
          "localised_name": "United Kingdom",
          "localised_type": "Country",
          "type": "Nation"
        }
      ]
    },
    ...
  ]
}

RESPONSE PARAMETERS

Parameter Description
results Contains a list of results for the query in order of relevance
id Can be used as an input to the Hotels Pricing Service or to query geo
localised_name Entity name in the provided locale
localised_type Contains the type in the locale used in the query
type Identify the type of the entity (City, District, Hotel, …)
geo_containers The list of parent locations that contain one another in order (e.g. England, United Kingdom for London)

Booking Redirects

In addition to price information, your users will need a url that redirects them to where they can book their ticket.

You can either:

To Skyscanner

Flights

Link to the Skyscanner website with the details of the search query pre-populated. This provides a more straightforward option for partners who do not require a full implementation of a travel search product within their applications.

If the query isn’t specific enough to link to a specific ‘day view’ page, it will link to a more general browse page, where the user will be asked to refine the search criteria (by date, origin and/or destination).

GET "http://partners.api.skyscanner.net/apiservices/
    referral/v1.0/{country}/{currency}/{locale}/
    {originPlace}/{destinationPlace}/
    {outboundPartialDate}/{inboundPartialDate}
    ?apiKey={shortApiKey}"

API endpoint

/referral/v1.0/{country}/{currency}/{locale}/{originPlace}/{destinationPlace}/{outboundPartialDate}/{inboundPartialDate}

REQUEST PARAMETERS

Parameter Description
country
REQUIRED
The market country your user is in
currency
REQUIRED
The currency you want the prices in
locale
REQUIRED
The locale you want the results in (ISO locale)
originPlace
REQUIRED
The origin place (see places)
destinationPlace
REQUIRED
The destination place (see places)
outboundPartialDate
REQUIRED
The outbound date. Format “yyyy-mm-dd”, “yyyy-mm” or “anytime”.
inboundPartialDate
OPTIONAL
The return date. Format “yyyy-mm-dd”, “yyyy-mm” or “anytime”. Use empty string for oneway trip.
shortApiKey
REQUIRED
The first 16 characters of your API Key

EXAMPLE REDIRECT

http://partners.api.skyscanner.net/apiservices/referral/v1.0/GB/GBP/en-GB/EDI/CDG/2017-12-12/2017-12-20?apiKey=prtl674938798674


Car Hire

Link to the Skyscanner website with the details of the car hire search query pre-populated.

GET "http://partners.api.skyscanner.net/apiservices/
    referral/v1.0/{country}/{currency}/{locale}/
    {pickupPlace}/{dropoffPlace}/
    {pickupDateTime}/{dropoffDateTime}
    ?product=carhire
    &pickUpTime={pickupTime}&dropOffTime={dropoffTime}
    &driverAge={driverAge}
    &apiKey={shortApiKey}"

API endpoint

/referral/v1.0/{country}/{currency}/{locale}/{pickupPlace}/{dropoffPlace}/{pickupDateTime}/{dropoffDateTime}

REQUEST PARAMETERS

Parameter Description
country
REQUIRED
The market country your user is in
currency
REQUIRED
The currency you want the prices in
locale
REQUIRED
The locale you want the results in (ISO locale)
pickupPlace
REQUIRED
The pickup location. IATA code or a latitude,longitude pair formatted as lat,lon-latlong e.g. /55.95,-3.37-latlong/
dropoffPlace
REQUIRED
The dropoff location. IATA code or a latitude,longitude pair formatted as lat,lon-latlong e.g. /55.95,-3.37-latlong/
pickupDateTime
REQUIRED
Date for pickup. Formatted as ISO Date and Time format: YYYY-MM-DD
dropoffDateTime
OPTIONAL
Date for dropoff. Formatted as ISO Date and Time format: YYYY-MM-DD
shortApiKey
REQUIRED
The first 16 characters of your API Key
driverAge
REQUIRED
Must be between 21 and 75 (inclusive).
product
REQUIRED
Must be set to carhire
pickUpTime
OPTIONAL
Time for pickup. Formatted as ISO Date and Time format: hh:mm
dropOffTime
OPTIONAL
Time for pickup. Formatted as ISO Date and Time format: hh:mm

EXAMPLE REDIRECT

http://www.api.prod.skyscanner.local/apiservices/referral/v1.0/UK/GBP/en-GB/LHR/EDI/2017-04-02/2017-04-16?product=carhire&pickUpTime=10:00&dropOffTime=12:00&driverAge=27?apiKey=prtl674938798674

To the supplier

Example deeplink

"PricingOptions": [
        {
          "Agents": [
            4499211
          ],
          "QuoteAgeInMinutes": 0,
          "Price": 83.41,
          "DeeplinkUrl": "http://partners.api.skyscanner.net/apiservices/deeplink/v2?_cje=jzj5DawL5zJyT%2bnfe1..."
        },

When using flights live prices or car hire live prices urls (or deeplinks) are provided in the response to redirect users to the third-party supplier’s website with the details of the itinerary that was selected.

deeplink page

You can customise the redirect page by replacing the default logo with your own logo. Please see How can I put my logo on the redirect page? for more information.

See how it looks with your logo

Response Codes

Our APIs use the following response codes:

RESPONSE CODES

Error Code Meaning
200 Success
204 No content - the session is still being created (wait and try again).
304 Not Modified – the results have not been modified since the last poll.
400 Bad Request – Input validation failed.
403 Forbidden – The API Key was not supplied, or it was invalid, or it is not authorized to access the service.
410 Gone – the session has expired. A new session must be created.
429 Too Many Requests – There have been too many requests in the last minute.
500 Server Error – An internal server error has occurred which has been logged.