SiteMinder APIs
Help CentrePartner ContactsTest Extranet LoginBecome a SiteMinder Partner
  • Hub
  • Quickstart
  • Integration Process
  • CHANNELS
    • Introduction
      • SiteConnect
        • Getting Started
        • Developer Guide
          • Integration Requirements
          • Message Structure
          • Error Handling
        • API Reference
          • Rooms and Rates
          • Availability and Restrictions
          • Rates
          • Reservations
            • Reservation XML Sample
        • Testing and Certification
        • Changelog
        • FAQ
      • Channels Plus
        • Getting Started
        • Developer Guide
          • Partner Portal
          • Deals
          • Invoicing: Gross vs. Net
        • API Reference
          • Properties
          • Property
          • Lock Reservation
          • Confirm Reservation
          • Modify Reservation
          • Cancel Reservation
        • Testing and Certification
        • Swagger
        • Changelog
        • FAQ
  • PMS / RMS
    • Introduction
      • pmsXchange
        • Getting Started
        • Developer Guide
          • Integration Requirements
          • Message Structure
          • Error Handling
        • API Reference
          • Rooms and Rates
          • Availability and Restrictions
          • Rates
          • Reservations
            • Reservations PULL
            • Reservations Import
            • Reservations Upload
              • Reservation Types
            • Payment Transaction Record
            • Credit Card Tokenization
            • Reservations XML Samples
              • Reservations PULL Samples
              • Reservations Upload Samples
        • Testing and Certification
        • Changelog
        • FAQ
  • APPS
    • Introduction
      • SiteMinder Exchange
        • Getting Started
        • Developer Guide
          • Integration Requirements
          • Message Structure
          • Error Handling
        • API Reference
          • Availability and Rates
            • Publishers
            • Hotels
            • RoomTypes
            • RatePlans
            • Availability
            • Rates
            • Models
            • Response Samples
              • Publishers Sample
              • Hotels Sample
              • RoomTypes Samples
              • RatePlans Samples
              • Availability Samples
              • Rates Sample
            • ARI 1-Way Guidelines
          • Reservations
            • Maximum Content Sample
            • Minimum Content Sample
        • Testing and Certification
        • Activation & Deactivation Process for Hotels
          • Activation Process for Hotels
          • Activation Form Parameterisation
          • Deactivation Process for Hotels
        • Changelog
          • Reservations API Changelog
          • ARI API Changelog
        • FAQ
  • Additional Resources
    • Reference Tables
      • Booking Agent Codes
      • Document Type Code (DOC)
      • Error Codes (ERR)
      • Error Warning Types (EWT)
      • Fee Tax Type (FTT)
      • Handling HTTP 500
      • Meal Plan Type (MPT)
      • OpenTravel Codes List
      • Payment Card Provider Codes
      • Service and Extra Charge
      • Strong Customer Authentication Codes
      • Test Credit Cards
    • Glossary
    • FAQ
Powered by GitBook
On this page
  • Soap Message Structure
  • Version
  • Header
  • Security Header
  • Example
  • Best Practices
  • Size Limit
  • Delta Changes
  • Bundling Updates
  • Full Flushes

Was this helpful?

  1. PMS / RMS
  2. Introduction
  3. pmsXchange
  4. Developer Guide

Message Structure

Soap Message Structure

All SOAP messages (Requests/Responses) exchanged between SiteMinder and the PMS/RMS:

  • Adhere to the SOAP message format.

  • Encapsulate the OTA message within the SOAP Body.

  • Requests must include a SOAP Security Header for authentication purposes.

  • Responses must be returned in a SOAP envelope. However, the SOAP Header should be empty.

Version

pmsXchange is using SOAP 1.1

Header

Name
Value

Content-Type

text/xml; charset=utf-8

Authorization

Basic <credentials>

Security Header

The Security Header structure conveys authentication information.

<wsse:Security soap:mustUnderstand="1"	
	xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
	xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<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">SECRET</wsse:Password>
	</wsse:UsernameToken>
</wsse:Security>

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).

