Rates

Sync pricing from SiteMinder Platform to your booking channel.

What is Rates?

Rates is an update method where the SiteMinder Platform actively sends room pricing information to the booking channel. This integration ensures that the booking channel receive synchronized rate updates in real-time, maintaining accurate pricing and maximizing revenue opportunities.

The API supports two pricing models:

  • Per Day Pricing (PDP): Base rates are set for each individual day, allowing different prices on different days. Rate updates specify rates for each date within the defined range, enabling precise daily rate management.

  • Occupancy Based Pricing (OBP): Rates vary based on the number of occupants in the room. Rate updates include pricing for various occupancy levels (single, double, triple, etc.), providing detailed pricing based on the number of guests.

Integration Requirements

Understand the essential requirements for API integration, including connectivity, authentication, message formats, and security protocols.

Web Service Endpoint

  • The booking channel will provide a single global endpoint for all hotels for SiteMinder to push OTA_HotelRateAmountNotifRQ messages and receive OTA_HotelRateAmountNotifRS 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

  • The booking channel will provide a single username/password for all hotels.

  • SiteMinder will include authentication credentials within the SOAP Security header of each OTA_HotelRateAmountNotifRQ.

  • 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 needs to update room pricing, it sends updates to your booking channel using a synchronous SOAP/HTTPS exchange. Each update triggers a simple request-response cycle.

  1. Rates Update (SiteMinder to booking channel): OTA_HotelRateAmountNotifRQ Delivers rate values for specific room types and rate plans across defined date ranges. Rates can be configured as Per Day Pricing (PDP) with fixed amounts, or Occupancy Based Pricing (OBP) with rates varying by guest count.

  2. Confirmation Response (booking channel to SiteMinder): OTA_HotelRateAmountNotifRS Confirms successful receipt and processing or reports validation errors.

Security Header

The Security Header is a mandatory SOAP header that authenticates every request from SiteMinder to your booking channel endpoint. It contains the username and password credentials that you provide to the SiteMinder during integration setup.

Key Requirements:

  • Validation: Your 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.

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

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. Rates Update

Each Rate message contains a single RateAmountMessages element which indicates the hotel to update using the RateAmountMessages / HotelCode attribute. The RateAmountMessages / RateAmountMessage elements will contain the updates to process over a date range. There can be several RateAmountMessage updates per request, however, each request will be limited to one hotel and one room type.

Per Day Pricing

PDP refers to a pricing model where rates are set for each individual day. Under this model, the rate for a room type is determined on a daily basis, allowing for different prices on different days. The Rate API updates for PDP will specify rates for each date within the defined range, allowing for precise daily rate management. The below functionalities are supported:

  • Rates *

  • Included Occupancy

  • Single Guest Discount

  • Extra Adult Rate

  • Extra Child Rate

  • Inclusions

Example of a Rates XML that does not support any additional rate features. Note the absence of the @NumberOfGuests attribute. By default, SiteConnect assumes the Included Occupancy for incoming rates is set on the Booking Channel side.

@NumberOfGuests attribute is ONLY present if you're using our Included Occupancy and/or Single Guest Discount features and the hotel configures the Included Occupancy / Single Guest Discount value(s) within the 'Channel Settings' for your particular channel.

<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="ed8835ff-6198-4f38-b589-3058397f677c" TimeStamp="2025-07-06T15:27:41+00:00" Version="1.0">
	<RateAmountMessages HotelCode="HOTELCODE">
		<RateAmountMessage>
			<StatusApplicationControl End="2025-10-05" InvTypeCode="SGL" RatePlanCode="BAR" Start="2025-10-05"/>
			<Rates>
				<Rate>
					<BaseByGuestAmts>
						<BaseByGuestAmt AgeQualifyingCode="10" AmountAfterTax="300.00" CurrencyCode="EUR"/> <!-- Base Rate -->
					</BaseByGuestAmts>
					<RateDescription>
						<Text>Contemporary 1 Bedroom Apartment with private balcony.</Text> <!-- Inclusions -->
					</RateDescription>
				</Rate>
			</Rates>
		</RateAmountMessage>
	</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>

