Lodging Listings API

The Lodging Listings API allows travellers on your website to search Expedia lodging inventory by Location Keyword, Region ID, Lat/Long, or Hotel ID(s) and return up to 1,000 offers per response. Travellers will then be able to deeplink from your website to the Expedia website to complete their travel booking.

How to make a Lodging Listings API call

Request Url

curl https://apim.expedia.com/hotels/listings

Required Headers

Optional Headers

  • Accept-Encoding: gzip

Request Parameter

Minimum request parameters

  • Search Type - You can make a request using one of the following types.
    • Search by Hotel ID's
    • Search by Latitude & Longitude
    • Search by Location Keyword
    • Search by Expedia Region ID
  • checkIn & checkOut
ParameterSampleDescription
ecomHotelIds28082,11133Comma-separated list of Expedia hotel IDs. There can be no spaces between parameters.
geoLocation40.714269,-74.005973Use latitude and longitude (separated by a comma) to represent the search center: positive for north latitude and east longitude, negative for south latitude and west longitude.
locationKeywordseattleA keyword search for a location. The keyword can be a city, address, airport or a landmark.
regionIds8816, 1234, 319626202325190073Comma-separated list of Expedia Region IDs. Search returns set of all hotels in the combined regions.
checkIn2025-10-01CheckIn date in YYYY-MM-DD format.
checkOut2025-10-02CheckOut date in YYYY-MM-DD format.
Warning

Note: If count of adults is not specified, it defaults to 2.

Information

The parameters geoLocation, locationKeyword, regionIds can be used in combination with the radius and unit parameters.

Example Request for Date Search:

Search by Hotel ID's:

curl https://apim.expedia.com/hotels/listings?ecomHotelIds=28082,11133&checkIn=2025-10-01&checkOut=2025-10-02 \
-H 'Accept: application/vnd.exp-hotel.v3+json' \
-H 'Partner-Transaction-Id: ••••••' \
-H 'Key: ••••••' \
-H 'Authorization: ••••••'

Search by Latitude & Longitude:

curl https://apim.expedia.com/hotels/listings?geoLocation=40.714269,-74.005973&checkIn=2025-10-01&checkOut=2025-10-02 \
-H 'Accept: application/vnd.exp-hotel.v3+json' \
-H 'Partner-Transaction-Id: ••••••' \
-H 'Key: ••••••' \
-H 'Authorization: ••••••'

Search by city, address, airport or landmark.:

curl https://apim.expedia.com/hotels/listings?locationKeyword=seattle&checkIn=2025-10-01&checkOut=2025-10-02 \
-H 'Accept: application/vnd.exp-hotel.v3+json' \
-H 'Partner-Transaction-Id: ••••••' \
-H 'Key: ••••••' \
-H 'Authorization: ••••••'

Search by Expedia Region ID:

curl https://apim.expedia.com/hotels/listings?regionId=8816,1234,319626202325190073&checkIn=2025-10-01&checkOut=2025-10-02 \
-H 'Accept: application/vnd.exp-hotel.v3+json' \
-H 'Partner-Transaction-Id: ••••••' \
-H 'Key: ••••••' \
-H 'Authorization: ••••••'
Example Request for Dateless Search:
Warning

If a check-in check-out date is not specified, a dateless search is initiated. The price returned is for comparison only and should NOT be presented as bookable.

curl https://apim.expedia.com/hotels/listings?locationKeyword=seattle \
-H 'Accept: application/vnd.exp-hotel.v3+json' \
-H 'Partner-Transaction-Id: ••••••' \
-H 'Key: ••••••' \
-H 'Authorization: ••••••'
Example request for a family trip:
curl https://apim.expedia.com/hotels/listings?locationKeyword=seattle&checkIn=2025-10-01&checkOut=2025-10-02&room1.adults=2&room1.childAges=3,6&room2.adults=1 \
-H 'Accept: application/vnd.exp-hotel.v3+json' \
-H 'Partner-Transaction-Id: ••••••' \
-H 'Key: ••••••' \
-H 'Authorization: ••••••'
Information

Note:

Rooms (maximum of 8) can have more than 1 adult or children in them. example room1.adults=2&room1.childAges=3,6 means 2 adults and 2 children (3 years old and 6 years old) in room 1.

Filter Parameters

