Skip to main content

Rate Push

The HotelRatePlanNotif request message pushes rate plans for the inventory that has been previously setup.

HotelRatePlanNotif Request​

In the following examples, you will see the requests that you need to send in order to Push Rate Plans.

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:ns="http://schemas.xmltravelgate.com/hubpush/provider/2012/10" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
<s:Header>
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>username</wsse:Username>
<wsse:Password>password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</s:Header>
<s:Body>
<ns:HotelRatePlanNotif>
<ns:request>
<ns1:POS>
<ns1:Source>
<ns1:RequestorID ID="Seller Code"/>
<ns1:BookingChannel>
<ns1:CompanyName Code="Buyer Code"/>
</ns1:BookingChannel>
</ns1:Source>
</ns1:POS>
<ns1:RatePlans HotelCode="2">
<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​

note

During the onboarding process, your username and password will be provided. After each connection is established, you'll receive an email with RequestorID (Seller Code) and CompanyName (Buyer Code) values.

ElementRelTypeDescription
HotelRatePlanNotif1
HotelRatePlanNotif/request1
request/RatePlans1
@HotelCode1StringHotel code
RatePlans/RatePlan1..n
@RatePlanCode1StringRate plan code
@FreeChild1BooleanIndicates if children 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 Derived 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 Derived 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 Derived 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 Derived 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 OCCUPANCY.
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
@InvCode1StringRoom code
@InvType1StringROOM

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 Pax/Guest (Standard Occupancy)​

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 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
  • 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
2-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
  • 2-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
2-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
2-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(100⁄2) + (100⁄2) + ((100⁄2) -10) + (100⁄2) = 190

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, Travelgate will process the data and provide you with a response. Upon receiving a HotelRatePlanNotif request, Travelgate will send you a corresponding HotelRatePlanNotif response. The response options include either success or an error.

<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">
<u:Timestamp u:Id="_0">
<u:Created>2023-11-22T11:03:26.904Z</u:Created>
<u:Expires>2023-11-22T11:08:26.904Z</u:Expires>
</u:Timestamp>
</o:Security>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<HotelRatePlanNotifResponse xmlns="http://schemas.xmltravelgate.com/hubpush/provider/2012/10">
<HotelRatePlanNotifResult>
<Success xmlns="http://www.opentravel.org/OTA/2003/05"/>
</HotelRatePlanNotifResult>
</HotelRatePlanNotifResponse>
</s:Body>
</s:Envelope>

Response Data Breakdown​

ElementRelTypeDescription
HotelRatePlanNotifResult1
HotelRatePlanNotifResult/Success0..1If SUCESS
HotelRatePlanNotifResult/Errors0..1If ERROR
Errors/Error1
@Code1StringError code. TravelGate defines the standardized codes listed below; when the Seller's own system returns a code, it is forwarded as-is (so you may occasionally receive codes outside this list, e.g. 361).
@Type0..1StringOTA Error Warning Type (EWT) categorizing the error. Optional: it appears only when the responding system provides it (TravelGate-generated errors omit it).
@ShortText1StringShort, standardized label of the error.
Error (text)0..1StringDetailed, human-readable description of the error.
Error structure

When the Seller has implemented the Push API, its system returns the error following the OTA standard: @Code, an optional @Type, @ShortText and a descriptive body. When the Seller has not implemented it, TravelGate standardizes the response using the error codes below (without @Type). This is why you may occasionally receive a @Code outside the standardized list (e.g. 361), forwarded from the Seller's own system.

Error codes
Error CodeShortText
-1Unexpected error
1Invalid request
10Invalid hotel id
11Invalid dates
12Invalid rate plan code
13Invalid reservation id
14Invalid derived rate adjust values
15Invalid id
16Invalid amount type
17Invalid supplement type
18Invalid number of hotel
19Invalid rate currency code
20Requestor id not found
21Provider id not found
22Rooms not found
23Rates not found
30Occupation error
31Rate error
32Avail rq error
33Data Base error
37Authorization error
38Authentication error
90Connection time out