Occupancy Based Pricing

OBP is a pricing model where rates vary based on the number of occupants in the room. Under this model, the rate changes depending on the number of guests staying in the room. The Rate updates for OBP will include rates for various occupancy levels, providing detailed pricing based on the number of guests. The below functionalities are supported:

  • Rates *

  • Included Occupancy *

  • Maximum Occupancy *

  • Single Guest Discount *

  • Extra Adult Rate *

  • Extra Child Rate

  • Inclusions

If Occupancy Based Pricing is enabled, the AdditionalGuestAmount for AgeQualifyingCode=”10” is no longer included in the XML.

AdditionalGuestAmount will only contain AgeQualifyingCode=”8” if your integration supports Extra Child 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">
	<RateAmountMessages HotelCode="HOTELCODE">
		<RateAmountMessage>
			<StatusApplicationControl End="2024-10-05" InvTypeCode="SGL" RatePlanCode="BAR" Start="2024-10-05"/>
			<Rates>
				<Rate>
					<BaseByGuestAmts>
						<BaseByGuestAmt AgeQualifyingCode="10" AmountAfterTax="100.00" CurrencyCode="EUR" NumberOfGuests="1"/>
						<BaseByGuestAmt AgeQualifyingCode="10" AmountAfterTax="200.00" CurrencyCode="EUR" NumberOfGuests="2"/>
						<BaseByGuestAmt AgeQualifyingCode="10" AmountAfterTax="300.00" CurrencyCode="EUR" NumberOfGuests="3"/>
						<BaseByGuestAmt AgeQualifyingCode="10" AmountAfterTax="400.00" CurrencyCode="EUR" NumberOfGuests="4"/>
						<!-- Additional BaseByGuestAmt elements -->
					</BaseByGuestAmts>
					<AdditionalGuestAmounts>
						<AdditionalGuestAmount AgeQualifyingCode="8" Amount="50" CurrencyCode="EUR"/> <!-- Extra Child Rate -->
					</AdditionalGuestAmounts>
					<RateDescription>
						<Text>Contemporary 1 Bedroom Apartment with private balcony.</Text> <!-- Inclusions -->
					</RateDescription>
				</Rate>
			</Rates>
		</RateAmountMessage>
	</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>

Migrate from PDP to OBP

Existing partners transitioning from Per Day Pricing to Occupancy Based Pricing:

Maximum Occupancy Requirement: Your channel must provide the Maximum Occupancy for each room and rate code combination via OTA_HotelAvailRS for all connected properties. This data is required for an initial setup of the Maximum Occupancy values in our system.

Migration Process: The switch from PDP to OBP occurs instantaneously for all properties on your channel simultaneously. Your endpoint must support both PDP and OBP message formats to handle the cutover, potential rollbacks, and the verification period. Only disable PDP parsing after Partner Integrations confirms migration stability across all properties.

Element/Attribute
Type
M
Description

OTA_HotelRateAmountNotifRS

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.

@TimeStamp

DateTime

1

Time when the request was generated.

@Version

String

1

Specifies the API version. Will be set to 1.0.

RateAmountMessages

Element

1

Container for rate status messages.

@HotelCode

String

1

Identifier for the hotel.

RateAmountMessage

Element

1..n

Single rate status message.

StatusApplicationControl

Element

1

Contains date and room identification information.

@Start

Date

1

The start date for which the update is being set. This date is inclusive.

@End

Date

1

The end date for which the update is being set. This date is inclusive.

@InvTypeCode

Integer

1

Identifies the room.

@RatePlanCode

Element

0..1

Identifies the rate.

Rates

String

1

Container for rate information.

Rate

String

1

Contains individual rate information.

BaseByGuestAmts

Element

1