We recommend using filters to only retrieve the data you need for better latency and smaller payloads
ParameterSampleDescription
minStarRating3.0The minimum star rating for hotels returned in the response.
maxStarRating5.0The maximum star rating for hotels returned in the response.
smokingPreferencesmokingSpecifies smoking preference. Allowed values are: smoking, nonsmoking, both
freeCancellationtrueSpecifies whether to return only free cancelable room rates in the search results.
travelWithPetstrueIndicates if the search should include pet-friendly properties.
linksWDComma-separated list to specify the types of deep links. WD (link to Web Details site), WS (link to Web Search Result page), WEB (include all website links)
radius100The size of the search radius around a specified point when searching by either geoLocation or by locationKeyword. radius must be less than 200 km or 124 mi.
unitkmThe unit of measure for searches performed via locationKeyword or geoLocation.

Response

A successful response returns the following data:

{
    "Count": 10,
    "TotalHotelCount": 1000,
    "TransactionId": "186c782a-16a3-42af-8898-d3a744439554",
    ...
    "Hotels": [
        {
            ...
            "Links": {
                "WebSearchResult": {
                    "Method": "GET",
                    "Href": "https://www.expedia.com/Hotel-Search?mpd=USD&tpid=1&mpe=1744119404&endDate=2025-05-03&adults=2&mpn=113176254&mpm=83&locale=en_US&chid=186c782a-16a3-42af-8898-d3a744439554&eapid=0&currency=USD&rateplanid=00004fa186b21bf34d56a5ce360c3a55a85b&selected=113176254&startDate=2025-05-01&mpb=419.68&mpa=196.00"
                }
            },
            "RoomTypes": [
                {
                    "Price": {
                        ...
                    },
                    "Links": {
                        "WebDetails": {
                            "Method": "GET",
                            "Href": "https://www.expedia.com/Hotel.h113176254.Hotel-Information?mdpcid=US.DIRECT.GENAIPARTNER1&rm1=a2&chid=186c782a-16a3-42af-8898-d3a744439554&tpid=1&eapid=0&currency=USD&langid=1033&rateplanid=00004fa186b21bf34d56a5ce360c3a55a85b&regionId=553248635975749111&chkin=2025-05-01&chkout=2025-05-03&mpa=196.00&mpb=419.68&mpd=USD&mpe=1744119404&mpm=83"
                        }
                    }
                }
            ]
        }
    ]
}
Information

Note:

You can use the link to redirect a traveler to Expedia.

Error Response

{
    "Errors": [
        {
            "Code": "MISSING_CHECKIN_OR_CHECKOUT",
            "Description": "Either checkIn or checkOut is missing. Please specify checkIn and checkOut together."
        }
    ],
    "TransactionId": "7d806ae9-1466-4e4b-9ed8-4102c830db03"
}

Full list of possible error codes and error details:

Common Error Codes

HTTP Status CodeError CodeError ResponseCause
500APPLICATION_ERRORApplication error.Application error.
400MULTIPLE_AMBIGUOUS_LOCATIONMore than one location found.More than one winners found for locationKeyword search.
200NO_RESULTS_FOUNDSorry, your query completed successfully, but did not return any inventory. Please adjust your search parameters and try again.No hotel found.
400INVALID_LOCATION_KEYWORDThe locationKeyword is missing.The locationKeyword should not be empty for a locationKeyword search.
400COMBINED_HOTEL_SELECT_CRITERIACombined hotel search is not supported.
Please specify either one of the following search criteria:[geoLocation, regionIds, ecomHotelIds, hcomHotelIds, locationKeyword, hnk, offerId].
Combined search is not supported.
400NO_HOTEL_SELECT_CRITERIANo hotel search criteria specified.
Available options are:[geoLocation, regionIds, ecomHotelIds, hcomHotelIds, locationKeyword, hnk, offerId].
No hotel search criteria is specified.
400INVALID_ECOMHOTELIDSThe ecomHotelIds is invalid. Which should be comma separated list of Expedia hotel IDs.Please specify correct Expedia hotel IDs.
Available Expedia hotel ID list could be found in Related Links section below.
400TOO_MANY_HOTEL_IDSToo many hotel IDs. Please specify up to 1000 hotel IDs in ecomHotelIds or hcomHotelIds.Requested too many hotels.
400INVALID_GEOLOCATIONThe format of geoLocation is invalid. Please specify latitude and longitude separated by comma.The format of geoLocation should be like 40.764458,-73.968852.
400LONGITUDE_OUT_OF_RANGEThe longitude is out of range. Please specify longitude between -180.000000 and 180.000000.The longitude is out of range.
400LATITUDE_OUT_OF_RANGEThe latitude is out of range. Please specify latitude between -90.000000 and 90.000000.The latitude is out of range.
400INVALID_RADIUSThe radius is invalid. Allowed value is a number.The radius should be like 2.34.
400RADIUS_OUT_OF_RANGEThe radius is out of range. Allowed range is from 0 to 200km / 124mi.The radius is out of range.
400INVALID_UNITThe unit is invalid. Allowed options are mi and km.The unit is invalid. Allowed options are mi and km.
400INVALID_REGION_IDThe regionIds is invalid. Please specify comma separated list of Expedia region IDs.Please specify comma separated list of Expedia region IDs.

