# Rooms and Rates

## What is Rooms and Rates?

**Rooms and Rates** is a PULL-based retrieval method where SiteMinder initiates requests to your booking channel endpoint to retrieve a list of configured room types and rate plans. Your channel hosts the endpoint and responds with your current inventory configuration. This ensures that the property can properly map its internal room and rate structures with the configurations set up on the channel side, maintaining accurate inventory, pricing and reservation synchronization.

#### Considerations

**Active Rooms Only:** The `OTA_HotelAvailRS` response must include only room types and rate plans that are currently active and available for booking in your channel. This ensures that hoteliers can effectively manage these rooms within the SiteMinder Platform.

**Include only:**

* Room types and rate plans that are currently active in your channel
* Inventory that is available for booking
* Configurations the hotel can actually manage in your system

**Do not include:**

* Inactive or archived room types
* Disabled rate plans
* Test or development configurations
* Expired or future-dated inventory

**Update Frequency:** SiteMinder calls this endpoint on-demand when hotels access the room rate mapping interface during initial property setup and when configuration updates are needed. Your booking channel must keep this endpoint operational as SiteMinder will request updates when necessary. **Performance expectation:** Your endpoint should respond within 1-2 seconds as hotels are actively waiting for the mapping interface to load.

## Integration Requirements

Understand the essential requirements for API integration, including connectivity, authentication, message formats, and security protocols.

