Expedia API endpoint
Returns Expedia Stays (hotel) search results for a free-text destination and date range. Promotional banners and sponsored ad slots are dropped, so every returned property has an id and name.
/expedia/properties/searchReturns Expedia Stays (hotel) search results for a free-text destination and date range. destination is resolved automatically, so callers do not need to call expedia-locations-search first.
Request body (top-level JSON fields — do not nest these under an option key):
destination (string): required. Free-text destination, e.g. Miami.check_in (string): required. Check-in date, YYYY-MM-DD.check_out (string): required. Check-out date, YYYY-MM-DD, must be after check_in.adults (integer): optional. Total adults across all rooms, 1-9, default 2.rooms (integer): optional. Number of rooms, 1-8, default 1. Adults are distributed evenly across rooms.page (integer): optional. 1-based result page, default 1.page_size (integer): optional. Results per page, 1-50, default 20.currency (string): optional. ISO currency code, default USD.locale (string): optional. Locale string, default en_US.Example request body:
{
"destination": "Miami",
"check_in": "2026-08-04",
"check_out": "2026-08-05",
"adults": 2,
"rooms": 1
}
data.region_id identifies the resolved destination and can be reused directly by expedia-properties-filters. Each data.properties[] entry's id is the property id for expedia-properties-detail/expedia-properties-reviews. Every returned property has a non-empty id and name: promotional banners and sponsored ad slots that Expedia mixes into its result list are dropped. They come on top of the requested page_size, so a full page still holds page_size properties. Price fields are kept as upstream-formatted display strings (e.g. "$72 total") rather than parsed into a currency amount, since the upstream schema only exposes display-formatted price text on the search-results card.
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| id | 20 | |
| name | 20 | “President Hotel” and 19 other values |
| url | 20 | expedia.com |
| review_score | 20 | 6.8 to 9.2, median 8.4 |
| review_count | 20 | 1,006 to 9,151, median 1,738 |
| review_title | 19 | Very Good (9), Wonderful (4), Excellent (4) and 1 more |
| price | 20 | “$120 total” and 19 other values |
| strikeout_price | 19 | “$200” and 17 other values |
| nightly_price | 20 | “$71 nightly” and 16 other values |
| thumbnail_url | 20 | images.trvl-media.com |
| badges | 19 | median 1 entry |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| option (body) | object | Yes | Property search payload | ||
| x-api-key (header) | string | Yes | API key required |
curl -X POST "https://api.crawlora.net/api/v1/expedia/properties/search" \
-H "x-api-key: $CRAWLORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"adults":2,"check_in":"2026-08-04","check_out":"2026-08-05","currency":"USD","destination":"Miami","locale":"en_US","page":1,"page_size":20,"rooms":1}'{
"adults": 2,
"check_in": "2026-08-04",
"check_out": "2026-08-05",
"currency": "USD",
"destination": "Miami",
"locale": "en_US",
"page": 1,
"page_size": 20,
"rooms": 1
}{
"code": 200,
"msg": "OK",
"data": {
"destination": "Miami, Florida, United States of America",
"region_id": "2297",
"check_in": "2026-08-04",
"check_out": "2026-08-05",
"page": 1,
"results_label": "300+ properties",
"properties": [
{
"id": "111893452",
"name": "Kompose Boutique Hotel Miami Airport",
"url": "https://www.expedia.com/Miami-Hotels-Kompose-Boutique-Hotel-Miami-Airport.h111893452.Hotel-Information",
"review_score": 9.2,
"review_count": 4460,
"review_title": "Wonderful",
"price": "$72 total",
"strikeout_price": "$94",
"nightly_price": "$53 nightly",
"thumbnail_url": "https://images.trvl-media.com/lodging/112000000/111900000/111893500/111893452/5069ea21.jpg",
"amenities": [
"Pool"
],
"badges": [
"VIP Access",
"Member Price $22 off"
]
}
]
}
}Request schema
#/definitions/expedia.PropertySearchOption
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| adults | integer | No | 2 | |||
| check_in | string | Yes | 2026-08-04 | |||
| check_out | string | Yes | 2026-08-05 | |||
| currency | string | No | USD | |||
| destination | string | Yes | Miami | |||
| locale | string | No | en_US | |||
| page | integer | No | 1 | |||
| page_size | integer | No | 20 | |||
| rooms | integer | No | 1 |
Response schema
#/definitions/expedia.expediaPropertySearchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | expedia.PropertySearchResponse | No | ||||
| data.check_in | string | No | ||||
| data.check_out | string | No | ||||
| data.destination | string | No | ||||
| data.page | integer | No | ||||
| data.properties | array | No | ||||
| data.properties[].amenities | array | No | ||||
| data.properties[].badges | array | No | ||||
| data.properties[].id | string | No | ||||
| data.properties[].name | string | No | ||||
| data.properties[].nightly_price | string | No | ||||
| data.properties[].price | string | No | ||||
| data.properties[].review_count | integer | No | ||||
| data.properties[].review_score | number | No | ||||
| data.properties[].review_title | string | No | ||||
| data.properties[].strikeout_price | string | No | ||||
| data.properties[].thumbnail_url | string | No | ||||
| data.properties[].url | string | No | ||||
| data.region_id | string | No | ||||
| data.results_label | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X POST "https://api.crawlora.net/api/v1/expedia/properties/search" \
-H "x-api-key: $CRAWLORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"adults":2,"check_in":"2026-08-04","check_out":"2026-08-05","currency":"USD","destination":"Miami","locale":"en_US","page":1,"page_size":20,"rooms":1}'