Base charge for a given number of guests.

BaseByGuestAmt

Element

1..n

Contains individual rate amounts.

@AmountAfterTax

Decimal

1

Positive decimal value for the rate amount after tax.

@NumberOfGuests

Integer

0..1

Number of guests in the room. Mandatory for OBP.

@AgeQualifyingCode

Element

0..1

Age qualification code for the rate:

10 Adult

Mandatory for OBP.

@CurrencyCode

String

0..1

Use ISO 4217 currency codes.

AdditionalGuestAmounts

Element

0..1

Additional charges for extra guests based on age qualification.

AdditionalGuestAmount

Element

0..2

Contains details of extra guest charges.

@AgeQualifyingCode

String

1

Age qualification code for the extra guest charge:

10 Adult (only for PDP)

8 Child

@Amount

Decimal

1

Extra charge amount.

@CurrencyCode

String

0..1

Use ISO 4217 currency codes.

RateDescription

Element

0..1

Description of what the rate includes.

Text

Element

1

Inclusion text (maximum 255 characters).

2. Confirmation Response

<SOAP-ENV:Envelope
	xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
	<SOAP-ENV:Header/>
	<SOAP-ENV:Body>
		<OTA_HotelRateAmountNotifRS
			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">
			<Success/>
		</OTA_HotelRateAmountNotifRS>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Element / @Attribute
Type
M
Description

OTA_HotelRateAmountNotifRS

Element

1

Root element for the response.

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

@TimeStamp

DateTime

1

Time when the response was generated.

@Version

String

1

Specifies the API version. Must be set to 1.0.

Success

Element

0..1

Indicates successful processing of the request.

Errors

Element

0..1

Indicates an error occurred during the processing of the request.

Error

Element

1..n

Single error information containing free text.

@Type

Integer

1

Type of error. Refer to Error Warning Types (EWT).

@Code

Integer

0..1

Code representing the error. Refer to Error Codes (ERR).

Common Questions

What is the difference between Per Day Pricing (PDP) and Occupancy Based Pricing (OBP)?

Per Day Pricing (PDP):

  • Rates set for each individual day

  • Base rate applies to default occupancy (configured on booking channel)

  • Optional Included Occupancy via NumberOfGuests attribute

  • Extra guest charges via AdditionalGuestAmounts (both adults and children)

  • Single Guest Discount shown as NumberOfGuests="1"

Occupancy Based Pricing (OBP):

  • Rates vary based on number of guests

  • Separate rate for each occupancy level from 1 to Maximum Occupancy

  • NumberOfGuests attribute mandatory for all rates

  • Extra Adult Rate not used (adult rates already included for each occupancy)

  • Only Extra Child Rate in AdditionalGuestAmounts

How to identify:

  • PDP: May have single BaseByGuestAmt or include NumberOfGuests for Included Occupancy

  • OBP: Multiple consecutive BaseByGuestAmt elements (1, 2, 3, 4...) up to Maximum Occupancy

How often will I receive rate updates?

Update Frequency:

  • Rate updates sent every 2 minutes in coordination with ARI updates

  • Only changed values for specific room/rate/date combinations are sent

  • Maximum payload: 210 days per message

Important Dependency: Rate updates are sent after successful processing of availability and restrictions. If availability/restriction updates fail, rate updates will be queued until resolved.

Update Trigger: When rates change, all rate components are included:

  • Base rates for all occupancy levels (OBP) or base rate with optional Included Occupancy (PDP)

  • Extra guest rates (if configured)

  • Inclusions text (if configured)

Why am I receiving availability and restrictions updates but not rate updates?

This is expected behaviour. SiteConnect sends updates in a specific order:

Update Sequence:

  1. First: Availability and Restrictions updates sent

  2. Then: Rate updates sent only after successful availability/restrictions response

Action: Verify your endpoint is successfully processing and responding to availability/restrictions updates before expecting rate updates.

What does Included Occupancy mean?

