You can update rates for a single hotel per one request message. However, you can update multiple rates within one message. We recommend to update one hotel and one room per request.
Basic Structure
The basic structure of the message is as per below:
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" TimeStamp="2005-08-01T09:30:47+08:00" Version="1.0" EchoToken="abc123" Target="Production" PrimaryLangID="en" NotifType="Overlay|Delta">
<RateAmountMessages HotelCode="HOTEL">
<RateAmountMessage LocatorID="177974458">
<StatusApplicationControl Start="2010-01-01" End="2010-01-01" InvTypeCode="A1K" RatePlanCode="BAR" RateChannelCode="1" LengthOfStay="1" QuoteID="LSEtckE0elhGaGJrbVFoTDQ1SXJNK0VzQ05iTm5tQnZvTXpXQmt3emloT1U2WnNqUTN6RnVMbVZ0Ykp3bkFWNDQ2RE14d2I3a3Fob1ZFTHVmcWVjOE53cVRLcnBxR2krbVNuZ3ZKejgyOW10QUE9"/>
<!-- Content omitted -->
</RateAmountMessage>
<RateAmountMessage LocatorID="177974459">
<StatusApplicationControl Start="2010-01-02" End="2010-01-02" InvTypeCode="A1K" RatePlanCode="BAR" RateChannelCode="1" LengthOfStay="1" QuoteID="LSEtckE0elhGaGJrbVFoTDQ1SXJNK0VzQ05iTm5tQnZvTXpXQmt3emloT1U2WnNqUTN6RnVMbVZ0Ykp3bkFWNDQ2RE14d2I3a3Fob1ZFTHVmcWVjOE53cVRLcnBxR2krbVNuZ3ZKejgyOW10QUE9"/>
<!-- Content omitted -->
</RateAmountMessage>
<RateAmountMessage LocatorID="177974460">
<StatusApplicationControl Start="2010-01-04" End="2010-01-04" InvTypeCode="A1K" RatePlanCode="BAR"RateChannelCode="1" LengthOfStay="1" QuoteID="LSEtckE0elhGaGJrbVFoTDQ1SXJNK0VzQ05iTm5tQnZvTXpXQmt3emloT1U2WnNqUTN6RnVMbVZ0Ykp3bkFWNDQ2RE14d2I3a3Fob1ZFTHVmcWVjOE53cVRLcnBxR2krbVNuZ3ZKejgyOW10QUE9"/>
<!-- Content omitted -->
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
The OTA_HotelRateAmountNotifRQ message contains:
- One RateAmountMessages element which define the hotel to update (@HotelCode attribute).
- Multiple RateAmountMessages/RateAmountMessage elements which define the transaction id (@LocatorID) used to communicate back to the sender.
- Each RateAmountMessage element will contain a single StatusApplicationControl element. This element is used to specify the room type, rate plan code, rate channel (optional) and date range for which the update applies.
- The dates affected by the update are controlled by the mandatory @Start and @End attributes.
- LengthOfStay attribute changes the update type to be a Full Pattern Length of Stay update. If the update is for stay dates, then no need to set this attribute.
- The QuoteID is optional field to specify additional data. For example, use it to specify the api key value.
Types of Updates
In the root node, the NotifType determines whether this is an update of changed rate amounts or a full replacement of rate amounts for specified products. The NotifType can be:
- Overlay - replace existing rates
- Delta - keep existing rates and update new (This is the default value, if the NotifType attribute is not specified.) We recommend to use this NotifType for delta update the rates. For rate with tax, rate with meal plan, rate with fee, rate with additional guest, please use Overlay update.
How to set rates
Room availability and rates will be identified in Rates/Rate element. The Rates element will appear once in each StatusApplicationControl element.
Rate Type | When to use |
|---|---|
| AmountBeforeTax | If all hotels in a supplier use specific rate type, we’ll set up rate type at supplier level |
| AmountAfterTax | |
| AmountIncludingMarkup | |
| AmountPlain | If hotels can have different rate types, this will be set up in our YCS system, and we expect you to send AmountPlain |
Rates Setting
Rate can be updated using the BaseByGuestAmts/BaseByGuestAmt element. The rate value is specified by on of these three elements: @AmountAfterTax (for net inclusive rate type) or @AmountBeforeTax (for net exclusive rate type) or @AmountIncludingMarkup (for sell inclusive rate type). The value of @AmountAfterTax or @AmountBeforeTax or @AmountIncludingMarkup will be a positive decimal value.
Note:
- Net Exclusive rate type is not supported.
- Only one of these attributes should be present - either AmountAfterTax or AmountBeforeTax or AmountIncludingMarkup, but not more than one.
Net Exclusive
<Rates>
<Rate NumberOfUnits="5">
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountBeforeTax="1000" DecimalPlaces="0">
</BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2" CurrencyCode="THB" AmountBeforeTax="2000" DecimalPlaces="0>
</BaseByGuestAmt>
</BaseByGuestAmts>
</Rate>
</Rates>
Net Inclusive
<Rates>
<Rate NumberOfUnits="5">
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountAfterTax="1000" DecimalPlaces="0">
</BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2" CurrencyCode="THB" AmountAfterTax="2000" DecimalPlaces="0">
</BaseByGuestAmt>
</BaseByGuestAmts>
</Rate>
</Rates>
Sell Inclusive
<Rates>
<Rate NumberOfUnits="5">
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountIncludingMarkup="1200" DecimalPlaces="0">
</BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2" CurrencyCode="THB" AmountIncludingMarkup="2000" DecimalPlaces="0">
</BaseByGuestAmt>
</BaseByGuestAmts>
</Rate>
</Rates>
Rate Channel Setting
Rate channels can be updated using the StatusApplicationControl/@RateChannelCode attribute. It can contain multiple channels in the single HotelRateAmountNotif request. For example, the same room, rate category can sell with different prices for different channels (retail, private sell, etc.) as the example of the settings below.
Rate Channel Setting
<OTA_HotelRateAmountNotifRQ
xmlns="http://www.opentravel.org/OTA/2003/05" TimeStamp="2005-08-01T09:30:47+08:00" Version="1.0" EchoToken="abc123" Target="Production" PrimaryLangID="en" NotifType="Overlay">
<RateAmountMessages HotelCode="HOTEL">
<RateAmountMessage LocatorID="177974458">
<StatusApplicationControl Start="2010-01-01" End="2010-01-01" InvTypeCode="A1K" RatePlanCode="BAR" RateChannelCode="1" LengthOfStay="1" />
<Rates>
<Rate NumberOfUnits="5">
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountBeforeTax="1000" DecimalPlaces="0"></BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2" CurrencyCode="THB" AmountBeforeTax="2000" DecimalPlaces="0"></BaseByGuestAmt>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
<RateAmountMessage LocatorID="177974459">
<StatusApplicationControl Start="2010-01-02" End="2010-01-02" InvTypeCode="A1K" RatePlanCode="BAR" RateChannelCode="2" LengthOfStay="1" />
<Rates>
<Rate NumberOfUnits="5">
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountBeforeTax="700" DecimalPlaces="0"></BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2" CurrencyCode="THB" AmountBeforeTax="800" DecimalPlaces="0"></BaseByGuestAmt>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
<RateAmountMessage LocatorID="177974460">
<StatusApplicationControl Start="2010-01-04" End="2010-01-04" InvTypeCode="A1K" RatePlanCode="BAR" RateChannelCode="8" LengthOfStay="1" />
<Rates>
<Rate NumberOfUnits="5">
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountBeforeTax="400" DecimalPlaces="0"></BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2" CurrencyCode="THB" AmountBeforeTax="500" DecimalPlaces="0"></BaseByGuestAmt>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
Room Availability Setting
Room availability can be updated using the Rate element. Number of room available will be define in @NumberOfUnits attribute. Please see the example of the setting below.
<Rates>
<Rates>
<Rate NumberOfUnits="5">
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountBeforeTax="1000" DecimalPlaces="0">
</BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2" CurrencyCode="THB" AmountBeforeTax="2000" DecimalPlaces="0>
</BaseByGuestAmt>
</BaseByGuestAmts>
</Rate>
</Rates>
Fees Setting
Fees (additional charge) can be updated using the Fees element. You can update multiple fees per one request by using multiple Fees/Fee elements. The @ChargeUnit and @Code details are in Code List section. Please see the example of the settings below.
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountBeforeTax="1000" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PB" Code="1" Type="Exclusive" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Percent="10" DecimalPlaces="0" />
</Taxes>
</BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2" CurrencyCode="THB" AmountBeforeTax="2000" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PB" Type="Inclusive" Code="2" DecimalPlaces="1" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Amount="153" />
</Taxes>
</BaseByGuestAmt>
</BaseByGuestAmts>
<!-- Fee Amount that is applied to the rate. Fees are used for non tax amounts like service charges. Used for non-tax fees and charges (e.g. service charges) -->
<Fees>
<Fee Amount="1200" ChargeUnit="PB" Code="10" DecimalPlaces="0" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Amount="10" TaxableIndicator="false" Type="Inclusive" />
<Fee Amount="1000" ChargeUnit="PB" Code="6" DecimalPlaces="0" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Amount="10" TaxableIndicator="false" Type="Exclusive" />
</Fees>
</Rate>
</Rates>
Meal Plan Setting
Meal Plan can be updated using the Rate/MealsIncluded element. The meal plan code will be define in @MealPlanCodes attribute. The available meal plan code are as per below.
MealPlanCode | Description |
|---|---|
| 1 | All inclusive (Breakfast, Lunch, Dinner and Beverages) |
| 3 | Bed & Breakfast |
| 10 | Full board (Breakfast, Lunch and Dinner) |
| 12 | Half board (Breakfast and Dinner) |
| 14 | Room Only (Or no meal plan) |
Example request
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountIncludingMarkup="1200" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PB" Code="1" DecimalPlaces="0" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Percent="10" Type="Exclusive"/>
</Taxes>
</BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2&quoquot; CurrencyCode="THB" AmountIncludingMarkup="2000" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PB" Code="2" DecimalPlaces="0" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Amount="153" Type="Inclusive" DecimalPlaces="1"/>
</Taxes>
</BaseByGuestAmt>
</BaseByGuestAmts>
<MealsIncluded MealPlanCodes="3" />
</Rate>
</Rates>
Remove Rates
You can remove rate and room availability by using the empty Rates element. Please see the example of the setting below. Make sure that the NotifType in the root node is set to Overlay.
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" TimeStamp="2005-08-01T09:30:47+08:00" Version="1.0" EchoToken="abc123" Target="Production" PrimaryLangID="en" NotifType="Remove">
<RateAmountMessages HotelCode="HOTEL">
<RateAmountMessage LocatorID="177974459">
<StatusApplicationControl InvTypeCode="A1K" RatePlanCode="BAR" RateChannelCode="1" Start="2010-01-01" End="2010-01-01" QuoteID="abcd"/>
<Rates></Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
Overlay Example Requests
Set Rates: AmountBeforeTax (Net Exclusive) Example
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" TimeStamp="2005-08-01T09:30:47+08:00" Version="1.0" EchoToken="abc123" NotifType="Overlay">
<RateAmountMessages HotelCode="HOTEL">
<RateAmountMessage LocatorID="177974459">
<StatusApplicationControl InvTypeCode="A1K" RatePlanCode="BAR" RateChannelCode="1" Start="2010-01-01" End="2010-01-01"/>
<Rates>
<Rate NumberOfUnits="5">
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountBeforeTax="1000" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PB" Code="1" Type="2" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Percent="10" DecimalPlaces="0"/>
</Taxes>
</BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2" CurrencyCode="THB" AmountBeforeTax="2000&" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PN" Type="Inclusive" Code="2" DecimalPlaces="0" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Amount="153" DecimalPlaces="1"/>
</Taxes>
</BaseByGuestAmt>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
Set Rates: AmountAfterTax (Net Inclusive) Example
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" TimeStamp="2005-08-01T09:30:47+08:00" Version="1.0" EchoToken="abc123" NotifType="Overlay">
<RateAmountMessages HotelCode="HOTEL">
<RateAmountMessage LocatorID="177974459">
<StatusApplicationControl InvTypeCode="A1K" RatePlanCode="BAR" RateChannelCode="1" Start="2010-01-01" End="2010-01-01"/>
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountAfterTax="1000" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PB" Code="1" DecimalPlaces="0" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Percent="10" Type="Exclusive"/>
</Taxes>
</BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2" CurrencyCode="THB" AmountAfterTax="2000" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PAPB" Code="2" DecimalPlaces="0" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Amount="153" Type="Inclusive" DecimalPlaces="1"/>
</Taxes>
</BaseByGuestAmt>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
Set Rates: AmountIncludingMarkup (Sell Inclusive) Example
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" TimeStamp="2005-08-01T09:30:47+08:00" Version="1.0" EchoToken="abc123" NotifType="Overlay">
<RateAmountMessages HotelCode="HOTEL">
<RateAmountMessage LocatorID="177974459">
<StatusApplicationControl InvTypeCode="A1K" RatePlanCode="BAR" RateChannelCode="1" Start="2010-01-01" End="2010-01-01"/>
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountIncludingMarkup="1200" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PB" Code="1" DecimalPlaces="0" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Percent="10" Type="Exclusive"/>
</Taxes>
</BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2" CurrencyCode="THB" AmountIncludingMarkup="2000" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PB" Code="2" DecimalPlaces="0" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Amount="153" Type="Inclusive" DecimalPlaces="1"/>
</Taxes>
</BaseByGuestAmt>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
Delta Example Requests
Set Fees (Additional Charges) Example
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" TimeStamp="2005-08-01T09:30:47+08:00" Version="1.0" EchoToken="abc123" NotifType="Overlay">
<RateAmountMessages HotelCode="HOTEL">
<RateAmountMessage LocatorID="177974459">
<StatusApplicationControl InvTypeCode="A1K" RatePlanCode="BAR" RateChannelCode="1" Start="2010-01-01" End="2010-01-01" />
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountBeforeTax="1000" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PB" Code="1" Type="Exclusive" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Percent="10" DecimalPlaces="0" />
</Taxes>
</BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2" CurrencyCode="THB" AmountBeforeTax="2000" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PB" Type="Inclusive" Code="2" DecimalPlaces="1" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Amount="153" />
</Taxes>
</BaseByGuestAmt>
</BaseByGuestAmts>
<!-- Fee Amount that is applied to the rate. Fees are used for non tax amounts like service charges. Used for non-tax fees and charges (e.g. service charges) -->
<Fees>
<Fee Amount="1200" ChargeUnit="PB" Code="10" DecimalPlaces="0" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Percent="10" TaxableIndicator="false" Type="Inclusive" />
</Fees>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
Set Meal Plan Example
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" TimeStamp="2005-08-01T09:30:47+08:00" Version="1.0" EchoToken="abc123" NotifType="Overlay">
<RateAmountMessages HotelCode="HOTEL">
<RateAmountMessage LocatorID="177974459">
<StatusApplicationControl InvTypeCode="A1K" RatePlanCode="BAR" RateChannelCode="1" Start="2010-01-01" End="2010-01-01"/>
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt NumberOfGuests="1" CurrencyCode="THB" AmountIncludingMarkup="1200" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PB" Code="1" DecimalPlaces="0" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Percent="10" Type="Exclusive"/>
</Taxes>
</BaseByGuestAmt>
<BaseByGuestAmt NumberOfGuests="2" CurrencyCode="THB" AmountIncludingMarkup="2000" DecimalPlaces="0">
<Taxes>
<Tax ChargeUnit="PB" Code="2" DecimalPlaces="0" EffectiveDate="2010-01-01" ExpireDate="2010-01-01" Amount="153" Type="Inclusive" DecimalPlaces="1"/>
</Taxes>
</BaseByGuestAmt>
</BaseByGuestAmts>
<MealsIncluded MealPlanCodes="3" />
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
How to set cancellation policies
The cancel policy may be set or updated by using the CancelPolicies element. Within each CancelPolicies element is one or more CancelPenalty elements.
Cancel Policy
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="1459354682247" Target="Test" Version="1.006" PrimaryLangID="en" TimeStamp="2016-08-10T11:57:01.000+02:00">
<RateAmountMessages HotelCode="YIPPY">
<RateAmountMessage LocatorID="1">
<StatusApplicationControl Start="2016-08-01" End="2016-08-01" InvTypeCode="YR001" RatePlanCode="AAA"/>
<Rates>
<Rate>
<CancelPolicies>
<CancelPenalty>
<Deadline AbsoluteDeadline="00:00:00" OffsetDropTime="BeforeArrival" OffsetTimeUnit="Day" OffsetUnitMultiplier="999" />
<PenaltyDescription>
<Text>No cancelation charge applies until 10 days, 18:30 (Local time) before arrival. Between 10 days and 5 days, hotel will charge 50.00 pct of the stay. Thereafter, hotel will charge the first night.</Text>
</PenaltyDescription>
</CancelPenalty>
<CancelPenalty NonRefundable="false">
<Deadline AbsoluteDeadline="18:30:00" OffsetDropTime="BeforeArrival" OffsetTimeUnit="Day" OffsetUnitMultiplier="10" />
</CancelPenalty>
<CancelPenalty NonRefundable="false">
<Deadline AbsoluteDeadline="00:00:00" OffsetDropTime="BeforeArrival" OffsetTimeUnit="Day" OffsetUnitMultiplier="5" />
<AmountPercent Percent="50.00" />
</CancelPenalty>
<CancelPenalty NonRefundable="false">
<Deadline AbsoluteDeadline="23:59:00" OffsetDropTime="BeforeArrival" OffsetTimeUnit="Day" OffsetUnitMultiplier="0" />
<AmountPercent NmbrOfNights="1" />
</CancelPenalty>
</CancelPolicies>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
Cancel Policy Elements and Attributes
CancelPenalty
Element | Number | Description |
|---|---|---|
| DeadLine | 1 | deadline to apply cancellation penalty |
| AmountPercent | 0..1 | penalty as amount in currency, percent of booking price, or number of nights |
| PenaltyDescription | 0..1 | cancellation penalty description |
CancelPenalty - DeadLine
Attribute | Type | Restriction | Description |
|---|---|---|---|
| AbsoluteDeadLine | time | HH:mm:ss | Latest time to apply this penalty |
| OffsetDropTime | enum | BeforeArrival | Only support BeforeArrival |
| OffsetTimeUnit | enum | Day | Only support Day |
| OffsetUnitMultiplier | int | >= 0 | Number of unit in this case is the number of days before checkin date |
CancelPenalty - AmountPercent:
Attribute | Type | Required | Restriction | Description |
|---|---|---|---|---|
| NmbrOfNights | int | No | >= 0 | Penalty as number of nights |
| Percent | double | No | >=0.0 | Penalty as percent of booking price |
| Amount | double | No | >=0.0 | Penalty as amount in currency |
| DecimalPlaces | int | No | >= 0 | Number of decimal places for Amount and Percent |
Example Cancel Policy Requests
Non-Refundable
For any CancelPenalty with NonRefundable = True, we can omit AmountPercent value. It will be treated as 100 percent penalty.
With description:
<CancelPenalty>
<Deadline AbsoluteDeadline="00:00:00" OffsetDropTime="BeforeArrival" OffsetTimeUnit="Day" OffsetUnitMultiplier="999" />
<PenaltyDescription>
<Text>The amount due is not refundable even if the booking is cancelled or modified.</Text>
</PenaltyDescription>
</CancelPenalty>
<CancelPenalty NonRefundable="True">
<Deadline AbsoluteDeadline="18:00:00" OffsetDropTime="BeforeArrival" OffsetTimeUnit="Day" OffsetUnitMultiplier="0" />
</CancelPenalty>
Without description
<CancelPenalty NonRefundable="True">
<Deadline AbsoluteDeadline="18:00:00" OffsetDropTime="BeforeArrival" OffsetTimeUnit="Day" OffsetUnitMultiplier="0" />
</CancelPenalty>
Refundable
<CancelPenalty>
<Deadline AbsoluteDeadline="00:00:00" OffsetDropTime="BeforeArrival" OffsetTimeUnit="Day" OffsetUnitMultiplier="999" />
</CancelPenalty>
<CancelPenalty NonRefundable="false">
<Deadline AbsoluteDeadline="18:30:00" OffsetDropTime="BeforeArrival" OffsetTimeUnit="Day" OffsetUnitMultiplier="10" />
<PenaltyDescription>
<Text>No cancelation charge applies until 10 days, 18:30 (Local time) before arrival. Between 10 days and 5 days (20:30), hotel will charge 50.00 pct of the stay. Thereafter, hotel will charge the first night.</Text>
</PenaltyDescription>
</CancelPenalty>
<CancelPenalty NonRefundable="false">
<Deadline AbsoluteDeadline="20:30:00" OffsetDropTime="BeforeArrival" OffsetTimeUnit="Day" OffsetUnitMultiplier="5" />
<AmountPercent Percent="50.00" />
<PenaltyDescription>
<Text>No cancelation charge applies until 10 days, 18:30 (Local time) before arrival. Between 10 days and 5 days (20:30), hotel will charge 50.00 pct of the stay. Thereafter, hotel will charge the first night</Text>
</PenaltyDescription>
</CancelPenalty>
<CancelPenalty NonRefundable="false">
<Deadline AbsoluteDeadline="23:59:00" OffsetDropTime="BeforeArrival" OffsetTimeUnit="Day" OffsetUnitMultiplier="0" />
<AmountPercent NmbrOfNights="1" />
<PenaltyDescription>
<Text>No cancelation charge applies until 10 days, 18:30 (Local time) before arrival. Between 10 days and 5 days (20:30), hotel will charge 50.00 pct of the stay. Thereafter, hotel will charge the first night.</Text>
</PenaltyDescription>
</CancelPenalty>
Agoda doesn't support time based cancellation. So, any AbsoluteDeadline that is less than 23:55:00, OTA will add up 1 day. So, the result for this example is 11D50P_6D1N which can be read as "If user cancel 11 Day before check-in date, user will be charged 50%. If user cancel 6 days before check-in date, user will be charged 1 night."
Elements and Attribut
Element | Number | Type | Description |
|---|---|---|---|
| OTA_HotelRateAmountNotifRQ | 1 | Root node | |
| @TimeStamp | 1 | DateTime | Time of the transaction |
| @Version | 1 | Decimal | Current version is 1.0 |
| @EchoToken | 1 | String | Globally unique identifier for the request, this should be reflected as an EchoToken in the response |
| @Target | 1 | String | Target which can be either Production or Sandbox |
| @PrimaryLangID | 1 | String | Language ID, now only support English (en) |
| @NotifType | 1 | String | This indicates whether this is an update of changed rate amounts, instructions to remove rate amounts or a full replacement of rate amounts for specified products. If not specified - Delta is assumed Possible values:
|
| OTA_HotelRateAmountNotifRQ / RateAmountMessages | 1 | Contains rates for a given hotel | |
| @HotelCode | 1 | String | Hotel code of the property whose rate is being updated |
| RateAmountMessages / RateAmountMessage | 1..n | Contains details of a rate update for a time span | |
| RateAmountMessage / StatusApplicationControl | 1 | Contains date and room identification information | |
| @InvTypeCode | 1 | String | Identifies the room |
| @RatePlanCode | 1 | String | Identifies the rate plan |
| @RateChannelCode | 0..1 | Number | Identifies the channel to which this rate is allowed. Default is Retail (Code: 1), please refer to code list for other codes |
| @Start | 1 | Date | The start date for which the rate is being set. This date is inclusive. |
| @End | 1 | Date | The end date for which the rate is being set. This date is inclusive. |
| @LengthOfStay | 0..1 | Number | Optional attribute to mark the request of type Full Pattern. If not present, the date range is considered as stay dates. |
| @QuoteID | 0..1 | String | Optional attribute that identifies a specific quote, or value. Max length = 350 characters. |
| RateAmountMessage / Rates | 1 | ||
| Rates / Rate | 1 | ||
| @NumberOfUnits | 0..1 | Integer | Number of rooms available |
| Rate / BaseByGuestAmts | 1 | Base charge for a given number of guests. | |
| BaseByGuestAmts / BaseByGuestAmt | 1..n | Contains information about the rates. | |
| @AmountBeforeTax | 1 | Decimal | Rate Amount before tax. Positive decimal value. (Net Exclusive) |
| @AmountAfterTax | 1 | Decimal | Rate Amount after tax. Positive decimal value. (Net Inclusive) |
| @AmountIncludingMarkup | 1 | Decimal | Rate Amount Including markup. Positive value. (Sell Inclusive) |
| @NumberOfGuests | 0..1 | Integer | Number of guests in room (occupancy) |
| @CurrencyCode | 0..1 | String | The currency of the rate |
| BaseByGuestAmt / Taxes | 1 | Group of taxes applicable for the occupancy | |
| Taxes / Tax | 1..n | List of tax applicable | |
| @Amount | 0..1 | Number | Amount to for the tax type (currency is inherited from BaseByGuestAmount) |
| @DecimalPlaces | 0..1 | Number | Number of decimal places in the Amount or Percent (default = 0) |
| @Percent | 0..1 | Number | Percentage of the tax to be applied. Either Amount of Percent need to be present. If both, then always Amount is preferred. |
| @Code | 1 | Number | Defines the tax type for example CityTax etc. Refer to Code List. |
| @Type | 1 | String | Defines the Pay now or Pay at hotel type for the tax. For example Inclusive, Exclusive. Refer to Code List |
| @ChargeUnit | 1 | String (Code) | Defines the charge unit for example Per Person Per Night, Per Person Per Stay etc. Refer to Code List |
| @EffectiveDate | 1 | Date | Inclusive start date when this tax starts to be applicable |
| @ExpireDate | 1 | Date | Inclusive end date when this tax can be applicable. |
| Rate / CancelPolicies | 1 | Cancel Policies for this rate | |
| CancelPolicies / CancelPenalty | 1..n | Contains information about the cancel policies | |
| CancelPenalty / Deadline | 1 | Each deadline represents the time at which a particular policy goes into effect | |
| @AbsoluteDeadline | 1 | Time | The time at which the policy goes into effect |
@OffsetDropTime | 1 | String | The point from which the cancel policy is measured (before arrival, for example) |
@OffsetTimeUnit | 1 | String | Unit of time ("day", for example) by which the cancel policy offset is measured |
| @OffsetUnitMultiplier | 1 | Integer | The number of time units before the drop time that the cancel policy is in effect |
| CancelPenalty / PenaltyDescription / Text | 1 | String | Text description of the cancel penalty |
| Rate / Fees | 0..1 | ||
| Fees / Fee | 1..n | Fees information on the rate | |
| @Amount | 0..1 | Number | Amount to for the fees type (currency is inherited from BaseByGuestAmount) |
| @DecimalPlaces | 0..1 | Number | Number of decimal places in the Amount or Percent (default = 0) |
| @Percent | 0..1 | Number | [Not support] |
| @Code | 1 | Number | Defines the fee type for example New Year Party Charge etc. Refer to Code List. |
| @Type | 1 | Number | Defines the Pay now or Pay at hotel type for the fees. Refer to Code List |
| @ChargeUnit | 1 | String (Code) | Defines the charge unit for example Per Person Per Night, Per Person Per Stay etc. Refer to Code List |
| @EffectiveDate | 1 | Date | Inclusive start date when this fees starts to be applicable |
| @ExpireDate | 1 | Date | Inclusive end date when this fees can be applicable. |
| Rate / AdditionalGuestAmounts | 0..1 | ||
| AdditionalGuestAmounts / AdditionalGuestAmount | 1..n | List of additional guest amount per age qualifying code. There can be only one block per one age qualifying code. | |
| @AgeQualifyingCode | 1 | Number | Defines the age qualifying code on which this additional amount is applicable for example Adult, Child, or Infant. Please refer to Code List for all possible values. |
| @Amount | 1 | Number | Amount to be charged for the each additional guest for in that particular age code. Please note that the amount type i.e. net / sell, inclusive / exclusive is inherited from the base by guest amount |
| @DecimalPlaces | 0..1 | Number | Number of decimal places in the Amount or Percent (default = 0) |
| @MaxAdditionalGuests | 1 | Number | Maximum number of additional guests allowed to be added for the ${AgeQualifyingCode} |
| AdditionalGuestAmount / Taxes | 0..1 | Refer to Taxes element above. | |
| Rate / MealsIncluded | 0..1 | ||
| MealPlanCodes | 1 | Integer | Defines the meal plan for the rate. 3 - Breakfast. Refer to Code List. If the value is not set, it means Room only. |
