# PMS -> SM

## What is Restrictions?

**Restrictions** is an update method where the Property Management System (PMS) or Revenue Management System (RMS) actively send booking restrictions to the SiteMinder Platform for distribution across all connected channels. This integration ensures that all booking channels receive synchronized restriction updates in real-time, preventing overbookings and maintaining accurate inventory control.

Booking rules and limitations including stop sells, closed to arrival/departure, and minimum/maximum length of stay requirements.

{% hint style="warning" %}
**Best Practice**: While availability and restrictions can technically be sent together using the `OTA_HotelAvailNotifRQ` message, we recommend sending them in separate requests for better processing and clarity.
{% endhint %}

## 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>SiteMinder will provide a single global endpoint for all hotels for PMS to send update requests <code>OTA_HotelAvailNotifRQ</code> and receive confirmation responses <code>OTA_HotelAvailNotifRS</code>.</li><li><strong>Test Environment Endpoint:</strong> <a href="https://tpi-pmsx.preprod.siteminderlabs.com/webservices/%7BRequestorID%7D">https://tpi-pmsx.preprod.siteminderlabs.com/webservices/{RequestorID}</a></li></ul></td></tr><tr><td><strong>Authentication</strong></td><td><ul><li>SiteMinder will provide a single username/password for all hotels (PMS Level authentication).</li><li>PMS must include authentication credentials within the <strong>SOAP Security header</strong> of each request <code>OTA_HotelAvailNotifRQ</code>.</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 will 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></ul></td></tr></tbody></table>

## Message Exchange Flow

When your PMS or RMS need to update booking restrictions, it sends updates to SiteMinder using a synchronous SOAP/HTTPS exchange. SiteMinder then distributes these updates to all connected channels in real-time. Each update triggers a simple request-response cycle.

1. **Restrictions Update (PMS to SiteMinder)**: `OTA_HotelAvailNotifRQ` Delivers booking restrictions (stop sells, CTA, CTD, min/max stay) for specific rate plans across defined date ranges.
2. **Confirmation Response (SiteMinder to PMS)**: `OTA_HotelAvailNotifRS` Confirms successful receipt and processing or reports validation errors.

## Security Header

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

**Key Requirements:**

* **Validation**: Our 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="Restrictions Update" %}
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
			xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" SOAP-ENV:mustUnderstand="1">
			<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_HotelAvailNotifRQ
			xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" TimeStamp="2024-07-06T15:27:41+00:00" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c">
			<!-- ... other elements and attributes have been omitted for brevity ... -->
		</OTA_HotelAvailNotifRQ>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
```

{% endtab %}

{% tab title="Confirmation 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_HotelAvailNotifRS
			xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" TimeStamp="2024-07-06T15:27:41+00:00" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c">
			<Success/>
		</OTA_HotelAvailNotifRS>
	</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. Restrictions Update**

The `OTA_HotelAvailNotifRQ` message carries restriction updates from your PMS or RMS to SiteMinder. Each message contains updates for exactly one hotel, with the ability to send multiple date ranges and room/rate combinations in a single request.

The message consists of an AvailStatusMessages container that holds individual AvailStatusMessage elements. Each AvailStatusMessage can update booking restrictions for specific date ranges and room/rate combinations.

#### **Key Concepts**

**AvailStatusMessages**

* Container for all restriction updates in the request.
* Always contains exactly one hotel's updates (identified by `HotelCode`).
* Can contain multiple `AvailStatusMessage` elements.

**AvailStatusMessage**

* Represents a single update instruction for specific dates.
* Can target room level (`InvTypeCode` only) or room rate level (`InvTypeCode` + `RatePlanCode`).

**Restriction Independence**

* Each restriction type (Stop Sell, CTA, CTD, MinLOS, MaxLOS) operates independently, updating one restriction does not change or reset other restrictions.
* Only include the specific restrictions you want to change - unchanged restrictions retain their current values.

**Delta Updates**

* Only send data that has changed since the last update.
* Required for production to avoid system overload.
* Critical for efficient processing and performance.

**Bundling Updates**

* Consolidate consecutive dates with identical values into a single `AvailStatusMessage`.
* Focus each request on one room/rate combination.
* Use day-of-week flags to handle weekday/weekend variations within the same date range.

{% tabs %}
{% tab title="Stop Sell" %}

* **Stop Sell** controls whether a room rate is open or closed for sale.
* Set at the room rate level (`InvTypeCode` + `RatePlanCode`).
* Uses `RestrictionStatus` element with `Status="Open"` or `Status="Close"`

When Stop Sell has `Status="Close"`, it overrides all other settings. The room rate remains closed for sale even when availability (`BookingLimit`) is greater than zero and both CTA and CTD are set to `"Open"`.

{% code title="Room rate is stop sold for the specified date range." %}

```xml
<OTA_HotelAvailNotifRQ
	xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" TimeStamp="2024-07-06T15:27:41+00:00" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c">
	<POS>
		<Source>
			<RequestorID Type="22" ID="PMSCODE"/>
		</Source>
	</POS>
	<AvailStatusMessages HotelCode="HOTELCODE">
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-01" End="2025-03-01" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<RestrictionStatus Status="Close"/>
		</AvailStatusMessage>
	</AvailStatusMessages>
