Push (SM -> PMS)
Receive reservations from SiteMinder directly to your PMS in real-time.
What is Reservations Push (SM -> PMS)?
Reservation Push (SM -> PMS) is a delivery method where SiteMinder actively sends reservations, modifications, and cancellations directly to the Property Management Systems (PMS)'s web service endpoint in real-time. This integration ensures that PMSs receive up-to-date booking information from various channels, maintaining consistency and reducing the risk of overbooking.
Delivery Method Configuration: The reservation delivery method (PUSH or PULL) is configured at the PMS level and applies to all properties using your integration. It is not possible to have some properties using Reservations PUSH while others use Reservations PULL. Once configured, all hotels connected to your PMS will receive reservations using the same method.
Integration Requirements
Understand the essential requirements for API integration, including connectivity, authentication, message formats, and security protocols.
Web Service Endpoint
PMS will provide a single global endpoint for all hotels for SiteMinder to push
OTA_HotelResNotifRQmessages and receiveOTA_HotelResNotifRSresponses indicating success or failure.The endpoint must use a registered domain name.
Direct IP addresses are not supported and cannot be used as endpoints.
Authentication
PMS will provide a single username/password for all hotels (PMS Level authentication).
SiteMinder will include authentication credentials within the SOAP Security header of each
OTA_HotelResNotifRQ.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.,
!@#?]).Do not use
<>&"'as they can cause issues with the Web Service.
Message Structure
All messages must adhere to the SOAP message format.
OTA message must be encapsulated within the SOAP Body.
Requests must include a SOAP Security Header for authentication.
Responses must be returned in a SOAP envelope with empty SOAP Header.
Content-Type
text/xml; charset=utf-8
Version
SOAP 1.1
Protocol & Security
All communication must occur over HTTPS using TLS 1.2 or higher.
Non-secure (HTTP) connections are not permitted.
Communication is synchronous request/response pairs.
Each message is atomic - processed entirely or not at all.
SiteMinder sends requests over port 443.
IP Whitelisting
Pre-Production IP addresses:
52.13.134.140
34.213.128.113
35.164.250.223
Production IP addresses will be provided during go-live.
Message Exchange Flow
When SiteMinder receives bookings from channels, it delivers them to your PMS using a synchronous SOAP/HTTPS exchange. Each reservation triggers a separate request-response cycle.
Reservation Message (SiteMinder to PMS):
OTA_HotelResNotifRQDelivers a single reservation message (new booking, modification, or cancellation).Confirmation Response (PMS to SiteMinder):
OTA_HotelResNotifRSConfirms successful receipt or reports processing failure.
The PMS must send OTA_HotelAvailNotifRQ to SiteMinder with the updated availability after the reservations, modifications, and cancellations are processed on the PMS system. Refer to the Availability and Restrictions.
Security Header
The Security Header is a mandatory SOAP header that authenticates every reservation request from SiteMinder to your PMS endpoint. It contains the username and password credentials that you provide to SiteMinder during integration setup.
Key Requirements:
Validation: Your endpoint must 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 should return a SOAP fault with appropriate error code.
Requests must include a SOAP Security Header for authentication.
Responses must be returned in a SOAP envelope with an empty SOAP Header.
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.
1
The element or attribute must be present exactly once.
0..1
The element or attribute is optional; it can be present zero or one time.
0..n
The element or attribute can be present zero or more times, with no upper limit (where n represents an infinite number of occurrences).
1..n
The element or attribute must be present at least once and can be present any number of times, with no upper limit.
n..m
Specific range, the element or attribute must be present at least n times and no more than m times (where n and m are specific numbers).
1. Reservation Message
OTA_HotelResNotifRQ
The OTA_HotelResNotifRQ message carries reservation data from SiteMinder to your PMS. Each message contains exactly one reservation (new booking, modification, or cancellation).
The message consists of a list of HotelReservation elements. The content may vary since SiteMinder delivers reservations from multiple upstream sources (booking channels), many of which have significantly different reservation formats and data structures.
Key Concepts
HotelReservation
Represents a single booking from one channel
Always contains exactly one reservation per message
Includes all associated rooms, guests, and payments
RoomStays
Container for all room bookings in the reservation
Each room type booked creates a separate RoomStay
Example: 2 Double Rooms + 1 Suite = 3 RoomStay elements
Split Stays
When a guest changes room type during their stay
Creates multiple RoomStays with different date ranges
Example: Double Room (Jan 1-3) + Suite (Jan 3-5) = 2 RoomStays
Guest Assignment
ResGuests can be linked to specific RoomStays via ResGuestRPH
Some channels provide no guest details (ResGuests may be empty)
Primary guest indicated by PrimaryIndicator="true"
Pricing Levels Pricing data is structured across multiple levels. Different OTAs provide different levels of pricing details. SiteMinder passes through what the OTA provides to a PMS system. Always read all levels not just RoomStay Total alone.
Daily rates can be found at
RoomRates.RoomRate.Rates.Rate/BaseRoomRates.RoomRate.Rates.Rate/Base- room charge per night, excluding extrasWhen
Rate/TotalexceedsRate/Base, extra charge is included in the daily rate. Service details for this extra are not guaranteed. OTA may embed charges in the total without providing a correspondingServiceselementThe RoomStay Total at
RoomStays.RoomStay.Totalcovers all daily rates and any room-stay-level extrasThe ReservationTotal at
ResGlobalInfo.Totalis the authoritative total for the entire reservation. It includes all room stays + any services or extras applied at the reservation level. Always use this as the final amount for the reservation.
OTA_HotelResNotifRQ
Element
1
Root element for the request.
@xmlns
String
1
Defines the XML namespace for the request. Will be set to http://www.opentravel.org/OTA/2003/05
@ResStatus
String
1
Always Commit
@EchoToken
String
1
Unique identifier for the request, used to match requests and responses. Preferred format: UUID 8-4-4-4-12.
@TimeStamp
DateTime
1
Time when the request was generated. TimeStamp must use ISO 8601 format.
@PrimaryLangID
String
1
Always en-us
@Target
String
1
Always Production
@Version
Decimal
1
Specifies the API version. Current Version 2.001
Hotel Reservation
HotelReservations
Element
1
Contains the reservation details.
HotelReservation
Element
1
Contains the specific reservation information.
@CreateDateTime
DateTime
1
Date and time when the reservation was first made.
Mandatory if ResStatus is Book.
CreateDateTime must follow the ISO 8601 Date and Time format.
@ResStatus
String
1
Status is:
Book
Modify
Cancel
@LastModifyDateTime
DateTime
0..1
This indicates the last date and time when the reservation was last modified.
Mandatory if ResStatus is Modify or Cancel.
LastModifyDateTime must follow the ISO 8601 Date and Time format.
UniqueID
Element
1..2
The reservation reference in SiteMinder.
The first UniqueID element will contain the unique identifier for the entire reservation. This identifier will identify the reservation through any subsequent modifications or cancellations.
The second UniqueID element with ID_Context="MESSAGE_UNIQUE_ID" is the unique id for this message. This identifier should be used to confirm the message once processed
@Type
Integer
1
Value 14 is the unique ID for the reservation in SiteMinder.
Value 16 is the unique id for the message transferring the reservation.
@ID
String
1
Identifier of the reservation according to SiteMinder.
POS
Element
1
Contains source details.
Source
Element
1..2
Contains BookingChannel details. A second POS / Source node can be present to define a secondary channel source.
RequestorID
Element
1
Only present in the first Source element. Identifies the system sending the reservation.
@ID
String
1
Always SITEMINDER
@Type
Integer
1
Fixed at 22 (ESRP)
BookingChannel
Element
1
Contains booking channel information.
@Type
Integer
1
Always 7 for 'Internet'.
@Primary
Boolean
1
Indicates the primary booking source.
CompanyName
String
1
Name of the Booking Channel.
NOTE: This name is subject to change/variation by the Booking Channel. Use the Code attribute below to identify the booking channels.
RoomStays
RoomStays
Element
1
Contains details of all room stays.
RoomStay
Element
1..n
One instance of RoomStay per room type booked.
@PromotionCode
String
0..1
If configured, this is the promotion code indicating, for instance, a specific marketing campaign (not the rate code).
@MarketCode
String
0..1
A code to match a market segment for the booking.
@SourceOfBusiness
String
0..1
Specifies where the business came from e.g. radio, newspaper ad, etc.
RoomTypes
RoomTypes
Element
0..1
Provides more information about the room type for this room stay.
RoomType
Element
0..1
Contains specific information about the room type.
@RoomTypeCode
String
0..1
Code of the room booked.
@NonSmoking
Boolean
0..1
Provided by the source channel.
@Configuration
String
0..1
Information about the bedding configuration.
RoomDescription
Element
0..1
Description of the room.
@Text
String
0..1
Name of the room.
AdditionalDetails
Element
0..1
Additional room information provided by the source channel.
AdditionalDetail
Element
0..n
@Type
Integer
1
Refer to the Additional Detail Type (ADT). Common usages are:
43 - Meal plan information
15 - Promotion information
@Code
String
0..1
Reference code provided by the source channel.
DetailDescription
Element
0..1
Contains the description Text.
@Text
String
1
Details provided by the source channel.
RatePlans
RatePlans
Element
0..1
Provides more information about the rate plan for this room stay.
RatePlan
Element
0..n
Contains details about the specific rate plan.
@RatePlanCode
String
0..1
Code of the rate booked.
@RatePlanName
String
0..1
Name of the rate plan.
@EffectiveDate
1
The effective date of the RatePlan.
@ExpireDate
Date
1
The expire date for a RatePlan, this should be considered an exclusive date, the date for which the current rate plan information is no longer valid.
RatePlanDescription
Element
0..1
Contains the description Text.
@Text
String
0..1
Details provided about the rate plan.
AdditionalDetails
Element
0..1
Additional rate plan information provided by the source channel.
AdditionalDetail
Element
0..n
@Type
Integer
1
Refer to the Additional Detail Type (ADT). Common usages are:
43 - Meal plan information
15 - Promotion information
@Code
String
0..1
Reference code provided by the source channel.
DetailDescription
Element
0..1
Contains the description Text.
@Text
String
1
Details provided by the source channel.
RoomRates
This example shows daily rates when the same rate applies to both dates (2025-10-05 and 2025-10-06) and there are additional charges.
RoomRates
Element
1
A RoomStay can include multiple RoomRate, each containing several rates. This occurs when a single room is booked, but different rate plans apply across the duration of the stay.
RoomRate
Element
1..n
One RoomRate per RoomStay. Multiple rates are listed under the RoomRate.
@RoomTypeCode
String
1
Code of the room booked.
@RatePlanCode
String
1
Code of the rate plan booked.
@NumberOfUnits
Integer
1
Always 1. Each room will be listed in it's own RoomStay element.
Rates
Element
0..1
Rate will contain a timespan for which a rate will apply for a room type. Multiple instances of Rate will be sent if rate changes apply.
Rate
Element
1..n
Contains the daily rate information which matches the entire date range specified in the RoomStay/TimeSpan element.
@UnitMultiplier
Integer
1
Equal to the number of days between EffectiveDate and ExpireDate. Multiply with the UnitMultiplier to get the total cost for the date span.
@RateTimeUnit
String
1
Always Day.
@EffectiveDate
Date
1
Starting date of the rate. This date is inclusive.
@ExpireDate
Date
1
First day after the applicable period. This date is exclusive.
Base
Element
0..1
Base/Gross per-day amount charged for the room.
@AmountBeforeTax
Decimal
0..1
The unit amount before tax.
@AmountAfterTax
Decimal
0..1
The unit amount after tax.
@CurrencyCode
String
0..1
Use ISO 4217 currency codes.
Taxes
Element
0..1
Contains details of the taxes applied.
@Amount
Decimal
0..1
The unit tax amount.
Tax
Element
0..n
Contains specific tax information.
@Code
String
1
Indicates the specific tax or fee that is being transferred. Refer to Fee Tax Type (FTT).
@Amount
Decimal
0..1
Tax amount applied.
@Percentage
Decimal
0..1
Tax percentage.
TaxDescription
Element
0..1
Contains the tax description Text.
@Text
String
1
Text description of the tax.
Total
Element
0..1
Base Rate + any additional occupants and fees/extras. If empty, assume the Base amount equals the Total amount.
NOTE: It is possible that some OTAs do not provide any form of Rate information and as such a RoomRate / Rate / Total cannot be provided in such cases. Currently Hotelbeds (HBD) is a known channel that does not always provide Rate information.
NOTE: Any extras that are to be included in the RoomRate total will be linked through the ServiceRPH node.
@AmountBeforeTax
Decimal
0..1
The total amount before tax.
@AmountAfterTax
Decimal
0..1
The total amount after tax.
@CurrencyCode
String
1
Use ISO 4217 currency codes.
Taxes
Element
0..1
Contains details of the total taxes applied.
@Amount
Decimal
0..1
The total tax amount.
Tax
Element
0..n
Contains specific tax information.
@Code
String
0..1
Indicates the specific tax or fee that is being transferred. Refer to Fee Tax Type (FTT).
@Amount
Decimal
0..1
Tax amount applied.
@Percentage
0..1
Tax percentage.
TaxDescription
0..1
Text description of the tax.
@Text
String
1
ServiceRPHs
Element
0..1
Container for the ServiceRPH elements.
ServiceRPH
Element
0..n
Links a service to the Service information at the RoomRate level.
@RPH
Integer
1..n
Links a Service to the Service information provided at the HotelReservation level (if applicable) to this RoomRate.
GuestCounts
GuestCounts
Element
1
Total guest counts for adult, child, and infant. Adult count must always be sent.
GuestCount
Element
1..3
Represents the count for a specific age group.
@AgeQualifyingCode
Integer
1
10 - Adult (mandatory)
8 - Child (optional)
7 - Infant (optional)
@Count
Integer
1
Number of guests for this age group.
TimeSpan
TimeSpan
Element
1
Contains the timespan for the RoomStay.
@Start
Date
1
Check-in date.
@End
Date
1
Check-out date. Must be after Start.
RoomStay Total
Total
Element
0..1
The total amount of the RoomStay.
@AmountBeforeTax
Decimal
0..1
The total amount before tax.
@AmountAfterTax
Decimal
0..1
The total amount after tax.
@CurrencyCode
String
0..1
Use ISO 4217 currency codes.
Taxes
Element
0..1
Contains details of the taxes applied.
@Amount
Decimal
0..1
The total tax amount.
Tax
Element
0..n
Contains specific tax information.
@Code
String
1
Indicates the specific tax or fee that is being transferred. Refer to Fee Tax Type (FTT).
@Amount
Decimal
0..1
Amount of the tax/fee transferred.
@Percentage
Decimal
0..1
Tax percentage.
TaxDescription
Element
0..1
Contains the tax description Text.
@Text
String
1
Text description of the tax
BasicPropertyInfo
BasicPropertyInfo
Element
0..1
Contains basic identification details for the hotel associated with the reservation.
BasicPropertyInfo will always be sent as either part of the RoomStay or ResGlobalInfo, depending on your setup in SiteMinder. We recommend receiving the BasicPropertyInfo as part of the ResGlobalInfo due to how Booking.com cancellation messages are sent.
@HotelCode
String
1
Identifier for the hotel.
@HotelName
String
0..1
Name of the hotel.
ServiceRPHs
ServiceRPHs
Element
0..1
Container for the ServiceRPH elements.
ServiceRPH
Element
1..n
Service at the RoomStay level.
@RPH
Integer
1
Links a Service to the Service information provided at the HotelReservation level (if applicable).
ResGuestRPHs
ResGuestRPHs
Element
0..1
Container for the ResGuestRPH elements.
ResGuestRPH
Element
1..n
Container for the RPH attribute.
Comments
Comments
Element
0..1
Contains comment for the RoomStay.
Comment
Element
1..n
Holds the actual comment.
Text
Element
1
The content of the comment.
PCI sensitive data is prohibited.
Services
Extras and services in reservation XML can be identified through multiple attributes. Use this multi-layered approach to ensure reliable mapping:
1. Use the ID attribute: Map extras using the @ID attribute when present. This is the channel's unique identifier for the specific extra or service.
2. Use ServiceInventoryCode: If @ID is not provided, use the @ServiceInventoryCode attribute, which is always present. Reference the Service and Extra Charge table for commonly used codes, or request the complete code list from the hotelier for their specific connected channels.
3. Keyword Detection: Implement keyword detection logic that scans <RateDescription><Text> for common terms like "Parking," "Breakfast," "Spa," etc. This ensures that extras sent under different codes (EXTRA, MEAL, OTHER) by various channels are still correctly matched in your PMS, even when codes vary between booking sources.
Services
Element
0..1
Contains service details provided to guests.
Service
Element
1..n
Represents a non-room product provided to guests.
@ServiceInventoryCode
String
1
Identifier code for the service. Refer to Service and Extra Charge. Channels/OTA's will use this list as a guide to code the extras/services or can use their own codes as well. Please request the property or the channel for the full list of extras/services and the codes configured in each channel.
@ID
String
0..1
Reference ID for the extra/service provided by the source booking channel.
@ServiceRPH
Integer
0..1
Links the Service to a RoomStay or RatePlan. ServiceRPH absence indicates a HotelReservation-level charge.
@Inclusive
Boolean
1
Must be set to TRUE, as SiteMinder reports totals as inclusive of charges and extras.
@Quantity
Integer
1
Number of units included in the charge. This value does not affect the total amount.
@ID_Context
String