Reservations
Push reservations messages to SiteMinder Platform in real-time.
API: SiteConnect · Operation: Reservations · Direction: Channel → SM
What is Reservations?
Reservation is a delivery method where the booking channel actively pushes reservations, modifications, and cancellations directly to the SiteMinder Platform in real-time. This integration ensures that properties receive up-to-date booking information, maintaining consistency and reducing the risk of overbooking.
Key Characteristics:
Real-time delivery: Reservations pushed immediately after booking
Three message types: New bookings (
Commit), modifications (Modify), and cancellations (Cancel)Atomic processing: Each reservation is processed entirely or rejected entirely
Availability updates: SiteMinder sends updated availability to all channels after processing reservations
Reservation Notification Email: SiteConnect can optionally send reservation notification emails to hotels based on the data in your OTA_HotelResNotifRQ. If your channel cannot send reservation emails directly to hotels, this feature can be requested during integration. It is not enabled by default.
Cancellation Policies: Cancellation policies are managed directly between the hotel and your booking channel and are not handled through the SiteMinder API.
Production Endpoint Update: SiteMinder now uses a single global endpoint for all reservation delivery, replacing the previous regional endpoint model (APAC and EMEA/AMERS). If your integration currently uses region-specific endpoints, please contact the Partner Integrations team to migrate to the global endpoint for simplified routing and improved reliability.
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 the booking channel to push
OTA_HotelResNotifRQmessages and receiveOTA_HotelResNotifRQresponses indicating success or failure.Test Environment Endpoint: https://tpi-cm-siteconn.preprod.siteminderlabs.com/reservation-gateway/services
Authentication
SiteMinder will provide a single username/password for all hotels.
The booking channel must include authentication credentials within the SOAP Security header of each request
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 will 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.
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 (booking channel to SiteMinder):
OTA_HotelResNotifRQDelivers a single reservation message (new booking, modification, or cancellation).Confirmation Response (booking channel to PMS):
OTA_HotelResNotifRSConfirms successful receipt or reports processing failure.
SiteMinder will send OTA_HotelAvailNotifRQ to the booking channel with the updated availability after the reservations, modifications, and cancellations are processed on the SiteMinder Platform. Refer to the Availability and Restrictions.
Security Header
The Security Header is a mandatory SOAP header that authenticates every reservation request from your booking channel to SiteMinder endpoint. It contains the username and password credentials that we provide to the booking channel 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.
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.
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 your booking channel to SiteMinder. Each message contains exactly one reservation (new booking, modification, or cancellation).
Reservation (Initial Delivery) *
Reservation Multi-Room
Reservation Modifications
Reservation Cancellations
Reservation Modifications and Cancellations: SiteMinder uses specific reservation status fields to differentiate between types of reservation actions. Modifications are identified using ResStatus Modify, while cancellations are marked with ResStatus Cancel. For both actions, the full reservation data must be provided, including the original reservation details and the timestamp reflecting when the modification or cancellation was made. This ensures that the booking system processes changes and cancellations accurately and consistently across all properties.
Reservations follow a one-way lifecycle: Commit → Modify → Cancel. Never send Modify or Cancel messages for reservations that are already cancelled. Once a reservation is cancelled, it is in a terminal state and no further messages should be sent.
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
Enumeration
1
Specifies the booking status:
Commit
Modify
Cancel
@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. Must be set to 1.0.
Source
POS
Element
1
Contains source details.
Source
Element
1..2
Contains BookingChannel details.
RequestorID
Element
1
Only present in the first Source element. Identifies the system sending the reservation.
@Type
Integer
1
Must be set to 22 (ESRP).
@ID
String
1
Channel code. The ID used will be agreed by trading partners and remain consistent across messages.
BookingChannel
Element
1
Contains booking channel information.
@Primary
Boolean
1
true for the primary booking channel in the first Source element.
false in the second Source element, if present.
CompanyName
Element
1
Name of the booking channel.
@Code
String
0..1
Code of the booking channel.
- Same as RequestorID ID for the primary source.
- Your internal reference code for the secondary source.
Reservation
Reservation IDs: UniqueID ID must be unique across all properties connected at all times. If a reservation is received with an ID that has already been used, it will be ignored, even if it is for a different hotel. To ensure long-term uniqueness and minimize the risk of reuse, we recommend using a UniqueID with at least 7 numeric characters. Incorporating alphanumeric characters is also encouraged to further increase the number of possible combinations for reservations.
UniqueID ID must contain only alphanumeric characters (A-Z, a-z, 0-9). Special characters must be avoided.
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. Must be set when ResStatus is Commit, Modify and Cancel. CreateDateTime must follow the ISO 8601 Date and Time format.
@LastModifyDateTime
DateTime
0..1
Date and time when the reservation was last modified. Must be set when ResStatus is Modify or Cancel. LastModifyDateTime must follow the ISO 8601 Date and Time format.
UniqueID
Element
1
Unique identifier of the reservation in the system which sent the message.
@Type
Integer
1
Must be set to 14 (Reservation).
@ID
String
1
Actual confirmation number.
RoomStays
Multi-Room Reservations: Multi-room reservations are sent in a single OTA_HotelResNotifRQ with multiple RoomStay elements, each representing one room.
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).
RoomTypes
RoomTypes
Element
0..1
Provides more information about the room type for this room stay.
RoomType
Element
1
Contains specific information about the room type.
@RoomTypeCode
String
1
Code of the room booked.
RoomDescription
Element
1
Description of the room.
@Name
String
1
Name of the room. Required for Reservation Notification Email feature.
RatePlans
Commission Purpose: The CommissionPayableAmount represents the amount the hotel owes your booking channel. This is included in the RoomStay total and helps SiteMinder provide better reporting to hotels.
Best Practice: Although optional, sending commission amounts is strongly recommended because:
Some hotels configure their PMS to receive reservation rates with or without commission
Provides hotels with accurate financial reporting
Enables better reconciliation between channels and properties
RatePlans
Element
0..1
Provides more information about the rate plan for this room stay.
RatePlan
Element
1
Contains details about the specific rate plan.
@RatePlanCode
String
1
Code of the rate booked.
RatePlanDescription
Element
1
Description of the rate plan. Required for Reservation Notification Email feature.
Commission
Element
0..1
Commission amount associated with the rate plan.
CommissionPayableAmount
Element
1
Amount of commission to be paid.
@Amount
Decimal
1
Commission amount.
MealsIncluded
Element
0..n
Used to identify the types of meals included with a rate plan.
RoomRates
AmountBeforeTax vs AmountAfterTax:
Use
AmountAfterTaxif your rates include taxesUse
AmountBeforeTaxif your rates exclude taxesYou can send both, but amounts must differ (AfterTax must be greater than BeforeTax)
At least one must be provided
Multiple Tax Types: You can send multiple Tax elements with different Tax Codes (e.g., GST/VAT, City Tax) to itemize tax types. Reference the Fee Tax Type (FTT) table for codes.
Promotional Rates and Zero-Rate Nights:
Best practice: Send actual per-night rates (including 0 for free nights)
Alternative: Average total across all nights
Recommendation: Add comment explaining any discounts or promotions
Validation: SiteMinder accepts reservations with 0 rate totals
This is the complete RoomRates structure showing all standard elements contained in a typical reservation. It demonstrates a 3-night stay with consistent nightly rates, including tax breakdown and a linked service/extra charge.
To understand the complete <RoomRate> anatomy and how to structure daily rates, explore the three rate variation patterns below:
Same Value Per Night: All nights charged at identical rates
Different Value Per Night: Each night has a distinct rate
Combined: Groups of consecutive nights at the same rate
A single <Rate> element spans the entire stay period, with the Base and Total amounts representing the sum of all nights at a uniform nightly rate. This is the most efficient structure when rates don't fluctuate during the stay.
Example breakdown:
3-night stay (Oct 5-7)
Total: €558.00 before tax / €620.00 after tax
Nightly rate: €186.00 before tax per night / €206.66 after tax per night
Each night is represented by a separate <Rate> element with its individual pricing. The EffectiveDate and ExpireDate span exactly one night, clearly showing the rate breakdown for each date.
Example breakdown:
Night 1 (Oct 5): €153.00 before tax / €170.00 after tax
Night 2 (Oct 6): €180.00 before tax / €200.00 after tax
Night 3 (Oct 7): €225.00 before tax / €259.00 after tax
Total: €558.00 before tax / €620.00 after tax
Groups consecutive nights with identical rates into single <Rate> elements, while separating periods where rates differ. This optimizes message size while maintaining rate accuracy.
Example breakdown:
Nights 1-2 (Oct 5-6): €360.00 before tax (€180/night) / €400.00 after tax (€200/night)
Night 3 (Oct 7): €198.00 before tax / €220.00 after tax
Total: €558.00 before tax / €6200.00 after tax
RoomRates
Element
1
Contains details of the rates applied to the room stay.
RoomRate
Element
1
One RoomRate per RoomStay. Multiple rates are listed under the RoomRate.
@RoomTypeCode
String
1
Code of the room booked.
@RatePlanCode
String
0..1
Code of the rate plan booked. Must be included if RoomStay / RatePlans is present.
@NumberOfUnits
Integer
1
Must be set to 1. If there are multiple RoomStays for the same RoomTypeCode and RatePlanCode, multiple RoomStay elements should be sent.
Rates
Element
1
Contains rate details
Rate
Element
0..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.
@RateTimeUnit
String
1
Must be set to Day.
@EffectiveDate
Date
1
Starting date of the rate. This date is inclusive.
Must use YYYY-MM-DD format.
@ExpireDate
Date
1
Expire date is the first day after the applicable period. This date is not inclusive.
Must use YYYY-MM-DD format.
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.
Taxes
Element
0..1
Contains details of the taxes applied.
Tax
Element
0..n
Contains specific tax information.
@Type
Enumeration
0..1
Indicates whether the tax is:
inclusive
exclusive
cumulative
@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.
Total
Element
0..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.
Taxes
Element
0..1
Contains details of the taxes applied.
Tax
Element
0..n
Contains specific tax information.
@Type
Enumeration
0..1
Indicates whether the tax is:
inclusive
exclusive
cumulative
@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.
ServiceRPHs
Element
0..1
Container for the ServiceRPH elements.
ServiceRPH
Element
0..n
Links a service to the Service information at the HotelReservation level (if applicable).
Service at the RoomRate level.
@RPH
Integer
1
Reference to the ServiceRPH at the HotelReservation level.
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. Count must be greater than or equal to 1.
@Age
Integer
0..1
Age of the guest, required only for children and infants.
TimeSpan
The TimeSpan element defines the check-in and check-out dates for the reservation. SiteConnect requires a minimum 1-night stay - the check-out date must be at least one day after the check-in date. Same-day bookings (day-use reservations where arrival and departure occur on the same date) are not supported and will be rejected with a validation error.
TimeSpan
Element
1
Contains the timespan for the RoomStay.
Maximum 749 days
@Start
Date
1
Check-in date.
Must use YYYY-MM-DD format.
@End
Date
1
Check-out date.
Must use YYYY-MM-DD format.
Must be after Start (minimum 1-night stay required). Same-day bookings will be rejected.
RoomStayTotal
Total
Element
1
Container for the total amount elements.
@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.
Tax
Element
1..n
Contains specific tax information.
@Type
Enumeration
0..1
Indicates whether the tax is:
inclusive
exclusive
cumulative
@Code
String
0..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.
@CurrencyCode
String
0..1
Use ISO 4217 currency codes.
BasicPropertyInfo
BasicPropertyInfo
Element
1
Contains basic identification details for the hotel associated with the reservation.
@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
Holds the actual comment.
Text
Element
1
The content of the comment.
PCI sensitive data is prohibited.
SpecialRequests
SpecialRequests
Element
0
Contains special requests for the RoomStay.
SpecialRequest
Element
0..n
Holds the actual special request.
@Name
String
1
Special request type (e.g., bedding configuration, smoking, cot, extra bed).
Text
Element
0..1
Special request text.
Services
ServiceInventoryCode: Use this list as a guide to code your extras/services. You can use additional codes not on the list such as PARKING or your own service identifier codes generated in your system.
Example of a reservation with a service linked to the RoomRate.
ServiceRPH present within <RoomRate>.
Service cost is included in the RoomRate Total, RoomStay Total and ResGlobalInfo Total.
Service cost is not included in the RoomRate Base
MEAL service for 3 nights. Quantity must be 1. Service Total must reflect total for all nights/quantities booked. The connected PMS will receive a breakdown of this service (per night) based on the TimeSpan.
Example of a reservation with a service linked to the RoomStay.
ServiceRPH present within <RoomStay>.
Service cost is included in the RoomStay Total and ResGlobalInfo Total.
Service cost is not included in the RoomRate Base and RoomRate Total.
Example of a reservation with a service linked to the entire Reservation. No ServiceRPH link. Service cost is included in the ResGlobalInfo Total. Service cost is not included in the RoomRate Base, RoomRate Total and RoomStay Total.
TimeSpan is used to show the date range or dates the service applies.
You will use the @Start and @End dates to show the date range
Service applied for the first 2 nights in a 4 night reservation:
Service applied for different nights in a 4 night reservation:
TimeSpan can only be used once in a Service node. In this case, you will send 2 Service nodes to indicate the 2 service dates.
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. Use this list as a guide to code your extras/services. You can use additional codes not on the list such as PARKING or your own service identifier codes generated in your system.
@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 RoomRate. 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.
Price
Element
0..1
Container for pricing details of the service.
Base
Element
0..1
Base amount charged for the service.
@CurrencyCode
String
0..1
Use ISO 4217 currency codes.
@AmountAfterTax
Decimal
0..1
At least one of AmountAfterTax or AmountBeforeTax must be set.
@AmountBeforeTax
Decimal
0..1
At least one of AmountAfterTax or AmountBeforeTax must be set.
Taxes
Element
0..1
Contains details of the taxes applied.
Tax
Element
1
Contains specific tax information.
@Percentage
Decimal
0..1
Percentage rate of the applied tax.
@Amount
Decimal