Included Occupancy is the number of guests covered by the base rate.

For PDP (Per Day Pricing):

  • Indicated by NumberOfGuests attribute on base rate element

  • Example: NumberOfGuests="2" means base price covers 2 guests

  • If more guests allowed, extra charges can be added via AdditionalGuestAmounts

  • Single Guest Discount can be applied with NumberOfGuests="1"

For OBP (Occupancy Based Pricing):

  • Every rate has NumberOfGuests attribute (mandatory)

  • Each occupancy level (1, 2, 3...) has its own complete rate

  • No "included occupancy" concept - each occupancy is explicitly priced

Default Behavior:

  • PDP: If NumberOfGuests not present, booking channel uses its own default

  • OBP: If hotel doesn't configure Included Occupancy, SiteMinder defaults to 2 guests as the base

What's the difference between NumberOfGuests="1" and Included Occupancy?

This depends on whether you're receiving PDP or OBP rates:

In PDP Messages:

  • NumberOfGuests="1" = Single Guest Discount (reduced rate for solo travellers)

  • NumberOfGuests="2" or higher = Included Occupancy (base rate for that number of guests)

  • If only one BaseByGuestAmt without NumberOfGuests = base rate with no occupancy specification

Example PDP with both:

<BaseByGuestAmt NumberOfGuests="1" AmountAfterTax="200"/> <!-- Single Guest Discount -->
<BaseByGuestAmt NumberOfGuests="3" AmountAfterTax="300"/> <!-- Included Occupancy -->

This means: Rate for 1 guest is 200, rate for 3+ guests is 300, extra charges may apply for 4+ guests.

In OBP Messages:

  • NumberOfGuests="1" = Rate for 1 guest (part of occupancy-based pricing)

  • All occupancy levels explicitly provided (1, 2, 3, 4...)

  • No "discount" concept - each occupancy has its own rate

Example OBP:

<BaseByGuestAmt NumberOfGuests="1" AmountAfterTax="100"/> <!-- Rate for 1 guest -->
<BaseByGuestAmt NumberOfGuests="2" AmountAfterTax="200"/> <!-- Rate for 2 guests -->
<BaseByGuestAmt NumberOfGuests="3" AmountAfterTax="300"/> <!-- Rate for 3 guests -->
What happens if the Maximum Occupancy in SiteMinder doesn't match my channel's settings?

You must return an "Invalid number of adults" error when there's a mismatch.

Expected Behavior:

  • SiteMinder sends rates for 1 to Maximum Occupancy (consecutive)

  • Number of BaseByGuestAmt elements = Maximum Occupancy value

  • Your channel must validate this matches your configured Maximum Occupancy

Error Response Examples:

<Error Type="12" Code="397">Invalid number of adults</Error>
<!-- OR with expected value -->
<Error Type="12" Code="397">Invalid number of adults: expecting 5</Error>

Impact of Mismatched Maximum Occupancy:

  • If hotel reduces max occupancy (5 to 4): Rates for 5 guests no longer sent, potentially causing booking issues for 5-guest reservations

  • If hotel increases max occupancy (4 to 5): Your channel receives new rate for 5 guests

How many occupancy rates can I receive in an OBP message?

You will receive one rate for each occupancy level from 1 to the Maximum Occupancy.

Number of Rates:

  • Determined by MaxOccupancy value provided in your Rooms and Rates response

  • Valid range: 1 to 50

  • Always consecutive: 1, 2, 3, 4... up to max

Examples:

  • MaxOccupancy="3" → 3 rates (for 1, 2, and 3 guests)

  • MaxOccupancy="6" → 6 rates (for 1, 2, 3, 4, 5, and 6 guests)

Message Size Considerations: Higher Maximum Occupancy values result in larger messages. Plan your parsing logic to handle up to 50 BaseByGuestAmt elements per rate update.

How does SiteConnect sync Extra Adult Rate, Extra Child Rate, and Single Guest Discount in an PDP?

