Skip to main content

Refresh Prices

A request for refresh prices will return the most up-to-date prices for the selected itinerary. Some of the prices returned in the previous requests might be cached and slightly older. By creating a refresh prices session you'll receive the most up-to-date price which we can get from our partners.

Sample requests

/itineraryrefresh/create

In the response from the /create retrieve the sessionToken and paste it in the /itineraryrefresh/create URI replacing the SESSION_TOKEN placeholder below. Also replace the ITINERARY_ID placeholder with the itinerary id requested for price refresh:

curl --request POST 'https://partners.api.skyscanner.net/apiservices/v3/flights/live/itineraryrefresh/create/SESSION_TOKEN-cells1' --header 'x-api-key: your-api-key' --data ' {
"itineraryId": "ITINERARY_ID"
}'

/itineraryrefresh/poll

In the response from the /itineraryrefresh/create retrieve the refreshToken and paste it in the /itineraryrefresh/poll URI replacing the REFRESH_SESSION_TOKEN placeholder as below:

curl --location --request GET 'https://partners.api.skyscanner.net/apiservices/v3/flights/live/itineraryrefresh/poll/REFRESH_SESSION_TOKEN' --header 'x-api-key: your-api-key'

Performance

When it comes to the performance metrics related to itinerary refresh, it's important to consider the time it takes for the search to be completed, which can vary depending on the age of the session (the amount of time since the original live prices search).

Within 10 minutes

Refresh requests within 10 minutes of the initial search are likely to complete immediately. This is because we cache prices, with a TTL of 10 minutes to ensure price accuracy.

Between 10 minutes and 1 hour

If the refresh request is made between 10 minutes and 1 hour after the initial search, there may be an increase in the time it takes the refresh to complete. This is because fresh quotes and prices may need to be fetched from our supply partners, which takes some additional time compared to returning cached data. Note that even though performance may be affected, it enables us to return more accurate prices.

More than 1 hour

If the refresh request is made more than 1 hour after the initial search, there is a further increase in the time it takes the refresh to complete. In such cases, a new full search is required to generate fresh itineraries and quotes. This process is similar to performing a new flight search from scratch, which takes longer to obtain updated results.

Overall, our API provides efficient itinerary refresh capabilities with varying performance based on the time elapsed since the initial search. The API's performance is optimized for quick updates within the first hour, while longer durations may result in increased time for the refresh to complete, as fresh data is retrieved.

Fare Attribute Data

tip

This feature is only accessible by selected partners on an approval basis. If you want to enquire about more information, please reach out to your Account Manager for more information.

Fare attributes are a set of fields that describe the availability and cost of additional services such as cabin baggage, checked baggage, cancellation policies, or seat reservations for a given pricing option. Within the Refresh Prices flow, these attributes are exposed in two complementary ways:

  • pricingOptionFare - details the fare attributes available for each individual pricing option (e.g., whether checked baggage is included, what the cancellation policy is).
  • fareAttributeFilters - provides a pre-computed mapping of fare attributes to pricing option IDs, which makes it easy to filter options in the UI (e.g., only show options that include a checked bag).

Skyscanner example

On the Booking Panel screen, users can see all pricing options for a given itinerary. Fare attribute data powers both the information displayed and the filtering options:

FeatureDescription
Included Attributes (blue highlight)The section in blue shows whether cabin and checked baggage are included in the fare. This is mapped from the pricingOptionFare object for each pricing option, where data is available.
Filter Controls (red highlight)The section in red contains buttons such as Cabin Bag and Checked Bag. These labels represent specific fare attributes. When a user selects one or more attributes, the list of pricing options is filtered to only include those options that match. This filtering is powered by the fareAttributeFilters field.

For example, if the user selects Checked Bag, only the pricing options where a checked bag is included in the fare will remain visible.

Sample request for fare attribute data

There is no need to add any additional fields to the request. However, for fare attribute data to be available, you must ensure:

  • Additional attributes feature is enabled for you by speaking to your Account Manager.
  • You are using a market where the feature is supported.
  • Please consider we do not have data for all flight supply partners due to limited coverage.

Sample response with fare attribute data

{
"content": {
"results": {
"itineraries": {
"itinerary-id": {
"pricingOptions": [
{
"agentIds": ["agent"],
"price": {
"amount": "123456",
"unit": "PRICE_UNIT_MILLI",
"updateStatus": "PRICE_UPDATE_STATUS_CURRENT"
},
"id": "id1",
"pricingOptionFare": {
"brandNames": ["ECONOMY_FLEX"],
"legDetails": {
"itinerary-id": {
"brandNames": ["BASIC ECONOMY"],
"cabinBaggage": {
"assessment": "ASSESSMENT_INCLUDED",
"pieces": 1,
"fee": {
"amount": "0",
"unit": "PRICE_UNIT_MILLI"
},
"weight": "50lb"
},
"checkedBaggage": {
"assessment": "ASSESSMENT_FEE",
"pieces": 0,
"fee": {
"amount": "80950000000",
"unit": "PRICE_UNIT_MILLI"
},
"weight": "50lb"
},
"seatPreReservation": {
"assessment": "ASSESSMENT_FEE"
},
"upgradeEligibility": {
"assessment": "ASSESSMENT_UNKNOWN"
}
}
},
"cabinBaggage": {
"assessment": "ASSESSMENT_INCLUDED",
"pieces": 1,
"fee": {
"amount": "0",
"unit": "PRICE_UNIT_MILLI"
},
"weight": ""
},
"checkedBaggage": {
"assessment": "ASSESSMENT_INCLUDED",
"pieces": 1,
"fee": {
"amount": "0",
"unit": "PRICE_UNIT_MILLI"
},
"weight": "23kg"
},
"advanceChange": {
"assessment": "ASSESSMENT_FEE"
},
"cancellation": {
"assessment": "ASSESSMENT_FEE"
},
"seatPreReservation": {
"assessment": "ASSESSMENT_UNKNOWN"
},
"upgradeEligibility": {
"assessment": "ASSESSMENT_UNKNOWN"
}
}
},
{
// ...
}
]
}
},
"fareAttributeFilters": {
"itinerary-id": {
"fareAttributeFilters": [
{
"fareAttributes": [],
"pricingOptionIds": ["id1", "id2", "id3", "id4"]
},
{
"fareAttributes": ["FARE_ATTRIBUTE_CABIN_BAGGAGE"],
"pricingOptionIds": ["id1", "id3"]
},
{
"fareAttributes": ["FARE_ATTRIBUTE_CHECKED_BAGGAGE"],
"pricingOptionIds": ["id1", "id3", "id4"]
},
{
"fareAttributes": [
"FARE_ATTRIBUTE_CABIN_BAGGAGE",
"FARE_ATTRIBUTE_CHECKED_BAGGAGE"
],
"pricingOptionIds": ["id1", "id2"]
}
]
}
}
}
}
}

