GET
# Expedia Hotel Rates API

Get real-time room rates and availability for an Expedia hotel.

#### MCP tool

Use expedia\_hotel\_rates with the same property ID and stay dates. MCP children\_ages is a JSON integer array (for example [5, 8]), not the REST comma-separated string. Omit it or use [] for adults-only rates. Expedia discovery and reviews remain REST-only.

## Overview

#### Real-time Pricing

Returns live room rates, rate plans, nightly and total prices, strikeout prices, and availability status. A sold\_out: false response includes at least one available priced offer. Explicit sold-out stays are successful results; malformed availability returns a non-2xx error.

The Expedia Hotel Rates endpoint returns room types with rate plans for a given property and date range. Each room includes features, and each rate plan includes nightly rate, total price, strikeout price, payment model, and availability.

### Endpoint URL

GET https://api.stayapi.com/v1/expedia/hotel/rates 

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| property\_id | string | Required | Expedia property ID (numeric string, e.g., "10507369") |
| check\_in | string | Required | Check-in date in YYYY-MM-DD format |
| check\_out | string | Required | Check-out date in YYYY-MM-DD format (must be after check-in) |
| adults | integer | Optional | Number of adults, 1-10 (default: 2) |
| children\_ages | string | Optional | Comma-separated ages for up to 6 children, each from 0 to 17 (for example, `5,8`). Spaces around ages are accepted. Omit or leave blank for adults only. |
| currency | string | Optional | Currency code, e.g., USD, EUR, GBP, THB (default: USD). Accepted but currency conversion is not yet confirmed for all currencies. |

## Errors

Invalid child ages return HTTP 400 Problem Details with `error_code` set to `INVALID_CHILDREN_AGES`. This includes negative ages, ages above 17, non-integers, empty comma-separated items, or more than 6 ages.

## Response Structure

### Top-Level Fields

- `property_id` - Expedia property ID
- `check_in` - Check-in date
- `check_out` - Check-out date
- `adults` - Number of adults
- `currency` - Currency code
- `sold_out` - Whether the property is sold out
- `lowest_price` - Lowest available price (formatted string)
- `lowest_price_amount` - Lowest price as a number
- `rooms` - Array of room types

### Room Object

- `room_id` - Room type identifier
- `room_name` - Room type name
- `features` - Array of room features (e.g., "Free WiFi", "Breakfast included")
- `rate_plans` - Array of rate plans for this room

### Rate Plan Object

- `rate_plan_id` - Rate plan identifier
- `deal` - Deal badge text (e.g., "Member Price")
- `payment_model` - Payment model (e.g., "PAY\_LATER", "PAY\_NOW")
- `nightly_rate` - Nightly rate (formatted string)
- `nightly_rate_amount` - Nightly rate as a number
- `total_price` - Total price (formatted string)
- `total_price_amount` - Total price as a number
- `strikeout_price` - Original price before discount
- `strikeout_price_amount` - Original price as a number
- `total_with_taxes_and_fees` - Total including taxes and fees
- `available` - Whether this rate plan is available
- `rooms_left` - Scarcity message (e.g., "Only 3 left")

## Finding the Property ID

#### Finding the Property ID

The property ID can be found in Expedia hotel URLs after the "h" prefix.

The property ID appears in Expedia URLs. For example:

`
            https://www.expedia.com/h10507369.Hotel-Information
          `

The property ID is `10507369` (the number after "h").

Vrbo listings work too: pass the internal `property_id` from [Vrbo search](/docs/endpoints/vrbo/search) or [extract-id](/docs/endpoints/vrbo/extract-id) (for example `124565672`), not the public listing ID in the Vrbo URL. Use the rate plan's total price for the stay; it can include rental fees, so do not compute it as nightly rate times nights.

Request

```curl
curl -X GET "https://api.stayapi.com/v1/expedia/hotel/rates?property_id=10507369&check_in=2027-05-01&check_out=2027-05-03&adults=2&children_ages=5%2C8" \
  -H "x-api-key: YOUR_API_KEY"
```

Response

```json
{
  "property_id": "10507369",
  "check_in": "2027-05-01",
  "check_out": "2027-05-03",
  "adults": 2,
  "currency": "USD",
  "sold_out": false,
  "lowest_price": "$189",
  "lowest_price_amount": 189.0,
  "rooms": [
    {
      "room_id": "314898187",
      "room_name": "Aloft King Room",
      "features": [
        "1 King Bed",
        "Free WiFi",
        "City view"
      ],
      "rate_plans": [
        {
          "rate_plan_id": "381851541",
          "deal": "Member Price",
          "payment_model": "PAY_LATER",
          "nightly_rate": "$189 per night",
          "nightly_rate_amount": 189.0,
          "total_price": "$378",
          "total_price_amount": 378.0,
          "strikeout_price": "$420",
          "strikeout_price_amount": 420.0,
          "total_with_taxes_and_fees": 438.48,
          "available": true,
          "rooms_left": "Only 3 left"
        }
      ]
    }
  ]
}
```

```json
{
  "type": "https://api.stayapi.com/errors/invalid-dates",
  "title": "Invalid Dates",
  "status": 400,
  "detail": "Check-out date must be after check-in date",
  "error_code": "INVALID_DATES"
}
```