</OTA_HotelAvailNotifRQ>
```

{% endcode %}

{% code title="Room rate is open for sale for the specified date range." %}

```xml
<OTA_HotelAvailNotifRQ
	xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" TimeStamp="2024-07-06T15:27:41+00:00" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c">
	<POS>
		<Source>
			<RequestorID Type="22" ID="PMSCODE"/>
		</Source>
	</POS>
	<AvailStatusMessages HotelCode="HOTELCODE">
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-01" End="2025-03-01" InvTypeCode="SUP" RatePlanCode="BAR"/>
			<RestrictionStatus Status="Open"/>
		</AvailStatusMessage>
	</AvailStatusMessages>
</OTA_HotelAvailNotifRQ>
```

{% endcode %}
{% endtab %}

{% tab title="CTA" %}

* **Closed to Arrival (CTA)** prevents guests from checking in on specific dates.
* Set at the room rate level (`InvTypeCode` + `RatePlanCode`).
* Uses `RestrictionStatus` `Restriction="Arrival"` with `Status="Open"` or `Status="Close"`

{% code title="Room rate is closed for arrival (check-in) on 2025-03-01." %}

```xml
<OTA_HotelAvailNotifRQ
	xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" TimeStamp="2024-07-06T15:27:41+00:00" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c">
	<POS>
		<Source>
			<RequestorID Type="22" ID="PMSCODE"/>
		</Source>
	</POS>
	<AvailStatusMessages HotelCode="HOTELCODE">
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-01" End="2025-03-01" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<RestrictionStatus Restriction="Arrival" Status="Close"/>
		</AvailStatusMessage>
	</AvailStatusMessages>
</OTA_HotelAvailNotifRQ>
```

{% endcode %}

{% code title="Room rate is open for arrival  (check-in) on 2025-03-01." %}

```xml
<OTA_HotelAvailNotifRQ
	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">
	<POS>
		<Source>
			<RequestorID Type="22" ID="PMSCODE"/>
		</Source>
	</POS>
	<AvailStatusMessages HotelCode="HOTELCODE">
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-01" End="2025-03-01" InvTypeCode="SUP" RatePlanCode="BAR"/>
			<RestrictionStatus Restriction="Arrival" Status="Open"/>
		</AvailStatusMessage>
	</AvailStatusMessages>
</OTA_HotelAvailNotifRQ>
```

{% endcode %}
{% endtab %}

{% tab title="CTD" %}

* **Closed to Departure (CTD)** prevents guests from checking out on specific dates.
* Set at the room rate level (`InvTypeCode` + `RatePlanCode`).
* Uses `RestrictionStatus` `Restriction="Departure"` with `Status="Open"` or `Status="Close"`

{% code title="Room rate is closed for departure (check-out) on 2025-03-01." %}

```xml
<OTA_HotelAvailNotifRQ
	xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" TimeStamp="2024-07-06T15:27:41+00:00" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c">
	<POS>
		<Source>
			<RequestorID Type="22" ID="PMSCODE"/>
		</Source>
	</POS>
	<AvailStatusMessages HotelCode="HOTEL">
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-01" End="2025-03-01" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<RestrictionStatus Restriction="Departure" Status="Close"/>
		</AvailStatusMessage>
	</AvailStatusMessages>
</OTA_HotelAvailNotifRQ>
```

{% endcode %}

{% code title="Room rate is open for departure (check-out) on 2025-03-01." %}

```xml
<OTA_HotelAvailNotifRQ
	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">
	<POS>
		<Source>
			<RequestorID Type="22" ID="PMSCODE"/>
		</Source>
	</POS>
	<AvailStatusMessages HotelCode="HOTELCODE">
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-01" End="2025-03-01" InvTypeCode="SUP" RatePlanCode="BAR"/>
			<RestrictionStatus Restriction="Departure" Status="Open" />
		</AvailStatusMessage>
	</AvailStatusMessages>
</OTA_HotelAvailNotifRQ>
```

{% endcode %}
{% endtab %}

{% tab title="Min Stay" %}

* **Minimum Length of Stay** is the minimum nights required if arriving on specific dates.
* Set at the room rate level (`InvTypeCode` + `RatePlanCode`).
* Uses `LengthsOfStay`/`LengthOfStay` elements with `MinMaxMessageType="SetMinLOS"`
* `@Time` is the minimum stay duration in days.

Ensure logical consistency between **MinLOS** and **MaxLOS** values for the same date. A minimum stay requirement (MinLOS) can never exceed the maximum stay limit (MaxLOS). The PMS must validate this relationship before sending updates to SiteMinder.

{% code title="Setting MinLOS of 7 days." %}

```xml
<OTA_HotelAvailNotifRQ
	xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" TimeStamp="2024-07-06T15:27:41+00:00" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c">
	<POS>
		<Source>
			<RequestorID Type="22" ID="PMSCODE"/>
		</Source>
	</POS>
	<AvailStatusMessages HotelCode="HOTELCODE">
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-01" End="2025-03-01" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<LengthsOfStay>
				<LengthOfStay MinMaxMessageType="SetMinLOS" Time="7"/>
			</LengthsOfStay>
		</AvailStatusMessage>
	</AvailStatusMessages>
</OTA_HotelAvailNotifRQ>
```

{% endcode %}
{% endtab %}

{% tab title="Max Stay" %}

* **Maximum Length of Stay** is the maximum nights allowed if arriving on specific dates.
* Set at the room rate level (`InvTypeCode` + `RatePlanCode`).
* Uses `LengthsOfStay`/`LengthOfStay` elements with `MinMaxMessageType="SetMaxLOS"`
* `@Time` is the maximum stay duration in days.
* To remove `MaxLOS`, set `Time="999"` (not "0").

Ensure logical consistency between **MinLOS** and **MaxLOS** values for the same date. A minimum stay requirement (MinLOS) can never exceed the maximum stay limit (MaxLOS). The PMS must validate this relationship before sending updates to SiteMinder.

{% code title="Setting MaxLOS of 7 days." %}

```xml
<OTA_HotelAvailNotifRQ
	xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" TimeStamp="2024-07-06T15:27:41+00:00" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c">
	<POS>
		<Source>
			<RequestorID Type="22" ID="PMSCODE"/>
		</Source>
	</POS>
	<AvailStatusMessages HotelCode="HOTELCODE">
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-01" End="2025-03-01" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<LengthsOfStay>
				<LengthOfStay MinMaxMessageType="SetMaxLOS" Time="7"/>
			</LengthsOfStay>
		</AvailStatusMessage>
	</AvailStatusMessages>
</OTA_HotelAvailNotifRQ>
```

{% endcode %}

{% code title="Removing MaxLOS." %}

```xml
<OTA_HotelAvailNotifRQ
	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">
	<POS>
		<Source>
			<RequestorID Type="22" ID="PMSCODE"/>
		</Source>
	</POS>
	<AvailStatusMessages HotelCode="HOTEL">
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-01" End="2025-03-01" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<LengthsOfStay>
				<LengthOfStay MinMaxMessageType="SetMaxLOS" Time="999"/>
			</LengthsOfStay>
		</AvailStatusMessage>
	</AvailStatusMessages>
</OTA_HotelAvailNotifRQ>
```

{% endcode %}
{% endtab %}
{% endtabs %}

### Update Multiple Values Examples

Each `AvailStatusMessage` can be used to set **Minimum/Maximum Stays**, **CTA/CTD** and **Stop Sells** either individually or in combination. Each attribute such as `LengthOfStay` for minimum/maximum stays, and `RestrictionStatus` for stop sells and CTA/CTD can be updated independently within the same request.

{% hint style="danger" %}
If you choose to send Stop Sell, CTA and CTD on a Room Level (RatePlanCode not present), then all updates (Open and Close) should follow the same rule. The same applies if you choose to send the restrictions at a room rate level (InvTypeCode and RatePlanCode are present). It is not acceptable to send Room-level restriction updates, and then overlay them with Room Rate level updates or vice versa.
{% endhint %}

{% tabs %}
{% tab title="Restrictions Only" %}
Here is an example of an `OTA_HotelAvailNotifRQ` that updates only **Minimum/Maximum Stay**, **Stop Sell** and **CTA/CTD** for the same room rate in a single request:

```xml
<OTA_HotelAvailNotifRQ
	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">
	<POS>
		<Source>
			<RequestorID Type="22" ID="PMSCODE"/>
		</Source>
	</POS>
	<AvailStatusMessages HotelCode="HOTEL">
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-01" End="2025-03-14" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<LengthsOfStay>
				<LengthOfStay MinMaxMessageType="SetMinLOS" Time="2"/> <!-- Min Length of Stay -->
				<LengthOfStay MinMaxMessageType="SetMaxLOS" Time="5"/> <!-- Max Length of Stay -->
			</LengthsOfStay>
			<RestrictionStatus Status="Close"/> <!-- Stop Sell -->
		</AvailStatusMessage>
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-01" End="2025-03-14" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<RestrictionStatus Restriction="Arrival" Status="Close"/> <!-- Close to Arrival (CTA) -->
		</AvailStatusMessage>
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-01" End="2025-03-14" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<RestrictionStatus Restriction="Departure" Status="Close"/> <!-- Close to Departure (CTD) -->
		</AvailStatusMessage>
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-15" End="2025-03-31" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<LengthsOfStay>
				<LengthOfStay MinMaxMessageType="SetMinLOS" Time="1"/> <!-- Min Length of Stay -->
				<LengthOfStay MinMaxMessageType="SetMaxLOS" Time="7"/> <!-- Max Length of Stay -->
			</LengthsOfStay>
			<RestrictionStatus Status="Open"/> <!-- Stop Sell -->
		</AvailStatusMessage>
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-15" End="2025-03-31" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<RestrictionStatus Restriction="Arrival" Status="Open"/> <!-- Close to Arrival (CTA) -->
		</AvailStatusMessage>
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-03-15" End="2025-03-31" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<RestrictionStatus Restriction="Departure" Status="Open"/> <!-- Close to Departure (CTD) -->
		</AvailStatusMessage>
		<!-- Additional AvailStatusMessage elements -->
	</AvailStatusMessages>
