OTA_HotelResNotifRQ / OTA_HotelResNotifRS

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

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: POSHotelReservations

 

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

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

 

HotelReservation 

Parent: HotelReservations

Mandatory: yes

Attributes:

Name

Mandatory

Description

Name

Mandatory

Description

ResStatus

Yes

Possible values are:

  • Book

  • Modify

  • Cancel

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

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

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

Name

Mandatory

Description

IndexNumber

Yes

Unique identifier of this specific room stay.

RoomStayStatus

Yes

Possible values are:

  • Book 

  • Cancel

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

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

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

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

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

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

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

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

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: