Skip to main content

Rates

The HotelRatePlanNotif message contains information about rate prices and supplements. No rate information will be returned except code, currency and status.

As explained before, Channel-X extracts the product loaded between the Buyer (inventory) and the Channel Managers (availability and rates) into our Inventory tool and sends it to the Buyer's system, to your system. So, in this case, Travelgate will send HotelRatePlanNotif requests to your system, and you will respond with either success or error.

HotelRatePlanNotif Requestโ€‹

In the following examples, you will observe the requests that Travelgate will send you. All the examples presented here are Deltas (smaller product requests).

If you want to explore all possible scenarios of information that may come your way, head over to More Request Examples section; there you will find Full Copys (full product details requests) examples.

info

Note that our system works with up to 3 types of prices: per room, per standard occupancy, and per occupancy. To learn how to calculate the price for each case, go to Price Use Cases.

<s:Envelope xmlns:s = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:u = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<o:Security s:mustUnderstand = "1" xmlns:o = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<o:UsernameToken u:Id = "uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-x">
<o:Username>username</o:Username>
<o:Password Type = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</o:Password>
</o:UsernameToken>
</o:Security>
</s:Header>
<s:Body xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<HotelRatePlanNotif xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmltravelgate.com/hubpush/provider/2012/10">
<request>
<POS xmlns="http://www.opentravel.org/OTA/2003/05">
<Source>
<RequestorID ID="Seller Code" />
<BookingChannel>
<CompanyName Code="Buyer Code" />
</BookingChannel>
</Source>
</POS>
<RatePlans HotelCode="2" xmlns="http://www.opentravel.org/OTA/2003/05">
<RatePlan CurrencyCode="EUR" RatePlanCode="BAR" RateReturn="false" FreeChild="false" FreeBaby="false" RatePlanStatusType="Active">
<Rates>
<Rate Start="2024-01-01" End="2024-01-01">
<BaseByGuestAmts>
<BaseByGuestAmt AmountAfterTax="100" Type="25" />
</BaseByGuestAmts>
</Rate>
</Rates>
<SellableProducts>
<SellableProduct InvCode="SNG" InvType="ROOM" />
</SellableProducts>
</RatePlan>
<RatePlan CurrencyCode="EUR" RatePlanCode="BAR" RateReturn="false" FreeChild="false" FreeBaby="false" RatePlanStatusType="Active">
<Rates>
<Rate Start="2024-01-02" End="2024-01-02">
<BaseByGuestAmts>
<BaseByGuestAmt AmountAfterTax="100" Type="25" />
</BaseByGuestAmts>
</Rate>
</Rates>
<Supplements>
<Supplement AgeQualifyingCode="10" Amount="10" Start="2024-01-02" End="2024-01-02" SupplementType="Board" InvCode="19" />
<Supplement AgeQualifyingCode="8" Amount="5" Start="2024-01-02" End="2024-01-02" SupplementType="Board" InvCode="19" />
<Supplement AgeQualifyingCode="7" Amount="0" Start="2024-01-02" End="2024-01-02" SupplementType="Board" InvCode="19" />
</Supplements>
<SellableProducts>
<SellableProduct InvCode="SNG" InvType="ROOM" />
</SellableProducts>
</RatePlan>
</RatePlans>
</request>
</HotelRatePlanNotif>
</s:Body>
</s:Envelope>

Request Data Breakdownโ€‹