You can find a link to the complete list of Expedia Region IDs in the Related Links section at the bottom of the page.
400UNSUPPORTED_REGION_IDRegionIds:[%s] are not supported.Please check the regionid whether in supported region ids list. Download lists of supported Expedia Region IDs.
400TOO_MANY_REGION_IDSToo many regionIds. Please specify up to 10 region IDs.Request too many regions.
400MISSING_CHECKIN_OR_CHECKOUTEither checkIn or checkOut is missing. Please specify checkIn and checkOut together.Please specify both checkIn and checkOut together.
400INVALID_CHECKINThe checkIn is in invalid. The format should be 'YYYY-MM-DD'.The format of checkIn is invalid.
400INVALID_CHECKOUTThe checkOut is invalid. The format should be 'YYYY-MM-DD'.The format of checkOut is invalid.
400CHECKOUT_EARLIER_THAN_CHECKINThe checkout date must occur after checkin date.The checkout date must occur after checkin date.
400CHECKIN_IN_THE_PASTThe checkIn should not be in the past.The checkIn should not be in the past.
400SEARCH_WINDOW_OUT_OF_RANGESearch window is too large. Maximum length of stay is 28 days.Search window is too large.
400CHECKOUT_OUT_OF_RANGEThe checkOut is out of range. Checkout date can only occur up to 500 days in the future.The checkOut is out of range.
400INVALID_ALL_ROOM_TYPESThe allRoomTypes is invalid. Allowed options are true and false.The allRoomTypes is invalid.
400INVALID_LOCALEThe locale is invalid. The locale should be two-letter language code and two-letter region code connected with '_'.The format of Locale should be like en_US.
400UNSUPPORTED_LOCALEThe requested locale is not supported.The given locale is not supported.

You can find a link to the complete list of Supported Locales in the Related Links section at the bottom of the page.
400INVALID_CURRENCYThe currency is invalid. The currency should be a standard ISO 3 letter currency codeThe format of currency is not correct.
400UNSUPPORTED_CURRENCYThe currency is invalid. The requested currency is not supported.The given currency is not supported.
400TOO_MANY_ROOMSRequested too many rooms. Please search up to 8 rooms.Requested too many rooms.
400INVALID_ADULTSInvalid adult number detected. Allowed value is a number.Please specify correct adult number.
400ADULTS_OUT_OF_RANGEToo many adults. The number of adults should not be greater than 14.Requested too many adults.
400ROOM_NUMBER_NOT_IN_SEQUENTIALRoom numbers of adults invalid. Room numbers should be in numeric sequential and start from 1.Please specify adult number for each desired room. For example, do not specify room1.adults=2&room3.adults=3 only without specifying room2.adults.
400INVALID_ROOM_OCCUPANTSOnly childAges specified. Adults info is mandatory for each room.Children should be accompanied by adults for each room.
400INVALID_CHILDAGESInvalid child occupants detected. Each child age should be a number of less than 17 and child count of any room should be less than 6.Child age is not a number, or child age is out of range, or children number exceeded the maximum allowed number.
400INVALID_LINKSThe links is invalid. The links could be any set of WD, WS, AD, WEB, API separated by comma.Please specify correct links.
400INVALID_SOURCEThe source is invalid. Allowed options are [browser, mobileapp].The source is invalid.
400INVALID_LIMITThe limit is invalid. Please specify an integer grater than 0.The limit is invalid.
400INVALID_IMAGE_SIZESInvalid imageSizes. Allowed values are t,s,b,y,z.The imageSizes is invalid.
400INVALID_CLIENT_KEYInvalid client key: %s.Key in request header is invalid or too many Keys in header.
400INVALID_ACCEPTPlease provide a valid Accept header.Accept in request header is invalid or too many Accepts in header.
400INVALID_PARTNER_TRANSACTION_IDPartner-Transaction-Id is missing.Partner-Transaction-Id in request header is empty.
400INVALID_RATE_PLAN_TYPEThe ratePlanType is invalid. Allowed options are 'package', 'standalone'The ratePlanType is invalid.
400INVALID_PROPERTY_TYPE_IDSThe includedPropertyTpyeIds/excludedPropertyTypeIds is invalid. Which should be comma separated list of integer numbers.includedPropertyTpyeIds/excludedPropertyTypeIds in request are contains not integer character or integers are not separated by comma.
400SORT_TYPE_INVALIDSortType is either missing or is in an invalid format. SortType must be one of the following: price, avgrate, starrating, guestrating, deals, hotelname, distance, totalpricewithfees.The sortType is invalid.
400SORT_ORDER_INVALIDSortOrder is either missing or is in an invalid format. SortOrder must be one of the following: 'asc', 'desc'.The sortOrder is invalid.
400INVALID_CONTENT_DETAILSInvalid contentDetails. Allowed values are high,medium,lowest,low.The contentDetails is invalid.
400INVALID_GROUPED_AMENITIESThe groupedAmenities is invalid. Allowed values are true and false.The groupedAmenities is invalid.
400INVALID_AVAIL_ONLYThe availonly is either missing or is in an invalid format. Allowed values are true and false.The availOnly is invalid.
400INVALID_RATE_TYPEThe ratetype in request is invalid. Allowed options are 'payonline', 'payhotel', 'all'.The ratetype is invalid.
400INVALID_QUERY_TEXTThe queryText in request is empty.The queryText in request is empty.
400INVALID_SMOKING_PREFERENCEThe smokingPreference in request is invalid. Allowed options are 'smoking', 'nonsmoking', 'both'.The smokingPreference is invalid.
400MIN_STAR_RATING_GREATER_THAN_MAX_STAR_RATINGThe maxStarRating can not be less than minStartRating.The maxStarRating can not be less than minStartRating.
400INVALID_MAX_STAR_RATINGThe maxStarRating in request is either missing or is in an invalid format. Allowed values are: 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0 .The maxStarRating is invalid.
400INVALID_MIN_STAR_RATINGThe minStarRating in request is either missing or is in an invalid format. Allowed values are: 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0The minStarRating is invalid.
400INVALID_PROPERTYPE_TYPE_FILTERThe propertyType filter is invalid. includedPropertyTypeIds and excludedPropertyTypeIds cannot both be specified.The request parameter contains both of includedPropertyTypeIds and excludedPropertyTypeIds.
400INVALID_BLOCK_FULL_DEPOSIT_RATEPLANSThe blockFullDepositRateplans is either missing or is in an invalid format. Allowed values are true and false.The blockFullDepositRateplans is invalid.