Example

<soap:Envelope
	xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Header>
		<wsse:Security soap: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">SECRET</wsse:Password>
			</wsse:UsernameToken>
		</wsse:Security>
	</soap:Header>
	<soap:Body>
		<OTA_ReadRQ
			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">
			<!-- ... other elements and attributes have been omitted for brevity ... -->
		</OTA_ReadRQ>
	</soap:Body>
</soap:Envelope>

Best Practices

Size Limit

pmsXchange has a 2MB size limit for messages. Messages exceeding this limit must be divided into smaller parts or optimized for bundling. Any message larger than 2MB will not be processed and will result in a SOAP fault response:

<SOAP-ENV:Envelope
	xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
	<SOAP-ENV:Header/>
	<SOAP-ENV:Body>
		<SOAP-ENV:Fault>
			<faultcode>SOAP-ENV:Server</faultcode>
			<faultstring xml:lang="en">Unable to process message. Payload too large</faultstring>
		</SOAP-ENV:Fault>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Delta Changes

Requests for availability, restrictions and rates messages must only include data relevant to the specific action in the PMS (i.e., only the data that has changed since the last update).

For example, if a user updates the availability of a room to 4 for stay-date 2025-11-08, please send only the availability change. Do not include restriction or rate data, and exclude any unchanged dates or room rates. While the OTA_HotelAvailNotifRQ message allows both availability and restrictions, updates should focus solely on the required changes.

Delta Updates will be strictly enforced in Production during the Pilot phase. Please ensure your PMS is handling "changes only" updates push. Frequent flushes or duplicated updates are not acceptable.

<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 BookingLimit="4">
			<StatusApplicationControl Start="2025-11-08" End="2025-11-08" InvTypeCode="SUP"/>
		</AvailStatusMessage>
	</AvailStatusMessages>
</OTA_HotelAvailNotifRQ>
<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 BookingLimit="4">
			<StatusApplicationControl Start="2025-11-08" End="2025-11-08" InvTypeCode="SUP"/>
		</AvailStatusMessage>
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-11-08" End="2025-11-08" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<LengthsOfStay>
				<LengthOfStay MinMaxMessageType="SetMinLOS" Time="2"/>
				<LengthOfStay MinMaxMessageType="SetMaxLOS" Time="5"/>
			</LengthsOfStay>
			<RestrictionStatus Status="Close"/>
		</AvailStatusMessage>
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-11-08" End="2025-11-08" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<RestrictionStatus Restriction="Arrival" Status="Close"/>
		</AvailStatusMessage>
		<AvailStatusMessage>
			<StatusApplicationControl Start="2025-11-08" End="2025-11-08" InvTypeCode="SUP" RatePlanCode="GLD"/>
			<RestrictionStatus Restriction="Departure" Status="Close"/>
		</AvailStatusMessage>
	</AvailStatusMessages>
</OTA_HotelAvailNotifRQ>

Bundling Updates

Availability, restriction and rate updates must be bundled when consecutive dates have the same values. For example, if the rate is updated to $120 from July 1 to July 14, combine this into a single message using the Start and End attributes.

For ARI messages, it is best practice to include only one room code (for availability) or room/rate code combination (for restrictions and rates) in the requests. Include all changed dates for that room or room/rate combination in a single request, avoiding multiple small requests for individual dates.

You can also bundle updates using day-of-the-week flags, allowing you to specify which days the update applies to within the given date range.

This request has consolidated the consecutive dates into one single RateAmountMessage.

<OTA_HotelRateAmountNotifRQ
	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>
	<RateAmountMessages HotelCode="HOTEL">
		<RateAmountMessage>
			<StatusApplicationControl InvTypeCode="DBL" RatePlanCode="BAR"/>
			<Rates>
				<Rate Start="2025-07-01" End="2025-07-14">
					<BaseByGuestAmts>
						<BaseByGuestAmt AmountAfterTax="120.00"/>
					</BaseByGuestAmts>
				</Rate>
			</Rates>
		</RateAmountMessage>
	</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>

This request contains 2 different Rate messages that can be consolidated into one single OTA_HotelRateAmountNotifRQ because they are both for the same room rate combination.

First RateAmountMessage is for weekend rate. Second RateAmountMessage is for weekday rate.

<OTA_HotelRateAmountNotifRQ
	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>
	<RateAmountMessages HotelCode="HOTEL">
		<RateAmountMessage>
			<StatusApplicationControl InvTypeCode="DBL" RatePlanCode="BAR"/>
			<Rates>
				<Rate CurrencyCode="USD" Start="2025-07-01" End="2025-07-14" Mon="0" Tue="0" Weds="0" Thur="0" Fri="1" Sat="1" Sun="0">
					<BaseByGuestAmts>
						<BaseByGuestAmt AmountBeforeTax="150.00"/>
					</BaseByGuestAmts>
				</Rate>
			</Rates>
		</RateAmountMessage>
		<RateAmountMessage>
			<StatusApplicationControl InvTypeCode="DBL" RatePlanCode="BAR"/>
			<Rates>
				<Rate CurrencyCode="USD" Start="2025-07-01" End="2025-07-14" Mon="1" Tue="1" Weds="1" Thur="1" Fri="0" Sat="0" Sun="1">
					<BaseByGuestAmts>
						<BaseByGuestAmt AmountBeforeTax="130.00"/>
					</BaseByGuestAmts>
				</Rate>
			</Rates>
		</RateAmountMessage>
	</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>

This request contains 2 different Rate messages with different date ranges that can be consolidated into one single OTA_HotelRateAmountNotifRQ because they are both for the same room rate combination.

<OTA_HotelRateAmountNotifRQ
	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>
	<RateAmountMessages HotelCode="HOTEL">
		<RateAmountMessage>
			<StatusApplicationControl InvTypeCode="DBL" RatePlanCode="BAR"/>
			<Rates>
				<Rate CurrencyCode="USD" Start="2025-07-01" End="2025-07-14">
					<BaseByGuestAmts>
						<BaseByGuestAmt AmountBeforeTax="150.00"/>
					</BaseByGuestAmts>
				</Rate>
			</Rates>
		</RateAmountMessage>
		<RateAmountMessage>
			<StatusApplicationControl InvTypeCode="DBL" RatePlanCode="BAR"/>
			<Rates>
				<Rate CurrencyCode="USD" Start="2025-07-15" End="2025-07-31">
					<BaseByGuestAmts>
						<BaseByGuestAmt AmountBeforeTax="170.00"/>
					</BaseByGuestAmts>
				</Rate>
			</Rates>
		</RateAmountMessage>
	</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>

Full Flushes

This refers to sending a complete set of data for availability, restrictions and/or rates for a specific room (for availability) or room/rate combination (for restrictions and rates), regardless of whether the data has changed. Full flushes should only be used in exceptional cases, such as during the initial sync, when recovering from a system issue, or if there is a significant mismatch between the PMS and the SiteMinder platform.

Non-delta updates and frequent full flushes within a 24-hour period are strictly prohibited, as they can significantly impact the performance of the SiteMinder production environment. Full data flushes should only be performed when sending the initial updates for a new hotel connection. Once the initial updates are complete, only delta updates must be sent to ensure efficient processing and system performance.

Include as many dates as possible in each request for that specific room or room/rate combination, following the bundling updates guidelines. It is preferred to send one large update (with a single EchoToken) containing all dates that share the same values, rather than multiple smaller updates with only a few dates each. By bundling updates effectively, you can optimize message size and ensure efficient processing.

<AvailStatusMessages HotelCode="HOTEL">
	<AvailStatusMessage BookingLimit="11">
		<StatusApplicationControl Start="2025-01-01" End="2025-01-15" InvTypeCode="SUP"/>
	</AvailStatusMessage>
	<AvailStatusMessage BookingLimit="0">
		<StatusApplicationControl Start="2025-01-16" End="2025-01-31" InvTypeCode="SUP"/>
	</AvailStatusMessage>
	<AvailStatusMessage BookingLimit="11">
		<StatusApplicationControl Start="2025-02-01" End="2025-02-28" InvTypeCode="SUP"/>
	</AvailStatusMessage>
	<AvailStatusMessage BookingLimit="10">
		<StatusApplicationControl Start="2025-03-01" End="2025-03-20" InvTypeCode="SUP"/>
	</AvailStatusMessage>
	<AvailStatusMessage BookingLimit="11">
		<StatusApplicationControl Start="2025-03-21" End="2025-03-31" InvTypeCode="SUP"/>
	</AvailStatusMessage>
	<AvailStatusMessage BookingLimit="8">
		<StatusApplicationControl Start="2025-04-01" End="2025-06-30" InvTypeCode="SUP"/>
	</AvailStatusMessage>
	<AvailStatusMessage BookingLimit="11">
		<StatusApplicationControl Start="2025-07-01" End="2025-07-19" InvTypeCode="SUP"/>
	</AvailStatusMessage>
	<AvailStatusMessage BookingLimit="9">
		<StatusApplicationControl Start="2025-07-20" End="2025-08-06" InvTypeCode="SUP"/>
	</AvailStatusMessage>
	<AvailStatusMessage BookingLimit="10">
		<StatusApplicationControl Start="2025-08-07" End="2025-11-23" InvTypeCode="SUP"/>
	</AvailStatusMessage>
	<AvailStatusMessage BookingLimit="11">
		<StatusApplicationControl Start="2025-11-24" End="2025-12-31" InvTypeCode="SUP"/>
	</AvailStatusMessage>
</AvailStatusMessages>
<AvailStatusMessages HotelCode="HOTEL">
	<AvailStatusMessage>
		<StatusApplicationControl Start="2025-01-01" End="2025-03-14" InvTypeCode="SUP" RatePlanCode="GLD"/>
		<LengthsOfStay>
			<LengthOfStay MinMaxMessageType="SetMinLOS" Time="2"/>
			<LengthOfStay MinMaxMessageType="SetMaxLOS" Time="5"/>
		</LengthsOfStay>
		<RestrictionStatus Status="Close"/>
	</AvailStatusMessage>
	<AvailStatusMessage>
		<StatusApplicationControl Start="2025-01-01" End="2025-03-14" InvTypeCode="SUP" RatePlanCode="GLD"/>
		<RestrictionStatus Restriction="Arrival" Status="Close"/>
	</AvailStatusMessage>
	<AvailStatusMessage>
		<StatusApplicationControl Start="2025-01-01" End="2025-03-14" InvTypeCode="SUP" RatePlanCode="GLD"/>
		<RestrictionStatus Restriction="Departure" Status="Close"/>
	</AvailStatusMessage>
	<AvailStatusMessage>
		<StatusApplicationControl Start="2025-03-15" End="2025-03-31" InvTypeCode="SUP" RatePlanCode="GLD"/>
		<LengthsOfStay>
			<LengthOfStay MinMaxMessageType="SetMinLOS" Time="1"/>
			<LengthOfStay MinMaxMessageType="SetMaxLOS" Time="7"/>
		</LengthsOfStay>
		<RestrictionStatus Status="Open"/>
	</AvailStatusMessage>
	<AvailStatusMessage>
		<StatusApplicationControl Start="2025-03-15" End="2025-03-31" InvTypeCode="SUP" RatePlanCode="GLD"/>
		<RestrictionStatus Restriction="Arrival" Status="Open"/>
	</AvailStatusMessage>
	<AvailStatusMessage>
		<StatusApplicationControl Start="2025-03-15" End="2025-03-31" InvTypeCode="SUP" RatePlanCode="GLD"/>
		<RestrictionStatus Restriction="Departure" Status="Open"/>
	</AvailStatusMessage>
	<AvailStatusMessage>
		<StatusApplicationControl Start="2025-04-01" End="2025-10-14" InvTypeCode="SUP" RatePlanCode="GLD"/>
		<LengthsOfStay>
			<LengthOfStay MinMaxMessageType="SetMinLOS" Time="2"/>
			<LengthOfStay MinMaxMessageType="SetMaxLOS" Time="5"/>
		</LengthsOfStay>
		<RestrictionStatus Status="Close"/>
	</AvailStatusMessage>
	<AvailStatusMessage>
		<StatusApplicationControl Start="2025-04-01" End="2025-10-14" InvTypeCode="SUP" RatePlanCode="GLD"/>
		<RestrictionStatus Restriction="Arrival" Status="Close"/>
	</AvailStatusMessage>
	<AvailStatusMessage>
		<StatusApplicationControl Start="2025-04-01" End="2025-10-14" InvTypeCode="SUP" RatePlanCode="GLD"/>
		<RestrictionStatus Restriction="Departure" Status="Close"/>
	</AvailStatusMessage>
	<AvailStatusMessage>
		<StatusApplicationControl Start="2025-10-15" End="2025-12-31" InvTypeCode="SUP" RatePlanCode="GLD"/>
		<LengthsOfStay>
			<LengthOfStay MinMaxMessageType="SetMinLOS" Time="1"/>
			<LengthOfStay MinMaxMessageType="SetMaxLOS" Time="7"/>
		</LengthsOfStay>
		<RestrictionStatus Status="Open"/>
	</AvailStatusMessage>
	<AvailStatusMessage>
		<StatusApplicationControl Start="2025-10-15" End="2025-12-31" InvTypeCode="SUP" RatePlanCode="GLD"/>
		<RestrictionStatus Restriction="Arrival" Status="Open"/>
	</AvailStatusMessage>
	<AvailStatusMessage>
		<StatusApplicationControl Start="2025-10-15" End="2025-12-31" InvTypeCode="SUP" RatePlanCode="GLD"/>
		<RestrictionStatus Restriction="Departure" Status="Open"/>
	</AvailStatusMessage>
</AvailStatusMessages>
<RateAmountMessages HotelCode="HOTEL">
	<RateAmountMessage>
		<StatusApplicationControl InvTypeCode="SUP" RatePlanCode="BAR"/>
		<Rates>
			<Rate CurrencyCode="AUD" Start="2025-01-01" End="2025-03-14">
				<BaseByGuestAmts>
					<BaseByGuestAmt AmountAfterTax="150.00"/>
				</BaseByGuestAmts>
			</Rate>
		</Rates>
	</RateAmountMessage>
	<RateAmountMessage>
		<StatusApplicationControl InvTypeCode="SUP" RatePlanCode="BAR"/>
		<Rates>
			<Rate CurrencyCode="AUD" Start="2025-03-15" End="2025-03-31">
				<BaseByGuestAmts>
					<BaseByGuestAmt AmountAfterTax="175.00"/>
				</BaseByGuestAmts>
			</Rate>
		</Rates>
	</RateAmountMessage>
	<RateAmountMessage>
		<StatusApplicationControl InvTypeCode="SUP" RatePlanCode="BAR"/>
		<Rates>
			<Rate CurrencyCode="AUD" Start="2025-04-01" End="2025-10-14">
				<BaseByGuestAmts>
					<BaseByGuestAmt AmountAfterTax="200.00"/>
				</BaseByGuestAmts>
			</Rate>
		</Rates>
	</RateAmountMessage>
	<RateAmountMessage>
		<StatusApplicationControl InvTypeCode="SUP" RatePlanCode="BAR"/>
		<Rates>
			<Rate CurrencyCode="AUD" Start="2025-10-15" End="2025-12-31">
				<BaseByGuestAmts>
					<BaseByGuestAmt AmountAfterTax="180.00"/>
				</BaseByGuestAmts>
			</Rate>
		</Rates>
	</RateAmountMessage>
</RateAmountMessages>

All 'Inventory API' requests made must not contain overlapping dates. Each date range within a single message should be unique for each room (for availability) or room/rate combination (for restrictions and rates).

Last updated 28 days ago

Was this helpful?