Fare Attribute Data

tip

This feature is only accessible by selected partners on an approval basis. If you want to enquire about more information, please reach out to your Account Manager for more information.

Fare attributes are a set of fields that describe the availability and cost of additional services such as cabin baggage, checked baggage, cancellation policies, or seat reservations for a given pricing option. Within the Refresh Prices flow, these attributes are exposed in two complementary ways:

  • pricingOptionFare - details the fare attributes available for each individual pricing option (e.g., whether checked baggage is included, what the cancellation policy is).
  • fareAttributeFilters - provides a pre-computed mapping of fare attributes to pricing option IDs, which makes it easy to filter options in the UI (e.g., only show options that include a checked bag).

Skyscanner example

Booking Panel With Highlights

On the Booking Panel screen, users can see all pricing options for a given itinerary. Fare attribute data powers both the information displayed and the filtering options:

FeatureDescription
Included AttributesThe first section shows whether cabin and checked baggage are included in the fare. This is mapped from the pricingOptionFare object for each pricing option, where data is available.
Filter ControlsThe second section contains buttons such as Cabin Bag and Checked Bag. These labels represent specific fare attributes. When a user selects one or more attributes, the list of pricing options is filtered to only include those options that match. This filtering is powered by the fareAttributeFilters field.

For example, if the user selects Checked Bag, only the pricing options where a checked bag is included in the fare will remain visible.

Booking Panel With Filter Selected

Sample request for fare attribute data

There is no need to add any additional fields to the request. However, for fare attribute data to be available, you must ensure:

  • Additional attributes feature is enabled for you by speaking to your Account Manager.
  • You are using a market where the feature is supported.
  • Please consider we do not have data for all flight supply partners due to limited coverage.

Sample response with fare attribute data

{
"content": {
"results": {
"itineraries": {
"itinerary-id": {
"pricingOptions": [
{
"agentIds": ["agent"],
"price": {
"amount": "123456",
"unit": "PRICE_UNIT_MILLI",
"updateStatus": "PRICE_UPDATE_STATUS_CURRENT"
},
"id": "id1",
"pricingOptionFare": {
"brandNames": ["ECONOMY_FLEX"],
"legDetails": {
"itinerary-id": {
"brandNames": ["BASIC ECONOMY"],
"cabinBaggage": {
"assessment": "ASSESSMENT_INCLUDED",
"pieces": 1,
"fee": {
"amount": "0",
"unit": "PRICE_UNIT_MILLI"
},
"weight": "50lb"
},
"checkedBaggage": {
"assessment": "ASSESSMENT_FEE",
"pieces": 0,
"fee": {
"amount": "80950000000",
"unit": "PRICE_UNIT_MILLI"
},
"weight": "50lb"
},
"seatPreReservation": {
"assessment": "ASSESSMENT_FEE"
},
"upgradeEligibility": {
"assessment": "ASSESSMENT_UNKNOWN"
}
}
},
"cabinBaggage": {
"assessment": "ASSESSMENT_INCLUDED",
"pieces": 1,
"fee": {
"amount": "0",
"unit": "PRICE_UNIT_MILLI"
},
"weight": ""
},
"checkedBaggage": {
"assessment": "ASSESSMENT_INCLUDED",
"pieces": 1,
"fee": {
"amount": "0",
"unit": "PRICE_UNIT_MILLI"
},
"weight": "23kg"
},
"advanceChange": {
"assessment": "ASSESSMENT_FEE"
},
"cancellation": {
"assessment": "ASSESSMENT_FEE"
},
"seatPreReservation": {
"assessment": "ASSESSMENT_UNKNOWN"
},
"upgradeEligibility": {
"assessment": "ASSESSMENT_UNKNOWN"
}
}
},
{
// ...
}
]
}
},
"fareAttributeFilters": {
"itinerary-id": {
"fareAttributeFilters": [
{
"fareAttributes": [],
"pricingOptionIds": ["id1", "id2", "id3", "id4"]
},
{
"fareAttributes": ["FARE_ATTRIBUTE_CABIN_BAGGAGE"],
"pricingOptionIds": ["id1", "id3"]
},
{
"fareAttributes": ["FARE_ATTRIBUTE_CHECKED_BAGGAGE"],
"pricingOptionIds": ["id1", "id3", "id4"]
},
{
"fareAttributes": [
"FARE_ATTRIBUTE_CABIN_BAGGAGE",
"FARE_ATTRIBUTE_CHECKED_BAGGAGE"
],
"pricingOptionIds": ["id1", "id2"]
}
]
}
}
}
}
}

API documentation

For more information please see Flights Live Prices API documentation.