OTA_HotelResNotifRQ / OTA_HotelResNotifRS
Every time a reservation / modification / cancellation is made, the entire reservation can be pushed from the Hotel-Spider system to the remote one. Whether reservations are pulled from the remote system or pushed to it is defined per the Hotel-Spider team. If you want to change this behaviour for your system please contact your Hotel-Spider contact.
Credit cards transmission
Please note that for pushed reservations, the credit card details are not included by default. If the partner is PCI/DSS compliant and can provide a valid AOC, and if there are more than 25 properties connected, the secure transfer of credit card details can be activated.
Example request and response
OTA_HotelResNotifRQ Request
<OTA_HotelResNotifRQ Target="Test" EchoToken="7571639933" TimeStamp="2015-11-12T18:05:39+01:00">
<POS>
<Source>
<RequestorID Type="5" ID="MASTERUSERNAME" MessagePassword="MASTERPASSWORD"></RequestorID>
</Source>
</POS>
<HotelReservations>
<HotelReservation ResStatus="Book" OriginalDeliveryMethodCode="11" RoomStayReservation="1" WalkInIndicator="0" CreateDateTime="2015-11-12T18:06:39+01:00" LastModifyDateTime="2016-12-09T18:06:40+01:00">
<POS>
<Source>
<RequestorID ID="ONLINEBOOKINGSYSTEMIDENTIFIER" Type="22" />
<BookingChannel Type="7">
<CompanyName>ONLINEBOOKINGSYSTEMNAME</CompanyName>
</BookingChannel>
</Source>
</POS>
<RoomStays>
<RoomStay IndexNumber="1" RoomStayStatus="Book">
<RoomTypes>
<RoomType RoomID="ROOMID" IsRoom="1">
<RoomDescription Name="Double Room with lake view"/>
</RoomType>
</RoomTypes>
<RoomRates>
<RoomRate EffectiveDate="2015-11-20" ExpireDate="2015-11-22" RatePlanID="FIRSTRATEPLANID">
<Rates>
<Rate EffectiveDate="2015-11-20" ExpireDate="2015-11-20">
<Base CurrencyCode="CHF" AmountBeforeTax="150.00" AmountAfterTax="162.00">
<Taxes Amount="3.89" DecimalPlaces="2" CurrencyCode="EUR">
<Tax Amount="3.89" DecimalPlaces="2" CurrencyCode="EUR" Code="17" Type="Inclusive">
<TaxDescription>
<Text>Tax (7%)</Text>
</TaxDescription>
</Tax>
</Taxes>
</Base>
<Total CurrencyCode="CHF" AmountBeforeTax="150.00" AmountAfterTax="162.00">
<Taxes Amount="3.89" DecimalPlaces="2" CurrencyCode="EUR">
<Tax Amount="3.89" DecimalPlaces="2" CurrencyCode="EUR" Code="17" Type="Inclusive">
<TaxDescription>
<Text>Tax (7%)</Text>
</TaxDescription>
</Tax>
</Taxes>
</Total>
</Rate>
<Rate EffectiveDate="2015-11-21" ExpireDate="2015-11-21">
<Base CurrencyCode="CHF" AmountBeforeTax="150.00" AmountAfterTax="162.00"/>
<Total CurrencyCode="CHF" AmountBeforeTax="150.00" AmountAfterTax="162.00"/>
</Rate>
</Rates>
<RoomRateDescription>
<Text>Best Available Rate</Text>
</RoomRateDescription>
</RoomRate>
<RoomRate EffectiveDate="2015-11-22" ExpireDate="2015-11-23" RatePlanID="OTHERRATEPLANID">
<Rates>
<Rate EffectiveDate="2015-11-22" ExpireDate="2015-11-22">
<Base CurrencyCode="CHF" AmountBeforeTax="155.00" AmountAfterTax="167.00"/>
<Total CurrencyCode="CHF" AmountBeforeTax="155.00" AmountAfterTax="167.00"/>
</Rate>
</Rates>
<RoomRateDescription>
<Text>Best Available Rate High</Text>
</RoomRateDescription>
</RoomRate>
<RoomRate EffectiveDate="2015-11-23" ExpireDate="2015-11-24" RatePlanID="FIRSTRATEPLANID">
<Rates>
<Rate EffectiveDate="2015-11-23" ExpireDate="2015-11-23">
<Base CurrencyCode="CHF" AmountBeforeTax="150.00" AmountAfterTax="162.00"/>
<Total CurrencyCode="CHF" AmountBeforeTax="150.00" AmountAfterTax="162.00"/>
</Rate>
</Rates>
<RoomRateDescription>
<Text>Best Available Rate</Text>
</RoomRateDescription>
</RoomRate>
</RoomRates>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="1" />
</GuestCounts>
<TimeSpan Start="2015-11-20" End="2015-11-24" />
<CancelPenalties>
<CancelPenalty>
<Deadline AbsoluteDeadline="2015-11-18T00:00:00+01:00"/>
<AmountPercent FeesInclusive="1" Amount="162.00" CurrencyCode="CHF"/>
<PenaltyDescription Name="free cancellation 48 hours"/>
</CancelPenalty>
</CancelPenalties>
<Total CurrencyCode="CHF" AmountBeforeTax="605.00" AmountAfterTax="653.00">
<Taxes Amount="3.89" DecimalPlaces="2" CurrencyCode="EUR">
<Tax Amount="3.89" DecimalPlaces="2" CurrencyCode="EUR" Code="17" Type="Inclusive">
<TaxDescription>
<Text>Tax (7%)</Text>
</TaxDescription>
</Tax>
</Taxes>
</Total>
<BasicPropertyInfo HotelCode="HOTELSPIDERHOTELCODE" HotelName="HOTELNAME" CurrencyCode="CHF"/>
<ResGuestRPHs>1</ResGuestRPHs>
</RoomStay>
<RoomStay IndexNumber="2" RoomStayStatus="Book">
<RoomTypes>
<RoomType RoomID="SECONDROOMID" IsRoom="1">
<RoomDescription Name="Double Room"/>
</RoomType>
</RoomTypes>
<RoomRates>
<RoomRate EffectiveDate="2015-11-20" ExpireDate="2015-11-24" RatePlanID="FIRSTRATEPLANID">
<Rates>
<Rate EffectiveDate="2015-11-20" ExpireDate="2015-11-20">
<Base CurrencyCode="CHF" AmountBeforeTax="132.00" AmountAfterTax="143.00"/>
<Total CurrencyCode="CHF" AmountBeforeTax="132.00" AmountAfterTax="143.00"/>
</Rate>
<Rate EffectiveDate="2015-11-21" ExpireDate="2015-11-21">
<Base CurrencyCode="CHF" AmountBeforeTax="132.00" AmountAfterTax="143.00"/>
<Total CurrencyCode="CHF" AmountBeforeTax="132.00" AmountAfterTax="143.00"/>
</Rate>
<Rate EffectiveDate="2015-11-22" ExpireDate="2015-11-22">
<Base CurrencyCode="CHF" AmountBeforeTax="132.00" AmountAfterTax="143.00"/>
<Total CurrencyCode="CHF" AmountBeforeTax="132.00" AmountAfterTax="143.00"/>
</Rate>
<Rate EffectiveDate="2015-11-23" ExpireDate="2015-11-23">
<Base CurrencyCode="CHF" AmountBeforeTax="132.00" AmountAfterTax="143.00"/>
<Total CurrencyCode="CHF" AmountBeforeTax="132.00" AmountAfterTax="143.00"/>
</Rate>
</Rates>
<RoomRateDescription>
<Text>Best Available Rate</Text>
</RoomRateDescription>
</RoomRate>
</RoomRates>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="1" />
</GuestCounts>
<TimeSpan Start="2015-11-20" End="2015-11-24" />
<CancelPenalties>
<CancelPenalty>
<Deadline AbsoluteDeadline="2015-11-18T00:00:00+01:00"/>
<AmountPercent FeesInclusive="1" Amount="143.00" CurrencyCode="CHF"/>
<PenaltyDescription Name="free cancellation 48 hours"/>
</CancelPenalty>
</CancelPenalties>
<DepositPayments>
<GuaranteePayment GuaranteeType="PrePay" Type="RequiredPayment">
<AcceptedPayments>
<AcceptedPayment>
<PaymentCard CardCode="VI" ExpireDate="0917">
<CardHolderName>Dr WhoWho II</CardHolderName>
<CardNumber Mask="xxxxxxxxxxxx4971">
<PlainText>4970497049704971</PlainText>
</CardNumber>
</PaymentCard>
</AcceptedPayment>
</AcceptedPayments>
<AmountPercent ApplyAs="FirstAndLastNightDeposit" Percent="10" Amount="5.9000" CurrencyCode="EUR"/>
<Description AdditionalDetailCode="6">
<Text>This is a test DepositPayment on the RoomStay level</Text>
</Description>
</GuaranteePayment>
</DepositPayments>
<Discount Type="26" AdditionalFeesExcludedIndicator="1" AmountIncludingMarkup="1" TaxInclusive="1" DiscountCode="VACANCES2016" DecimalPlaces="2" CurrencyCode="EUR" Percent="5" AmountAfterTax="5.50">
<DiscountReason>
<Text>This guest is very special and deserves a discount</Text>
</DiscountReason>
</Discount>
<Total CurrencyCode="CHF" AmountBeforeTax="528.00" AmountAfterTax="572.00"/>
<BasicPropertyInfo HotelCode="HOTELSPIDERHOTELCODE" HotelName="HOTELNAME" CurrencyCode="CHF"/>
<ResGuestRPHs>2</ResGuestRPHs>
</RoomStay>
</RoomStays>
<ResGuests>
<ResGuest ResGuestRPH="1">
<Profiles>
<ProfileInfo>
<Profile ProfileType="1">
<Customer MaritalStatus="Unknown" Gender="Unknown">
<PersonName>
<GivenName>James</GivenName>
<Surname>Bond</Surname>
</PersonName>
<Email>jamesbond@secretmail.ch</Email>
<Address>
<StreetNmbr>2</StreetNmbr>
<AddressLine>Bahnhofstrasse</AddressLine>
<CityName>Zurich</CityName>
<PostalCode>1000</PostalCode>
<County>Zurich</County>
<StateProv>Zurich</StateProv>
<CountryName Code="CH">Switzerland</CountryName>
</Address>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
</ResGuest>
<ResGuest ResGuestRPH="2">
<Profiles>
<ProfileInfo>
<Profile ProfileType="1">
<Customer MaritalStatus="Unknown" Gender="Unknown">
<PersonName>
<GivenName>Money</GivenName>
<Surname>Penny</Surname>
</PersonName>
<Email>moneypenny@secretmail.ch</Email>
<Address>
<StreetNmbr>2</StreetNmbr>
<AddressLine>Bahnhofstrasse</AddressLine>
<CityName>Zurich</CityName>
<PostalCode>1000</PostalCode>
<County>Zurich</County>
<StateProv>Zurich</StateProv>
<CountryName Code="CH">Switzerland</CountryName>
</Address>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
</ResGuest>
</ResGuests>
<ResGlobalInfo>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="2"/>
</GuestCounts>
<TimeSpan Start="2015-11-20" End="2015-11-24" Duration="P4D"/>
<Comments>
<Comment>
<Text>They are on a secret mission</Text>
</Comment>
</Comments>
<Guarantee GuaranteeType="CC/DC/Voucher">
<GuaranteesAccepted>
<GuaranteeAccepted>
<PaymentCard CardCode="MC" ExpireDate="0717">
<CardHolderName>Gareth Mallory</CardHolderName>
<CardNumber Mask="xxxxxxxxxxxx1111">
<PlainText>4111111111111111</PlainText>
</CardNumber>
<SeriesCode>
<PlainText>123</PlainText>
</SeriesCode>
</PaymentCard>
</GuaranteeAccepted>
</GuaranteesAccepted>
</Guarantee>
<DepositPayments>
<GuaranteePayment GuaranteeType="PrePay" Type="RequiredPayment">
<AcceptedPayments>
<AcceptedPayment>
<PaymentCard CardCode="VI" ExpireDate="0917">
<CardHolderName>Dr WhoWho</CardHolderName>
<CardNumber Mask="xxxxxxxxxxxx4970">
<PlainText>4970497049704970</PlainText>
</CardNumber>
<SeriesCode>
<PlainText>123</PlainText>
</SeriesCode>
</PaymentCard>
</AcceptedPayment>
</AcceptedPayments>
<AmountPercent ApplyAs="FirstNightPayment" Percent="5" Amount="5.0000" CurrencyCode="EUR"/>
<Description AdditionalDetailCode="6">
<Text>Payment via Booking.com (Payout type: Booking virtual credit card)</Text>
</Description>
</GuaranteePayment>
</DepositPayments>
<Total CurrencyCode="CHF" AmountBeforeTax="1133.00" AmountAfterTax="1225.00">
<Taxes Amount="3.89" DecimalPlaces="2" CurrencyCode="EUR">
<Tax Amount="3.89" DecimalPlaces="2" CurrencyCode="EUR" Code="17" Type="Inclusive">
<TaxDescription>
<Text>Tax (7%)</Text>
</TaxDescription>
</Tax>
</Taxes>
</Total>
<HotelReservationIDs>
<HotelReservationID ResID_Source="ONLINEBOOKINGSYSTEMID" ResID_SourceContext="ONLINEBOOKINGSYSTEMNAME" ResID_Type="14" ResID_Value="ABCD-668591"/>
</HotelReservationIDs>
<Profiles>
<ProfileInfo>
<Profile ProfileType="1">
<Customer MaritalStatus="Unknown" Gender="Unknown">
<PersonName>
<GivenName>Gareth</GivenName>
<Surname>Mallory</Surname>
</PersonName>
<Email>garethmallory@secretmail.ch</Email>
<Address>
<StreetNmbr>2</StreetNmbr>
<AddressLine>Bahnhofplatz</AddressLine>
<CityName>Winterthur</CityName>
<PostalCode>4104</PostalCode>
<County>Winterthur</County>
<StateProv>Winterthur</StateProv>
<CountryName Code="CH">Switzerland</CountryName>
</Address>
</Customer>
</Profile>
</ProfileInfo>
<ProfileInfo>
<Profile ProfileType="4">
<CompanyInfo>
<CompanyName>Her Majesty's secret services</CompanyName>
<Email>quartermaster@secretmail.ch</Email>
<AddressInfo>
<StreetNmbr>2</StreetNmbr>
<AddressLine>Bahnhofplatz</AddressLine>
<CityName>Winterthur</CityName>
<PostalCode>4104</PostalCode>
<County>Winterthur</County>
<StateProv>Winterthur</StateProv>
<CountryName Code="CH">Switzerland</CountryName>
</AddressInfo>
</CompanyInfo>
</Profile>
</ProfileInfo>
</Profiles>
<BasicPropertyInfo HotelCode="HOTELSPIDERHOTELCODE" HotelName="Hôtel du Port" CurrencyCode="CHF"/>
</ResGlobalInfo>
</HotelReservation>
</HotelReservations>
</OTA_HotelResNotifRQ>OTA_HotelResNotifRS request
<OTA_HotelResNotifRS Version="1.000" Target="Production" TimeStamp="2011-08-01T16:14:00+01:00" EchoToken="7571639933">
<Success/>
<HotelReservations>
<HotelReservation>
<ResGlobalInfo>
<HotelReservationIDs>
<HotelReservationID ResID_Source="ONLINEBOOKINGSYSTEMID" ResID_SourceContext="ONLINEBOOKINGSYSTEMNAME" ResID_Type="14" ResID_Value="ABCD-668591"/>
<HotelReservationID ResID_SourceContext="Hotel-Spider" ResID_Type="40" ResID_Value="HOTELSPIDERRSERVATIONID"/>
<HotelReservationID ResID_SourceContext="PMSNAME" ResID_Type="10" ResID_Value="PMSRESERVATIONID"/>
</HotelReservationIDs>
</ResGlobalInfo>
</HotelReservation>
</HotelReservations>
</OTA_HotelResNotifRS>
Request structure
OTA_HotelResNotifRQ
Parent: None (Root element)
Mandatory: yes
Attributes:
Name | Mandatory | Description |
|---|---|---|
TimeStamp | Yes | The format respects the ISO 8601 2015-11-16T22:23:48+00:00 |
Target | Yes | When sending updates to the staging environment "Test" is used. When sending updates to the production environment "Production" is used. |
Version | Yes | The default value is "1.000" |
EchoToken | Yes | The value will be returned in the OTA_HotelResNotifRS response |
Child elements: POS, HotelReservations
POS
Parent: OTA_HotelResNotifRQ
Mandatory: yes
Attributes: None
Child elements: Source
Source
Parent: POS
Mandatory: yes
Attributes: None
Child elements: RequestorID
RequestorID
Parent: Source
Mandatory: yes
Attributes:
Name | Mandatory | Description |
|---|---|---|
ID | Yes | Your username |
MessagePassword | Yes | Your password |
Child elements: None
HotelReservations
Parent: OTA_HotelResNotifRQ
Mandatory: yes
Attributes: None
Child elements: HotelReservation
Parent: HotelReservations
Mandatory: yes
Attributes:
Name | Mandatory | Description |
|---|---|---|
ResStatus | Yes | Possible values are:
|
OriginalDeliveryMethodCode | No | The default value is "11" . |
RoomStayReservation | No |
|
WalkInIndicator | No | The value will be returned in the OTA_HotelResNotifRS response |
CreateDateTime | Yes | The format respects the ISO 8601 format 2015-11-16T22:23:48+00:00 |
LastModifyDateTime | Yes | The format respects the ISO 8601 format 2015-11-16T22:23:48+00:00 |
Child elements: POS, RoomStays, ResGuests, Services, ResGlobalInfo
POS
Parent: HotelReservation
Mandatory: Yes
Attributes: None
Child elements: HotelReservation
Source
Parent: POS
Mandatory: Yes
Attributes: None
Child elements: POS
RequestorID
Parent: Source
Mandatory: Yes
Attributes:
Name | Mandatory | Description |
|---|---|---|
ID | Yes | Unique identifier of the source channel. You can retrieve the full list automatically, see Specific call : retrieve channels list |
Type | Yes | Default value is "22" |
Child elements: CompanyName
BookingChannel
Parent: Source
Mandatory: yes
Attributes: None
Child elements: CompanyName
CompanyName
Parent: BookingChannel
Mandatory: Yes
Attributes: None
Value :
Mandatory | Description |
|---|---|
Yes | Name of the source channel. You can retrieve the full list automatically, see Specific call : retrieve channels list |
RoomStays
Parent: HotelReservation
Mandatory: yes
Attributes: None
Child elements: RoomStay
RoomStay
Parent: RoomStays
Mandatory: yes
Attributes:
Name | Mandatory | Description |
|---|---|---|
IndexNumber | Yes | Unique identifier of this specific room stay. |
RoomStayStatus | Yes | Possible values are:
|
Child elements: RoomTypes, RoomRates, GuestCounts, TimeSpan, CancelPenalties, Total, BasicPropertyInfo, ResGuestRPHs, ServiceRPHs
RoomTypes
Parent: RoomStay
Mandatory: yes
Attributes: None
Child elements: RoomType
RoomType
Parent: RoomTypes
Mandatory: yes
Attributes:
Name | Mandatory | Description |
|---|---|---|
RoomID | Yes | The ID of the room |
IsRoom | No | The default value is "1" |
Child elements: RoomDescription
RoomDescription
Parent: RoomType
Mandatory: yes
Attributes:
Name | Mandatory | Description |
|---|---|---|
Name | Yes | The name of the room |
Child elements: None
RoomRates
Parent: RoomStay
Mandatory: yes
Attributes: None
Child elements: RoomRate
RoomRate
Parent: RoomRate
Mandatory: yes
Attributes:
Name | Mandatory | Description |
|---|---|---|
EffectiveDate | Yes | The day on which this rate plan was applied for a reservation. The format respects the ISO 8601 2015-11-16 |
ExpireDate | Yes | The day on which this rate plan was applied for a reservation. The format respects the ISO 8601 2015-11-16 |
ExpireDateExclusiveInd | No | In the case of a date span, should the ExpireDate be included (ExpireDateExclusiveInd="0") or excluded (ExpireDateExclusiveInd="1") |
RatePlanID | Yes | The ID of the rate plan |
Child elements: Rates, RoomRateDescription
Extracting the day rates
In order to avoid any confusion about the exact day rate and for which days they have been applied, the Hotel-Spider can work with the following three scenarios:
The values of the EffectiveDate and the ExpireDate attributes are equal. The day rate will apply only to the date specified
The values of the EffectiveDate and the ExpireDate attributes are different and the ExpireDateExclusiveInd attribute is not set. The day rate will apply to all the days covered from the EffectiveDate until and including the ExpireDate.
The values of the EffectiveDate and the ExpireDate attributes are different and the ExpireDateExclusiveInd attribute is set. The day rate will apply to all the days covered from the EffectiveDate until the day before the ExpireDate. Thus the ExpireDate is excluded from the day rates.
Rates
Parent: RoomRate
Mandatory: yes
Attributes: None
Child elements: Rate
Rate
Parent: Rates
Mandatory: yes
Attributes:
Name | Mandatory | Description |
|---|---|---|
EffectiveDate | Yes | The day on which this rate was applied for a reservation. The format respects the ISO 8601 2015-11-16 |
ExpireDate | Yes | The day on which this rate was applied for a reservation. The format respects the ISO 8601 2015-11-16 |
Child elements: Base, Total
Note on RoomRate and Rate elements
In order to prevent any interpretation issue, exactly one Rate element is present for each night of the stay while RoomRate elements are used to differentiate rate plans.
In the example message above, both room stays are for 4 nights but
the first one has a different rate plan for the third night, resulting in the presence of 3 different RoomRate elements
the second one is made with the same rate plan for all nights, thus only one RoomRate element is needed
Base
Parent: Rate
Mandatory: yes
Attributes:
Name | Mandatory | Description |
|---|---|---|
CurrencyCode | Yes | The day on which this rate plan was applied for a reservation. The format respects the ISO 8601 2015-11-16 |
AmountBeforeTax / AmountAfterTax | Yes | The day rate for this specific product (room type + rate plan) without any additional services |
Child elements: Taxes
Total
Parent: Rate
Mandatory: yes
Attributes:
Name | Mandatory | Description |
|---|---|---|
CurrencyCode | Yes | The day on which this rate plan was applied for a reservation. The format respects the ISO 8601 2015-11-16 |
AmountBeforeTax / AmountAfterTax | Yes | The day rate for this specific product (room type + rate plan) with additional services |
Child elements: Taxes
Taxes
Parent: Total | Base
Mandatory: No
Attributes:
Name | Mandatory | Description |
|---|---|---|
Amount | Yes | The day on which this rate plan was applied for a reservation. The format respects the ISO 8601 2015-11-16 |
DecimalPlaces | Yes | The day rate for this specific product (room type + rate plan) with additional services |
CurrencyCode |
|
|
Child elements: Tax
Tax
Parent: Taxes
Mandatory: No
Attributes:
Name | Mandatory | Description |
|---|---|---|
Amount | Yes | The day on which this rate plan was applied for a reservation. The format respects the ISO 8601 2015-11-16 |
DecimalPlaces | Yes | The day rate for this specific product (room type + rate plan) with additional services |
CurrencyCode |
|
|
Code |
|
|
Type |
|
|
Child elements: TaxDescription
TaxDescription
Parent: Tax
Mandatory: No
Attributes: None
Child elements: Text
RoomRateDescription
Parent: RoomRate
Mandatory: yes
Attributes: None
Child elements: Text
Text
Parent: RoomRateDescription
Mandatory: yes
Attributes: None
Child elements: None
GuestCounts
Parent: RoomStay
Mandatory: yes
Attributes: None
Child elements: GuestCount
GuestCount
Parent: GuestCounts
Mandatory: yes
Attributes: