Document Version: 2020-July-17 # Introduction This interface is designed to be used by a PMS, CRS, or a booking engine (or any other source for a hotel’s rate, availability, and restriction information) to incorporate channel management features by connecting to ChannelRUSH’s distribution services. This interface allows for you to... - Retrieve settings for a hotel that include room types, rate plans, and a list of channels setup for the hotel. - Send rates, availability, and restrictions for a hotel for distribution to a set of channels a hotel is directly setup with. - Retrieve reservations created by those channels by either a ‘pickup’ method where you poll our system every 5 minutes checking for new reservations, or we can push the reservations to you in real-time if you have a URL for us to connect to. This interface works as an access point to an already existing, fully functional and completely setup ChannelRUSH account. This does not mean the end user will ever need to actually login to the ChannelRUSH web application ([https://www.channelrush.net](https://www.channelrush.net/)) – although they can if you want to distribute that login information to them so they can take advantage of existing ChannelRUSH features and manage their channels in the case of a communication outage. This interface processes the information in real-time, there is no batch processing only done at certain intervals. This is said in the context that certain data is processed sequentially, which means if a hotel issues 10 updates for a channel (multiple requests for a single hotel and a single channel), updates 2-9 cannot being processing until update 1 is completed. If the user issued 1 update for 10 channels for a single hotel, they could all begin processing at the same time because each channel operates independently of one another. The interface primarily uses standard OpenTravel Alliance (OTA) messages -[http://www.opentravel.org](http://www.opentravel.org/) This interface was developed using the 2007B message set. If you require or are already using a different version, please notify us as we can accommodate many different versions. # SOAP Envelope All messages sent to our servers will use a SOAP Envelope ([http://schemas.xmlsoap.org/soap/envelope/](http://schemas.xmlsoap.org/soap/envelope/)), using a HTNG v1.1 header, and the messageS stored in the envelope body. The envelope body node can contain multiple/different messages for the same hotel. ``` xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <soap:Header> <HTNGHeader xmlns="http://htng.org/1.1/Header/"> <From> <systemId>[PROVIDERID]</systemId> <Credential> <userName>[PROVIDERUSERNAME]</userName> <password>[PROVIDERPASSWORD]</password> </Credential> </From> <To> <systemId>[HOTELID]</systemId> </To> </HTNGHeader> </soap:Header> <soap:Body> [MESSAGE 1 HERE] [MESSAGE 2 HERE] [MESSAGE 3 HERE] </soap:Body> </soap:Envelope> ``` ## SOAP Envelope Envelope - Authentication Header The SOAP Header uses the HTNG Version 1.1 format. The following fields need to be set for the system to successfully authenticate you and process your messages. **HTNGHeader.From.Credential.SystemId** This is the system ID that identifies your company. This can be provided by you and stored on our side, our provided by us to be stored on your side. **HTNGHeader.From.Credential.Username** This is the username provided by us for your group login. There are not separate usernames and passwords for each hotel, only one login which allows you to send messages for which you company is mapped for. **HTNGHeader.From.Credential.Password** This is the password provided by us for your group login. **HTNGHeader.To.SystemId** This is the ID of the hotel you are sending the messages for. Each envelope can contain multiple/different messages for only one hotel. This can be provided by you and stored on our side, our provided by us to be stored on your side. # Settings Receive URL: https://[SERVERNAME]/channels/v2/settings?providerId=[PROVIDERID] The settings call brings back basic information regarding the hotel, such as mapped room types, rate plans, and channels. Example request. ```xml <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <soap:Header> <HTNGHeader xmlns="http://htng.org/1.1/Header/"> <From> <systemId>[PROVIDERID]</systemId> <Credential> <userName>[USERNAME]</userName> <password>[PASSWORD]</password> </Credential> </From> <To> <systemId>[HOTELID]</systemId> </To> </HTNGHeader> </soap:Header> <soap:Body/> </soap:Envelope> ``` Successful response. This is a custom xml list of the room types, rate plans, and channels setup for the hotel. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <MessageAcknowledgementType xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" "xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> </MessageAcknowledgementType> <Hotel ID="[HOTELID]" Name="Test Hotel"> <RoomTypes> <RoomType ID="7718" Name="Single"/> <RoomType ID="7719" Name="Double"/> <RoomType ID="7720" Name="Triple"/> </RoomTypes> <RatePlans> <RatePlan ID="190" Name="RACK"/> <RatePlan ID="191" Name="NRF"/> </RatePlans> <Channels> <Channel ID="411" Name="ChannelRUSH - Test OTA"/> </Channels> </Hotel> </soap:Body> </soap:Envelope> ``` Unsuccessful response. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <MessageAcknowledgementType xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Errors> <Error Code="11">Your company is not setup to deliver informationto the hotel you specified at htngHeader.To[0].systemId=[HOTELID]</Error> </Errors> </MessageAcknowledgementType> </soap:Body> </soap:Envelope> ``` **Hotel** A custom xml message that contains information about the setup of the hotel. **Hotel.ID** The mapped ID of the hotel. String. **Hotel.Name** The name of the hotel. String. **Hotel.RoomTypes** A collection (0 to n) of RoomType objects. **Hotel.RoomTypes.RoomType.ID** The mapped ID of the room type. String. **Hotel.RoomType.RoomType.Name** The name of the room type. String. **Hotel.RatePlans** A collection (0 to n) of RatePlan objects. **Hotel.RatePlans.RatePlan.ID** The mapped ID of the rate plan. String. **Hotel.RatePlans.RatePlan.Name** The name of the rate plan. String. **Hotel.Channels** A collection (0 to n) of Channel objects. **Hotel.Channels.Channel.ID** The ID of the channel. Integer. **Hotel.Channels.Channel.Name** The name of the channel. String. # Inventory URL: https://[SERVERNAME]/channels/v2/ariupdate?providerId=[PROVIDERID] This method allows for updating rate, availability, and restrictions using 3 separate messages. **OTA_HotelRateAmountNotifRQ** - Sell Rate **OTA_HotelInvCountNotifRQ** - Allocation **OTA_HotelBookingRuleNotifRQ** - Cut Off Days - Minimum Length of Stay - Maximum Length of Stay - Closed To Arrival - Closed To Departure - Stop Sell ## Rates - OTA_HotelRateAmountNotifRQ Updating rates. This is the message request you will send to us to update rates for room types or rate plans (depending on which level you want to support - room type or rate plan level - we support updating on both). ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <soap:Header> <HTNGHeader xmlns="http://htng.org/1.1/Header/"> <From> <systemId>[PROVIDERID]</systemId> <Credential> <userName>[PROVIDERUSERNAME]</userName> <password>[PROVIDERPASSWORD]</password> </Credential> </From> <To> <systemId>[HOTELID]</systemId> </To> </HTNGHeader> </soap:Header> <soap:Body> <OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opentravel.org/2007B/OTA_HotelRateAmountNotifRQ.xsd"> <RateAmountMessages> <RateAmountMessage> <StatusApplicationControl InvTypeCode="3429" RatePlanID="BAR"/> <Rates> <Rate Start="2014-06-29" End="2014-06-29" Mon="true" Tue="true" Wed="true" Thur="true" Fri="true" Sat="true" Sun="true"> <BaseByGuestAmts> <BaseByGuestAmt AmountAfterTax="44.00"/> </BaseByGuestAmts> </Rate> <Rate Start="2014-06-29" End="2014-06-29" Mon="true" Tue="true" Wed="true" Thur="true" Fri="true" Sat="true" Sun="true"> <BaseByGuestAmts> <BaseByGuestAmt AmountAfterTax="44.00"/> </BaseByGuestAmts> </Rate> </Rates> </RateAmountMessage> <RateAmountMessage> <StatusApplicationControl InvTypeCode="3428" RatePlanID="BAR"/> <Rates> <Rate Start="2014-06-29" End="2014-06-29" Mon="true" Tue="true" Wed="true" Thur="true" Fri="true" Sat="true" Sun="true"> <BaseByGuestAmts> <BaseByGuestAmt AmountAfterTax="41.00"/> </BaseByGuestAmts> </Rate> </Rates> </RateAmountMessage> <RateAmountMessage> <StatusApplicationControl InvTypeCode="4070" RatePlanID="BAR"/> <Rates> <Rate Start="2014-06-29" End="2014-06-29" Mon="true" Tue="true" Wed="true" Thur="true" Fri="true" Sat="true" Sun="true"> <BaseByGuestAmts> <BaseByGuestAmt AmountAfterTax="49.00"/> </BaseByGuestAmts> </Rate> </Rates> </RateAmountMessage> </RateAmountMessages> </OTA_HotelRateAmountNotifRQ> </soap:Body> </soap:Envelope> ``` **RateAmountMessages** A collection (1 to n) of RateAmountMessage messages. **RateAmountMessages.RateAmountMessage.StatusApplicationControl.InvTypeCode** This is the room type code. This can be provided by you and stored on our side, our provided by us to be stored on your side. String. **RateAmountMessages.RateAmountMessage.StatusApplicationControl.RatePlanID** This is the rate plan code. This can be provided by you and stored on our side, our provided by us to be stored on your side. String. Optional. **RateAmountMessages.RateAmountMessage.Rates** A collection (1 to n) of Rate messages. **RateAmountMessages.RateAmountMessage.Rates.Rate.Start** The start date of the date range to be updated. Date. **RateAmountMessages.RateAmountMessage.Rates.Rate.End** The end date of the date range to be updated. Date. Inclusive. **RateAmountMessages.RateAmountMessage.Rates.Rate.Mon** **RateAmountMessages.RateAmountMessage.Rates.Rate.Tue** **RateAmountMessages.RateAmountMessage.Rates.Rate.Wed** **RateAmountMessages.RateAmountMessage.Rates.Rate.Thur** **RateAmountMessages.RateAmountMessage.Rates.Rate.Fri** **RateAmountMessages.RateAmountMessage.Rates.Rate.Sat** **RateAmountMessages.RateAmountMessage.Rates.Rate.Sun** These mark which days of the week in the date range to be updated. Boolean. **RateAmountMessages.RateAmountMessage.Rates.Rate.BaseByGuestAmts** A collection (1 to n) of BaseByGuestAmt messages. **RateAmountMessages.RateAmountMessage.Rates.Rate.BaseByGuestAmts.BaseByGuestAmt.AmountAfterTax** The sell rate including tax. Decimal. Optional/Conditional - AmountAfterTax or AmountBeforeTax must be listed. **RateAmountMessages.RateAmountMessage.Rates.Rate.BaseByGuestAmts.BaseByGuestAmt.AmountBeforeTax** The sell rate not including tax. Decimal. Optional/Conditional - AmountAfterTax or AmountBeforeTax must be listed. ### Response Message - OTA_HotelRateAmountNotifRS This is the successful response message to the OTA_HotelRateAmountNotifRQ request. The first message always returned is MessageAcknowledgementType, pertains to your successful login. If you have any general errors or login errors, they would be in this MessageAcknowledgementType message. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <MessageAcknowledgementType xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> </MessageAcknowledgementType> <OTA_HotelRateAmountNotifRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> </OTA_HotelRateAmountNotifRS> </soap:Body> </soap:Envelope> ``` This is an response message with warnings and errors to the OTA_HotelRateAmountNotifRQ request. Again, notice the first message always returned is MessageAcknowledgementType, which lists <Success /> as your login was successful. The warnings or errors per message are contained in each message's Warnings and/or Errors collections. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <MessageAcknowledgementType xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> </MessageAcknowledgementType> <OTA_HotelRateAmountNotifRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Warnings> <Warning Code="##">Warning Message 1</Warning> <Warning Code="##">Warning Message 2</Warning> <Warning Code="##">Warning Message 3</Warning> </Warnings> <Errors> <Error Code="##">Error Message 1</Error> <Error Code="##">Error Message 2</Error> <Error Code="##">Error Message 3</Error> </Errors> </OTA_HotelRateAmountNotifRS> </soap:Body> </soap:Envelope> ``` ## Allocation - OTA_HotelInvCountNotifRQ This is the message request you will send to update allocation for room types (only updating allocation at the room type level is supported, not rate plan level, you can mark a rate plan open or closed using stop sell true/false found in the OTA_HotelBookingRuleNotifRQ message). While unnecessary, this example shows two OTA_HotelInvCountNotifRQ messages in the soap envelope body node and both would be processed. It is unnecessary as the second inventory update could just be added to Inventories collection of the first message. Normally you would see different messages in the soap envelope body node. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <soap:Header> <HTNGHeader xmlns="http://htng.org/1.1/Header/"> <From> <systemId>[PROVIDERID]</systemId> <Credential> <userName>[PROVIDERUSERNAME]</userName> <password>[PROVIDERPASSWORD]</password> </Credential> </From> <To> <systemId>[HOTELID]</systemId> </To> </HTNGHeader> </soap:Header> <soap:Body> <OTA_HotelInvCountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opentravel.org/2007B/OTA_HotelInvCountNotifRQ.xsd"> <Inventories> <Inventory> <StatusApplicationControl Start="2013-06-30" End="2013-06-30" InvTypeCode="3407" Mon="true" Tue="true" Wed="true" Thur="true" Fri="true" Sat="true" Sun="true"/> <InvCounts> <InvCount ActionType="Allocation" Count="12"/> </InvCounts> </Inventory> <Inventory> <StatusApplicationControl Start="2013-06-30" End="2013-06-30" InvTypeCode="3408" Mon="true" Tue="true" Wed="true" Thur="true" Fri="true" Sat="true" Sun="true"/> <InvCounts> <InvCount ActionType="Allocation" Count="21"/> </InvCounts> </Inventory> <Inventory> <StatusApplicationControl Start="2013-07-01" End="2013-07-01" InvTypeCode="3408" Mon="true" Tue="true" Wed="true" Thur="true" Fri="true" Sat="true" Sun="true"/> <InvCounts> <InvCount ActionType="Allocation" Count="32"/> </InvCounts> </Inventory> </Inventories> </OTA_HotelInvCountNotifRQ> <OTA_HotelInvCountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opentravel.org/2007B/OTA_HotelInvCountNotifRQ.xsd"> <Inventories> <Inventory> <StatusApplicationControl Start="2013-08-30" End="2013-08-30" InvTypeCode="3407" Mon="true" Tue="true" Wed="true" Thur="true" Fri="true" Sat="true" Sun="true"/> <InvCounts> <InvCount ActionType="Allocation" Count="12"/> </InvCounts> </Inventory> </Inventories> </OTA_HotelInvCountNotifRQ> </soap:Body> </soap:Envelope> ``` **Inventories** A collection (1 to n) of Inventory messages. **Inventories.Inventory.StatusApplicationControl.InvTypeCode** This is the room type code. This can be provided by you and stored on our side, our provided by us to be stored on your side. String. **Inventories.Inventory.StatusApplicationControl.Start** The start date of the date range to be updated. Date. **Inventories.Inventory.StatusApplicationControl.End** The end date of the date range to be updated. Date. Inclusive. **Inventories.Inventory.StatusApplicationControl.Mon** **Inventories.Inventory.StatusApplicationControl.Tue** **Inventories.Inventory.StatusApplicationControl.Wed** **Inventories.Inventory.StatusApplicationControl.Thur** **Inventories.Inventory.StatusApplicationControl.Fri** **Inventories.Inventory.StatusApplicationControl.Sat** **Inventories.Inventory.StatusApplicationControl.Sun** These mark which days of the week in the date range to be updated. Boolean. **Inventories.Inventory.InvCounts** A collection (1 to n) of InvCount messages. **Inventories.Inventory.InvCounts.InvCount.ActionType** Only "Allocation" is supported at the moment, which represents the number of rooms available to be sold (not an offset, not plus/minus). String. **Inventories.Inventory.InvCounts.InvCount.Count** The number of rooms available to be sold for the specified room type. Integer. ### Response Message - OTA_HotelInvCountNotifRS This is the successful response message to the OTA_HotelInvCountNotifRQ request. The first message always returned is MessageAcknowledgementType, pertains to your successful login. If you have any general errors or login errors, they would be in this MessageAcknowledgementType message. Since we sent two messages in the request, there are two separate OTA_HotelInvCountNotifRS messages in the reply. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <MessageAcknowledgementType xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> </MessageAcknowledgementType> <OTA_HotelInvCountNotifRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> </OTA_HotelInvCountNotifRS> <OTA_HotelInvCountNotifRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> </OTA_HotelInvCountNotifRS> </soap:Body> </soap:Envelope> ``` This is an response message with a success message for the first request, and only only errors to the second OTA_HotelInvCountNotifRQ request. Again, notice the first message always returned is MessageAcknowledgementType, which lists <Success /> as your login was successful. The warnings or errors per message are contained in each message's Warnings and/or Errors collections. Since we sent two messages in the request, there are two separate OTA_HotelInvCountNotifRS messages in the reply. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <MessageAcknowledgementType xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> </MessageAcknowledgementType> <OTA_HotelInvCountNotifRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> </OTA_HotelInvCountNotifRS> <OTA_HotelInvCountNotifRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Errors> <Error Code="##">Error Message 1</Error> <Error Code="##">Error Message 2</Error> <Error Code="##">Error Message 3</Error> </Errors> </OTA_HotelInvCountNotifRS> </soap:Body> </soap:Envelope> ``` ## Restrictions - OTA_HotelBookingRuleNotifRQ This is the message request you will send to update cut off days, min length of stay, max length of stay, closed to arrival, closed to departure, and/or stop sell. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <soap:Header> <HTNGHeader xmlns="http://htng.org/1.1/Header/"> <From> <systemId>[PROVIDERID]</systemId> <Credential> <userName>[PROVIDERUSERNAME]</userName> <password>[PROVIDERPASSWORD]</password> </Credential> </From> <To> <systemId>[HOTELID]</systemId> </To> </HTNGHeader> </soap:Header> <soap:Body> <OTA_HotelBookingRuleNotifRQ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opentravel.org/OTA/2003/05"> <RuleMessages> <RuleMessage> <StatusApplicationControl Start="2014-09-24" End="2014-09-26" Mon="true" Tue="true" Wed="true" Thur="true" Fri="true" Sat="true" Sun="true" RatePlanID="BAR" InvTypeCode="7170"/> <BookingRules> <BookingRule AbsoluteCutoff="2"> <LengthsOfStay> <LengthOfStay Time="1" TimeUnit="Day" MinMaxMessageType="MinLOS"/> <LengthOfStay Time="10" TimeUnit="Day" MinMaxMessageType="MaxLOS"/> </LengthsOfStay> <DOW_Restrictions> <AvailableDaysOfWeek Mon="true" Tue="true" Weds="true" Thur="true" Fri="true" Sat="true" Sun="true"/> <ArrivalDaysOfWeek Mon="true" Tue="true" Weds="true" Thur="true" Fri="true" Sat="true" Sun="true"/> <DepartureDaysOfWeek Mon="true" Tue="true" Weds="true" Thur="true" Fri="true" Sat="true" Sun="true"/> </DOW_Restrictions> </BookingRule> </BookingRules> </RuleMessage> </RuleMessages> </OTA_HotelBookingRuleNotifRQ> </soap:Body> </soap:Envelope> ``` **RuleMessages** A collection (1 to n) of RuleMessage messages. **RuleMessages.StatusApplicationControl.InvTypeCode** This is the room type code. This can be provided by you and stored on our side, our provided by us to be stored on your side. String. **RuleMessages.StatusApplicationControl.RatePlanID** This is the rate plan code. This can be provided by you and stored on our side, our provided by us to be stored on your side. String. Optional. **RuleMessages.StatusApplicationControl.Start** The start date of the date range to be updated. Date. **RuleMessages.StatusApplicationControl.End** The end date of the date range to be updated. Date. Inclusive. **RuleMessages.RuleMessage.StatusApplicationControl.Mon** **RuleMessages.RuleMessage.StatusApplicationControl.Tue** **RuleMessages.RuleMessage.StatusApplicationControl.Wed** **RuleMessages.RuleMessage.StatusApplicationControl.Thur** **RuleMessages.RuleMessage.StatusApplicationControl.Fri** **RuleMessages.RuleMessage.StatusApplicationControl.Sat** **RuleMessages.RuleMessage.StatusApplicationControl.Sun** These mark which days of the week in the date range to be updated. Boolean. **RuleMessages.RuleMessage.BookingRules** A collection (1 to n) of BookingRule messages. **RuleMessages.RuleMessage.BookingRules.BookingRule.AbsoluteCutoff** The number of days prior to the arrival date the room is no longer available for sale. Integer. Optional. **RuleMessages.RuleMessage.BookingRules.BookingRule.LengthsOfStay** A collection (0 to n) of LengthOfStay messages. Optional. **RuleMessages.RuleMessage.BookingRules.BookingRule.LengthsOfStay.ArrivalDateBased** If true, the MinMaxMessageType is arrival date based, vs false for 'through' based - i.e. True for Min Nights (Arrival), vs False for Min Nights Through. True for Max Nights (Arrival) vs False for Max Nights Through. Optional. Boolean. Default value is True if not specified. **RuleMessages.RuleMessage.BookingRules.BookingRule.LengthsOfStay.LengthOfStay.TimeUnit** The only time unit currently supported is "Day". **RuleMessages.RuleMessage.BookingRules.BookingRule.LengthsOfStay.LengthOfStay.Time** The number of days for the minimum or maximum length of stay. Integer. **RuleMessages.RuleMessage.BookingRules.BookingRule.LengthsOfStay.LengthOfStay.MinMaxMessageType** "MinLOS" = Minimum Length Of Stay, or "MaxLOS" = Maximum Length Of Stay **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions** A collection (0 to 3) of either one AvailableDaysOfWeek, ArrivalDaysOfWeek, or DepartureDaysOfWeek messages. Optional. **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.AvailableDaysOfWeek.Mon** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.AvailableDaysOfWeek.Tue** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.AvailableDaysOfWeek.Wed** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.AvailableDaysOfWeek.Thur** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.AvailableDaysOfWeek.Fri** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.AvailableDaysOfWeek.Sat** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.AvailableDaysOfWeek.Sun** Controls stop sell. If "true" the day of the week is open, or available for sale. If "false" the day of the week is closed, or not available for sale. **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.ArrivalDaysOfWeek.Mon** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.ArrivalDaysOfWeek.Tue** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.ArrivalDaysOfWeek.Wed** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.ArrivalDaysOfWeek.Thur** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.ArrivalDaysOfWeek.Fri** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.ArrivalDaysOfWeek.Sat** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.ArrivalDaysOfWeek.Sun** Controls closed to arrival. If "true" the day of the week is available for the customer to arrive on to begin their stay. If "false" the day of the week is not available for arrival. **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.DepartureDaysOfWeek.Mon** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.DepartureDaysOfWeek.Tue** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.DepartureDaysOfWeek.Wed** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.DepartureDaysOfWeek.Thur** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.DepartureDaysOfWeek.Fri** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.DepartureDaysOfWeek.Sat** **RuleMessages.RuleMessage.BookingRules.BookingRule.DOW_Restrictions.DepartureDaysOfWeek.Sun** Controls closed to departure. If "true" the day of the week is available for the customer to depart on to end their stay. If "false" the day of the week is not available for departure, or for a trip to end on. ### Response Message - OTA_HotelBookingRuleNotifRS This is the successful response message to the OTA_HotelBookingRuleNotifRQ request. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <MessageAcknowledgementType xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> </MessageAcknowledgementType> <OTA_HotelBookingRuleNotifRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> </OTA_HotelBookingRuleNotifRS> </soap:Body> </soap:Envelope> ``` This is a response that shows successful, but has warning messages with it. A message that has a <Success /> node means some information was processed and is to be considered successful message. The warnings are just that - notifications to you that possibly a certain room type you are sending to is not setup for a certain channel (although all other channels were processed, hence the <Success /> message.) ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <MessageAcknowledgementType xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> </MessageAcknowledgementType> <OTA_HotelBookingRuleNotifRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> <Warnings> <Warning Code="19">statusApplicationControlType.RatePlanID=BARRO for channelId=92 is not setupin ChannelRUSH to deliver data to.</Warning> </Warnings> </OTA_HotelBookingRuleNotifRS> </soap:Body> </soap:Envelope> ``` ## Updating Specific Channels Only Each channel that is setup for the hotel has a standard numeric ID. For example, Expedia.com setup for Hotel A would have ID 123, Expedia.com setup for Hotel B would be the same channel ID of 123. On each message, you can set the UniqueID node to a specific Channel ID, which means the message will only update that specific channel. If the UniqueID node is not set, all channels will be updated. Example: Notice the <UniqueID ID="123" /> right under the OTA_HotelInvCountNotifRQ. This can be set for for all messages - OTA_HotelInvCountNotifRQ, OTA_HotelBookingRuleNotifRQ, OTA_HotelRateAmountNotifRQ. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <soap:Header> <HTNGHeader xmlns="http://htng.org/1.1/Header/"> <From> <systemId>[PROVIDERID]</systemId> <Credential> <userName>[PROVIDERUSERNAME]</userName> <password>[PROVIDERPASSWORD]</password> </Credential> </From> <To> <systemId>[HOTELID]</systemId> </To> </HTNGHeader> </soap:Header> <soap:Body> <OTA_HotelInvCountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opentravel.org/2007B/OTA_HotelInvCountNotifRQ.xsd"> <UniqueID ID="123"/> <Inventories> <Inventory> <StatusApplicationControl Start="2013-06-30" End="2013-06-30" InvTypeCode="3407" Mon="true" Tue="true" Wed="true" Thur="true" Fri="true" Sat="true" Sun="true"/> <InvCounts> <InvCount ActionType="Allocation" Count="12"/> </InvCounts> </Inventory> <Inventory> <StatusApplicationControl Start="2013-06-30" End="2013-06-30" InvTypeCode="3408" Mon="true" Tue="true" Wed="true" Thur="true" Fri="true" Sat="true" Sun="true"/> <InvCounts> <InvCount ActionType="Allocation" Count="21"/> </InvCounts> </Inventory> <Inventory> <StatusApplicationControl Start="2013-07-01" End="2013-07-01" InvTypeCode="3408" Mon="true" Tue="true" Wed="true" Thur="true" Fri="true" Sat="true" Sun="true"/> <InvCounts> <InvCount ActionType="Allocation" Count="32"/> </InvCounts> </Inventory> </Inventories> </OTA_HotelInvCountNotifRQ> <OTA_HotelInvCountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opentravel.org/2007B/OTA_HotelInvCountNotifRQ.xsd"> <Inventories> <Inventory> <StatusApplicationControl Start="2013-08-30" End="2013-08-30" InvTypeCode="3407" Mon="true" Tue="true" Wed="true" Thur="true" Fri="true" Sat="true" Sun="true"/> <InvCounts> <InvCount ActionType="Allocation" Count="12"/> </InvCounts> </Inventory> </Inventories> </OTA_HotelInvCountNotifRQ> </soap:Body> </soap:Envelope> ``` # Reservations There are two ways to receive reservations - Reservation Pickup & Confirm or Direct Reservation Delivery. **Reservation Pickup & Confirm.** You can poll our system every few minutes to check for pending reservations. If there are reservations, you would receive the information and then "confirm" the reservations in a separate confirmation message. Once the reservations are confirmed, the next time you poll or check for reservations those reservations would not appear. URL: https://[SERVERNAME]/channels/v2/reservationreceive?providerId=[PROVIDERID] **Direct Reservation Delivery** You can provide us a URL hosted on your system where we can post the reservations as they arrive. This method is preferred as there is no continuous polling and reservations are transmitted as soon as they are received. Regardless of the two options, the reservation information and response is in the same message/xml format. ## New Reservations - OTA_HotelResNotifRQ New reservations will have \<HotelReservation ResStatus="0">. This is an example OTA_HotelResNotifRQ message that you would either 'pickup' or have sent directly to your system's URL. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <OTA_HotelResNotifRQ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <HotelReservations> <HotelReservation ResStatus="0"> <RoomStays> <RoomStay IndexNumber="0"> <RoomTypes> <RoomType RoomTypeCode="RT1"> <RoomDescription Name="Room Type 1"/> <AdditionalDetails> <AdditionalDetail> <DetailDescription> <Text>Room Type 1 Description</Text> </DetailDescription> </AdditionalDetail> </AdditionalDetails> <Amenities> <Amenity RoomAmenity="Room Type 1 Amenity 1"/> </Amenities> </RoomType> </RoomTypes> <RatePlans> <RatePlan> <Commission> <CommissionPayableAmount Amount="135.00"/> </Commission> </RatePlan> </RatePlans> <RoomRates> <RoomRate EffectiveDate="2017-10-23"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="150.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-24"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="150.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-25"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="150.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-26"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="150.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-27"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="150.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-28"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="150.00"/> </Rate> </Rates> </RoomRate> </RoomRates> <GuestCounts> <GuestCount Count="2"/> </GuestCounts> <Total AmountBeforeTax="900.00"/> <ResGuestRPHs> <ResGuestRPH RPH="0"/> </ResGuestRPHs> <SpecialRequests> <SpecialRequest> <Text>Room Type 1 Note 1</Text> </SpecialRequest> <SpecialRequest> <Text>Room Type 1 Note 2</Text> </SpecialRequest> </SpecialRequests> <ServiceRPHs> <ServiceRPH RPH="48013"/> </ServiceRPHs> </RoomStay> <RoomStay IndexNumber="1"> <RoomTypes> <RoomType RoomTypeCode="RT2"> <RoomDescription Name="Room Type 2"/> <AdditionalDetails> <AdditionalDetail> <DetailDescription> <Text>Room Type 2 Description</Text> </DetailDescription> </AdditionalDetail> </AdditionalDetails> <Amenities> <Amenity RoomAmenity="Room Type 2 Amenity 1"/> <Amenity RoomAmenity="Room Type 2 Amenity 2"/> </Amenities> </RoomType> </RoomTypes> <RatePlans> <RatePlan> <Commission> <CommissionPayableAmount Amount="189.00"/> </Commission> </RatePlan> </RatePlans> <RoomRates> <RoomRate EffectiveDate="2017-10-23"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="210.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-24"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="210.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-25"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="210.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-26"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="210.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-27"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="210.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-28"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="210.00"/> </Rate> </Rates> </RoomRate> </RoomRates> <GuestCounts> <GuestCount Count="2"/> </GuestCounts> <Total AmountBeforeTax="1260.00"/> <ResGuestRPHs> <ResGuestRPH RPH="1"/> </ResGuestRPHs> <SpecialRequests> <SpecialRequest> <Text>Room Type 2 Note 1</Text> </SpecialRequest> </SpecialRequests> <ServiceRPHs> <ServiceRPH RPH="48168"/> <ServiceRPH RPH="48169"/> <ServiceRPH RPH="48185"/> <ServiceRPH RPH="48186"/> </ServiceRPHs> </RoomStay> <RoomStay IndexNumber="2"> <RoomTypes> <RoomType RoomTypeCode="RT3"> <RoomDescription Name="Room Type 3"/> <AdditionalDetails> <AdditionalDetail> <DetailDescription> <Text>Room Type 3 Description</Text> </DetailDescription> </AdditionalDetail> </AdditionalDetails> <Amenities> <Amenity RoomAmenity="Room Type 3 Amenity 1"/> </Amenities> </RoomType> </RoomTypes> <RatePlans> <RatePlan> <Commission> <CommissionPayableAmount Amount="243.00"/> </Commission> </RatePlan> </RatePlans> <RoomRates> <RoomRate EffectiveDate="2017-10-23"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="270.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-24"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="270.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-25"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="270.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-26"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="270.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-27"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="270.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-28"> <Rates> <Rate> <Total RateTypeCode="BAR" AmountBeforeTax="270.00"/> </Rate> </Rates> </RoomRate> </RoomRates> <GuestCounts> <GuestCount Count="4"/> </GuestCounts> <Total AmountBeforeTax="1620.00"/> <ResGuestRPHs> <ResGuestRPH RPH="2"/> </ResGuestRPHs> <SpecialRequests> <SpecialRequest> <Text>Room Type 3 Note 1</Text> </SpecialRequest> <SpecialRequest> <Text>Room Type 3 Note 2</Text> </SpecialRequest> <SpecialRequest> <Text>Room Type 3 Note 3</Text> </SpecialRequest> </SpecialRequests> <ServiceRPHs> <ServiceRPH RPH="48187"/> <ServiceRPH RPH="48188"/> <ServiceRPH RPH="48189"/> <ServiceRPH RPH="48190"/> </ServiceRPHs> </RoomStay> </RoomStays> <Services> <Service ServiceRPH="48013"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Arrival Happy Hour</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48168"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 2 Addon #1</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48169"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 2 Addon #2</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48185"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 2 Addon #1</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48186"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 2 Addon #2</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48187"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 3 Addon #1</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48188"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 3 Addon #2</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48189"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 3 Addon #3</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48190"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 3 Addon #4</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> </Services> <ResGuests> <ResGuest ResGuestRPH="0"> <Profiles> <ProfileInfo> <Profile> <Customer> <PersonName> <GivenName>Karys</GivenName> <Surname>Brown</Surname> </PersonName> <Telephone PhoneNumber="079 5588 6392"/> <Email>[email protected]</Email> <Address> <AddressLine>Address Line 1</AddressLine> <AddressLine>Address Line 2</AddressLine> <AddressLine>Address Line 3</AddressLine> <AddressLine>Address Line 4</AddressLine> <CityName>NETHERTON</CityName> <PostalCode>NE65 9EB</PostalCode> <StateProv>GB</StateProv> </Address> </Customer> </Profile> </ProfileInfo> </Profiles> </ResGuest> <ResGuest ResGuestRPH="1"> <Profiles> <ProfileInfo> <Profile> <Customer> <PersonName> <GivenName>Karys</GivenName> <Surname>Brown</Surname> </PersonName> <Telephone PhoneNumber="079 5588 6392"/> <Email>[email protected]</Email> <Address> <AddressLine>Address Line 1</AddressLine> <AddressLine>Address Line 2</AddressLine> <AddressLine>Address Line 3</AddressLine> <AddressLine>Address Line 4</AddressLine> <CityName>NETHERTON</CityName> <PostalCode>NE65 9EB</PostalCode> <StateProv>GB</StateProv> </Address> </Customer> </Profile> </ProfileInfo> </Profiles> </ResGuest> <ResGuest ResGuestRPH="2"> <Profiles> <ProfileInfo> <Profile> <Customer> <PersonName> <GivenName>Karys</GivenName> <Surname>Brown</Surname> </PersonName> <Telephone PhoneNumber="079 5588 6392"/> <Email>[email protected]</Email> <Address> <AddressLine>Address Line 1</AddressLine> <AddressLine>Address Line 2</AddressLine> <AddressLine>Address Line 3</AddressLine> <AddressLine>Address Line 4</AddressLine> <CityName>NETHERTON</CityName> <PostalCode>NE65 9EB</PostalCode> <StateProv>GB</StateProv> </Address> </Customer> </Profile> </ProfileInfo> </Profiles> </ResGuest> </ResGuests> <ResGlobalInfo> <Comments> <Comment> <Text>Reservation Note 1</Text> <Text>Guest requests a late checkout on departure day.</Text> </Comment> </Comments> <Guarantee> <GuaranteesAccepted> <GuaranteeAccepted> <PaymentCard CardCode="UseCreditCardDescrip" CardNumber="5277433010308656" SeriesCode="348" ExpireDate="1117"> <CardHolderName>Karys J Brown</CardHolderName> </PaymentCard> </GuaranteeAccepted> </GuaranteesAccepted> </Guarantee> <Total AmountBeforeTax="782.00" CurrencyCode="GBP"/> <HotelReservationIDs> <HotelReservationID ResID_Value="58741236" ResID_Source="PickupConfirmationId"/> <HotelReservationID ResID_Value="N48PK3O61S" ResID_Source="[email protected]"/> </HotelReservationIDs> <Profiles/> </ResGlobalInfo> </HotelReservation> </HotelReservations> </OTA_HotelResNotifRQ> </soap:Body> </soap:Envelope> ``` **HotelReservations** A collection (1 to n) of HotelReservation messages. **HotelReservations.HotelReservation.HotelReservation.ResStatus** 0 = New, 1 = Modified, 2 = Cancelled **HotelReservations.HotelReservation.HotelReservation** Has collections of RoomStays, Services, ResGuests, and ResGlobalInfo. **HotelReservations.HotelReservation.RoomStays** A collection (1 to n) of RoomStay messages. **HotelReservations.HotelReservation.RoomStays.RoomStay** Contains information pertaining to that room - a reservation can have multiple rooms or RoomStay messages. Contains a single node Total, and collections RoomTypes, RatePlans, RoomRates, and GuestCounts. **HotelReservations.HotelReservation.RoomStays.RoomStay.IndexNumber** The index of the order of the rooms (i.e. 0, 1, 2, 3). Integer. **HotelReservations.HotelReservation.RoomStays.RoomStay.TimeSpan** The arrival date, departure date, and the duration of this room's stay. **HotelReservations.HotelReservation.RoomStays.RoomStay.TimeSpan.Start** The arrival date of this room's stay. String. **HotelReservations.HotelReservation.RoomStays.RoomStay.TimeSpan.End** The departure date of room's stay. String. **HotelReservations.HotelReservation.RoomStays.RoomStay.TimeSpan.Duration** The duration of room's stay. P1D = 1 night stay, P3D = 3 night stay. String. **HotelReservations.HotelReservation.RoomStays.RoomStay.Total.AmountBeforeTax** The total amount for the room and charges affiliated for this room only. If the amount is before tax, this field is populated. Decimal. Optional/Conditional. **HotelReservations.HotelReservation.RoomStays.RoomStay.Total.AmountAfterTax** The total amount for the room and charges affiliated for this room only. If the amount is tax included, this field is populated. Decimal. Optional/Conditional. **HotelReservations.HotelReservation.RoomStays.RoomStay.RoomTypes** A collection (1 to n) of RoomType messages. **HotelReservations.HotelReservation.RoomStays.RoomStay.RoomTypes.RoomType.RoomTypeCode** The room type identifying code. String. **HotelReservations.HotelReservation.RoomStays.RoomStay.RoomTypes.RoomType.RoomDescription.Name** The name of the room type. String. **HotelReservations.HotelReservation.RoomStays.RoomStay.RoomTypes.RoomType.AdditionalDetails** A collection (1 to 1) of AdditionalDetail messages. **HotelReservations.HotelReservation.RoomStays.RoomStay.RoomTypes.RoomType.AdditionalDetail.DetailDescription.Text** A description of the room type. **HotelReservations.HotelReservation.RoomStays.RoomStay.RoomTypes.RoomType.Amenities** A collection (0 to n) of Amenity messages. **HotelReservations.HotelReservation.RoomStays.RoomStay.RoomTypes.RoomType.Amenities.Amenity.RoomAmenity** Room amenity description. **HotelReservations.HotelReservation.RoomStays.RoomStay.RatePlans** A collection (0 to n) of RatePlan messages. HotelReservations.HotelReservation.RoomStays.RoomStay.RatePlans.RatePlan.Comission.CommissionPayableAmount.Amount The commission amount due to the channel for this reservation. Decimal. **HotelReservations.HotelReservation.RoomStays.RoomStay.RoomRates** A collection (1 to n) of RoomRate messages. **HotelReservations.HotelReservation.RoomStays.RoomStay.RoomRates.RoomRate.EffectiveDate** The date during the the stay of this reservation this rate is for. **HotelReservations.HotelReservation.RoomStays.RoomStay.RoomRates.RoomRate.Rates** A collection (1 to 1) of Rate messages. HotelReservations.HotelReservation.RoomStays.RoomStay.RoomRates.RoomRate.Rates.Rate.Total.RateTypeCode This is the rate plan code for this rate amount. **HotelReservations.HotelReservation.RoomStays.RoomStay.RoomRates.RoomRate.Rates.Rate.Total.AmountBeforeTax** The rate for this day before tax. If AmountBeforeTax is not set AmountAfterTax is. Decimal. Optional/Conditional. **HotelReservations.HotelReservation.RoomStays.RoomStay.RoomRates.RoomRate.Rates.Rate.Total.AmountAfterTax** The rate for this day including tax. If AmountBeforeTax is not set AmountAfterTax is. Decimal. Optional/Conditional. **HotelReservations.HotelReservation.RoomStays.RoomStay.GuestCounts** A collection (1 to n) of GuestCount messages. **HotelReservations.HotelReservation.RoomStays.RoomStay.GuestCounts.GuestCount.Count** The number of people staying in this room. Integer. **HotelReservations.HotelReservation.RoomStays.RoomStay.ResGuestsRPHs** A collection (1 to 1) of ResGuestRPH messages. **HotelReservations.HotelReservation.RoomStays.RoomStay.ResGuestsRPHs.ResGuestRPHs.ResGuestRPH.RPH** This is the ResGuestRPH value found on HotelReservations.HotelReservation.ResGuests.ResGuest node, which links that guest information to this room type. Integer. **HotelReservations.HotelReservation.RoomStays.RoomStay.SpecialRequests** A collection (0 to n) of SpecialRequest messages. **HotelReservations.HotelReservation.RoomStays.RoomStay.SpecialRequests.SpecialRequest.Text** The description of a special request by the guest. **HotelReservations.HotelReservation.RoomStays.RoomStay.ServiceRPHs** A collection (0 to n) of ServiceRPH messages. **HotelReservations.HotelReservation.RoomStays.RoomStay.ServiceRPHs.ServiceRPH.RPH** This is the ServiceRPH value found on HotelReservations.HotelReservation.Services.Service node. It links which extra services the guest has ordered for this room. **HotelReservations.HotelReservation.Services** A collection (0 to n) of Service messages. **HotelReservations.HotelReservation.Services.ServiceDetails.GuestCounts** A collection (1 to 1) of GuestCount messages. **HotelReservations.HotelReservation.Services.ServiceDetails.GuestCounts.GuestCount.Count** The number of guests signed up for this service. **HotelReservations.HotelReservation.Services.ServiceDetails.Comments** A collection (0 to n) of Comment messages. **HotelReservations.HotelReservation.Services.ServiceDetails.Comments.Comment.Text** The description of the service the guest bought. **HotelReservations.HotelReservation.Services.ServiceDetails.Fees** A collection (1 to 1) of Fee messages. **HotelReservations.HotelReservation.Services.ServiceDetails.Fees.Fee.TaxInclusive** True if the tax is included in the price. Boolean. **HotelReservations.HotelReservation.Services.ServiceDetails.Fees.Fee.Amount** The price of the service the guest ordered. Decimal. **HotelReservations.HotelReservation.ResGuests** A collection (0 to n) of ResGuest messages. **HotelReservations.HotelReservation.ResGuests.ResGuest.ResGuestRPH** The ID for this ResGuest message. Integer. **HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles** A collection (1 to 1) of ProfileInfo messages. **HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles.ProfileInfo.Profile.Customer.PersonName.GivenName** Guest's first name. **HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles.ProfileInfo.Profile.Customer.PersonName.Surname** Guest's last name. **HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles.ProfileInfo.Profile.Customer.Telephone.PhoneNumber** The phone number for the guest. **HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles.ProfileInfo.Profile.Customer.Email** The email for the guest. **HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles.ProfileInfo.Profile.Customer.Address.AddressLine** Up to 4 lines of text for the address for the guest. HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles.ProfileInfo.Profile.Customer.Address.CityName The name of the city in the guest's address. **HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles.ProfileInfo.Profile.Customer.Address.PostalCode** The postal code of the guest's address. **HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles.ProfileInfo.Profile.Customer.Address.StateProv** The state or province of the guest's address. **HotelReservations.HotelReservation.ResGlobalInfo.Comments** A collection (0, 1) of Comment messages. **HotelReservations.HotelReservation.ResGlobalInfo.Comments.Comment** A collection (0 to n) of Text messages **HotelReservations.HotelReservation.ResGlobalInfo.Comments.Comment.Text** Comments from the guest or comments regarding the reservation from the channel. **HotelReservations.HotelReservation.ResGlobalInfo.Guarantee.GuaranteesAccepted** A collection (1 to 1) of GuaranteeAccepted messages. **HotelReservations.HotelReservation.ResGlobalInfo.Guarantee.GuaranteeAccepted.PaymentCard** Credit card information. **HotelReservations.HotelReservation.ResGlobalInfo.Guarantee.GuaranteeAccepted.PaymentCard.CardCode** The type of credit card - Master Card = MC, Visa = VI, Amex = AX, Discover = DS, DinersClub = DC, JCB International = "JCB" Misc = "Description Listed. String." **HotelReservations.HotelReservation.ResGlobalInfo.Guarantee.GuaranteeAccepted.PaymentCard.CardNumber** The credit card number. **HotelReservations.HotelReservation.ResGlobalInfo.Guarantee.GuaranteeAccepted.PaymentCard.SeriesCode** The credit card series code. **HotelReservations.HotelReservation.ResGlobalInfo.Guarantee.GuaranteeAccepted.PaymentCard.ExpireDate** The credit card expiration date. **HotelReservations.HotelReservation.ResGlobalInfo.Guarantee.GuaranteeAccepted.PaymentCard.CardHolderName** The name of the card holder. **HotelReservations.HotelReservation.ResGlobalInfo.Total.AmountBeforeTax** The total price of the reservation not including tax. If this reservation is a cancellation, the AmountBeforeTax will equal 0. Decimal. **HotelReservations.HotelReservation.ResGlobalInfo.Total.AmountAfterTax** The total price of the reservation including tax. If this reservation is a cancellation, the AmountAfterTax will equal 0. Decimal. **HotelReservations.HotelReservation.ResGlobalInfo.Total.CurrencyCode** The three letter currency of the reservation. All price amounts listed on the reservation are in this currency. String. **HotelReservations.HotelReservation.ResGlobalInfo.HotelReservationIDs** A collection (2 to 2) of HotelReservationID messages. **HotelReservations.HotelReservation.ResGlobalInfo.HotelReservationIDs.HotelReservationID.ResID_Source** The source of the ID. "PickupConfirmationId" is your confirmation number once you confirm the reservation has been received Otherwise it is a combined string with an "@" separator, the first ID is the numeric ID for the channel in our system, the second is a string that is the name of the channel. **HotelReservations.HotelReservation.ResGlobalInfo.Profiles** A collection (1 to 1) of ProfileInfo messages. **HotelReservations.HotelReservation.ResGlobalInfo.Profiles.ProfileInfo.Profile.Customer.PersonName.GivenName** The first name of the person who booked the reservation, not necessarily the same person as the card holder, or the guests in each room. HotelReservations.HotelReservation.ResGlobalInfo.Profiles.ProfileInfo.Profile.Customer.PersonName.Surname The last name of the person who booked the reservation, not necessarily the same person as the card holder, or the guests in each room. **HotelReservations.HotelReservation.ResGlobalInfo.Profiles.ProfileInfo.Profile.Customer.PersonName.Email** The email address of the person who booked the reservation, not necessarily the same person as the card holder, or the guests in each room. **HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles.ProfileInfo.Profile.Customer.Address.AddressLine** Up to 4 lines of text for the address. **HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles.ProfileInfo.Profile.Customer.Address.CityName** The name of the city for the address. **HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles.ProfileInfo.Profile.Customer.Address.PostalCode** The postal code of the address. **HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles.ProfileInfo.Profile.Customer.Address.StateProv** The state or province of the address. ### Response Message - OTA_HotelResNotifRS Once you have received and stored the reservations, the following message would be sent in reply to confirm your processing. The body contains a <Success /> message, and both the OTA_HotelResNotifRS and the OTA_HotelResModifyNotifRS messages, even if one message or the other does not contain any IDs to confirm. OTA_HotelResNotifRS is for confirming new reservations, while OTA_HotelResModifyNotifRS is for confirming modifications or cancellations. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <soap:Header> <HTNGHeader xmlns="http://htng.org/1.1/Header/"> <From> <systemId>[PROVIDERID]</systemId> <Credential> <userName>[PROVIDERUSERNAME]</userName> <password>[PROVIDERPASSWORD]</password> </Credential> </From> <To> <systemId>[HOTELID]</systemId> </To> </HTNGHeader> </soap:Header> <soap:Body> <OTA_HotelResNotifRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> <HotelReservations> <HotelReservation> <ResGlobalInfo> <HotelReservationIDs> <HotelReservationID ResID_Value="66132"/> <HotelReservationID ResID_Value="66133"/> <HotelReservationID ResID_Value="66134"/> <HotelReservationID ResID_Value="66135"/> <HotelReservationID ResID_Value="66136"/> <HotelReservationID ResID_Value="66137"/> <HotelReservationID ResID_Value="66138"/> <HotelReservationID ResID_Value="66139"/> </HotelReservationIDs> </ResGlobalInfo> </HotelReservation> </HotelReservations> </OTA_HotelResNotifRS> <OTA_HotelResModifyNotifRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> <HotelResModifies> <HotelResModify> <ResGlobalInfo> <HotelReservationIDs/> </ResGlobalInfo> </HotelResModify> </HotelResModifies> </OTA_HotelResModifyNotifRS> </soap:Body> </soap:Envelope> ``` If you wish to include a reservation ID from your system that identifies and links it to this reservation, you can set that value in the ResID_Source field. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <soap:Header> <HTNGHeader xmlns="http://htng.org/1.1/Header/"> <From> <systemId>[PROVIDERID]</systemId> <Credential> <userName>[PROVIDERUSERNAME]</userName> <password>[PROVIDERPASSWORD]</password> </Credential> </From> <To> <systemId>[HOTELID]</systemId> </To> </HTNGHeader> </soap:Header> <soap:Body> <OTA_HotelResNotifRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> <HotelReservations> <HotelReservation> <ResGlobalInfo> <HotelReservationIDs> <HotelReservationID ResID_Value="66132" ResID_Source="YourPmsId123"/> <HotelReservationID ResID_Value="66133" ResID_Source="YourPmsId124"/> <HotelReservationID ResID_Value="66134" ResID_Source="YourPmsId125"/> <HotelReservationID ResID_Value="66135" ResID_Source="YourPmsId126"/> <HotelReservationID ResID_Value="66136" ResID_Source="YourPmsId127"/> <HotelReservationID ResID_Value="66137" ResID_Source="YourPmsId128"/> <HotelReservationID ResID_Value="66138" ResID_Source="YourPmsId129"/> <HotelReservationID ResID_Value="66139" ResID_Source="YourPmsId130"/> </HotelReservationIDs> </ResGlobalInfo> </HotelReservation> </HotelReservations> </OTA_HotelResNotifRS> <OTA_HotelResModifyNotifRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> <HotelResModifies> <HotelResModify> <ResGlobalInfo> <HotelReservationIDs/> </ResGlobalInfo> </HotelResModify> </HotelResModifies> </OTA_HotelResModifyNotifRS> </soap:Body> </soap:Envelope> ``` ## Modified or Cancelled Reservations - OTA_HotelResModifyNotifRQ This is an example OTA_HotelResModifyNotifRQ message used for modified or cancelled reservations. It is mostly identical to the OTA_HotelResNotifRQ message, with the document element and early collections being named differently. OTA_HotelResModifyNotifRQ.HotelResModifies.HotelResModify instead of OTA_HotelResNotifRQ.HotelReservations.HotelReservation. Reservations that are modified will have \<HotelResModify ResStatus="1">. Reservations that are cancelled will have \<HotelResModify ResStatus="2">. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <OTA_HotelResModifyNotifRQ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <HotelResModifies> <HotelResModify ResStatus="1"> <RoomStays> <RoomStay IndexNumber="0"> <RoomTypes> <RoomType RoomTypeCode="RT1"> <RoomDescription Name="Room Type 1"/> <AdditionalDetails> <AdditionalDetail> <DetailDescription> <Text>Room Type 1 Description</Text> </DetailDescription> </AdditionalDetail> </AdditionalDetails> <Amenities> <Amenity RoomAmenity="Room Type 1 Amenity 1"/> </Amenities> </RoomType> </RoomTypes> <RatePlans> <RatePlan> <Commission> <CommissionPayableAmount Amount="135.00"/> </Commission> </RatePlan> </RatePlans> <RoomRates> <RoomRate EffectiveDate="2017-10-23"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="150.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-24"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="150.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-25"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="150.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-26"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="150.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-27"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="150.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-28"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="150.00"/> </Rate> </Rates> </RoomRate> </RoomRates> <GuestCounts> <GuestCount Count="2"/> </GuestCounts> <Total AmountBeforeTax="900.00"/> <ResGuestRPHs> <ResGuestRPH RPH="0"/> </ResGuestRPHs> <SpecialRequests> <SpecialRequest> <Text>Room Type 1 Note 1</Text> </SpecialRequest> <SpecialRequest> <Text>Room Type 1 Note 2</Text> </SpecialRequest> </SpecialRequests> <ServiceRPHs> <ServiceRPH RPH="48013"/> </ServiceRPHs> </RoomStay> <RoomStay IndexNumber="1"> <RoomTypes> <RoomType RoomTypeCode="RT2"> <RoomDescription Name="Room Type 2"/> <AdditionalDetails> <AdditionalDetail> <DetailDescription> <Text>Room Type 2 Description</Text> </DetailDescription> </AdditionalDetail> </AdditionalDetails> <Amenities> <Amenity RoomAmenity="Room Type 2 Amenity 1"/> <Amenity RoomAmenity="Room Type 2 Amenity 2"/> </Amenities> </RoomType> </RoomTypes> <RatePlans> <RatePlan> <Commission> <CommissionPayableAmount Amount="189.00"/> </Commission> </RatePlan> </RatePlans> <RoomRates> <RoomRate EffectiveDate="2017-10-23"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="210.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-24"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="210.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-25"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="210.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-26"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="210.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-27"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="210.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-28"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="210.00"/> </Rate> </Rates> </RoomRate> </RoomRates> <GuestCounts> <GuestCount Count="2"/> </GuestCounts> <Total AmountBeforeTax="1260.00"/> <ResGuestRPHs> <ResGuestRPH RPH="1"/> </ResGuestRPHs> <SpecialRequests> <SpecialRequest> <Text>Room Type 2 Note 1</Text> </SpecialRequest> </SpecialRequests> <ServiceRPHs> <ServiceRPH RPH="48168"/> <ServiceRPH RPH="48169"/> <ServiceRPH RPH="48185"/> <ServiceRPH RPH="48186"/> </ServiceRPHs> </RoomStay> <RoomStay IndexNumber="2"> <RoomTypes> <RoomType RoomTypeCode="RT3"> <RoomDescription Name="Room Type 3"/> <AdditionalDetails> <AdditionalDetail> <DetailDescription> <Text>Room Type 3 Description</Text> </DetailDescription> </AdditionalDetail> </AdditionalDetails> <Amenities> <Amenity RoomAmenity="Room Type 3 Amenity 1"/> </Amenities> </RoomType> </RoomTypes> <RatePlans> <RatePlan> <Commission> <CommissionPayableAmount Amount="243.00"/> </Commission> </RatePlan> </RatePlans> <RoomRates> <RoomRate EffectiveDate="2017-10-23"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="270.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-24"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="270.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-25"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="270.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-26"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="270.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-27"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="270.00"/> </Rate> </Rates> </RoomRate> <RoomRate EffectiveDate="2017-10-28"> <Rates> <Rate> <Total RatePlanCode="BAR" AmountBeforeTax="270.00"/> </Rate> </Rates> </RoomRate> </RoomRates> <GuestCounts> <GuestCount Count="4"/> </GuestCounts> <Total AmountBeforeTax="1620.00"/> <ResGuestRPHs> <ResGuestRPH RPH="2"/> </ResGuestRPHs> <SpecialRequests> <SpecialRequest> <Text>Room Type 3 Note 1</Text> </SpecialRequest> <SpecialRequest> <Text>Room Type 3 Note 2</Text> </SpecialRequest> <SpecialRequest> <Text>Room Type 3 Note 3</Text> </SpecialRequest> </SpecialRequests> <ServiceRPHs> <ServiceRPH RPH="48187"/> <ServiceRPH RPH="48188"/> <ServiceRPH RPH="48189"/> <ServiceRPH RPH="48190"/> </ServiceRPHs> </RoomStay> </RoomStays> <Services> <Service ServiceRPH="48013"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Arrival Happy Hour</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48168"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 2 Addon #1</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48169"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 2 Addon #2</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48185"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 2 Addon #1</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48186"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 2 Addon #2</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48187"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 3 Addon #1</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48188"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 3 Addon #2</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48189"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 3 Addon #3</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> <Service ServiceRPH="48190"> <ServiceDetails> <GuestCounts> <GuestCount Count="1"/> </GuestCounts> <Comments> <Comment> <Text>Room Type 3 Addon #4</Text> </Comment> </Comments> <Fees> <Fee TaxInclusive="false" Amount="14.00"/> </Fees> </ServiceDetails> </Service> </Services> <ResGuests> <ResGuest ResGuestRPH="0"> <Profiles> <ProfileInfo> <Profile> <Customer> <PersonName> <GivenName>Karys</GivenName> <Surname>Brown</Surname> </PersonName> <Telephone PhoneNumber="079 5588 6392"/> <Email>[email protected]</Email> <Address> <AddressLine>Address Line 1</AddressLine> <AddressLine>Address Line 2</AddressLine> <AddressLine>Address Line 3</AddressLine> <AddressLine>Address Line 4</AddressLine> <CityName>NETHERTON</CityName> <PostalCode>NE65 9EB</PostalCode> <StateProv>GB</StateProv> </Address> </Customer> </Profile> </ProfileInfo> </Profiles> </ResGuest> <ResGuest ResGuestRPH="1"> <Profiles> <ProfileInfo> <Profile> <Customer> <PersonName> <GivenName>Karys</GivenName> <Surname>Brown</Surname> </PersonName> <Telephone PhoneNumber="079 5588 6392"/> <Email>[email protected]</Email> <Address> <AddressLine>Address Line 1</AddressLine> <AddressLine>Address Line 2</AddressLine> <AddressLine>Address Line 3</AddressLine> <AddressLine>Address Line 4</AddressLine> <CityName>NETHERTON</CityName> <PostalCode>NE65 9EB</PostalCode> <StateProv>GB</StateProv> </Address> </Customer> </Profile> </ProfileInfo> </Profiles> </ResGuest> <ResGuest ResGuestRPH="2"> <Profiles> <ProfileInfo> <Profile> <Customer> <PersonName> <GivenName>Karys</GivenName> <Surname>Brown</Surname> </PersonName> <Telephone PhoneNumber="079 5588 6392"/> <Email>[email protected]</Email> <Address> <AddressLine>Address Line 1</AddressLine> <AddressLine>Address Line 2</AddressLine> <AddressLine>Address Line 3</AddressLine> <AddressLine>Address Line 4</AddressLine> <CityName>NETHERTON</CityName> <PostalCode>NE65 9EB</PostalCode> <StateProv>GB</StateProv> </Address> </Customer> </Profile> </ProfileInfo> </Profiles> </ResGuest> </ResGuests> <ResGlobalInfo> <Comments> <Comment> <Text>Reservation Note 1</Text> <Text>Guest requests a late checkout on departure day.</Text> </Comment> </Comments> <Guarantee> <GuaranteesAccepted> <GuaranteeAccepted> <PaymentCard CardCode="UseCreditCardDescrip" CardNumber="5277433010308656" SeriesCode="348" ExpireDate="1117"> <CardHolderName>Karys J Brown</CardHolderName> </PaymentCard> </GuaranteeAccepted> </GuaranteesAccepted> </Guarantee> <Total AmountBeforeTax="782.00" CurrencyCode="GBP"/> <HotelReservationIDs> <HotelReservationID ResID_Value="874521" ResID_Source="PickupConfirmationId"/> <HotelReservationID ResID_Value="N48PK3O61S" ResID_Source="[email protected]"/> </HotelReservationIDs> <Profiles/> </ResGlobalInfo> </HotelReservation> </HotelReservations> </OTA_HotelResModifyNotifRQ> </soap:Body> </soap:Envelope> ``` ### Response Message - OTA_HotelResModifyNotifRS Once you have received and stored the reservation modifications or cancellations, the following message would be sent in reply to confirm your processing. The body contains a \<Success /> message, and both the OTA_HotelResNotifRS and the OTA_HotelResModifyNotifRS messages, even if one message or the other does not contain any IDs to confirm. OTA_HotelResNotifRS is for confirming new reservations, while OTA_HotelResModifyNotifRS is for confirming modifications or cancellations. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <soap:Header> <HTNGHeader xmlns="http://htng.org/1.1/Header/"> <From> <systemId>[PROVIDERID]</systemId> <Credential> <userName>[PROVIDERUSERNAME]</userName> <password>[PROVIDERPASSWORD]</password> </Credential> </From> <To> <systemId>[HOTELID]</systemId> </To> </HTNGHeader> </soap:Header> <soap:Body> <OTA_HotelResNotifRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> <HotelReservations> <HotelReservation> <ResGlobalInfo> <HotelReservationIDs/> </ResGlobalInfo> </HotelReservation> </HotelReservations> </OTA_HotelResNotifRS> <OTA_HotelResModifyNotifRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> <HotelResModifies> <HotelResModify> <ResGlobalInfo> <HotelReservationIDs> <HotelReservationID ResID_Value="66132"/> <HotelReservationID ResID_Value="66133"/> <HotelReservationID ResID_Value="66134"/> <HotelReservationID ResID_Value="66135"/> <HotelReservationID ResID_Value="66136"/> <HotelReservationID ResID_Value="66137"/> <HotelReservationID ResID_Value="66138"/> <HotelReservationID ResID_Value="66139"/> </HotelReservationIDs> </ResGlobalInfo> </HotelResModify> </HotelResModifies> </OTA_HotelResModifyNotifRS> </soap:Body> </soap:Envelope> ``` # Reservation Pickup Polling Message URL: https://[SERVERNAME]/channels/v2/reservationreceive?providerId=[PROVIDERID] To check for reservations pending for pickup, you would send the following message. The message is just the envelope with the credentials and and empty body. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <soap:Header> <HTNGHeader xmlns="http://htng.org/1.1/Header/"> <From> <systemId>[PROVIDERID]</systemId> <Credential> <userName>[PROVIDERUSERNAME]</userName> <password>[PROVIDERPASSWORD]</password> </Credential> </From> <To> <systemId>[HOTELID]</systemId> </To> </HTNGHeader> </soap:Header> <soap:Body/> </soap:Envelope> ``` In response you would get the reservation messages found in section 5.1, and your separate confirmation call would include the response messages found in 5.3, but with your login information in the soap header as shown below. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <soap:Header> <HTNGHeader xmlns="http://htng.org/1.1/Header/"> <From> <systemId>[PROVIDERID]</systemId> <Credential> <userName>[PROVIDERUSERNAME]</userName> <password>[PROVIDERPASSWORD]</password> </Credential> </From> <To> <systemId>[HOTELID]</systemId> </To> </HTNGHeader> </soap:Header> <soap:Body> <OTA_HotelResNotifRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> <HotelReservations> <HotelReservation> <ResGlobalInfo> <HotelReservationIDs/> </ResGlobalInfo> </HotelReservation> </HotelReservations> </OTA_HotelResNotifRS> <OTA_HotelResModifyNotifRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="0" xmlns="http://www.opentravel.org/OTA/2003/05"> <Success/> <HotelResModifies> <HotelResModify> <ResGlobalInfo> <HotelReservationIDs> <HotelReservationID ResID_Value="66132"/> <HotelReservationID ResID_Value="66133"/> <HotelReservationID ResID_Value="66134"/> <HotelReservationID ResID_Value="66135"/> <HotelReservationID ResID_Value="66136"/> <HotelReservationID ResID_Value="66137"/> <HotelReservationID ResID_Value="66138"/> <HotelReservationID ResID_Value="66139"/> </HotelReservationIDs> </ResGlobalInfo> </HotelResModify> </HotelResModifies> </OTA_HotelResModifyNotifRS> </soap:Body> </soap:Envelope> ``` # Test Reservations URL: https://[SERVERNAME]/channels/v2/reservationreceivetestreservationscreate?providerId=[PROVIDERID] To create test reservations (new reservations, modifications, and cancellations), you would send the following message. Each time the message is sent, the test environment is complete reset (i.e. previous test reservations would not exist). The message is just the envelope with the credentials and and empty body. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <soap:Header> <HTNGHeader xmlns="http://htng.org/1.1/Header/"> <From> <systemId>[PROVIDERID]</systemId> <Credential> <userName>[PROVIDERUSERNAME]</userName> <password>[PROVIDERPASSWORD]</password> </Credential> </From> <To> <systemId>[HOTELID]</systemId> </To> </HTNGHeader> </soap:Header> <soap:Body/> </soap:Envelope> ``` # Reservation Sync / All Reservations URL: https://[SERVERNAME]/channels/v2/reservationreceiveall?providerId=[PROVIDERID] This is so you can pickup ALL reservations in the system for a specific hotel, to syncrhonize and/or view all reservations. This will return the final (or most recent) version of all reservations with a departure date of today on in the future. So a reservation with an arrival three days ago with a departure two days from now, will be included. A reservatoin with a departure date of yesterday, will not be included. Reservations that have been cancelled will be included and listed as cancelled (versus just having cancelled reservations not be included). The message is just the envelope with the credentials and and empty body. ```xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <soap:Header> <HTNGHeader xmlns="http://htng.org/1.1/Header/"> <From> <systemId>[PROVIDERID]</systemId> <Credential> <userName>[PROVIDERUSERNAME]</userName> <password>[PROVIDERPASSWORD]</password> </Credential> </From> <To> <systemId>[HOTELID]</systemId> </To> </HTNGHeader> </soap:Header> <soap:Body/> </soap:Envelope> ``` # Warning & Error Codes Any message that returns a \<Success /> element is to be assumed the message transmission and processing is successful. If the message also contains a \<Warnings> collection and a \<Success /> element, the message is to be assumed the message transmission and processing is successful, although a channel for a room type, or a specific channel might not have been updated due to certain conditions (i.e. it is listed but not setup). Any message that contains \<Errors> is to be assumed the message was not processed. There will never be a partially processed message that has \<Errors> in its response message. Each error or warning has a numeric "Code" attribute, with a text description for its value. | Code | Message | | -------- | -------- | | -1 | Failure / Config Not Setup | | 0 | HTNGHeader From not provided - htngHeader.From collection has a length of 0. | | 1 | Multiple HTNGHeader From provided - only 1 required - htngHeader.From collection has a length greater than 1. | | 2 | HTNGHeader From Credential not provided - htngHeader.From.Credential collection has a length of 0. | | 3 | Multiple HTNGHeader From Credential provided - only 1 required - htngHeader.From.Credential collection has a length greater than 1. | | 4 | SystemId not provided - htngHeader.From[0].systemId is null or empty. | | 5 | Username not provided - htngHeader.From[0].Credential[0].userName is null or empty. | | 6 | Interface company password not provided - htngHeader.From[0].Credential[0].password is null or empty. | | 7 | Hotel id not provided - htngHeader.To[0].systemId is null or empty. | | 8 | Non-integer found in url for a channel id: {0} 9:Your company htngHeader.From[0].systemId={0} is not currently setup to interface with ChannelRUSH. | | 10 | Invalid login htngHeader.From[0].Credential[0].userName and htngHeader.From[0].Credential[0].password combination. | | 11 | Your company is not setup to deliver information to the hotel you specified at htngHeader.To[0].systemId={0} | | 12 | This hotel htngHeader.To[0].systemId={0} is not mapped to the following channel id {1} | | 13 | The soap envelope body node does not contain any messages. | | 14 | The channelId {0} is not setup in ChannelRUSH to deliver data to any room types. | | 15 | statusApplicationControlType.InvTypeCode={0} not mapped to deliver data to. | | 16 | statusApplicationControlType.InvTypeCode={0} for channelId={1} is not setup in ChannelRUSH to deliver data to. | | 17 | statusApplicationControlType.RatePlanID={0} not mapped to send data to. | | 18 | statusApplicationControlType.RatePlanID={0} for channelId={1} is not setup in ChannelRUSH to deliver data to. | # Getting Started Email ChannelRUSH at [[email protected]](mailto:[email protected]), and we will get your company created in our system and create a test account so you can begin testing messages and log in to see how they are processing. The setup account will also include all of the URLs needed to post your messages against. ## OpenTravel Alliance Message XSDs An "XSD" file, or "XML Schema Definition" is a file that ensures XML adheres to a certain format. These will be helpful for building your XML messages to send and receive from our system. The OpenTravel Alliance messages we use are standard, as in we do not add any extra "magic" to them to make them work. You can download all of the OpenTravel Alliance XSD files here -[http://opentravelmodel.net/pubs/specifications/Specifications.html?spec=2007B](http://opentravelmodel.net/pubs/specifications/Specifications.html?spec=2007B). # Frequently Asked Questions **Where is the WSDL file?** There is no WSDL file. This is a basic passing of messages in a SOAP envelope via an HTTP POST. We have found this to be the most platform agnostic approach. We do recommend you verify your XML messages via the XSD files available, as this will ensure your XML is correctly formatted. It is fine to parse all of our reply messages using XSD files as well, as they will pass as they are standard message sets. **[SERVERNAME]? [PROVIDERID]? The urls do not work when I post them to channelrush.com?** Correct - once you contact us to get your test environment setup, we will provide the server name and provider IDs for the URLs to post the messages to. # Notes - All message transmission, either sending or receiving, is done over an encrypted SSL connection. - It is very important that you condense the amount of data you send into the smallest number of transactions possible, using the smallest number of messages possible. This let’s our systems update the information faster once the data has been delivered.