Sync Behavior:

  • These values are rate plan level settings (not date-specific)

  • Once configured, a full sync is sent for the entire rate plan

  • All dates for that room/rate combination receive the same extra guest rates and discount

Update Trigger:

  • When hotel first configures these values

  • When hotel changes these values

  • During regular rate updates (included with base rates)

In Messages:

  • Extra Adult/Child Rates: Sent in AdditionalGuestAmounts section

  • Single Guest Discount: Sent as BaseByGuestAmt with NumberOfGuests="1"

  • Applied across all dates in the message date range

Example: If a hotel sets Extra Adult Rate to 50 EUR for a rate plan, all future rate updates for that rate plan will include <AdditionalGuestAmount AgeQualifyingCode="10" Amount="50" CurrencyCode="EUR"/> regardless of the date range.

I added a Single Guest Discount and stopped receiving rate updates. Why?

This occurs when the Single Guest Discount results in a negative rate.

Example Problem:

  • Base rate: 50 EUR

  • Single Guest Discount: 60 EUR

  • Result: 50 - 60 = -10 EUR (negative rate)

System Behavior:

  • SiteMinder detects the negative rate

  • Rate updates for that room-rate combination stop being sent

  • Error prevents invalid pricing from reaching your channel

Resolution:

  • Hotel must adjust the Single Guest Discount to be less than the base rate

  • Once corrected, rate updates will resume

Best practice: Validate that Single Guest Discount ≤ Base Rate in your channel's hotel management interface

Are rates received from SiteConnect inclusive or exclusive of taxes?

All rates are sent in the AmountAfterTax attribute, but the actual tax inclusion depends on hotel configuration.

What SiteConnect Sends:

  • Attribute: AmountAfterTax (always used)

  • Value: Daily rate amount as configured by hotel

  • No explicit tax flag to indicate inclusive vs. exclusive

Common Practice:

  • Most hotels load all-inclusive rates (required by major channels like Booking.com, Expedia)

  • Your channel can handle rates on your extranet as you see fit

Critical: Hotel must be informed and agree on how rates are interpreted

Recommendation:

  • Document your channel's rate handling policy clearly

  • Communicate this to hotels during onboarding

  • Consider adding a toggle in your extranet if you support both models

We only support one currency. Can we work without receiving CurrencyCode?

Yes, you can request to have CurrencyCode disabled.

Default Behavior:

  • SiteConnect sends CurrencyCode attribute by default

  • Uses ISO 4217 currency codes (EUR, USD, GBP, etc.)

  • Allows properties to select currency to send

Single Currency Channels:

  • Request Partner Integrations team to disable CurrencyCode

  • This is a channel-level setting (applies to all properties)

  • Rate messages will be sent without the CurrencyCode attribute

  • Your channel assumes your supported currency

Multi-Currency Support:

  • If you support multiple currencies, keep CurrencyCode enabled

  • Each hotel can configure their preferred currency in SiteMinder

  • Only one currency per request (never mixed)

Will I receive both PDP and OBP messages during migration to Occupancy Based Pricing?

Yes, your channel must support both message formats during the migration period.

Migration Switch:

  • PDP to OBP migration happens simultaneously for all properties on your channel

  • The switch occurs instantaneously - all properties convert at once

  • Your endpoint must process both PDP and OBP messages to ensure continuity

Why Both Formats:

  • Handle the instantaneous cutover moment

  • Support potential rollback to PDP if issues occur

  • Maintain service during the verification period

When to Disable PDP: Only after SiteMinder Partner Integrations confirms:

  • All properties successfully receiving OBP updates

  • Verification period completed without issues

  • Migration is stable with no rollback required

How to Detect Format:

  • OBP: Multiple consecutive BaseByGuestAmt with NumberOfGuests="1", "2", "3"...

  • PDP: Single or non-consecutive BaseByGuestAmt elements

Help Centre

Last updated

Was this helpful?