Expedia APIexpedia.com ↗
Search Expedia hotels by destination and dates, retrieve property details and amenities, and generate flight search URLs via a single REST API.
What is the Expedia API?
The Expedia API covers 3 endpoints for searching hotels, fetching property details, and building flight search URLs. The search_hotels endpoint accepts a destination, check-in/check-out dates, and occupancy details, returning up to 5 properties per query with name, price, rating, and Expedia property ID. get_hotel_details goes deeper, returning street address, city, and categorized amenities for a specific property.
curl -X GET 'https://api.parse.bot/scraper/a8253ddf-ea1b-46b0-b3c1-5628b90f1aac/search_hotels?rooms=2&adults=2&end_date=2026-08-15&start_date=2026-08-10&destination=Las+Vegas' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace expedia-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Expedia Travel SDK — search hotels, get details, build flight URLs."""
from parse_apis.expedia_travel_api import Expedia, HotelNotFound
client = Expedia()
# Search hotels in Las Vegas — limit= caps total items fetched
for hotel in client.hotelsummaries.search(
destination="Las Vegas",
start_date="2026-07-05",
end_date="2026-07-06",
limit=5,
):
print(hotel.name, hotel.price, hotel.rating)
# Drill into the first result for full details
summary = client.hotelsummaries.search(
destination="Miami",
start_date="2026-08-01",
end_date="2026-08-03",
limit=1,
).first()
if summary:
detail = summary.details()
print(detail.name, detail.address, detail.city)
for amenity in detail.amenities:
print(amenity.category, amenity.items)
# Fetch a hotel directly by property_id
try:
hotel = client.hotels.get(property_id="8753178")
print(hotel.name, hotel.address, hotel.city)
except HotelNotFound as exc:
print(f"Hotel not found: {exc}")
# Generate a flight search URL
flight = client.flightsearchresults.search(origin="JFK", destination="LAS", date="2026-07-10")
print(flight.search_url, flight.message)
print("exercised: hotelsummaries.search / details / hotels.get / flightsearchresults.search")
Search for hotels and vacation rentals by destination and dates. Returns properties with name, price, rating, and property ID from server-side rendered results. Typically returns 3-5 results from the initial page load. Pagination is not supported; results are limited to what the first page load returns.
| Param | Type | Description |
|---|---|---|
| rooms | integer | Number of rooms |
| adults | integer | Number of adults |
| end_daterequired | string | Check-out date in YYYY-MM-DD format |
| start_daterequired | string | Check-in date in YYYY-MM-DD format |
| destinationrequired | string | Destination city or area (e.g. 'Las Vegas', 'New York', 'Miami') |
{
"type": "object",
"fields": {
"hotels": "array of hotel objects with keys: name, property_id, url, price, rating",
"total_found_on_page": "integer count of hotels returned on the page"
},
"sample": {
"data": {
"hotels": [
{
"url": "https://www.expedia.com/Las-Vegas-Hotels-The-LINQ-Hotel-Experience.h8753178.Hotel-Information?chkin=2026-07-05&chkout=2026-07-06",
"name": "The LINQ Hotel & Casino",
"price": "$8 nightly",
"rating": "8.0 out of 10",
"property_id": "8753178"
},
{
"url": "https://www.expedia.com/Las-Vegas-Hotels-DoubleTree-By-Hilton-Las-Vegas-Airport.h201113.Hotel-Information?chkin=2026-07-05&chkout=2026-07-06",
"name": "DoubleTree by Hilton Las Vegas Airport",
"price": "$102 nightly",
"rating": "8.6 out of 10",
"property_id": "201113"
}
],
"total_found_on_page": 2
},
"status": "success"
}
}About the Expedia API
Hotel Search
The search_hotels endpoint takes a destination string (city or area name), a start_date and end_date in YYYY-MM-DD format, and optional adults and rooms counts. It returns an array of hotel objects, each containing name, property_id, url, price, and rating, plus a total_found_on_page integer. Typical responses contain 3–5 properties drawn from the initial results page — this is not a full paginated listing, so it suits quick price comparisons rather than exhaustive inventory sweeps.
Property Details
get_hotel_details takes a property_id (the numeric string returned by search_hotels) and optional start_date/end_date to provide pricing context. The response includes name, address, city, and an amenities array. Each amenity entry has a category string and an items array listing individual amenities in that group. Note that amenities can return empty if the property page loads that section client-side rather than in the initial server response — this varies by property.
Flight Search URL Generation
The search_flights endpoint accepts an origin and destination airport code (IATA format, e.g. JFK, LAX) plus an optional date. It does not return flight listings or prices. Expedia renders flight results client-side, so the endpoint returns a search_url string you can open in a browser, along with a message and note explaining the limitation. Use this endpoint to deep-link users directly into the relevant Expedia flight search page.
Data Scope and Freshness
All hotel data reflects what Expedia surfaces for the requested destination and dates at query time. Prices are point-in-time and can shift with availability. The property_id values are stable Expedia identifiers and can be stored and reused across calls to get_hotel_details.
The Expedia API is a managed, monitored endpoint for expedia.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when expedia.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official expedia.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Compare hotel prices across Las Vegas properties for a specific date range using search_hotels price fields
- Build a travel app that deep-links users to Expedia flight search pages with pre-filled origin, destination, and date
- Aggregate hotel amenity data by category from get_hotel_details to filter properties by pool, parking, or breakfast
- Display formatted hotel addresses and city strings in a travel itinerary planner
- Monitor nightly rate changes for a specific property by polling search_hotels with the same property destination over time
- Populate a hotel comparison widget using name, rating, and price fields returned by search_hotels
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Expedia have an official developer API?+
How many hotel results does search_hotels return per query?+
Why might the amenities array be empty in get_hotel_details?+
Can the API return actual flight prices or availability?+
search_flights endpoint returns only a constructed Expedia search URL; flight listings and fares are rendered client-side on Expedia and are not included in the response. The API covers hotel search and hotel detail retrieval. You can fork it on Parse and revise it to add a flight results endpoint if the underlying data becomes accessible.Does the API support searching more than one page of hotel results?+
search_hotels returns the properties found on a single initial page load, typically 3–5 results. There is no offset or page parameter to retrieve additional listings. You can fork the API on Parse and revise it to add pagination support for deeper result sets.