Expedia API endpoint
Searches Expedia flights between two IATA airport codes, `origin` and `destination`, on `departure_date` (`YYYY-MM-DD`). `return_date` is required for the default `round_trip`; `one_way` is the alternative `trip_type`. Optional `adults` (1-9, default 1), `cabin_class` (default `COACH`), `currency` and `locale`. Returns departing-leg offers only, with airline, times, duration, stops, route and price.
/expedia/flights/searchRequest body (top-level JSON fields — do not nest these under an option key):
origin (string): required. Origin IATA code, e.g. JFK.destination (string): required. Destination IATA code, e.g. LAX.departure_date (string): required. Departure date, YYYY-MM-DD.return_date (string): required when trip_type is round_trip. Return date, YYYY-MM-DD, must be after departure_date.trip_type (string): optional, default round_trip. Allowed values: round_trip, one_way.adults (integer): optional. Adults, 1-9, default 1.cabin_class (string): optional, default COACH. Allowed values: COACH, PREMIUM_ECONOMY, BUSINESS, FIRST.currency (string): optional. ISO currency code, default USD.locale (string): optional. Locale string, default en_US.Example request body:
{
"origin": "JFK",
"destination": "LAX",
"departure_date": "2026-08-17",
"return_date": "2026-08-18",
"trip_type": "round_trip",
"cabin_class": "COACH"
}
data.offers[] lists the departing-leg offers only, matching the app's own multi-step round-trip selection flow -- return-leg selection is not implemented.
| Field | Filled in, of 5 checked | Values in the sample |
|---|---|---|
| airline | 5 | Delta (2), JetBlue Airways (2), American Airlines (1) |
| route | 5 | New York (JFK) - Los An... (LAX) in all 5 |
| departure_time | 5 | “7:00am” and 3 other values |
| arrival_time | 5 | “10:05am” and 4 other values |
| stops | 5 | 0 |
| duration_summary | 5 | “6h 5m • Nonstop” and 3 other values |
| price | 5 | $457 (4), $472 (1) |
| price_note | 5 | Roundtrip per traveler in all 5 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| option (body) | object | Yes | Flights search payload | ||
| x-api-key (header) | string | Yes | API key required |
curl -X POST "https://api.crawlora.net/api/v1/expedia/flights/search" \
-H "x-api-key: $CRAWLORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"adults":1,"cabin_class":"COACH","currency":"USD","departure_date":"2026-08-17","destination":"LAX","locale":"en_US","origin":"JFK","return_date":"2026-08-18","trip_type":"round_trip"}'{
"adults": 1,
"cabin_class": "COACH",
"currency": "USD",
"departure_date": "2026-08-17",
"destination": "LAX",
"locale": "en_US",
"origin": "JFK",
"return_date": "2026-08-18",
"trip_type": "round_trip"
}{
"code": 200,
"msg": "OK",
"data": {
"origin": "JFK",
"destination": "LAX",
"departure_date": "2026-08-17",
"return_date": "2026-08-18",
"offers": [
{
"airline": "JetBlue Airways",
"route": "New York (JFK) - Los Angeles (LAX)",
"departure_time": "7:30am",
"arrival_time": "10:26am",
"stops": 0,
"duration_summary": "5h 56m • Nonstop",
"price": "$551",
"price_note": "Roundtrip per traveler"
}
]
}
}Request schema
#/definitions/expedia.FlightsSearchOption
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| adults | integer | No | 1 | |||
| cabin_class | string | No | COACH | |||
| currency | string | No | USD | |||
| departure_date | string | Yes | 2026-08-17 | |||
| destination | string | Yes | LAX | |||
| locale | string | No | en_US | |||
| origin | string | Yes | JFK | |||
| return_date | string | No | 2026-08-18 | |||
| trip_type | string | No | round_trip |
Response schema
#/definitions/expedia.expediaFlightsSearchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | expedia.FlightsSearchResponse | No | ||||
| data.departure_date | string | No | ||||
| data.destination | string | No | ||||
| data.offers | array | No | ||||
| data.offers[].airline | string | No | ||||
| data.offers[].arrival_time | string | No | ||||
| data.offers[].departure_time | string | No | ||||
| data.offers[].duration_summary | string | No | ||||
| data.offers[].price | string | No | ||||
| data.offers[].price_note | string | No | ||||
| data.offers[].route | string | No | ||||
| data.offers[].stops | integer | No | ||||
| data.origin | string | No | ||||
| data.return_date | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/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/flights/search" \
-H "x-api-key: $CRAWLORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"adults":1,"cabin_class":"COACH","currency":"USD","departure_date":"2026-08-17","destination":"LAX","locale":"en_US","origin":"JFK","return_date":"2026-08-18","trip_type":"round_trip"}'