</OTA_HotelAvailNotifRQ>
```

{% endtab %}
{% endtabs %}

<table><thead><tr><th width="285">Element / @Attribute</th><th width="139">Type</th><th width="60" align="center">M</th><th>Description</th></tr></thead><tbody><tr><td><code>OTA_HotelAvailNotifRQ</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>POS / Source / RequestorID</code></td><td></td><td align="center">1</td><td></td></tr><tr><td><code>@Type</code></td><td></td><td align="center">1</td><td>Fixed at <code>22</code> (ESRP)</td></tr><tr><td><code>@ID</code></td><td>String</td><td align="center"></td><td></td></tr><tr><td><code>AvailStatusMessages</code></td><td>Element</td><td align="center">1</td><td>Container for availability and restriction status messages.</td></tr><tr><td><code>@HotelCode</code></td><td>String</td><td align="center">1</td><td>Identifier for the hotel.</td></tr><tr><td><code>AvailStatusMessage</code></td><td>Element</td><td align="center">1..n</td><td>Single availability or restriction status message.</td></tr><tr><td><code>@BookingLimit</code></td><td>Integer ≥ 0</td><td align="center">0..1</td><td>Sets the number of rooms available for sale.</td></tr><tr><td><code>StatusApplicationControl</code></td><td>Element</td><td align="center">1</td><td>Contains date and room identification information. <strong>Note:</strong> No overlapping dates allowed.</td></tr><tr><td><code>@Start</code></td><td>Date</td><td align="center">1</td><td>The start date for which the update is being set. This date is inclusive.</td></tr><tr><td><code>@End</code></td><td>Date</td><td align="center">1</td><td>The end date for which the update is being set. This date is inclusive.</td></tr><tr><td><code>@InvTypeCode</code></td><td>String</td><td align="center">0..1</td><td>Identifies the room type.</td></tr><tr><td><code>@RatePlanCode</code></td><td>String</td><td align="center">0..1</td><td>Identifies the rate plan.</td></tr><tr><td><code>Mon</code>, <code>Tue</code>, <code>Weds</code>, <code>Thur</code>, <code>Fri</code>, <code>Sat</code>, <code>Sun</code></td><td>Boolean</td><td align="center">0..1</td><td><p>The <strong>day-of-week indicators</strong> are used to specify which days a rate update applies to. These indicators accept values of <code>"0"</code> or <code>"1"</code>, where:</p><ul><li><strong><code>"1"</code></strong> indicates the update applies to that day.</li><li><strong><code>"0"</code></strong> indicates the update does not apply to that day.</li></ul></td></tr><tr><td><code>LengthsOfStay</code></td><td>Element</td><td align="center">0..1</td><td>Used for Minimum Stay and Maximum Stay.</td></tr><tr><td><code>LengthOfStay</code></td><td>Element</td><td align="center">1..2</td><td>Single length of stay information.</td></tr><tr><td><code>@MinMaxMessageType</code></td><td>String</td><td align="center">1</td><td><p>Can be one of the following: <code>SetMinLOS</code></p><p><code>SetMaxLOS</code></p></td></tr><tr><td><code>@Time</code></td><td>Integer > 0</td><td align="center">1</td><td><p>Specifies the number of days related to a stay.</p><p><code>SetMinLOS</code> : Minimum days required for a stay.</p><p><code>SetMaxLOS</code> : Maximum days bookable.</p><p><code>@Time</code> value must be above <strong>0.</strong> To remove<code>MaxLOS</code>), set <code>@Time</code> to <strong>999</strong>.</p></td></tr><tr><td><code>RestrictionStatus</code></td><td>Element</td><td align="center">0..1</td><td>Used to restrict the room for Stop Sell, Closed to Arrivals, and Closed to Departure.</td></tr><tr><td><code>@Status</code></td><td>String</td><td align="center">1</td><td><p>Values:</p><p><code>Open</code> (opens room for sale)</p><p><code>Close</code> (closes room for sale)</p></td></tr><tr><td><code>@Restriction</code></td><td>String</td><td align="center">0..1</td><td><p>Values:</p><p><code>Arrival</code> (closes to arrival)</p><p><code>Departure</code> (closes to departure)</p><p>If no type is specified, assume a full close or open for the room rate.</p></td></tr></tbody></table>

## 2. **Confirmation Response**

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

```xml
<OTA_HotelAvailNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2025-07-06T15:27:41+00:00" Version="1.0">
    <Success/>
</OTA_HotelAvailNotifRS>
```

{% endtab %}

{% tab title="Error" %}

```xml
<OTA_HotelAvailNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" TimeStamp="2025-08-01T09:30:47+08:00" EchoToken="echo-abc123">
  <Errors>
    <Error Type="6">PMS is not authorized to access hotel with HotelCode=XXXX</Error>
  </Errors>
</OTA_HotelAvailNotifRS>
```

{% endtab %}

{% tab title="Error" %}

```xml
<OTA_HotelAvailNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" TimeStamp="2025-08-01T09:30:47+08:00" EchoToken="echo-abc123">
  <Errors>
    <Error Type="10">Status should be "Close" or "Open"</Error>
  </Errors>
</OTA_HotelAvailNotifRS>
```

{% endtab %}

{% tab title="Error" %}

```xml
<OTA_HotelAvailNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" TimeStamp="2025-08-01T09:30:47+08:00" EchoToken="echo-abc123">
  <Errors>
    <Error Type="10">Time should be a number between 1 and 9999</Error>
  </Errors>