Understanding how handle errors: Error Handling.

You will get an ambiguous error response when multiple locations match a locationKeyword search.

When you search for a locationKeyword that refers to one or more global locations, the API will ask you to clarify which location you'd like to search, then you can choose the right one and call Lodging Listings API again.

{
      "Errors": [
          {
              "Code": "AMBIGUOUS_LOCATION",
              "DetailCode": "MULTIPLE_AMBIGUOUS_LOCATION",
              "Description": "More than one location found",
              "LocationKeyword": "dublin",
              "LocationOptions": [
                  {
                      "Type": "MULTICITY",
                      "RegionId": "178256",
                      "ShortName": "Dublin (and vicinity)",
                      "AirportCode": "DUB",
                      "Address": "Dublin (and vicinity), Ireland",
                      "Country": {
                          "Name": "Ireland",
                          "IsoCode2": "IE",
                          "IsoCode3": "IRL"
                      },
                      "GeoLocation": {
                          "Latitude": "53.34402",
                          "Longitude": "-6.26146"
                      }
                  },
  
      ...
                  {
                      "Type": "POI",
                      "RegionId": "553248621563220238",
                      "ShortName": "Market On Madison",
                      "AirportCode": "MCN",
                      "Address": "Market On Madison, Dublin, Georgia, United States of America",
                      "Country": {
                          "Name": "United States of America",
                          "IsoCode2": "US",
                          "IsoCode3": "USA"
                      },
                      "GeoLocation": {
                          "Latitude": "32.539313",
                          "Longitude": "-82.902537"
                      }
                  }
              ]
          }
      ],
      "TransactionId": "cc026998-5e61-4613-a086-7c725def7eea"
  }

Next Steps

  • Here, you can explore the endpoint definitions for this API, then go to the API Explorer to try out all the XAP endpoints, download OpenAPI specs, or download Postman collections. Testing with one or all of these options will give you an understanding of how the examples and schema definitions compare to the actual output. Go to the API Explorer to find out more.
  • Deeplink customers to the Expedia website where they can book selected hotel. You will also be able to earn commission on any bookings that your customers make using our XAP API solution.
Did you find this page helpful?
How can we improve this content?
Thank you for helping us improve!