For the complete documentation index, see llms.txt. This page is also available as Markdown.

Push (SM -> PMS)

Receive reservations from SiteMinder directly to your PMS in real-time.

API: pmsXchange · Operation: Reservations · Direction: SM → PMS · Method: Push

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.

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_HotelResNotifRQ messages and receive OTA_HotelResNotifRS responses 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.

  1. Reservation Message (SiteMinder to PMS): OTA_HotelResNotifRQ Delivers a single reservation message (new booking, modification, or cancellation).

  2. Confirmation Response (PMS to SiteMinder): OTA_HotelResNotifRS Confirms successful receipt or reports processing failure.

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.

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

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.

M
Definition

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 extras

  • When Rate/Total exceeds Rate/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 corresponding Services element

  • The RoomStay Total at RoomStays.RoomStay.Total covers all daily rates and any room-stay-level extras

  • The ReservationTotal at ResGlobalInfo.Total is 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.

Element / @Attribute
Type
M
Description

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

Element / @Attribute
Type
M
Description

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.

@Code

String

0..1

Code of the booking channel. See the Booking Agent Codes Table for reference.

RoomStays

Element / @Attribute
Type
M
Description

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

Element / @Attribute
Type
M
Description

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

Element / @Attribute
Type
M
Description

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.

Element / @Attribute
Type
M
Description

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

Element / @Attribute
Type
M
Description

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

Element / @Attribute
Type
M
Description

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

This total covers the room stay only. It does not include services or extras applied at the reservation level. See Reservation Total for the complete reservation amount.

Element / @Attribute
Type
M
Description

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

Element / @Attribute
Type
M
Description

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

Element / @Attribute
Type
M
Description

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

Element / @Attribute
Type
M
Description

ResGuestRPHs

Element

0..1

Container for the ResGuestRPH elements.

ResGuestRPH

Element

1..n

Container for the RPH attribute.

@RPH

Integer

1

Links the RoomStay to ResGuest. Find the links in ResGuests.

Comments

Element / @Attribute
Type
M
Description

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.

Element / @Attribute
Type
M
Description

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