ElementRelTypeDescription
HotelRatePlanNotif1
HotelRatePlanNotif/request1
request/RatePlans1
@HotelCode1StringHotel code
RatePlans/RatePlan1..n
@RatePlanCode1StringRate plan code
@FreeChild1BooleanIndicates if childern are free with this rate plan.
@FreeBaby1BooleanIndicates if babies are free with this rate plan.
@RatePlanStatusType0..1StringActive or Deactivated
@BaseRatePlanCode0..1StringRate code of the base rate plan. This field is exclusively used for Derivated rates.
@CurrencyCode0..1StringISO Currency. This field is exclusively used for Basic Rates.
RatePlan/Rates1
Rates/Rate1..n
@Start1DateStart date of the rate.
@End1DateEnd date of the rate.
@AdjustedPercentage0..1DecimalThe percentage that needs to be added to the base rate plan in order to calculate the price of the derived rate plan. This field is exclusively used for Derivated Rates.
@AdjustedAmount0..1DecimalThe amount that needs to be added to the base rate plan in order to calculate the price of the derived rate plan. This field is exclusively used for Derivated Rates.
@AdjustUpIndicator0..1BooleanIf true, the adjusted amount or percentage is added to the base rate plan's specified amount to calculate the derived rate amount. If false, the adjusted amount or percentage is subtracted from the base rate plan's specified amount to calculate the derived rate plan amount. This field is exclusively used for Derivated Rates.
Rate/BaseByGuestAmts0..1
BaseByGuestAmts/BaseByGuestAmt1..n
@AmountAfterTax1DecimalTotal amount for the @NumberOfGuests indicated per day. This amount doesnโ€™t include tax. When value is -1, price should be deleted from the system.
@NumberOfGuests0..1IntegerPRICE PER PAX. The maximum @NumberOfGuests is the standard occupancy of the room. If @NumberOfGuests is not provided, then @Type must be specified.
@Type0..1Integer@Type 25 PRICE PER ROOM; @Type 14 PRICE PER OCCUPANCY (In the case of 14, @Code is mandatory and AdditionalGuestAmounts are not allowed).
@Code0..1StringRoom scenario codes (adult-child-baby). Mandatory if @Type '14' PRICE PER ROOM.
Rate/AdditionalGuestAmounts0..1This field is exclusively used for Basic Rates.
AdditionalGuestAmounts/AdditionalGuestAmount1..n
@MaxAdditionalGuests1IntegerNumber of the additional pax.
@AgeQualifyingCode1Integer
Age Qualifying Codes
Code Description
7 Baby
8 Child
10 Adult
@Type0..1StringExclusive, if present price is absolute and price tag is @Amount
@Amount0..1DecimalPrice for each additional pax.
@Percent0..1DecimalPercent for each additional pax.
RatePlan/Supplements0..1Present if supplements by board exists. This field is exclusively used for Basic Rates.
Supplements/Supplement1..n
@Start1DateStart date of the supplement.
@End1DateEnd date of the supplement.
@AgeQualifyingCode0..1Integer
Age Qualifying Codes
Code Description
7 Baby
8 Child
10 Adult
Not allowed if charging Supplement Board by Occupancy.
@ChargeTypeCode0..1StringOccupancy supplement board. Only allowed if charging supplement board by occupancy.
@Amount1DecimalAmount of the supplement.
@SupplementType1StringBoard
@InvCode1String
Meal Plan codes
Code Description
1 All inclusive
2 American
3 Bed & breakfast
4 Buffet breakfast
5 Caribbean breakfast
6 Continental breakfast
7 English breakfast
8 European plan
9 Family plan
10 Full board
11 Full breakfast
12 Half board/modified American plan
13 As brochured
14 Room only
15 Self catering
16 Bermuda
17 Dinner bed and breakfast plan
18 Family American
19 Breakfast
20 Modified
255 Full board And Drinks
256 Half board And Drinks
257 All inclusive Premium
258 Gala Dinner
259 All Inclusive Light
260 Bed and breakfast + Half board
261 All Inclusive Limited
262 Bed and Brunch
Only if @SupplementType is 'Board'
RatePlan/SellableProducts0..1This field is exclusively used for Basic Rates.
SellableProducts/SellableProduct1..n
@InvCode1IntegerRoom code
@InvType1IntegerROOM

More Request Examplesโ€‹

Download the following requests to explore all possible scenarios of information that may come your way.

sftp.xmltravelgate.com

Price Use Casesโ€‹

Our system works with up to 3 types of prices: per room, per standard occupancy and per occupancy. Although it is unusual that a Channel Manager works with more than one, it can happen. If this is the case, the 3 price types can coexist and the system should always return the lowest one at availability response. Also when more than one price is charged for the same day, the newest price will be returned as available price.

Price per Roomโ€‹

When a price is charged per Room, it means that all occupancies allowed in the room will have the same price. If an AdditionalGuestAmount is charged for occupancies exceeding the standard occupancy, it will be applied.