<table data-header-hidden><thead><tr><th width="199.954833984375">Category</th><th>Requirement</th></tr></thead><tbody><tr><td><strong>Web Service Endpoint</strong></td><td><ul><li>The booking channel will provide a single global endpoint for all hotels to receive <code>OTA_HotelAvailRQ</code> requests from SiteMinder and respond with <code>OTA_HotelAvailRS</code> messages indicating success or failure.</li><li>The endpoint must use a registered domain name.</li><li>Direct IP addresses are not supported and cannot be used as endpoints.</li></ul></td></tr><tr><td><strong>Authentication</strong></td><td><ul><li>The booking channel will provide a single username/password for all hotels.</li><li>SiteMinder will include authentication credentials within the <strong>SOAP Security header</strong> of each <code>OTA_HotelAvailRQ</code>.</li><li>Credentials must follow a strong password policy: minimum of 12 characters, including a mix of uppercase and lowercase letters, numbers, and at least one special character (e.g., <code>!</code> <code>@</code> <code>#</code> <code>?</code> <code>]</code>).</li><li>Do not use <code>&#x3C;</code> <code>></code> <code>&#x26;</code> <code>"</code> <code>'</code> as they can cause issues with the Web Service.</li></ul></td></tr><tr><td><strong>Message Structure</strong></td><td><ul><li>All messages must adhere to the SOAP message format.</li><li>OTA message must be encapsulated within the SOAP Body.</li><li>Requests must include a SOAP Security Header for authentication.</li><li>Responses must be returned in a SOAP envelope with empty SOAP Header.</li></ul></td></tr><tr><td><strong>Content-Type</strong></td><td><code>text/xml; charset=utf-8</code></td></tr><tr><td><strong>Version</strong></td><td><code>SOAP 1.1</code></td></tr><tr><td><strong>Protocol &#x26; Security</strong></td><td><ul><li>All communication must occur over <strong>HTTPS</strong> using <strong>TLS 1.2 or higher</strong>.</li><li>Non-secure (HTTP) connections are <strong>not permitted</strong>.</li><li>Communication is synchronous request/response pairs.</li><li>Each message is atomic - processed entirely or not at all.</li><li>SiteMinder sends requests over <strong>port 443</strong>.</li></ul></td></tr><tr><td><strong>IP Whitelisting</strong></td><td><p><strong>Pre-Production IP addresses:</strong><br></p><p><code>52.13.134.140</code></p><p><code>34.213.128.113</code></p><p><code>35.164.250.223</code><br><br><strong>Production IP addresses will be provided during go-live.</strong></p></td></tr></tbody></table>

## Message Exchange Flow

When SiteMinder needs to retrieve the room type and rate plan configuration for a property, it sends a request to your booking channel using a synchronous SOAP/HTTPS exchange. This configuration retrieval allows the property to map on SiteMinder Platform its inventory structure for accurate distribution and reservation management.

1. **Configuration Request (SiteMinder to booking channel)**: `OTA_HotelAvailRQ`\
   Requests the complete list of active room types and rate plans for a specific hotel.
2. **Configuration Response (booking channel to SiteMinder)**: `OTA_HotelAvailRS`\
   Returns the complete room and rate configuration for the requested property.

## Security Header

The Security Header is a mandatory SOAP header that authenticates every request from SiteMinder to your booking channel endpoint. It contains the username and password credentials that you provide to the SiteMinder during integration setup.

**Key Requirements:**

* **Validation**: Your endpoint will validate these credentials on every request.
* **Scope**: One set of credentials is used for all properties in your integration.
* **Security**: Credentials are transmitted as plain text within the HTTPS encrypted channel.
* **Response**: Invalid credentials will return a SOAP fault with appropriate error code.

{% hint style="info" %}
The only acceptable value for the **Password @Type** attribute is *<http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText>.* Plain text passwords are acceptable as all communication is done over encrypted HTTP (HTTPS).
{% endhint %}

{% tabs %}
{% tab title="Configuration Request" %}
Requests must include a SOAP Security Header for authentication.

```xml
<SOAP-ENV:Envelope
	xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
	<SOAP-ENV:Header>
		<wsse:Security SOAP-ENV:mustUnderstand="1"
			xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
			<wsse:UsernameToken>
				<wsse:Username>USERNAME</wsse:Username>
				<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PASSWORD</wsse:Password>
			</wsse:UsernameToken>
		</wsse:Security>
	</SOAP-ENV:Header>
	<SOAP-ENV:Body>
		<OTA_HotelAvailRQ
			xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2024-07-06T15:27:41+00:00" Version="1.0" AvailRatesOnly="true">
			<!-- ... other elements and attributes have been omitted for brevity ... -->
		</OTA_HotelAvailRQ>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
```

{% endtab %}

{% tab title="Configuration Response" %}
Responses must be returned in a SOAP envelope with an empty SOAP Header.

```xml
<SOAP-ENV:Envelope
	xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
	<SOAP-ENV:Header/>
	<SOAP-ENV:Body>
		<OTA_HotelAvailRS
			xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2024-07-06T15:27:41+00:00" Version="1.0">
			<Success/>
			<!-- ... other elements and attributes have been omitted for brevity ... -->
		</OTA_HotelAvailRS>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
```

{% endtab %}
{% endtabs %}

## Multiplicity

In the SOAP Specification tables below **M** refers to the number of instances or occurrences of an element or attribute that are allowed or required in a given context. It defines how many times a particular component (element or attribute) can appear within a specific structure.

<table><thead><tr><th width="94">M</th><th>Definition</th></tr></thead><tbody><tr><td><strong>1</strong></td><td>The element or attribute must be present exactly once.</td></tr><tr><td><strong>0..1</strong></td><td>The element or attribute is optional; it can be present zero or one time.</td></tr><tr><td><strong>0..n</strong></td><td>The element or attribute can be present zero or more times, with no upper limit (where <strong>n</strong> represents an infinite number of occurrences).</td></tr><tr><td><strong>1..n</strong></td><td>The element or attribute must be present at least once and can be present any number of times, with no upper limit.</td></tr><tr><td><strong>n..m</strong></td><td>Specific range, the element or attribute must be present at least <strong>n</strong> times and no more than <strong>m</strong> times (where <strong>n</strong> and <strong>m</strong> are specific numbers).</td></tr></tbody></table>

## **1. Configuration Request**

This endpoint retrieves the active room and rate configuration for a single property. Each `HotelCode` represents a unique property in your channel, and the response should reflect that property's current inventory structure.

```xml
<OTA_HotelAvailRQ
	xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2024-07-06T15:27:41+00:00" Version="1.0" AvailRatesOnly="true">
	<AvailRequestSegments>
		<AvailRequestSegment AvailReqType="Room">
			<HotelSearchCriteria>
				<Criterion>
					<HotelRef HotelCode="HOTELCODE"/>
				</Criterion>
			</HotelSearchCriteria>
		</AvailRequestSegment>
	</AvailRequestSegments>
</OTA_HotelAvailRQ>
```

<table data-full-width="false"><thead><tr><th width="248">Element / @Attribute</th><th width="105">Type</th><th width="40" align="center">M</th><th>Description</th></tr></thead><tbody><tr><td><code>OTA_HotelAvailRQ</code></td><td>Element</td><td align="center">1</td><td>Root element for the request.</td></tr><tr><td><code>@xmlns</code></td><td>String</td><td align="center">1</td><td>Defines the XML namespace for the request. Will be set to <code>http://www.opentravel.org/OTA/2003/05</code></td></tr><tr><td><code>@EchoToken</code></td><td>String</td><td align="center">1</td><td>Unique identifier for the request, used to match requests and responses.</td></tr><tr><td><code>@TimeStamp</code></td><td>DateTime</td><td align="center">1</td><td>Time when the request was generated.</td></tr><tr><td><code>@Version</code></td><td>String</td><td align="center">1</td><td>Specifies the API version. Will be set to <code>1.0</code>.</td></tr><tr><td><code>@AvailRatesOnly</code></td><td>Boolean</td><td align="center">1</td><td>Indicates that only availability rates should be returned. Will be set to <code>true</code>.</td></tr><tr><td><code>AvailRequestSegments</code></td><td>Element</td><td align="center">1</td><td>Container for availability request segments.</td></tr><tr><td><code>AvailRequestSegment</code></td><td>Element</td><td align="center">1</td><td>Single availability request segment.</td></tr><tr><td><code>@AvailReqType</code></td><td>String</td><td align="center">1</td><td>Specifies the type of availability request. Will be set to <code>Room</code>.</td></tr><tr><td><code>HotelSearchCriteria</code></td><td>Element</td><td align="center">1</td><td>Container for the hotel search criteria.</td></tr><tr><td><code>Criterion</code></td><td>Element</td><td align="center">1</td><td>Single search criterion.</td></tr><tr><td><code>HotelRef</code></td><td>Element</td><td align="center">1</td><td>Reference to a specific hotel.</td></tr><tr><td><code>@HotelCode</code></td><td>String</td><td align="center">1</td><td>Identifier for the hotel.</td></tr></tbody></table>

## 2. Configuration Response

**Active Rooms Only:** The OTA\_HotelAvailRS response must include only room types and rate plans that are currently active and available for booking in your channel. This ensures that hoteliers can effectively manage these rooms within the SiteMinder Platform.

**Unique Identifiers:** Each room type must have a unique `RoomTypeCode` and `RoomDescription @Name`. Each rate plan must have a unique `RatePlanCode` and `RatePlanDescription @Name`. Each room-rate combination must be unique to ensure accurate mapping.

**Clear Descriptions:** The `RoomDescription @Name` and `RatePlanDescription @Name` appear in dropdown menus within the SiteMinder Platform's mapping interface. Use clear, concise descriptions that enable hoteliers to easily identify and map their room types and rate plans to your channel's inventory.

**Occupancy Based Pricing (OBP):** SiteConnect supports both Per Day Pricing (PDP) and Occupancy Based Pricing (OBP). For PDP, no occupancy information is required. For OBP, you must include the `Occupancy` element with `MaxOccupancy` attribute, which defines how many occupancy-based rates SiteMinder will send in `OTA_HotelRateAmountNotifRQ` messages.

**MaxOccupancy values:**

* Valid range: 1 to 50
* Example: If `MaxOccupancy="3"`, SiteMinder will send rates for 1 person, 2 persons, and 3 persons
* Your channel must be able to receive and process all occupancy variations you specify

{% hint style="warning" %}
**Migration consideration:** When migrating from PDP to OBP, you must provide `MaxOccupancy` for each room-rate combination in your `OTA_HotelAvailRS` response.
{% endhint %}

{% tabs %}
{% tab title="Success" %}

```xml
<OTA_HotelAvailRS
	xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2024-07-06T15:27:41+00:00" Version="1.0">
	<Success/>
	<RoomStays>
		<RoomStay>
			<RoomTypes>
				<RoomType RoomTypeCode="SGL">
					<RoomDescription Name="Single Room">
						<Text>Single bed for single occupancy.</Text>
					</RoomDescription>
				</RoomType>
			</RoomTypes>
			<RatePlans>
				<RatePlan RatePlanCode="BAR">
					<RatePlanDescription Name="Best Available Rate">
						<Text>Best Available Rate.</Text>
					</RatePlanDescription>
				</RatePlan>
			</RatePlans>
		</RoomStay>
		<!-- Additional RoomStay elements -->
	</RoomStays>
</OTA_HotelAvailRS>
```

{% endtab %}

{% tab title="Success for OBP" %}

```xml
<OTA_HotelAvailRS
	xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2024-07-06T15:27:41+00:00" Version="1.0">
	<Success/>
	<RoomStays>
		<RoomStay>
			<RoomTypes>
				<RoomType RoomTypeCode="SGL">
					<RoomDescription Name="Single Room">
						<Text>Single bed for single occupancy.</Text>
					</RoomDescription>
					<Occupancy AgeQualifyingCode="10" MaxOccupancy="2"/>
				</RoomType>
			</RoomTypes>
			<RatePlans>
				<RatePlan RatePlanCode="BAR">
					<RatePlanDescription Name="Best Available Rate">
						<Text>Best Available Rate.</Text>
					</RatePlanDescription>
				</RatePlan>
			</RatePlans>
		</RoomStay>
		<!-- Additional RoomStay elements -->
	</RoomStays>
</OTA_HotelAvailRS>
```

{% endtab %}

{% tab title="Error" %}

```xml
<OTA_HotelAvailRS
	xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2024-07-06T15:27:41+00:00" Version="1.0">
	<Errors>
		<Error Type="6" Code="392">Hotel not found for HotelCode=XXXXXX</Error>
	</Errors>
</OTA_HotelAvailRS>
```

{% endtab %}

{% tab title="Invalid Responses" %}
**This is an invalid response.** Each `<RoomType>` and `<RatePlan>` combination must be in its own `RoomStay`. Multiple `<RatePlans>` cannot be sent under the same `RoomStay`.

```xml
<OTA_HotelAvailRS
	xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2024-07-06T15:27:41+00:00" Version="1.0">
	<Success/>
	<RoomStays>
		<RoomStay>
			<RoomTypes>
				<RoomType RoomTypeCode="SGL">
					<RoomDescription Name="Single Room">
						<Text>Single bed for single occupancy.</Text>
					</RoomDescription>
				</RoomType>
			</RoomTypes>
			<RatePlans>
				<RatePlan RatePlanCode="BAR">
					<RatePlanDescription Name="Best Available Rate">
						<Text>Best Available Rate.</Text>
					</RatePlanDescription>
				</RatePlan>
			</RatePlans>
			<RatePlans>
				<RatePlan RatePlanCode="NR">
					<RatePlanDescription Name="Non Refundable Rate">
						<Text>Non Refundable Rate.</Text>
					</RatePlanDescription>
				</RatePlan>
			</RatePlans>
		</RoomStay>
		<!-- Additional RoomStay elements -->
	</RoomStays>
</OTA_HotelAvailRS>
```

**This is an invalid response.** `RoomDescription @Name` and `RatePlanDescription @Name` fields must be unique for each room rate combination otherwise SiteMinder will consider as duplicate mappings.

```xml
<OTA_HotelAvailRS
	xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2024-07-06T15:27:41+00:00" Version="1.0">
	<Success/>
	<RoomStays>
		<RoomStay>
			<RoomTypes>
				<RoomType RoomTypeCode="SGL">
					<RoomDescription Name="Single Room">
						<Text>Single bed for single occupancy.</Text>
					</RoomDescription>
				</RoomType>
			</RoomTypes>
			<RatePlans>
				<RatePlan RatePlanCode="BAR">
					<RatePlanDescription Name="Standard Rate">
						<Text>Standard Rate</Text>
					</RatePlanDescription>
				</RatePlan>
			</RatePlans>
		</RoomStay>
		<RoomStay>
			<RoomTypes>
				<RoomType RoomTypeCode="SGL">
					<RoomDescription Name="Single Room">
						<Text>Single bed for single occupancy.</Text>
					</RoomDescription>
				</RoomType>
			</RoomTypes>
			<RatePlans>
				<RatePlan RatePlanCode="NR">
					<RatePlanDescription Name="Standard Rate">
						<Text>Standard Rate</Text>
					</RatePlanDescription>
				</RatePlan>
			</RatePlans>
		</RoomStay>
		<!-- Additional RoomStay elements -->
	</RoomStays>
</OTA_HotelAvailRS>
```

{% endtab %}
{% endtabs %}

### Optional Flags

Use optional flags in your response to control how SiteMinder sends updates for specific room-rate combinations:

* `NO_UPDATES`**:** Room-rate is mapped for reservation delivery only; no availability, rates, or restriction updates will be sent. Use this when a room-rate combination should appear in mapping for reservation delivery only but not receive any inventory updates from SiteMinder. The booking channel will manage this inventory entirely on their side.
* `NO_AVAILABILITY`**:** Prevents SiteMinder from sending availability updates for this room-rate combination. Restrictions and rates will still be sent.
* `NO_RATES`**:** Prevents SiteMinder from sending rate updates for this room-rate combination. Availability and restrictions will still be sent.

**Combined flags:** You can use `NO_AVAILABILITY` and `NO_RATES` together to allow only restriction updates for specific room-rate combinations.

{% hint style="success" %}
Even when `NO_AVAILABILITY` flag is set, restriction updates (stop sells, min/max stay, CTA/CTD) will still be sent in the `OTA_HotelAvailNotifRQ`.
{% endhint %}

**Example use case for `NO_UPDATES`:** Special contracted rates that the hotel manages directly in your channel but wants reservations sent to their PMS.

{% tabs %}
{% tab title="NO\_UPDATES" %}
Block all updates (availability, restrictions and rates).

```xml
<OTA_HotelAvailRS
	xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2024-07-06T15:27:41+00:00" Version="1.0">
	<Success/>
	<RoomStays>
		<RoomStay>
			<RoomTypes>
				<RoomType RoomTypeCode="SGL">
					<RoomDescription Name="Single Room">
						<Text>Single bed for single occupancy.</Text>
					</RoomDescription>
					<Occupancy AgeQualifyingCode="10" MaxOccupancy="2"/>
				</RoomType>
			</RoomTypes>
			<RatePlans>
				<RatePlan RatePlanCode="BAR">
					<RatePlanDescription Name="Best Available Rate">
						<Text>Best Available Rate.</Text>
					</RatePlanDescription>
					<AdditionalDetails>
						<AdditionalDetail Code="NO_UPDATES"/>
					</AdditionalDetails>
				</RatePlan>
			</RatePlans>
		</RoomStay>
		<!-- Additional RoomStay elements -->
	</RoomStays>
</OTA_HotelAvailRS>
```

{% endtab %}

{% tab title="NO\_AVAILABILITY" %}
Block availability updates, allowing restrictions and rate updates.

```xml
<OTA_HotelAvailRS
	xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2024-07-06T15:27:41+00:00" Version="1.0">
	<Success/>
	<RoomStays>
		<RoomStay>
			<RoomTypes>
				<RoomType RoomTypeCode="SGL">
					<RoomDescription Name="Single Room">
						<Text>Single bed for single occupancy.</Text>
					</RoomDescription>
					<Occupancy AgeQualifyingCode="10" MaxOccupancy="2"/>
				</RoomType>
			</RoomTypes>
			<RatePlans>
				<RatePlan RatePlanCode="BAR">
					<RatePlanDescription Name="Best Available Rate">
						<Text>Best Available Rate.</Text>
					</RatePlanDescription>
					<AdditionalDetails>
						<AdditionalDetail Code="NO_AVAILABILITY"/>
					</AdditionalDetails>
				</RatePlan>
			</RatePlans>
		</RoomStay>
		<!-- Additional RoomStay elements -->
	</RoomStays>
</OTA_HotelAvailRS>Block availability updates
```

{% endtab %}

{% tab title="NO\_RATES" %}
Block rate updates, allowing availability and restrictions updates.

```xml
<OTA_HotelAvailRS
	xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2024-07-06T15:27:41+00:00" Version="1.0">
	<Success/>
	<RoomStays>
		<RoomStay>
			<RoomTypes>
				<RoomType RoomTypeCode="SGL">
					<RoomDescription Name="Single Room">
						<Text>Single bed for single occupancy.</Text>
					</RoomDescription>
					<Occupancy AgeQualifyingCode="10" MaxOccupancy="2"/>
				</RoomType>
			</RoomTypes>
			<RatePlans>
				<RatePlan RatePlanCode="BAR">
					<RatePlanDescription Name="Best Available Rate">
						<Text>Best Available Rate.</Text>
					</RatePlanDescription>
					<AdditionalDetails>
						<AdditionalDetail Code="NO_RATES"/>
					</AdditionalDetails>
				</RatePlan>
			</RatePlans>
		</RoomStay>
		<!-- Additional RoomStay elements -->
	</RoomStays>
</OTA_HotelAvailRS>
```

{% endtab %}

{% tab title="Combined" %}
Block availability and rates updates, allowing restrictions updates.

```xml
<OTA_HotelAvailRS
	xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2024-07-06T15:27:41+00:00" Version="1.0">
	<Success/>
	<RoomStays>
		<RoomStay>
			<RoomTypes>
				<RoomType RoomTypeCode="SGL">
					<RoomDescription Name="Single Room">
						<Text>Single bed for single occupancy.</Text>
					</RoomDescription>
					<Occupancy AgeQualifyingCode="10" MaxOccupancy="2"/>
				</RoomType>
			</RoomTypes>
			<RatePlans>
				<RatePlan RatePlanCode="BAR">
					<RatePlanDescription Name="Best Available Rate">
						<Text>Best Available Rate.</Text>
					</RatePlanDescription>
					<AdditionalDetails>
						<AdditionalDetail Code="NO_RATES"/>
						<AdditionalDetail Code="NO_AVAILABILITY"/>
					</AdditionalDetails>
				</RatePlan>
			</RatePlans>
		</RoomStay>
		<RoomStay>
			<RoomTypes>
				<RoomType RoomTypeCode="SGL">
					<RoomDescription Name="Single Room">
						<Text>Single bed for single occupancy.</Text>
					</RoomDescription>
					<Occupancy AgeQualifyingCode="10" MaxOccupancy="2"/>
				</RoomType>
			</RoomTypes>
			<RatePlans>
				<RatePlan RatePlanCode="NR">
					<RatePlanDescription Name="Non-Refundable">
						<Text>Non-Refundable.</Text>
					</RatePlanDescription>
					<AdditionalDetails>
						<AdditionalDetail Code="NO_UPDATES"/>
					</AdditionalDetails>
				</RatePlan>
			</RatePlans>
		</RoomStay>
		<!-- Additional RoomStay elements -->
	</RoomStays>
</OTA_HotelAvailRS>
```

{% endtab %}
{% endtabs %}

<table><thead><tr><th width="239">Element / @Attribute</th><th width="108">Type</th><th width="62" align="center">M</th><th>Description</th></tr></thead><tbody><tr><td><code>OTA_HotelAvailRS</code></td><td>Element</td><td align="center">1</td><td>Root element for the response.</td></tr><tr><td><code>@xmlns</code></td><td>String</td><td align="center">1</td><td>Defines the XML namespace for the response. Must be set to <code>http://www.opentravel.org/OTA/2003/05</code></td></tr><tr><td><code>@EchoToken</code></td><td>String</td><td align="center">1</td><td>Unique identifier matching the request <code>EchoToken</code>.</td></tr><tr><td><code>@TimeStamp</code></td><td>DateTime</td><td align="center">1</td><td>Time when the response was generated.</td></tr><tr><td><code>@Version</code></td><td>String</td><td align="center">1</td><td>Specifies the API version. Must be set to <code>1.0</code>.</td></tr><tr><td><code>Success</code></td><td>Element</td><td align="center">0..1</td><td>Indicates successful processing of the request.</td></tr><tr><td><code>RoomStays</code></td><td>Element</td><td align="center">0..1</td><td>Container for room stay information.</td></tr><tr><td><code>RoomStay</code></td><td>Element</td><td align="center">1..n</td><td>Single room stay information.</td></tr><tr><td><code>RoomTypes</code></td><td>Element</td><td align="center">1</td><td>Container for room types.</td></tr><tr><td><code>RoomType</code></td><td>Element</td><td align="center">1</td><td>Single room type information.</td></tr><tr><td><code>@RoomTypeCode</code></td><td>String</td><td align="center">1</td><td>Code for the room type.</td></tr><tr><td><code>RoomDescription</code></td><td>Element</td><td align="center">1</td><td>Description of the room.</td></tr><tr><td><code>@Name</code></td><td>String</td><td align="center">1</td><td>Name of the room.</td></tr><tr><td><code>Text</code></td><td>String</td><td align="center">0..1</td><td>Description text for the room.</td></tr><tr><td><code>Occupancy</code></td><td>Element</td><td align="center">0..1</td><td>Occupancy details for the room. <strong>Only for OBP</strong>.</td></tr><tr><td><code>@AgeQualifyingCode</code></td><td>Integer</td><td align="center">1</td><td><p>Age qualification code for the occupancy:</p><p><code>10</code> Adult</p><p><strong>Only for OBP</strong>.</p></td></tr><tr><td><code>@MaxOccupancy</code></td><td>Integer</td><td align="center">1</td><td><p>Maximum occupancy for the room.</p><p>Min <code>1</code> - Max <code>50</code></p><p><strong>Only for OBP</strong>.</p></td></tr><tr><td><code>RatePlans</code></td><td>Element</td><td align="center">0..1</td><td>Container for rate plans.</td></tr><tr><td><code>RatePlan</code></td><td>Element</td><td align="center">1</td><td>Single rate plan information.</td></tr><tr><td><code>@RatePlanCode</code></td><td>String</td><td align="center">1</td><td>Code for the rate plan.</td></tr><tr><td><code>RatePlanDescription</code></td><td>Element</td><td align="center">1</td><td>Description of the rate plan.</td></tr><tr><td><code>@Name</code></td><td>String</td><td align="center">1</td><td>Name of the rate plan.</td></tr><tr><td><code>Text</code></td><td>String</td><td align="center">0..1</td><td>Description text for the rate plan.</td></tr><tr><td><code>AdditionalDetails</code></td><td>Element</td><td align="center">0..1</td><td>Additional details about the rate plan.</td></tr><tr><td><code>AdditionalDetail</code></td><td>Element</td><td align="center">1..2</td><td>Single additional detail.</td></tr><tr><td><code>@Code</code></td><td>String</td><td align="center">1</td><td><p>Codes:</p><p><code>NO_RATES</code></p><p><code>NO_AVAILABILITY</code></p><p><code>NO_UPDATES</code></p></td></tr><tr><td><code>Errors</code></td><td>Element</td><td align="center">0..1</td><td>Indicates an error occurred during the processing of the request.</td></tr><tr><td><code>Error</code></td><td>Element</td><td align="center">1..n</td><td>Single error information containing free text.</td></tr><tr><td><code>@Type</code></td><td>Integer</td><td align="center">1</td><td>Type of error. Refer to <a href="../../../../additional-resources/reference-tables/error-warning-types">Error Warning Types (EWT)</a>.</td></tr><tr><td><code>@Code</code></td><td>Integer</td><td align="center">0..1</td><td>Code representing the error. Refer to <a href="../../../../additional-resources/reference-tables/error-codes">Error Codes (ERR)</a>.</td></tr></tbody></table>

## Common Questions

<details>

<summary>What is the purpose of the Rooms and Rates endpoint?</summary>

The Rooms and Rates endpoint allows SiteMinder to retrieve the complete list of active room types and rate plans configured in your booking channel for a specific property.

**When it's called:**

* During initial property setup
* When the hotel needs to update their room rate mappings
* When SiteMinder needs to refresh configuration data

**What it enables:**

* Hotels can map their SiteMinder room types to your channel's room types
* Establishes the foundation for all ARI updates and reservations
* Ensures accurate inventory synchronization between systems

</details>

<details>

<summary>Can I retrieve rooms and rates from SiteMinder to load into my system?</summary>

No, you cannot directly retrieve rooms and rates from SiteMinder. The workflow is:

1. **Booking channel setup:** Room types and rate plans must first be configured in your channel based on the agreement between the hotel and your booking channel
2. **SiteMinder requests:** SiteConnect sends `OTA_HotelAvailRQ` to retrieve your channel's configuration
3. **Hotel mapping:** The hotel maps your channel's rooms and rates to their SiteMinder inventory structure

**Why this direction?** This ensures that the booking channel controls their own inventory structure and SiteMinder adapts to it.

</details>

<details>

<summary>How often does SiteMinder call the Rooms and Rates endpoint?</summary>

SiteMinder calls this endpoint:

* **On-demand** when hotels access the room rate mapping interface
* **Not on a schedule** - there is no automatic polling
* **During setup** when a new property is being configured

**Performance expectation:** Your endpoint should respond within 1-2 seconds as hotels are actively waiting for the mapping interface to load.

</details>

<details>

<summary>Why aren't all the rooms and rates I sent showing up in the mapping interface?</summary>

This occurs when **combinations are not unique**. Each room rate must have a distinct combination of:

* `RoomDescription @Name` + `RatePlanDescription @Name`

**Example of the problem:**

```xml
<!-- Room Rate 1 -->
<RoomDescription Name="Standard Room"/>
<RatePlanDescription Name="Standard Rate"/>

<!-- Room Rate 2 - DUPLICATE COMBINATION -->
<RoomDescription Name="Standard Room"/>
<RatePlanDescription Name="Standard Rate"/>
```

**Solution:** Ensure each combination is unique by:

* Using specific rate plan names (e.g., "Standard Rate - Flexible", "Standard Rate - Non-Refundable")
* Making room descriptions more specific (e.g., "Standard Room - City View", "Standard Room - Garden View")

</details>

<details>

<summary>Why can't I find the <code>RoomDescription/Text</code> we sent in the SiteMinder platform?</summary>

The `RoomDescription/Text` element is used **internally by SiteMinder Support** and is not displayed in the hotel-facing mapping interface.

**What hotels see:**

* `RoomDescription @Name` - Appears in dropdown menus
* `RatePlanDescription @Name` - Appears in dropdown menus

**Best practice:** Make the `@Name` attributes clear and descriptive since these are what hotels will use for mapping.

</details>

<details>

<summary>What are the NO_UPDATES, NO_AVAILABILITY, and NO_RATES flags?</summary>

These optional flags control which types of updates SiteMinder sends for specific room-rate combinations:

**NO\_UPDATES:**

* Blocks **all** ARI updates (availability, restrictions, and rates)
* Use for room rates that are mapped **only for reservation delivery**

**NO\_AVAILABILITY:**

* Blocks **availability** updates only
* Restrictions and rates will still be sent
* **Note:** Restriction updates (stop sells, min/max stay, CTA/CTD) will still be sent in `OTA_HotelAvailNotifRQ`

**NO\_RATES:**

* Blocks **rate** updates only
* Availability and restrictions will still be sent

**Combined flags:** You can use `NO_AVAILABILITY` and `NO_RATES` together to allow only restriction updates.

</details>

<details>

<summary>Does my channel need to support Occupancy Based Pricing (OBP)?</summary>

SiteConnect supports both **Per Day Pricing (PDP)** and **Occupancy Based Pricing (OBP)**.

**PDP (default):**

* Single rate per room per night
* No occupancy variations required
* No `Occupancy` element needed in response

**OBP (optional):**

* Different rates based on number of guests
* Requires `Occupancy` element with `MaxOccupancy` attribute
* More flexible pricing structure

You can support either or both pricing models based on your channel's capabilities.

</details>

<details>

<summary>We only supported RoomTypeCode, but now we want to add RatePlanCode. What do we need to do?</summary>

Adding `RatePlanCode` support requires completing a certification process:

**Steps:**

1. **Development:** Modify your system to include `RatePlanCode` in responses
2. **Certification:** Complete testing with SiteMinder Partner Integrations team
3. **Hotel remapping:** Properties will need to remap their room rates to include the new `RatePlanCode`

**Impact:** This is a significant change that affects all connected properties but provides better granularity for rate plan management.

</details>

<details>

<summary>What happens if I change the room name or rate plan name?</summary>

Changing `RoomDescription @Name` or `RatePlanDescription @Name` **without changing the codes**:

**Impact:**

* Connection remains intact (codes unchanged)
* Hotels must **re-save** their mapping in SiteMinder platform to see updated descriptions
* If hotels don't re-save, they'll see old descriptions but functionality continues

**Best practice:** Notify connected hotels when you change descriptions so they can update their mappings if needed.

</details>

<details>

<summary>What happens if I change the RoomTypeCode or RatePlanCode?</summary>

Changing `RoomTypeCode` or `RatePlanCode` **breaks the existing mapping**:

**Impact:**

* SiteMinder will not recognize the old codes
* All ARI updates for this room-rate combination will fail
* Reservations may not be properly routed
* Hotels must **complete the mapping again** from scratch

**Critical:** Code changes should be avoided whenever possible. If absolutely necessary:

1. Notify SiteMinder Partner Integrations team in advance
2. Coordinate with affected hotels
3. Plan for a maintenance window
4. Provide clear migration instructions

</details>

<details>

<summary>What are the most common validation errors for Rooms and Rates?</summary>

**Common errors:**

1. **Multiple rate plans in single RoomStay**
   * Each `RoomType` + `RatePlan` combination must be in its own `RoomStay`
   * Invalid: Multiple `<RatePlans>` elements under one `<RoomStay>`
2. **Non-unique combinations**
   * `RoomDescription @Name` + `RatePlanDescription @Name` must be unique
   * SiteMinder displays only one instance when duplicates exist
3. **Missing required fields**
   * `RoomTypeCode`, `RoomDescription @Name`, `RatePlanCode`, `RatePlanDescription @Name` are all mandatory
4. **Invalid MaxOccupancy for OBP**
   * Must be between 1 and 50
   * Required when supporting OBP

**Testing:** Use the "Invalid Responses" examples in the specification to verify your validation logic.

</details>

## **Help C**entre

* [Map your room rates to a channel](https://help-platform.siteminder.com/en/articles/8885873-map-your-room-rates-to-a-channel)
* [Multi-map your channel room rates](https://help-platform.siteminder.com/en/articles/8673889-multi-map-your-channel-room-rates)
* [How to fix incorrect mapping or mismatched rate configuration](https://help-platform.siteminder.com/en/articles/8673880-how-to-fix-incorrect-mapping-or-mismatched-rate-configuration)

<table data-view="cards"><thead><tr><th data-card-target data-type="content-ref"></th><th data-hidden></th><th data-hidden></th><th data-hidden></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><a href="../testing-and-certification">testing-and-certification</a></td><td></td><td></td><td></td><td></td></tr><tr><td><a href="../error-handling">error-handling</a></td><td></td><td></td><td></td><td></td></tr><tr><td><a href="../../../../additional-resources/glossary">glossary</a></td><td></td><td></td><td></td><td></td></tr></tbody></table>
