Upload (PMS -> SM)
Sync PMS reservations back to SiteMinder Platform.
What is Reservations Upload (PMS -> SM)?
Reservations Upload (PMS -> SM) is a delivery method where the Property Management System (PMS) actively pushes reservations, modifications, and cancellations to the SiteMinder Ecosystem. This includes all PMS reservations—walk-ins, historic OTA bookings, and direct bookings—which are sent to SiteMinder's web service endpoint in real-time.
To implement Reservations Upload, the PMS must certify for Reservations PUSH or Reservations PULL.
Re-Certification required for PMS partners previously certified as SMX for PMS
If your PMS was previously certified as SMX for PMS, you must re-certify against the specification documented on this page. Key changes include RequestorID, POS/Source structure, and HotelReservationID mappings.
Integration Requirements
Understand the essential requirements for API integration, including connectivity, authentication, message formats, and security protocols.
Web Service Endpoint
SiteMinder will provide a single global endpoint for all hotels for PMS to send push requests
OTA_HotelResNotifRQand receive confirmation responsesOTA_ResRetrieveRS.Test Environment Endpoint: https://tpi-pmsx.preprod.siteminderlabs.com/webservices/{RequestorID}
Authentication
SiteMinder will provide a single username/password for all hotels (PMS Level authentication).
PMS must include authentication credentials within the SOAP Security header of each
OTA_HotelResNotifRQ.
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.
Message Exchange Flow
When reservations are created, modified, or canceled outside of SiteMinder's distribution network, your PMS delivers them to the SiteMinder Platform using a synchronous SOAP/HTTPS exchange. This ensures SiteMinder maintains a complete view of property inventory across all booking sources.
Reservation Message (PMS to SiteMinder):
OTA_HotelResNotifRQDelivers a single reservation message (new booking, modification, or cancellation).Confirmation Response (SiteMinder to PMS):
OTA_HotelResNotifRSConfirms successful receipt or reports processing failure.
Security Header
The Security Header is a mandatory SOAP header that authenticates every reservation 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.
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 your PMS to SiteMinder. 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 the PMS can delivers reservations from multiple upstream sources (walk-in reservations, direct booking channels, etc.), many of which have significantly different reservation formats and data structures.
Reservation Types
PMS Reservation: A reservation created directly at the hotel property. For example when a guest arrives without a prior booking, or a customer phones to make a booking. These originate in the PMS and represent the simplest reservation flow with no external channels involved.
Internet : A reservation from a booking platform or website that connects directly to the PMS, bypassing SiteMinder's distribution network. Examples include the hotel's own booking engine, direct OTA connections, or property-specific reservation tools.
Other Booking Channel Types: A reservation that flows through an intermediary distribution system before reaching the PMS. The booking originates from a travel agent, GDS (like Amadeus/Sabre), or wholesale platform, passes through a central reservation system, then arrives at the property.
SiteMinder Modification/Cancellation: An update to an existing reservation originally delivered to the PMS through SiteMinder's channel manager. These messages track changes or cancellations to bookings that SiteMinder previously distributed, ensuring systems stay in sync.
See Reservation types structure examples in the POS / Source section of this page.
HotelReservation
Represents a single booking from one channel.
Always contains exactly one reservation per message.
Includes all associated rooms, guests, and payments.
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
@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.
@Version
Decimal
1
Specifies the API version. Current Version 1.0
HotelReservations
A confirmed booking that has been accepted. The guest has not yet arrived at the property. Any modification of this booking will be sent with this ResStatus.
A tentative booking placed on a waiting list when the requested room/dates are not immediately available. Will be confirmed if availability opens up.
A previously confirmed reservation that has been terminated by either the guest or hotel before the arrival date.
A confirmed reservation where the guest failed to arrive on the scheduled check-in date without prior cancellation notice.
An active reservation where the guest has checked in and is currently staying at the property.
A completed reservation where the guest has departed from the property and settled their account.
HotelReservations
Element
1
Contains the reservation details.
HotelReservation
Element
1
Contains the specific reservation information.
@ResStatus
Enumeration
1
Status is:
Reserved
Waitlisted
Cancelled
No-show
In-house
Checked-Out
@CreateDateTime
DateTime
1
Date and time when the reservation was first made.
CreateDateTime must follow the ISO 8601 Date and Time format.
@LastModifyDateTime
DateTime
0..1
This indicates the last date and time when the reservation was last modified. Mandatory if a message relating to this reservation has already been uploaded.
If the same LastModifyDateTime is sent in multiple reservation events, only the first will be processed and the rest ignored since it is considered as the same reservation version.
LastModifyDateTime must follow the ISO 8601 Date and Time format.
@CreatorID
String
0..1
The creator ID could be a software system identifier or an identifier of an employee responsible for the creation.
@LastModifierID
String
0..1
Identifies the last software system or person to modify a record.
@WalkInIndicator
Boolean
0..1
Used to identify if the reservation is a walk-in reservation. This attribute is mandatory if a reservation has been generated in the PMS.
POS / Source
Contains a single Source element with RequestorID Type="10" and BookingChannel Type="4" . The CompanyName@Code attribute should identify your PMS. The WalkInIndicator attribute must be present on the HotelReservation element for PMS reservations. If the reservation is a 'walk-in' reservation then the WalkInIndicator attribute must be 'true'
Contains a single Source element with RequestorID Type="10" and BookingChannel Type="7" (Internet). The CompanyName@Code must identify the specific booking channel code using our Booking Agent Codes.
Contains two Source elements:
- Primary identifying the central system with Primary="true" and the appropriate BookingChannel@Type for the system that is handling the reservations. For the full list of Booking Channel Types see Booking Channel Types Code List
- Secondary with BookingChannel Primary="false" and typically Type="7", identifying the original booking source. The CompanyName@Code must identify the specific booking channel code using our Booking Agent Codes.
Contains a single Source element with RequestorID Type="10" and BookingChannel Type="4". The CompanyName and @Code should identify your PMS. The HotelReservation element's ResStatus attribute indicates the action (Cancelled, Modified, etc.).
POS
Element
1
Point of Sale (POS) identifies the party or connection channel making the request.
Source
Element
1..10
This holds the details about the requestor. It may be repeated to also accommodate the delivery systems. Provides information on the source of a request.
RequestorID
Element
1
This identifies the system which is sending the reservation. This element must appear in the first Source element.
@Type
Integer
1
10 for PMS
@ID
String
1
PMS Code assigned by SiteMinder. Remains the same throughout the messages.
BookingChannel
Element
0..1
Contains booking channel information.
@Type
Integer
1
The type of booking channel:
4 - Identifier Property management system (PMS).
5 - Identifier for Central reservation system (CRS).
7 - Identifier for Internet.
@Primary
Boolean
0..1
true for the primary booking channel in the first Source element.
false in the second Source element.
CompanyName
Element
1
Identifies the company that is associated with the booking channel.
@Code
String
0..1
Identifies a company by the company code. The Code must identify the specific booking channel code using our Booking Agent Codes.
UniqueID
UniqueID
Element
1
Used to provide PMS and/or CRS identifiers. An identifier used to uniquely reference an object in a system (e.g. an airline reservation reference, customer profile reference, booking confirmation number, or a reference to a previous availability quote).
@ID
String
1
A unique identifying value assigned by the creating system. The ID attribute may be used to reference a primary-key value within a database or in a particular implementation.
RoomStays
RoomStays
Element
1
A collection of RoomStay objects. Room stays associated with this reservation.
RoomStay
Element
1..n
One instance of RoomStay per room type booked.
@MarketCode
String
0..1
The code that relates to the market being sold to (e.g., the corporate market, packages).
@SourceOfBusiness
String
0..1
To specify where the business came from e.g. radio, newspaper ad, etc.
@PromotionCode
String
0..1
If configured, this is the promotion code indicating, for instance, a specific marketing campaign (not the rate code).
RoomTypes
RoomTypes
Element
0..1
A collection of Room Types associated with a particular Room Stay.
RoomType
Element
0..1
Provides details regarding rooms, usually guest rooms. Can be sent to give more information on the room type for this room stay.
@RoomType
String
0..1
A code value that indicates the type of room for which this request is made, e.g.: double, king, etc. Values may use the Hotel Descriptive Content table or a codes specific to the property or hotel brand.
@RoomTypeCode
String
0..1
Specific system room type code, ex: A1K, A1Q etc.
@RoomCategory
Integer
0..1
Indicates the category of the room. Typical values would be Moderate, Standard, or Deluxe.
@RoomID
Integer
0..1
A string value representing the unique identification of a room if the request is looking for a specific room.
@NonSmoking
Boolean
0..1
Non-smoking indicator.
@Configuration
String
0..1
Textual description of room configuration.
RoomDescription
Element
0..1
Textual information regarding the room.
@Text
Element
0..n
A text description of the room
AdditionalDetails
Element
0..1
Container for additional information about this room.
AdditionalDetail
Element
1..n
@Type
Integer
0..1
Used to define the type of information being sent (e.g., rate description, property description, room information). Refer to the Additional Detail Type (ADT).
Some common usages are:
43 - Meal plan information
15 - Promotion information
@Code
String
0..1
Trading partner code associated to AdditionalDetailType.
DetailDescription
Element
0..1
Textual description of AdditionalDetail information.
Text
Element
0..n
A text description of AdditionalDetail
RatePlans
RatePlans
Element
0..1
A collection of Rate Plans associated with a particular Room Stay.
RatePlan
Element
0..1
Defines the details of the rate plan as used in the booking process.
@RatePlanName
String
0..1
Provides the name of the rate plan or group. Typically used with RatePlanType to further describe the rate plan.
@EffectiveDate
Date
0..1
The effective date of the RatePlan.
@ExpireDate
Date
0..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.
@RatePlanCode
String
0..1
Code of the rate booked.
RatePlanDescription
Element
0..1
Textual description of the RatePlan.
Text
Element
0..n
A text description of the RatePlan.
RatePlanInclusions
Element
0..1
Defines charges that are included in this rate plan.
@TaxInclusive
Boolean
0..1
Indicates that service fees are included in the rate.
@ServiceFeeInclusive
Boolean
0..1
Indicates that tax is included in the rate.
RatePlanInclusionDescription
Element
0..1
Textual description of what is included in the rate plan.
Text
Element
0..1
A text description of the RatePlanInclusionDescription
MealsIncluded
Element
0..1
Container.
@MealPlanIndicator
Boolean
0..1
When true, a meal plan is included in this rate plan. When false, a meal plan is not included in this rate plan.
@MealPlanCodes
String
0..1
Used to identify the types of meals included with a rate plan. Refer to OpenTravel Code List Meal Plan Type (MPT)
AdditionalDetails
Element
0..1
Textual description of AdditionalDetail information.
AdditionalDetail
Element
0..1
A text description of AdditionalDetail
@Type
Integer
0..1
Used to define the type of information being sent (e.g., rate description, property description, room information). Refer to OpenTravel Code List Additional Detail Type (ADT)
Some common usages are:
43 - Meal plan information
15 - Promotion information
@Code
String
0..1
Trading partner code associated to AdditionalDetailType.
DetailDescription
Element
0..1
Textual description of AdditionalDetail information.
Text
Element
0..n
A text description of AdditionalDetail
RoomRates
RoomRates
Element
0..1
Contains details of the rates applied to the room stay.
RoomRate
Element
1..n
One RoomRate per RoomStay. Multiple rates are listed under the RoomRate.
@InvBlockCode
String
0..1
Code that identifies an inventory block.
@NumberOfUnits
Integer
0..1
Must be set to 1. If there are multiple RoomStays for the same RoomTypeCode and RatePlanCode, multiple RoomStay elements should be sent.
@RoomID
String
0..1
A string value representing the unique identification of a room.
@RoomTypeCode
String
0..1
Code of the room booked.
@RatePlanCode
String
0..1
Code of the rate plan booked. Must be included if RoomStay / RatePlans is present.
@RatePlanCategory
String
0..1
Hotel systems often group multiple rate plans into a single category. This refers to that category that is specific to the hotel CRS/ PMS and should not be confused with a GDS rate category.
@EffectiveDate
Date
1
Indicates the starting date.
@ExpireDate
Date
1
ExpireDate is the first day after the applicable period (e.g. when expire date is 2012-04-03 the last date of the period is 2012-04-02). Format yyyy-MM-dd. This date is exclusive.
Rates
Element
0..1
Container that will contain instances of Rates.
Rate
Element
1..n
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.
@UnitMultiplier
Integer
1
Must be set to 1.
@EffectiveDate
Date
1
Starting date of the rate. This date is inclusive.
@ExpireDate
Date
1
Expire date is the first day after the applicable period. This date is not inclusive.
Base
Element
1
Base amount charged for the accommodation.
@AmountBeforeTax
Decimal
0..1
At least one of AmountAfterTax or AmountBeforeTax must be set.
@AmountAfterTax
Decimal
0..1
At least one of AmountAfterTax or AmountBeforeTax must be set.
@CurrencyCode
String
1
Use ISO 4217 currency codes.
Taxes
Element
0..1
Contains details of the taxes applied.
@CurrencyCode
String
0..1
Use ISO 4217 currency codes.
@Amount
Decimal
0..1
A monetary amount of tax.
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.
@CurrencyCode
String
0..1
Use ISO 4217 currency codes.
@Percent
Integer
0..1
Tax percentage; if zero, assume use of the Amount attribute (Amount or Percent must be a zero value).
TaxDescription
Element
0..5
Text description of the taxes.
Text
Element
0..n
Textual description of the tax
Total
Element
1
Total amount charged, including additional occupants and fees. If empty, assume the Base amount equals the Total amount.
@AmountBeforeTax
Decimal
0..1
At least one of AmountAfterTax or AmountBeforeTax must be set.
@AmountAfterTax
Decimal
0..1
At least one of AmountAfterTax or AmountBeforeTax must be set.
@CurrencyCode
String
0..1
Use ISO 4217 currency codes.
Taxes
Element
0..1
Contains details of the taxes applied.
@Amount
Decimal
0..1
Tax amount applied.
@CurrencyCode
String
0..1
Use ISO 4217 currency codes.
Tax
Element
0..99
An individual tax per tax element. This element allows for both percentages and flat amounts. If one field is used, the other should be zero since logically, taxes should be calculated in only one of the two ways.
@Code
Integer
0..1
The type of tax being applied to the total. Refer to the OpenTravel Code List Fee Tax Type (FTT).
@Amount
Integer
0..1
A monetary amount of tax. if zero, assume use of the Percent attribute (Amount or Percent must be a zero value).
@CurrencyCode
String
0..1
Use ISO 4217 currency codes.
@Percent
Integer
0..1
Tax percentage; if zero, assume use of the Amount attribute (Amount or Percent must be a zero value).
TaxDescription
Element
0..5
Text description of the taxes.
Text
String
0..n
Textual description of the tax
Total
Element
1
The Total amount charged for the accommodation or service per unit of time.
@AmountBeforeTax
Integer
0..1
The Total amount charged for the accommodation or service per unit of time.
@AmountAfterTax
Integer
0..1
The total amount including all associated taxes (e.g., sales tax, VAT, GST or any associated tax).
@CurrencyCode
Integer
0..1
Use ISO 4217 currency codes.
Taxes
Element
0..1
A collection of taxes.
@CurrencyCode
Integer
0..1
Use ISO 4217 currency codes.
@Amount
Integer
0..1
A monetary amount of tax.
Tax
Element
0..99
An individual tax per tax element. This element allows for both percentages and flat amounts. If one field is used, the other should be zero since logically, taxes should be calculated in only one of the two ways.
@Code
Integer
0..1
The type of tax is applied to the total. Refer to the OpenTravel Code List Fee Tax Type (FTT).
@Amount
Integer
0..1
A monetary amount of tax. if zero, assume use of the Percent attribute (Amount or Percent must be a zero value).
@CurrencyCode
Integer
0..1
Use ISO 4217 currency codes.
@Percent
Integer
0..1
Tax percentage; if zero, assume use of the Amount attribute (Amount or Percent must be a zero value).
TaxDescription
String
0..5
Text description of the taxes.
Text
String
0..n
Textual description of the tax
ServiceRPHs
Element
0..1
A collection of unsigned integers that reference the RPH (Reference Place holder) attribute in the Service object. The ServiceRPH attribute in the Service object is an indexing attribute that identifies the services attached this RoomRate.
ServiceRPH
Element
1..n
This is a reference placeholder used as an index for a service to be associated with this stay
@RPH
Integer
1
Provides a unique reference to the service.
GuestCounts
GuestCounts
Element
1
Total guest counts, divided by age group (adult, child, infant). Adult count must always be sent.
GuestCount
Element
1..n
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.
@Age
Integer
0..1
Age of the guest, required only for children and infants.
@AgeBucket
String
0..1
Defines the age range category or bucket a guest can be booked into. This is typically used in conjunction with the age qualifying code to further define the applicable age range.
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.