Sample scenarios for "Price per Room" price calculations.
Case 1

Standard occupancy: 2


Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0
  • 1-1-0

Message:

<BaseByGuestAmts>
<BaseByGuestAmt Type = "25" AmountAfterTax="100.00"/>
</BaseByGuestAmts>

Price:

OccupancyPrice
1-0-0100
2-0-0100
1-1-0100

Case 2

Standard occupancy: 2


Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0
  • 3-0-0
  • 1-1-0
  • 3-1-0

Message:

<BaseByGuestAmts>
<BaseByGuestAmt Type = "25" AmountAfterTax="100.00"/>
</BaseByGuestAmts>
<AdditionalGuestAmounts>
<AdditionalGuestAmount MaxAdditionalGuests = "1" Amount = "20.00" AgeQualifyingCode = "10" />
<AdditionalGuestAmount MaxAdditionalGuests = "1" Amount = "10.00" AgeQualifyingCode = "8" Type="Exclusive"/>
</AdditionalGuestAmounts>

Price:

OccupancyPrice
1-0-0100
2-0-0100
3-0-0100 + (100โ„2 + 20) = 170
1-1-0100
3-1-0100 + (100โ„2 + 20) + 10 = 180

Case 3

Standard occupancy: 3


Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0
  • 3-0-0
  • 4-0-0

Message:

<BaseByGuestAmts>
<BaseByGuestAmt Type = "25" AmountAfterTax="120.00"/>
</BaseByGuestAmts>
<AdditionalGuestAmounts>
<AdditionalGuestAmount MaxAdditionalGuests = "1" Amount = "20.00" AgeQualifyingCode = "10" />
</AdditionalGuestAmounts>

Price:

OccupancyPrice
1-0-0120
2-0-0120
3-0-0120
4-0-0120 + (120โ„3 + 20) = 180

Price per Standard Occupancy (Pax/Guest)โ€‹

When a price is charged per Pax means, it means that the price is based on the specified number of guests. If the NumberOfGuests is equal to or below the standard occupancy, the returned price must be the same as the charged price. If the NumberOfGuests exceeds the standard occupancy, the price is calculated based on the standard occupancy price and the AdditionalGuestAmount charged.

Sample scenarios for "Price per Standard Occupancy (Pax/Guest)" price calculations.
Case 1

Standard occupancy: 2


Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0

Message:

<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests = "2" AmountAfterTax="100.00"/>
</BaseByGuestAmts>

Price:

OccupancyPrice
1-0-0ร˜
2-0-02*(100โ„2) = 100

Case 2

Standard occupancy: 2


Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0

Message:

<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests = "1" AmountAfterTax="100.00"/>
<BaseByGuestAmt NumberOfGuests = "2" AmountAfterTax="130.00"/>
</BaseByGuestAmts>

Price:

OccupancyPrice
1-0-0100
2-0-02*(130โ„2) = 130

Case 3

Standard occupancy: 2


Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0
  • 3-0-0

Message:

<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests = "2" AmountAfterTax="100.00"/>
</BaseByGuestAmts>
<AdditionalGuestAmounts>
<AdditionalGuestAmount MaxAdditionalGuests = "1" Amount = "40.00" AgeQualifyingCode = "10"/>
</AdditionalGuestAmounts>

Price:

OccupancyPrice
1-0-0ร˜
2-0-02*(100โ„2) = 100
3-0-0(100โ„2) + (100โ„2) + ((100โ„2) + 40) = 190

Case 4

Standard occupancy: 2


Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0
  • 3-0-0

Message:

<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests = "2" AmountAfterTax="100.00"/>
</BaseByGuestAmts>
<AdditionalGuestAmounts>
<AdditionalGuestAmount MaxAdditionalGuests = "1" Amount = "40.00" AgeQualifyingCode = "10" Type="Exclusive"/>
</AdditionalGuestAmounts>

Price:

OccupancyPrice
1-0-0ร˜
2-0-02*(100โ„2) = 100
3-0-0(100โ„2) + (100โ„2) + 40 = 140

Case 5

Standard occupancy: 2


Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0
  • 1-1-0

Message:

<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests = "2" AmountAfterTax="100.00"/>
</BaseByGuestAmts>
<AdditionalGuestAmounts>
<AdditionalGuestAmount MaxAdditionalGuests = "1" Amount = "40.00" AgeQualifyingCode = "8" />
</AdditionalGuestAmounts>

Price:

OccupancyPrice
1-0-0ร˜
2-0-02*(100โ„2) = 100
1-1-0(100โ„2) + ((100โ„2) + 40)= 190

Case 5.1

Standard occupancy: 2


Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0
  • 1-0-1

Message:

<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests = "2" AmountAfterTax="100.00"/>
</BaseByGuestAmts>
<AdditionalGuestAmounts>
<AdditionalGuestAmount MaxAdditionalGuests = "1" Amount = "40.00" AgeQualifyingCode = "7" Type="Exclusive"/>
</AdditionalGuestAmounts>

Price:

OccupancyPrice
1-0-0ร˜
2-0-02*(100โ„2) = 100
1-0-12*(100โ„2) + 40 = 140

Case 6

Standard occupancy: 2


Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0
  • 2-1-0

Message:

<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests = "2" AmountAfterTax="100.00"/>
</BaseByGuestAmts>
<AdditionalGuestAmounts>
<AdditionalGuestAmount MaxAdditionalGuests = "1" Amount = "-40.00" AgeQualifyingCode = "8" />
</AdditionalGuestAmounts>

Price:

OccupancyPrice
1-0-0ร˜
2-0-02*(100โ„2) = 100
1-1-02*(100โ„2) + ((100โ„2) -40) = 60

Case 7

Standard occupancy: 2


Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0
  • 3-0-0
  • 4-0-0

Message:

<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests = "2" AmountAfterTax="100.00"/>
</BaseByGuestAmts>
<AdditionalGuestAmounts>
<AdditionalGuestAmount MaxAdditionalGuests = "1" Amount = "10.00" AgeQualifyingCode = "10" />
<AdditionalGuestAmount MaxAdditionalGuests = "2" Amount = "-15.00" AgeQualifyingCode = "10" />
</AdditionalGuestAmounts>

Price:

OccupancyPrice
1-0-0ร˜
2-0-02*(100โ„2) = 100
3-0-0(100โ„2) + (100โ„2) + ((100โ„2) + 10) = 160
4-0-0(100โ„2) + (100โ„2) + ((100โ„2) + 10) + ((100โ„2) - 15) = 195

Case 8

Standard occupancy: 2


Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0
  • 3-0-0
  • 4-0-0

Message:

<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests = "2" AmountAfterTax="100.00"/>
</BaseByGuestAmts>
<AdditionalGuestAmounts>
<AdditionalGuestAmount MaxAdditionalGuests = "1" Amount = "-10.00" AgeQualifyingCode = "10" />
</AdditionalGuestAmounts>

Price:

OccupancyPrice
1-0-0ร˜
2-0-02*(100โ„2) = 100
3-0-0(100โ„2) + (100โ„2) + ((100โ„2) -10) = 140
4-0-0ร˜

Case 9

Standard occupancy: 3


Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0
  • 3-0-0
  • 4-0-0
  • 5-0-0

Message:

<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests = "3" AmountAfterTax="150.00"/>
</BaseByGuestAmts>
<AdditionalGuestAmounts>
<AdditionalGuestAmount MaxAdditionalGuests = "1" Amount = "-10.00" AgeQualifyingCode = "10" />
<AdditionalGuestAmount MaxAdditionalGuests = "2" Amount = "15.00" AgeQualifyingCode = "10" />
</AdditionalGuestAmounts>

Price:

OccupancyPrice
1-0-0ร˜
2-0-0ร˜
3-0-03*(150โ„3) = 150
4-0-0(150โ„3) + (150โ„3) + (150โ„3) + ((150โ„3) - 10) = 190
5-0-0(150โ„3) + (150โ„3) + (150โ„3) + ((150โ„3) - 10) + ((150โ„3) + 15) = 255

Price per Occupancyโ€‹

When a price is charged per Occupancy means that this price will only be available for the specified occupancy. No AdditionalGuestAmount are applied.

Sample scenarios for "Price per Occupancy" price calculations.
Case 1

Room scenarios (adult-child-baby):

  • 1-0-0
  • 2-0-0
  • 3-0-0

Message:

<BaseByGuestAmts>
<BaseByGuestAmt Type = "14" AmountAfterTax="100.00" Code = "2-0-0"/>
</BaseByGuestAmts>

Price:

OccupancyPrice
1-0-0ร˜
2-0-0100
3-0-0ร˜

Case 2

Room scenarios (adult-child-baby):

  • 2-1-0
  • 2-0-1

Message:

<BaseByGuestAmts>
<BaseByGuestAmt Type = "14" AmountAfterTax="95.00" Code = "2-1-0"/>
<BaseByGuestAmt Type = "14" AmountAfterTax="80.00" Code = "2-0-1"/>
</BaseByGuestAmts>

Price:

OccupancyPrice
2-1-095
2-0-180

HotelRatePlanNotif Responseโ€‹

After each request, a response should be provided from your side. If a HotelRatePlanNotif request is received, a corresponding HotelRatePlanNotif response should be sent. There are two response options, success or error.

caution

Our system has a timeout of 5000ms. If no response occurs within this timeframe, we won't attempt to resend the request. It is recommended that your system processes our requests with an average handling time of 100ms.

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:U="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<s:Header>
<wsse:Security>
<U:Timestamp>
<U:Created>2023-11-10T11:16:19.206</U:Created>
<U:Expires>2023-11-10T11:46:19.206</U:Expires>
</U:Timestamp>
</wsse:Security>
</s:Header>
<s:Body>
<HotelRatePlanNotifResponse xmlns="http://schemas.xmltravelgate.com/hubpush/provider/2012/10">
<HotelRatePlanNotifResult Version="0" TransactionIdentifier="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx">
<Success xmlns="http://www.opentravel.org/OTA/2003/05" />
</HotelRatePlanNotifResult>
</HotelRatePlanNotifResponse>
</s:Body>
</s:Envelope>

Response Data Breakdownโ€‹

ElementRelTypeDescription
HotelRatePlanNotifResult1
@Version1String0
@TransactionIdentifier1StringTransaction Identifier
HotelRatePlanNotifResult/Success0..1If SUCCESS
HotelRatePlanNotifResult/Errors0..1If ERROR
Errors/Error1
@ShortText1String
Error Codes and Description
Error Code Error Description
-1 Validation error
1 POS credentials not found
2 HotelCode or RatePlanList not found
3 Rates not found
4 Incomplete Rate values
6 Incomplete AvailStatusMessage StatusApplicationControl Values
7 Incomplete AdditionalGuestAmount values
8 SellableProduct not found
9 Room not found in SellableProduct
@Code1String
Error Codes and Description
Error Code Error Description
-1 Validation error
1 POS credentials not found
2 HotelCode or RatePlanList not found
3 Rates not found
4 Incomplete Rate values
6 Incomplete AvailStatusMessage StatusApplicationControl Values
7 Incomplete AdditionalGuestAmount values
8 SellableProduct not found
9 Room not found in SellableProduct
@Language1String
Language Codes
Code Language
en English
es Spanish
pt Portuguese
it Italian
fr French
de German
br Brazilian

Frequently Asked Questionsโ€‹

How can I calculate the final price, AmountAfterTax, taking into account the taxes?

Note that there are two types of taxes (and that taxes are optional): Inclusive taxes must be included in the final price. While taxes different from inclusive or not specified, are paid directly at the hotel, they are provided for informational purposes only.

Taxes are found in HotelRatePlanInventoryNotif, and prices in HotelRatePlanNotif. To calculate the total price, you'll need information from both sources.

ยท If this rate plan (for which you already know the price) includes inclusive taxes, you'll need to add them to the price to get the total.

ยท However, if taxes are different from inclusive or not specified, your final price will remain as you originally knew it.

When a Supplement is added to a RatePlan, what is its purpose?
Rate plans have only one meal plan associated with them. In the event that additional meal plan options are desired to add for the same rate plan, they are included as supplements to this rate plan.
What happens if more than one price type is loaded for the same day or range of days and for the same room(s)?
If the same request contains two different price types (for example, price per room and price per standard occupancy), the cheapest one is returned.