</OTA_HotelAvailNotifRS>
```

{% endtab %}
{% endtabs %}

<table><thead><tr><th width="259">Element / @Attribute</th><th width="108">Type</th><th width="70" align="center">M</th><th>Description</th></tr></thead><tbody><tr><td><code>OTA_HotelAvailNotifRS</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 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 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>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="https://developer.siteminder.com/sm-apis/additional-resources/reference-tables/error-warning-types-ewt">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="/pages/4gDxPCSFeyblWHTelhiH">Error Codes (ERR)</a>.</td></tr></tbody></table>

## Common Questions

<details>

<summary>Can I send availability and restrictions updates in the same message?</summary>

Yes, but send them separately for better processing.

The `OTA_HotelAvailNotifRQ` message supports both, but separate requests provide clearer error handling and easier troubleshooting.

</details>

<details>

<summary>How often should I send availability and restrictions updates?</summary>

Send delta updates in real-time as changes occur in your PMS (within 2 minutes).

Only send data that has changed - do not resend unchanged availability or restrictions.

</details>

<details>

<summary>Can I send full flushes daily to ensure complete synchronization?</summary>

No. Full flushes are only for initial setup or when requested by SiteMinder support.

Delta updates (changes only) are required in production. Frequent full flushes cause system overload and must be avoided.

</details>

<details>

<summary>When availability or restrictions change for a date, do I need to include all data in the message?</summary>

No. Send only what changed.

If availability changed, send only the new availability value. If a restriction changed, send only that restriction. Do not include unchanged data in your message.

Send changes only for the specific room type and rate plan that changed - do not include other room types or rate plans.

</details>

<details>

<summary>What happens when availability and restrictions conflict?</summary>

Restrictions take priority over availability.

**Priority order:**

1. **Stop Sell** - Overrides everything; if closed, room rate cannot be booked
2. **CTA/CTD** - Controls arrival/departure when Stop Sell is open
3. **Availability** - Room count when restrictions allow booking

**Both must allow booking:**

* Stop Sell = Close, Availability = 10 → Cannot book (restrictions block)
* Stop Sell = Open, Availability = 0 → Cannot book (no inventory)
* Stop Sell = Open, Availability = 10 → Can book ✓

Update availability and restrictions independently - stored availability activates when restrictions open.

</details>

<details>

<summary>Can I set different restrictions for different rate plans on the same room type?</summary>

Yes. Restrictions are set at the room rate level, while availability is set at the room type level.

**Availability (Room Level):**

* Applied to the entire room type (InvTypeCode only)
* All rate plans share the same availability pool
* Example: 10 Double Rooms available for ALL rate plans

**Restrictions (Room Rate Level):**

* Applied to specific room/rate combinations (InvTypeCode + RatePlanCode)
* Each rate plan can have independent restrictions
* Example: Double Room - BAR (Stop Sell = Close), Double Room - B\&B (Stop Sell = Open)

</details>

<details>

<summary>Does SiteMinder automatically reduce availability for all reservation types?</summary>

No. Only new bookings trigger automatic reduction for quick channel updates.

Your PMS must send availability updates via `OTA_HotelAvailNotifRQ` for all reservation types (Book, Modify, Cancel) - you are the master source of availability data.

</details>

<details>

<summary>How many dates in advance does SiteMinder support?</summary>

Up to 750 days in the future.

Properties can configure their inventory distribution window between 400-750 days based on their preferences.

</details>

<details>

<summary>Do you support Minimum/Maximum Stay Through?</summary>

No. pmsXchange only supports standard MinLOS/MaxLOS (applied on check-in date).

Stay Through restrictions (applied when any part of the reservation touches a date) are not currently supported.

</details>

<details>

<summary>Do you support release period?</summary>

No, there is no native release-period field, so a PMS wanting the same functional outcome must send Stop Sell for the release-window dates instead of a dedicated release-period value.

</details>

<details>

<summary>Do you support Patterned Length of Stay (e.g., only 7, 14, 21, or 28 days)?</summary>

Not directly, but use multiple rate plans with different MinLOS values.

Example: Create "Weekly" (MinLOS = 7), "Bi-Weekly" (MinLOS = 14), and "Monthly" (MinLOS = 28) rate plans for the same room type, each with appropriate pricing.

</details>

{% hint style="success" icon="sparkles" %}

## Still have questions?

Use the <i class="fa-gitbook-assistant">:gitbook-assistant:</i> **Ask** button at the top of the page to chat with our AI assistant — it can help you navigate the guide, understand requirements, and troubleshoot issues.

If you need more support, visit [Integration Support](/integration-support/integration-support.md).
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.siteminder.com/pmsxchange-api/reference/restrictions/pms-to-sm.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
