Hotel information (mapping).

In order to map the rooms and rates between the OTA and Smarthotel Channel manager, Smarthotel will send two requests:

  • 1. The OTA_HotelDescriptiveInfoRQ
  • 2. The OTA_HotelRatePlanRQ

With the OTA_HotelDescriptiveInfo Smarthotel retrieves the room types setup and services with the OTA. Both will be requested through a separate request. One for Rooms and one for services. For Rooms an attribute [SendGuestRooms=“True”] will be sent. For Services we will send an attribute [SendData=”True”]

The second request, the OTA_HotelRatePlanRQ retrieves the rate codes setup at the OTA together with the sellable products in order to understand which rate codes are connected to which room types.

We expect the OTA to respond with the correct Response in order to complete the mapping between the two systems.

OTA_HotelDescriptiveInfoRQ/RS.

Rooms:

OTA_HotelDescriptiveInfoRQ

Element / @AttributeParentInfoValuesOccurrence
HotelDescriptiveInfosOTA_HotelDescriptiveInfoRQCollection of items for data from multiple hotels.1
HotelDescriptiveInfoHotelDescriptiveInfosThis allows the requestor to indicate which specific information is requested if complete hotel details are not required.1
@HotelCodeHotelDescriptiveInfoThe ID of the hotel.[integer]1
AffiliationInfoHotelDescriptiveInfoIs used to the indicate the specific affiliation information being requested.0..1
@SendAwardsAffiliationInfoSend this data. "True" means send the data.True
False
0..1
ContactInfoHotelDescriptiveInfoIs used to the indicate whether contact information is being requested.0..1
@SendDataContactInfoSend this data. "True" means send the data.True
False
0..1
FacilityInfoHotelDescriptiveInfoIs used to the indicate the specific facility information being requested.0..1
@SendGuestRoomsFacilityInfoSend this data. "True" means send the data.True
False
0..1
HotelInfoHotelDescriptiveInfoIs used to indicate whether hotel information is being requested.0..1
@SendDataHotelInfoSend this data. "True" means send the data.True
False
0..1
MultimediaObjectsHotelDescriptiveInfoIs used to the indicate whether multimedia information is being requested.0..1
@SendDataMultimediaObjectsSend this data. "True" means send the data.True
False
0..1

The following request will be sent to the OTA by Smarthotel to retrieve room information:

<?xml version="1.0" encoding="UTF-16"?>
<OTA_HotelDescriptiveInfoRQ PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <POS>
    <Source>
      <RequestorID ID="APIKEY" MessagePassword="APIPASSWORD"/>
    </Source>
  </POS>
  <HotelDescriptiveInfos>
    <HotelDescriptiveInfo HotelCode="21052">
      <FacilityInfo SendGuestRooms="True" />
    </HotelDescriptiveInfo>
  </HotelDescriptiveInfos>
</OTA_HotelDescriptiveInfoRQ>

OTA_HotelDescriptiveInfoRS

Element / @AttributeParentInfoValuesOccurrence
HotelDescriptiveContentsOTA_HotelDescriptiveInfoRSA collection of hotel descriptive information.1
HotelDescriptiveContentHotelDescriptiveContentsHotel descriptive information.0..n
FacilityInfoHotelDescriptiveContentProvides information pertaining to the hotel facility itself. The FacilityInfo class that describes the facilities provided at the hotel, including rooms.0..1
GuestRoomsFacilityInfoCollection of guest room types that are comprised within the hotel.0..1
GuestRoomGuestRoomsThe accommodation occupied by a guest.0..n
CodeGuestRoomThe ID of the room.[integer]1
TypeRoomGuestRoomDescribes the guest room type; in composite types there can be multiple occurrences.1
@NameTypeRoomText name of the type of room such as "Two Bedroom Villas".[string]1
HotelServicesHotelInfoA collection of services.0..1
ServiceHotelServicesA Service object represents a non-room product provided to guests.1..n
@IDServiceA unique identifying value assigned by the creating system.[integer]1
@ServiceInventoryCodeServiceThe code of the service.[string]1
@ServiceStatusCodeServiceThe status of the service.Active1
Inactive
@ServiceCategoryCodeServiceThe representation of the specific service category for this specific service.None
Standard
ExtraBed
ExtraBabyCot
Extrainfant
ExtraChild BreakfastAndDinner
Dinner3Course Dinner4Course
Breakfast
TouristTax
ReservationCharge ExtraNight3
ExtraNight4
1
@ServicePricingTypeServiceAn enumerated type that defines how a service is priced.None
PerStay
PerNight
PerAdultPerStay
PerAdultPerNight
SelectedDates
SelectedDatesPerAdult
PercentagePerStay
PercentagePerStayPerChild
PerPiece
PerPiecePerNight
PerPiecePerAdult
PerPiecePerAdultPerNight
SelectedDatesPerChild
PercentagePerStayPerAdult
PerChildPerStay
PerChildPerNight


1
@InclusiveServiceWhether the price for this service is included.True, False1
@SortServiceUsed to define the display order.[integer]1
ServiceDetailsServiceDetails on the Service.1
ServiceNamesServiceDetailsA collection of ServiceName.0..1
ServiceNameServiceNamesName of the service.1..n
@LanguageServiceNameThe ID of the language.Refer to Languages code list1
TextServiceNameFormatted text content. Provides text and indicates whether it is formatted or not.[string]1
ServiceDescriptionsServiceDetailsA collection of ServiceDescription.0..1
ServiceDescriptionServiceDescriptionsDescription of the service.1..n
@ LanguageServiceDescriptionThe ID of the language.Refer to Languages code list1
TextServiceDescriptionFormatted text content. Provides text and indicates whether it is formatted or not.[string]1
MultimediaDescriptionsServiceDetailsMultimedia information about a collection of multimedia objects. Contains multimedia item(s).0..1
MultimediaDescriptionMultimediaDescriptionsA multimedia item. Describes multimedia item(s).0..1
ImageItemsMultimediaDescriptionA collection of image items. Collection of image items.1
ImageItemImageItemsImage of a given category.1..n
ImageFormatImageItemA set of images for a given category which may be provided in multiple formats.1
URLImageFormatURL of the multimedia item for a specific format.[string]1

The response Smarthotel expects should include the IDs and names of the available rooms. The response should look like this:

<?xml version="1.0" encoding="UTF-16"?>
<OTA_HotelDescriptiveInfoRS EchoToken="Example123" PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <Success />
  <HotelDescriptiveContents>
    <HotelDescriptiveContent>
      <FacilityInfo>
        <GuestRooms>
          <GuestRoom Code="1">
            <TypeRoom Name="Standard Room"/>
          </GuestRoom>
          <GuestRoom Code="2">
            <TypeRoom Name="Comfort Room"/>
          </GuestRoom>
          <GuestRoom Code="3">
            <TypeRoom Name="Executive Room"/>
          </GuestRoom>
        </GuestRooms>
      </FacilityInfo>
    </HotelDescriptiveContent>
  </HotelDescriptiveContents>
</OTA_HotelDescriptiveInfoRS>

 

The response Smarthotel expects should include the IDs and description of the available services. The response should look like this:

<?xml version="1.0" encoding="UTF-16"?>
<OTA_HotelDescriptiveInfoRS EchoToken="Example123" PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <Success />
  <HotelDescriptiveContents>
    <HotelDescriptiveContent>
      <TPA_Extensions>
        <HotelInfo>
          <HotelServices>
            <Service ID="212384">
              <ServiceDetails>
                <ServiceDescription>
                  <Text>Champagne</Text>
                </ServiceDescription>
              </ServiceDetails>
            </Service>
          </HotelServices>
        </HotelInfo>
      </TPA_Extensions>
    </HotelDescriptiveContent>
  </HotelDescriptiveContents>
</OTA_HotelDescriptiveInfoRS>

 

OTA_HotelRatePlanRQ/RS.

OTA_HotelRatePlanRQ:

The following request will be sent by Smarthotel to retrieve rate information:

Element / @AttributeParentInfoValuesOccurrence
RatePlansOTA_HotelRatePlanRQCollection of rate plans.1
RatePlanRatePlansProvides the criteria to identify the rate plan to be returned.1..n
HotelRefRatePlanIndicates the detail of hotel reference information.1
@HotelCodeHotelRefThe ID of the hotel[integer]1
DestinationSystemsCodeRatePlanA collection of destination system codes. These are systems for which this rate plan is targeted. A collection of DestinationSystemCode.0..1
DestinationSystemsCodeDestinationSystemsCodeThe ID of the channel[integer]1
RatePlanCandidatesRatePlanCollection of requested rateplans0..1
RatePlanCandidateRatePlanCandidatesElement used to identify available products and rates.1
<?xml version="1.0" encoding="UTF-16"?>
<OTA_HotelRatePlanRQ EchoToken="Example123" PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <POS>
    <Source>
      <RequestorID ID="APIKEY" MessagePassword="APIPASSWORD"/>
    </Source>
  </POS>
  <RatePlans>
    <RatePlan>
      <HotelRef HotelCode="21052" />
    </RatePlan>
  </RatePlans>
</OTA_HotelRatePlanRQ>

 

OTA_HotelRatePlanRS:

The response should include the rate codes and names, and the rooms that are connected to them.

Element / @AttributeParentInfoValuesOccurrence
RatePlansOTA_HotelRatePlanRSA collection of rate plans.1
RatePlanRatePlansAn individual rate plan. All details pertaining to a specific rate plan.0..n
@RatePlanCodeRatePlanThe ID of the rate.[integer]1
@DestinationSystemsCodeRatePlanThe ID of the channel.[integer]1
HotelRefRatePlanIndicates the detail of hotel reference information.1
@HotelCodeHotelRefThe ID of the hotel.[integer]1
DescriptionRatePlanDescription of the RatePlan. An indication of a new paragraph for a sub-section of a formatted text message.1
@NameDescriptionIndicates the type of the description.Name1
TextDescriptionFormatted text content.1
RatePlanLevelFeeRatePlanA Fee that is attached directly to the RatePlan. Can be used to send a global surcharge at the RatePlan level.0..1
FeeRatePlanLevelFeeFee Amount that is applied to the rate. Fees are used for non-tax amounts like service charges.1
@MealPlanCodeFeeThis describes meal plans associated with a rate plan.Refer to OpenTravel Code Table Meal Plan Type (MPT).1
BookingRulesRatePlanA collection of booking rules.1
BookingRuleBookingRulesThe BookingRule element defines restrictions to rates and stays at the hotel for a given rate plan, room type or rate plan/room type combination.1
@MaxAdvancedBookingOffsetBookingRuleMaximum days before the arrival date for which this rate plan may be booked.[integer]0..1
RequiredPaymtsBookingRuleA collection of required payments that are part of the booking restriction. A collection of required payments.0..1
GuaranteePaymentRequiredPaymtsUsed to define the deposit policy, guarantees policy, and/or accepted forms of payment.1
AmountPercentGuaranteePaymentPayment expressed as a fixed amount, or a percentage of/or room nights.1
@PercentAmountPercentThe percentage used to calculate the amount.[double]1
CancelPenaltiesBookingRuleA collection of required payments that are part of the booking restriction. A collection of CancelPenalty.1
@CancelPolicyIndicatorCancelPenaltiesWhen true, indicates a cancel policy exists. When false, no cancel policy exists. Typically this indicator is used when details are not being sent.True, False1
CancelPenaltyCancelPenaltiesDefines the cancellation penalty of the hotel facility. The CancelPenalty class defines the cancellation policy of the hotel facility.1
@NonRefundableCancelPenaltyIndicates that any prepayment for the reservation is non-refundable, therefore a 100% penalty on the prepayment is applied, irrespective of deadline.True, False1
@PolicyCodeCancelPenaltyThe ID of the cancellation policy.0 = None,
1 = Non-cancellable
2 = Time pre-arrival day
3 = Time arrival day
4 = Days before arrival day
5 = UVH
1
DeadlineCancelPenaltyCancellation deadline, absolute or relative.0..1
@AbsoluteDeadlineDeadlineDefines the absolute deadline. Either this or the offset attributes may be used.[hh:mm:ss]0..1
@OffsetDropTimeDeadlineAn enumerated type indicating when the deadline drop time goes into effect.BeforeArrival0..1
@OffsetTimeUnitDeadlineThe units of time, e.g.: days, hours, etc., that apply to the deadline.Days, Hours0..1
@OffsetUnitMultiplierDeadlineThe number of units of DeadlineTimeUnit.[integer]0..1
PenaltyDescriptionCancelPenaltyText description of the Penalty in a given language. An indication of a new paragraph for a sub-section of a formatted text message.0..1
TextPenaltyDescriptionFormatted text content.[string]0..1
AmountPercentCancelPenaltyCancellation fee expressed as a fixed amount, or percentage of/or room nights. Defines the percentage basis for calculating the fee amount or the amount.0..1
@ApplyAsAmountPercentUsed to specify how the amount needs to be applied with respect to the stay.FirstNightPayment0..1
@NmbrOfNightsAmountPercentThe number of nights of the hotel stay that are used to calculate the fee amount.[integer]0..1
@PercentAmountPercentThe percentage used to calculate the amount.[double]0..1
@BasisTypeAmountPercentProvides the basis for how the amount of the guarantee is calculated.FullStay, Nights1
SellableProductsRatePlanA collection of Sellable Products. The SellableProduct class defines the inventoried item for this rate plan.0..1
SellableProductSellableProductsThe individual sellable product. A sellable product may be a guest room, a meeting room or an inventory block. Attributes of SellableProduct are the inventory codes, information on the use, application and sequencing of the inventory information.1..n
@InvTypeCodeSellableProductThe ID of the room to link to as mentioned in the @Code attribute in the GuestRoom element in the OTA_HotelDescriptiveInfoRS [integer]1
TPA_ExtensionsOTA_HotelRatePlanRSA placeholder in the schema to allow for additional elements and attributes to be included per Trading Partner Agreement (TPA). Allows extensions to be added to the OpenTravel specification per trading partner agreement.1
RatePlansTPA_ExtensionsA collection of rate plans.1
RatePlanRatePlansAn individual rate plan. All details pertaining to a specific rate plan.0..n
@RatePlanCodeRatePlanThe ID of the rate code [integer]1
@RatePlanTypeCodeRatePlanThe code of the rate.[string]1
@SortRatePlanThe sort index.[integer]1
@IncludesTaxIndRatePlanIndicates whether tax is included (true/false).True, False1
@RateTypeRatePlanThe type of the rate:BaseRate, Default, CalculatedRate, BestBarByDay, NoRnAUpdate1
@MasterRateRatePlanIndicates whether the rate is a master rate.True, False1
@DefaultRatePlanThe rate default.[integer]1
@ThresholdRatePlanThe rate threshold.[integer]1
@CorporateTypeRatePlanThe corporate type.NotApplicable, Corporate, FixedCorporate, TradeFair1
@BBARTriggerRatePlanThe BBAR trigger.None, OpenClose, CTA, FPLOS1
RatePlanGroupsTPA_ExtensionsA collection of RatePlanGroup1
RatePlanGroupRatePlanGroupsA RatePlan0..n
@RatePlanCodeRatePlanGroupThe ID of the rate plan group.[integer]1
@RatePlanTypeCodeRatePlanGroupThe code of the rate plan group.[string]1
@SortRatePlanGroupThe sort index[integer]1
DescriptionRatePlanGroupDescription of the rate plan group.1
@NameDescriptionIndicates the type of the description.Name1
TextDescriptionFormatted text content.[string]1
<?xml version="1.0" encoding="UTF-16"?>
<OTA_HotelRatePlanRS EchoToken="Example123" PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <Success />
  <RatePlans>
    <RatePlan RatePlanCode="1">
      <Description Name="Name">
        <Text>Standard rate</Text>
      </Description>
      <SellableProducts>
        <SellableProduct InvTypeCode="1" />
        <SellableProduct InvTypeCode="2" />
        <SellableProduct InvTypeCode="3" />
      </SellableProducts>
    </RatePlan>
    <RatePlan RatePlanCode="2">
      <Description Name="Name">
        <Text>Non refundable</Text>
      </Description>
      <SellableProducts>
        <SellableProduct InvTypeCode="1" />
        <SellableProduct InvTypeCode="2" />
      </SellableProducts>
    </RatePlan>
    <RatePlan RatePlanCode="3">
      <Description Name="Name">
        <Text>Breakfast included</Text>
      </Description>
      <SellableProducts>
        <SellableProduct InvTypeCode="3" />
      </SellableProducts>
    </RatePlan>
  </RatePlans>
</OTA_HotelRatePlanRS>

 

Rates & Availability.

Availability, rate, and restriction updates from Smarthotel to partners will be done with the

OTA_HotelInvCountNotifRQ for availability updates

OTA_HotelRateAmountNotifRQ for rate updates

OTA_BookingRuleNotifRQ  for restriction updates

Smarthotel will send the requests and for the partner it suffices to send back a response with just the Success, Warnings, or Errors elements.

OTA_HotelInvCountNotifRQ/RS.

OTA_HotelInvCountNotifRQ

This message sends a notification to the channel manager that synchronizes the inventory available for sale at the hotel.

Element / @AttributeParentInfoValuesOccurrence
InventoriesOTA_HotelInvCountNotifRQA collection of Inventory. Hotel identification information are the attributes of this element.1..n
@HotelCodeInventoriesThe ID of the hotel.[integer]1
InventoryInventoriesThis is the inventory information for a given rate plan, room type, date, etc. The set of changes in the number of units of base inventory for one inventory type (code) to be made on the server. The server must successfully update all messages. Failure to update any single status message will result in the failure of all messages.1..n
StatusApplicationControlInventoryInformation on what the InvCountNotif Message applies to (i.e. the combination of inventory and/or rate codes) and the period of application. The StatusApplicationControl class is used to indicate to which block codes/rate plans/inventory codes a status should be applied.1
@InvTypeCodeStatusApplicationControlThe ID of the room, or the ID of the room plan (in case InvCodeApplication has been set to InvGroupingCode).[integer]1
@InvTypeStatusApplicationControlOptional attribute to be included when a bed type in a room needs to be updated. Always set to BedType. Omit when updating a room.BedType0..1
@InvCodeStatusApplicationControlOptional attribute to be included when a bed type in a room needs to be updated. Indicates the ID of the bed type.[integer]0..1
@InvCodeApplicationStatusApplicationControlOmit when updating a room, set to ‘InvGroupingCode’ when updating a room plan.InvGroupingCode0..1
@StartStatusApplicationControlThe starting value of the time span.[yyyy-MM-dd]1
@EndStatusApplicationControlThe ending value of the time span.[yyyy-MM-dd]1
@Mon, @Tue, @Weds, @Thur, @Fri, @Sat, @SunStatusApplicationControlWhen true, applies only to a particular day.True
False
0..1
InvCountsInventoryA collection of inventory counts.1..n
InvCountInvCountsIndividual inventory count.1
CountInvCountAn integer representing the count.[integer]1
CountTypeInvCountThis identifies the type of inventory count being reported. Refer to OpenTravel Code List Inventory Count Type (INV).1 = Physical0..1
<?xml version="1.0" encoding="UTF-16"?>
<OTA_HotelInvCountNotifRQ EchoToken="Example123" PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <POS>
    <Source>
      <RequestorID ID="APIKEY" MessagePassword="APIPASSWORD"/>
    </Source>
  </POS>
  <Inventories HotelCode="21052">
    <Inventory>
      <StatusApplicationControl InvTypeCode="1" Start="2018-07-24" End="2018-07-31" Mon="true" Fri="true" />
      <InvCounts>
        <InvCount Count="5" CountType="1" />
      </InvCounts>
    </Inventory>
  </Inventories>
</OTA_HotelInvCountNotifRQ>

 

OTA_HotelInvCountNotifRS

Element / @AttributeParentInfoValuesOccurrence
UniqueIDOTA_HotelInvCountNotifRSAn identifier used to uniquely reference an object in a system.1
@IDUniqueIDThe queue ID.[integer]1
@TypeUniqueIDA reference to the type of object defined by the UniqueID element.Refer to OpenTravel Code List Unique ID Type (UIT). Value:
18 = Other
1

Extra note;
Only the exact data stated in the request message will be processed; this data needs to be different then the data present in the channel manager.
Other data present in the channel manager will not be modified.

<?xml version="1.0" encoding="UTF-16"?>
<OTA_HotelInvCountNotifRS EchoToken="Example123" PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <Success />
  <UniqueID ID="123456" Type="18" />
</OTA_HotelInvCountNotifRS>

 

OTA_HotelRateAmountNotifRQ/RS.

OTA_HotelRateAmountNotifRQ

This message is used to provide a notification of a new rate plan created for a hotel and to synchronize the rate plan between the PMS and the channel manager.

Element / @AttributeParentInfoValuesOccurrence
RateAmountMessagesOTA_HotelRateAmountNotifRQA collection of RateAmountMessages that define the rate changes to be made.1..n
@HotelCodeRateAmountMessagesThe ID of the hotel.[integer]1
RateAmountMessageRateAmountMessagesRateAmountMessages that define the rate changes to be made.1..n
StatusApplicationControlRateAmountMessageInformation on what the RateAmount Message applies to (i.e. the combination of inventory and rate codes) and the period of application. The StatusApplicationControl class is used to indicate to which block codes/rate plans/inventory codes a status should be applied.1
@InvTypeCodeStatusApplicationControlThe ID of the room. Required when updating rates, not required when updating a rate plan.[integer]0..1
@InvTypeStatusApplicationControlOptional attribute to be included when a bed type in a room needs to be updated. Always set to BedType. Omit when updating a room.BedType0..1
@InvCodeStatusApplicationControlOptional attribute to be included when a bed type in a room needs to be updated. Indicates the ID of the bed type.[integer]0..1
@RatePlanCodeStatusApplicationControlThe ID of the rate, or the ID of the rate plan (in case RatePlanCodeApplication has been set to ‘RatePlanGroupingCode’).[integer]1
@RatePlanCodeApplicationStatusApplicationControlOmit when updating a rate, set to ‘RatePlanGroupingCode’ when updating a rate plan.RatePlanGroupingCode0..1
@StartStatusApplicationControlThe starting value of the time span.[yyyy-MM-dd]1
@EndStatusApplicationControlThe ending value of the time span.[yyyy-MM-dd]1
@Mon, @Tue, @Weds, @Thur, @Fri, @Sat, @SunStatusApplicationControlWhen true, applies only to a particular day.False
True
0..1
RatesRateAmountMessageA collection of rate changes to be synchronized between systems.1
RateRatesAn individual rate, which is a collection of amounts by guest, additional guests, and the unique id to identify the rate.1
BaseByGuestAmtsRateA collection of Base charges by number of guests.1
BaseByGuestAmtBaseByGuestAmtsBase charge for a given number of guests for a given age qualifying code.1..n
@NumberOfGuestsBaseByGuestAmtThe number of guests associated with this base charge. Only required for AgeQualifyingCode 10 (Adult).1 = Single use
2 = Standard use
3 = Triple use
4 = Quad use
0..1
@AgeQualifyingCodeBaseByGuestAmtDefines an age range or age category of a guest.Refer to OpenTravel Code List Age Qualifying Code (AQC).
10=Adult (Default)
0..1
@DecimalPlacesBaseByGuestAmtThe ISO 4217 standard "minor unit" for the number of decimal places for a particular currency.[integer]0..1
@AmountAfterTaxBaseByGuestAmtThe total amount including all associated taxes (e.g., sales tax, VAT, GST or any associated tax).[numeric]1
AdditionalGuestAmountsRateA collection of charges that apply to for additional guests.0..1
AdditionalGuestAmountAdditionalGuestAmountsCollection of incremental charges for additional guests.1
@AmountAdditionalGuestAmountA monetary amount, including tax.[numeric]1
@DecimalPlacesAdditionalGuestAmountDecimal places for currency code.[integer]1
<?xml version="1.0" encoding="UTF-16"?>
<OTA_HotelRateAmountNotifRQ EchoToken="Example123" PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <POS>
    <Source>
      <RequestorID ID="APIKEY" MessagePassword="APIPASSWORD"/>
    </Source>
  </POS>
  <RateAmountMessages HotelCode="21052">
    <RateAmountMessage>
      <StatusApplicationControl InvTypeCode="1" RatePlanCode="1" Start="2018-07-24" End="2018-07-31" Mon="true" Fri="true" />
      <Rates>
        <Rate>
          <BaseByGuestAmts>
            <BaseByGuestAmt NumberOfGuests="1" AgeQualifyingCode="10" AmountAfterTax="3895" DecimalPlaces="2" />
            <BaseByGuestAmt NumberOfGuests="2" AgeQualifyingCode="10" AmountAfterTax="4995" DecimalPlaces="2" />
          </BaseByGuestAmts>
          <AdditionalGuestAmounts>
            <AdditionalGuestAmount Amount="1000" DecimalPlaces="2" />
          </AdditionalGuestAmounts>
        </Rate>
      </Rates>
    </RateAmountMessage>
  </RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>

 

OTA_HotelRateAmountNotifRS

This message is used to indicate the status of processing the OTA_HotelRateAmountNotifRQ message

Element / @AttributeParentInfoValuesOccurrence
UniqueIDOTA_HotelRateAmountNotifRSAn identifier used to uniquely reference an object in a system.1
@IDUniqueIDThe queue ID.[integer]1
@TypeUniqueIDA reference to the type of object defined by the UniqueID element.Refer to OpenTravel Code List Unique ID Type (UIT). Value:
18 = Other
1

Extra note;
Only the exact data stated in the request message will be processed; this data needs to be different then the data present in the channel manager.
Other data present in the channel manager will not be modified.

<?xml version="1.0" encoding="UTF-16"?>
<OTA_HotelRateAmountNotifRS EchoToken="Example123" PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <Success />
  <UniqueID ID="123456" Type="18" />
</OTA_HotelRateAmountNotifRS>

 

OTA_HotelBookingRuleNotifRQ/RS.

OTA_HotelBookingRuleNotifRQ

The OTA_HotelBookingRuleNotifRQ is the message that sends the notification of the rules and restrictions affecting the availability status of the hotel. Currently Smarthotel supports the following restrictions: Master Open/Close, Open/Closed to Arrival, Open/Closed to Departure, Minimun Length of Stay and Maximum Length of Stay.

Element / @AttributeParentInfoValuesOccurrence
RuleMessagesOTA_HotelBookingRuleNotifRQContainer for the individual RuleMessage(s). An OTA_HotelBookingRuleNotifRQ contains the booking rules for a single hotel. Hotel identification information are the attributes of this element.1..n
@HotelCodeRuleMessagesThe ID of the hotel.[integer]1
RuleMessageRuleMessagesContainer for the collection of Booking Rules for a given hotel or chain.1..n
StatusApplicationControlRuleMessageInformation on what the BookingRule Message applies to (i.e. the combination of inventory and rate codes) and the period of application. The StatusApplicationControl class is used to indicate to which block codes/rate plans/inventory codes a status should be applied.1
@InvTypeCodeStatusApplicationControlThe ID of the room.[integer]1
@InvTypeStatusApplicationControlOptional attribute to be included when a bed type in a room needs to be updated. Always set to BedType. Omit when updating a room.BedType0..1
@InvCodeStatusApplicationControlOptional attribute to be included when a bed type in a room needs to be updated. Indicates the ID of the bed type.[integer]0..1
@RatePlanCodeStatusApplicationControlThe ID of the rate.[integer]1
@StartStatusApplicationControlThe starting value of the time span.[yyyy-MM-dd]1
@EndStatusApplicationControlThe ending value of the time span.[yyyy-MM-dd]1
@Mon, @Tue, @Weds, @Thur, @Fri, @Sat, @SunStatusApplicationControlWhen true, applies only to a particular day.True
False
0..1
BookingRulesRuleMessageContainer for the collection of Booking Rules which apply for the information indicated in the StatusApplicationControl element. A collection of BookingRule.1
BookingRuleBookingRulesThe BookingRule element defines restrictions to rates and stays at the hotel for a given rate plan, room type or rate plan/room type combination.1..n
RestrictionStatusBookingRuleAvailability status assigned to the room rate combination for this booking rule.0..n
@RestrictionRestrictionStatusIndicates the type of the restriction.Arrival
Departure
Master (default)
0..1
@StatusRestrictionStatusThe status.Open
Close
1
LengthsOfStayBookingRuleA collection of lengths of stay. A collection of LengthOfStay.0..1
LengthOfStayLengthsOfStayA collection of patterns defining allowable lengths of stay (LOS).1..n
@MinMaxMessageTypeLengthOfStayAn enumerated type used to define how the minimum and maximum LOS is applied.SetMinLOS
SetMaxLOS
1
@TimeLengthOfStayUsed in conjunction with the MinMaxMessageType and the TimeUnit to define the length of stay requirements. (Only applicable for MinMaxMessageType ‘SetMinLOS’ and ‘SetMaxLOS’.)[integer]0..1
<?xml version="1.0" encoding="UTF-16"?>
<OTA_HotelBookingRuleNotifRQ EchoToken="Example123" PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <POS>
    <Source>
      <RequestorID ID="APIKEY" MessagePassword="APIPASSWORD"/>
    </Source>
  </POS>
  <RuleMessages HotelCode="21052">
    <RuleMessage>
      <StatusApplicationControl InvTypeCode="1" RatePlanCode="1" Start="2018-07-24" End="2018-07-31" Mon="true" Fri="true" />
      <BookingRules>
        <BookingRule>
          <RestrictionStatus Restriction="Master" Status="Open" />
          <RestrictionStatus Restriction="Arrival" Status="Close" />
          <RestrictionStatus Restriction="Departure" Status="Close" />
          <LengthsOfStay>
            <LengthOfStay MinMaxMessageType="SetMinLOS" Time="2" />
            <LengthOfStay MinMaxMessageType="SetMaxLOS" Time="7" />
          </LengthsOfStay>
        </BookingRule>
      </BookingRules>
    </RuleMessage>
  </RuleMessages>
</OTA_HotelBookingRuleNotifRQ>

 

OTA_HotelBookingRuleNotifRS

The OTA_HotelBookingRuleNotifRS is the message used to indicate the status of processing the OTA_HotelBookingRuleNotifRQ message.

Element / @AttributeParentInfoValuesOccurrence
UniqueIDOTA_HotelBookingRuleNotifRSAn identifier used to uniquely reference an object in a system.1
@IDUniqueIDThe queue ID.[integer]1
@TypeUniqueIDA reference to the type of object defined by the UniqueID element.Refer to OpenTravel Code List Unique ID Type (UIT). Value:
18 = Other
1

Extra note;
Only the exact data stated in the request message will be processed; this data needs to be different then the data present in the channel manager.
Other data present in the channel manager will not be modified.

<?xml version="1.0" encoding="UTF-16"?>
<OTA_HotelBookingRuleNotifRS EchoToken="Example123" PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <Success />
  <UniqueID ID="123456" Type="18" />
</OTA_HotelBookingRuleNotifRS>

 

Reservations.

The OTA_HotelResNotifRQ/RS supports the functionality of updating other systems with reservation data. The message assumes a push model, with the originating system pushing the data to another system. The originating system would usually be a booking source. This call is used to push new created reservations to the channel manager or the PMS.

The OTA_HotelResModifyNotifRQ/RS is used for modifying a reservation. It is used for a full overlay of the reservation. When changing data that requires an availability check, this message assumes the availability is known. (if availability is not known an availability check including the reservation ID may be useful).

The OTA_CancelRQ/RS is a generic message, available as an action on several OpenTravel services which requests a server to cancel the booking identified by the UniqueID element.

OTA_HotelResNotifRQ/RS.

Smarthotel supports the PUSH method for transferring reservations. This means that as soon as a new reservation is created at the originated system, the originated system is responsible for sending this reservation through to the connected system.

The same reservation number must be used for the lifespan of the reservation through all its possible mutations (booking, modifications and cancellation).  

OTA_HotelResNotifRQ

This message supports the functionality of updating other systems with reservation data. The message assumes a push model, with the originating system pushing the data to another system. The originating system would usually be a booking source.

Element / @AttributeParentInfoValuesOccurrence
HotelReservationsOTA_HotelResNotifRQ1
HotelreservationHotelReservations1..n
@ResStatusHotelReservationBook1
@CreateDateTimeHotelReservationyyyy-mm-ddThh:mm:ss1
RoomStaysHotelReservation1
RoomStayRoomStays1..n
@IndexNumberRoomStayPlease find the description on how to use the IndexNumber under this table1..n0..1
RoomTypesRoomStays1
RoomTypeRoomTypes1..n
@RoomTypeCodeRoomType1
@NumberOfUnitsRoomType1..n1
RoomRatesRoomStay1
RoomRateRoomRates1..n
@RatePlanCodeRoomRate1
RatesRoomRate1
RateRates1
@EffectiveDateRateyyyy-mm-dd1
BaseRate1
@AmountAfterTaxBaseNo decimal point: 120.50 becomes 120501
@AmountBeforeTaxBaseNo decimal point: 120.50 becomes 120501
@CurrencyCodeBaseEUR
USD
1
@DecimalPlacesBase21
RatePlansRoomStay1
RatePlanRatePlans0..1
MealsIncludedMealsIncluded0..1
@MealPlanCodesMealsIncludedPlease Refer to the Code List Meal Plan Type (MPT)1
CommissionRatePlan0..1
CommissionPayableAmountCommission1
@AmountCommissionPayableAmount1
@DecimalPlacesCommissionPayableAmount1
@CurrencyCodeCommissionPayableAmount1
GuestCountsRoomStay1
GuestCountGuestCounts1..n
@AgeQualifyingCodeGuestCountPlease Refer to the Code List Age Qualifying Code (AQC)1
@CountGuestCount1..n1
TimeSpanRoomStay1
@StartTimeSpanCheck in Dateyyyy-mm-dd1
@EndTimeSpanCheck out Dateyyyy-mm-dd1
CommentsRoomStay0..1
CommentComments1..n
TextCommentComment included as CDATA, to prevent invalid characters from breaking the XML.1
SpecialRequestsRoomStay0..n
SpecialRequestSpecialRequests1..n
Text SpecialRequestRequest included as CDATA, to prevent invalid characters from breaking the XML.1
TotalRoomStayTotal of the RoomStay1
@AmountAfterTaxTotalNo decimal point: 120.50 becomes 120501
@AmountBeforeTaxTotalNo decimal point: 120.50 becomes 120501
@CurrencyCodeTotalEUR1
USD
@DecimalPlacesTotal21
TaxesTotal0..1
TaxTax1
@AmountTaxNo decimal point: 120.50 becomes 120501
@DecimalPlacesTax21
@CurrencyCodeTaxEUR
USD
1
ResGuestRPHsRoomStayReference which ResGuest is in which RoomStay1
@ServiceRPHServiceA unique ID for a service that may be referenced elsewhere in the schema.[integer]1
@RPHResGuestRPHThe reference number of the guest. Must stay consistent with the RPH values defined in ResGuest.1
ServicesHotelReservationCollection of services. A collection of Service objects. This is the collection of all services associated with any part of this reservation (the reservation in its entirety, one or more guests, or one or more room stays). Which services are attributable to which part is determined by each object's ServiceRPHs collection.1
ServiceServicesA Service object represents a non-room product provided to guests. Service products may have associated inventory and charges. 0..n
@ServiceInventoryCodeServiceThe external code of the room the service applies to.[integer]1
@IDServiceA unique identifying value assigned by the creating system. The ID attribute may be used to reference a primary-key value within a database or in a particular implementation.[integer]1
PriceServiceThe selling price of this Service.1
@NumberOfUnitsPriceThe number of services. [integer]1
BasePriceThe base amount charged for the service per unit of time.1
@AmountAfterTaxPriceThe total amount including all associated taxes.[numeric]1
@DecimalPlacesPriceThe ISO 4217 standard "minor unit" for the number of decimal places for a particular currency.[integer]0..1
ServiceDetailsServiceDetails on the Service including Guest Counts, Time Span of this Service, pointers to Res Guests, guest Memberships, Comments and Special Requests pertaining to this particular Service and finally financial information related to the Service, including Guarantee, Deposit and Payment and Cancellation Penalties.1
GuestCountsServiceDetailsA collection of Guest Counts associated to the whole Reservation or a particular Room Stay or Service. A child Guest Count element is required for each distinct age group. A collection of GuestCount by age group.1
GuestCountGuestCountsA recurring element that identifies the number of guests and ages of the guests.1
@CountGuestCountThe number of guests in one AgeQualifyingCode or Count.[integer]1
TimeSpanServiceDetailsThe Time Span which covers the Service.1
@StartTimeSpanThe starting value of the time span.[yyyy-MM-dd]1
@EndTimeSpanThe ending value of the time span.[yyyy-MM-dd]1
ServiceDescriptionServiceDetailsDescription of the service. An indication of a new paragraph for a sub-section of a formatted text message.1
TextServiceDescriptionFormatted text content.[CDATA string]1
TPA_ExtensionsServiceA placeholder in the schema to allow for additional elements and attributes to be included per Trading Partner Agreement (TPA). Allows extensions to be added to the OpenTravel specification per trading partner agreement.1
ServiceExtensionTPA_ExtensionsAn extension to the service.1
@ServiceChargeTypeServiceExtensionThe way the service is charged.Refer to Code List Service Charge Type

1
SelectedDatesServiceExtensionA collection of dates on which the service is active.1
DateSelectedDatesA date on which the service is active.0..n
@ValueDateThe date.[yyyy-MM-dd]1
ResGuestsHotelReservation1
ResGuestResguests1..n
@ResguestRPHResGuest1
ProfilesResGuest1
ProfileInfoProfiles1..n
ProfileProfileInfo1
CustomerProfile1
PersonNameCustomer1
GivenNamePersonNameGivenName included as CDATA, to prevent invalid characters from breaking the XML.1
SurNamePersonNameSurname included as CDATA, to prevent invalid characters from breaking the XML.1
ResGlobalInfoHotelReservation1
ProfilesResGlobalInfoContains the data of the booker1
ProfileProfiles1..n
@ProfileTypeProfileRefer to the Code List Profile Types1
CustomerProfile1
@GenderCustomerMale
Female
0..1
@BirthDateCustomeryyyy-mm-dd0..1
PersonNameCustomer0..1
GivenNamePersonNameGivenName included as CDATA, to prevent invalid characters from breaking the XML.1
SurNamePersonNameSurName included as CDATA, to prevent invalid characters from breaking the XML.1
TelephoneCustomer0..1
@PhoneNumberTelephone1
EmailCustomer0..1
AddressCustomer0..1
StreetNmbrAddress1
CityNameAddress1
PostalCodeAddress1
CountryNameAddressCountry name, according to the ISO 3166-1 alpha-2 list (e.g., NL). The code of a country (e.g. as used in an address or to specify citizenship of a traveller).1
CompanyNameAddress0..1
CommentsResGlobalInfo1
CommentCommentsComment included as CDATA, to prevent invalid characters from breaking the XML.1..n
TextComment1
GuaranteeResGlobalInfoCredit card details related to the reservation0..1
GuaranteesAcceptedGuarantee1
PaymentCardGuaranteesAccepted1
@cardCodePaymentCard1
@CardNumberPaymentCard1
@ExpireDatePaymentCardMMYY1
TotalResGlobalInfoReservation total1
@AmountAfterTaxTotalNo decimal point: 120.50 becomes 120501
@AmountBeforeTaxTotalNo decimal point: 120.50 becomes 120501
@CurrencyCodeTotalEUR
USD
1
@DecimalPlacesTotal21
BasicPropertyInfoResGlobalInfo1
@HotelCodeBasicPropertyInfoThe hotel code that identifies this hotel (PIN code).1
HotelreservationIDsResGlobalInfo1
HotelReservationIDHotelReservationIDs1
ResID_ValueHotelReservationIDThe reservation number supplied by the OTA. The same reservation number must be used for the lifespan of the reservation through all its possible mutations (modifications and cancellation).1
ResID_TypeHotelReservationID141
<?xml version="1.0" encoding="utf-8"?>
<OTA_HotelResNotifRQ PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <POS>
    <Source AgentDutyCode="OTA">
      <RequestorID ID="APIKey" MessagePassword="APIKeyPassword"> </RequestorID>
    </Source>
  </POS>
  <HotelReservations>
    <HotelReservation ResStatus="Book" CreateDateTime="2018-09-22T08:26:21" LastModifyDateTime="2018-09-22T08:27:06">
      <RoomStays>
        <RoomStay IndexNumber="401">
          <RoomTypes>
            <RoomType RoomTypeCode="20002" NumberOfUnits="1" />
          </RoomTypes>
          <RoomRates>
            <RoomRate RatePlanCode="1">
              <Rates>
                <Rate EffectiveDate="2018-10-11">
                  <Base AmountAfterTax="9500" AmountBeforeTax="9000" CurrencyCode="EUR" DecimalPlaces="2" />
                </Rate>
                <Rate EffectiveDate="2018-10-12">
                  <Base AmountAfterTax="9500" AmountBeforeTax="9000" CurrencyCode="EUR" DecimalPlaces="2" />
                </Rate>
                <Rate EffectiveDate="2018-10-13">
                  <Base AmountAfterTax="9500" AmountBeforeTax="9000" CurrencyCode="EUR" DecimalPlaces="2" />
                </Rate>
              </Rates>
            </RoomRate>
          </RoomRates>
          <RatePlans>
            <RatePlan>
              <MealsIncluded MealPlanCodes="12" />
              <Commission>
                <CommissionPayableAmount Amount="5355" DecimalPlaces="3" CurrencyCode="EUR"/>
              </Commission>
            </RatePlan>
          </RatePlans>
          <GuestCounts>
            <GuestCount AgeQualifyingCode="10" Count="2" isPerRoom="true" />
          </GuestCounts>
          <TimeSpan Start="2018-10-11" End="2018-10-14" />
          <Comments>
            <Comment>
              <Text>
                <![CDATA[Fictional comment]]>
              </Text>
            </Comment>
            <Comment>
              <Text>
                <![CDATA[Another fictional comment]]>
              </Text>
            </Comment>
          </Comments>
          <SpecialRequests>
            <SpecialRequest>
              <Text>
                <![CDATA[Smoking preference : Non-Smoking]]>
              </Text>
            </SpecialRequest>
          </SpecialRequests>
          <Total AmountAfterTax="28500" AmountBeforeTax="33000" CurrencyCode="EUR" DecimalPlaces="2" />
          <ResGuestRPHs>
            <ResGuestRPH RPH="0" />
          </ResGuestRPHs>
        </RoomStay>
        <RoomStay IndexNumber="402">
          <RoomTypes>
            <RoomType RoomTypeCode="20003" NumberOfUnits="1" />
          </RoomTypes>
          <RoomRates>
            <RoomRate RatePlanCode="1">
              <Rates>
                <Rate EffectiveDate="2018-10-11">
                  <Base AmountAfterTax="9500" AmountBeforeTax="9000" CurrencyCode="EUR" DecimalPlaces="2" />
                </Rate>
                <Rate EffectiveDate="2018-10-12">
                  <Base AmountAfterTax="9500" AmountBeforeTax="9000" CurrencyCode="EUR" DecimalPlaces="2" />
                </Rate>
                <Rate EffectiveDate="2018-10-13">
                  <Base AmountAfterTax="9500" AmountBeforeTax="9000" CurrencyCode="EUR" DecimalPlaces="2" />
                </Rate>
              </Rates>
            </RoomRate>
          </RoomRates>
          <RatePlans>
            <RatePlan>
              <MealsIncluded MealPlanCodes="12" />
              <Commission>
                <CommissionPayableAmount Amount="5355" DecimalPlaces="3" CurrencyCode="EUR"/>
              </Commission>
            </RatePlan>
          </RatePlans>
          <GuestCounts>
            <GuestCount AgeQualifyingCode="10" Count="2" isPerRoom="true" />
          </GuestCounts>
          <TimeSpan Start="2018-10-11" End="2018-10-14" />
          <Comments>
            <Comment>
              <Text>
                <![CDATA[Fictional comment]]>
              </Text>
            </Comment>
            <Comment>
              <Text>
                <![CDATA[Another fictional comment ]]>
              </Text>
            </Comment>
          </Comments>
          <SpecialRequests>
            <SpecialRequest>
              <Text>
                <![CDATA[Smoking preference : Non-Smoking]]>
              </Text>
            </SpecialRequest>
          </SpecialRequests>
          <Total AmountAfterTax="28500" AmountBeforeTax="33000" CurrencyCode="EUR" DecimalPlaces="2">
            <Taxes>
              <Tax Amount="2030" CurrencyCode="EUR" DecimalPlaces="2" />
            </Taxes>
          </Total>
          <ResGuestRPHs>
            <ResGuestRPH RPH="1" />
          </ResGuestRPHs>
        </RoomStay>
      </RoomStays>
      <ResGuests>
        <ResGuest ResGuestRPH="0">
          <Profiles>
            <ProfileInfo>
              <Profile>
                <Customer>
                  <PersonName>
                    <GivenName>
                      <![CDATA[John]]>
                    </GivenName>
                    <Surname>
                      <![CDATA[Smith]]>
                    </Surname>
                  </PersonName>
                </Customer>
              </Profile>
            </ProfileInfo>
            <ProfileInfo>
              <Profile>
                <Customer>
                  <PersonName>
                    <GivenName>
                      <![CDATA[Jane]]>
                    </GivenName>
                    <Surname>
                      <![CDATA[Smith]]>
                    </Surname>
                  </PersonName>
                </Customer>
              </Profile>
            </ProfileInfo>
          </Profiles>
        </ResGuest>
        <ResGuest ResGuestRPH="1">
          <Profiles>
            <ProfileInfo>
              <Profile>
                <Customer>
                  <PersonName>
                    <GivenName>
                      <![CDATA[John]]>
                    </GivenName>
                    <Surname>
                      <![CDATA[Doe]]>
                    </Surname>
                  </PersonName>
                </Customer>
              </Profile>
            </ProfileInfo>
            <ProfileInfo>
              <Profile>
                <Customer>
                  <PersonName>
                    <GivenName>
                      <![CDATA[Jane]]>
                    </GivenName>
                    <Surname>
                      <![CDATA[Doe]]>
                    </Surname>
                  </PersonName>
                </Customer>
              </Profile>
            </ProfileInfo>
            <ProfileInfo>
              <Profile>
                <Customer>
                  <PersonName>
                    <GivenName>
                      <![CDATA[Jake]]>
                    </GivenName>
                    <Surname>
                      <![CDATA[Doe]]>
                    </Surname>
                  </PersonName>
                </Customer>
              </Profile>
            </ProfileInfo>
          </Profiles>
        </ResGuest>
      </ResGuests>
      <ResGlobalInfo>
        <Profiles>
          <ProfileInfo>
            <Profile ProfileType="1">
              <Customer Gender="Male" BirthDate="1955-08-01">
                <PersonName>
                  <GivenName>
                    <![CDATA[John]]>
                  </GivenName>
                  <Surname>
                    <![CDATA[Doe]]>
                  </Surname>
                </PersonName>
                <Telephone PhoneNumber="+31182751118" />
                <Email>j.doe@gmail.com</Email>
                <Address>
                  <StreetNmbr>Einsteinstraat 5</StreetNmbr>
                  <CityName>Reeuwijk</CityName>
                  <PostalCode>2811EP</PostalCode>
                  <CountryName>NL</CountryName>
                  <CompanyName>Smarthotel</CompanyName>
                </Address>
              </Customer>
            </Profile>
          </ProfileInfo>
        </Profiles>
        <Comments>
          <Comment>
            <Text>
              <![CDATA[Comment that will be displayed on the reservation.]]>
            </Text>
          </Comment>
        </Comments>
        <Guarantee>
          <GuaranteesAccepted>
            <GuaranteeAccepted>
              <PaymentCard CardCode="VI" CardNumber="4444444444444444" ExpireDate="0918">
                <CardHolderName>John Smith</CardHolderName>
              </PaymentCard>
            </GuaranteeAccepted>
          </GuaranteesAccepted>
        </Guarantee>
        <Total AmountAfterTax="28500" CurrencyCode="EUR" DecimalPlaces="2" />
        <BasicPropertyInfo HotelCode="101073" />
        <HotelReservationIDs>
          <HotelReservationID ResID_Value="your-unique-reference" ResID_Type="14" />
        </HotelReservationIDs>
      </ResGlobalInfo>
    </HotelReservation>
  </HotelReservations>
</OTA_HotelResNotifRQ>

 

Explanation on how to use IndexNumber, as these numbers always need to be unique throughout the booking process, to modify and cancel per RoomStay.
Example:
Reservation with 2 room stays, one has IndexNumber 123 and the other has 456.
Then a modification is created with 3 room stays, IndexNumbers 123, 456 and 789. This means the first 2 was modified and 789 is a new room stay.
Following a new modification with 4 room stays IndexNumbers 789, 145, 658, 987. 789 was modified, 123 and 456 were canceled and 145, 658 and 987 were booked.

OTA_HotelResNotifRS

This message returns acknowledgement that the reservation has been successfully received, or includes warnings from business processing rules or errors if the request did not succeed. It may optionally include the updated reservation data.

Element / @AttributeParentInfoValuesOccurrence
SuccessOTA_HotelResNotifRSOnly there if reservation was added successfully0..1
ErrorsOTA_HotelResNotifRSOnly if the reservation was not added0..1
ErrorErrors1..n
@CodeError1
TextError
HotelReservationsOTA_HotelResNotifRS0..1
HotelReservationHotelReservations1..n
UniqueIDHotelReservation1
@TypeUniqueID141
@IDUniqueIDReservation number supplied by the OTA1
ResGlobalInfoHotelReservation1
HotelReservationIDsResGlobalInfo1
HotelReservationIDHotelReservationIDs1..n
@ResID_TypeHotelReservationID141
@ResID_ValueHotelReservationIDReservation ID from the Channel manager1

Success

<?xml version="1.0" encoding="utf-8"?>
<OTA_HotelResNotifRS>
  <Success />
  <HotelReservations>
    <HotelReservation>
      <UniqueID Type="14" ID="your-unique-reference" />
      <ResGlobalInfo>
        <HotelReservationIDs>
          <HotelReservationID ResID_Type="14" ResID_Value="1160" />
        </HotelReservationIDs>
      </ResGlobalInfo>
    </HotelReservation>
  </HotelReservations>
</OTA_HotelResNotifRS>

 

Error

<?xml version="1.0" encoding="utf-8"?>
<OTA_HotelResNotifRS>
  <Errors>
    <Error Code="11">
      <Text>No ID was found for hotel with code 101073.</Text>
    </Error>
  </Errors>
</OTA_HotelResNotifRS>

 

OTA_HotelResModifyNotifRQ/RS.

OTA_HotelResModifyNotifRQ

This is a request message for modifying a reservation. It is used for a full overlay of the reservation. When changing data that requires an availability check, this message assumes the availability is known (if availability is not known an availability check containing the reservation ID may be useful).

Element / @AttributeParentInfoValuesOccurrence
HotelResModifiesOTA_HotelResModifyNotifRQ1
HotelResModifyHotelResModifies1..n
@ResStatusHotelResModifyMODIFY1
@CreateDateTimeHotelResModifyyyyy-mm-ddThh:mm:ss1
@ LastModifyDateTimeHotelResModifyyyyy-mm-ddThh:mm:ss1
RoomStaysHotelResModify1
RoomStayRoomStays1..n
@IndexNumberRoomStayPlease find the description on how to use the IndexNumber under this table1-655350..1
RoomTypesRoomStays1
RoomTypeRoomTypes1..n
@RoomTypeCodeRoomType1
@NumberOfUnitsRoomType361611
RoomRatesRoomStay1
RoomRateRoomRates1..n
@RatePlanCodeRoomRate1
RatesRoomRate1
RateRates1
@EffectiveDateRateyyyy-mm-dd1
BaseRate1
@AmountAfterTaxBaseNo decimal point: 120.50 becomes 120501
@AmountBeforeTaxBaseNo decimal point: 120.50 becomes 120501
@CurrencyCodeBaseEUR
USD
1
@DecimalPlacesBase21
RatePlansRoomStay1
RatePlanRatePlans0..1
MealsIncludedMealsIncluded0..1
@MealPlanCodesMealsIncludedPlease refer to MealPlanList (MPT)1
CommissionRatePlan1
CommissionPayableAmountCommission1
@AmountCommissionPayableAmount1
@DecimalPlacesCommissionPayableAmount1
@CurrencyCodeCommissionPayableAmount1
GuestCountsRoomStay1
GuestCountGuestCounts1..n
@AgeQualifyingCodeGuestCountPlease refer to Code List Age Qualifying (AQC)1
@CountGuestCount361611
TimeSpanRoomStay1
@StartTimeSpanyyyy-mm-dd1
@EndTimeSpanyyyy-mm-dd1
CommentsRoomStay0..1
CommentComments1..n
TextCommentComment included as CDATA, to prevent invalid characters from breaking the XML.1
SpecialRequestsRoomStay0..n
SpecialRequestSpecialRequests1..n
Text SpecialRequestRequest included as CDATA, to prevent invalid characters from breaking the XML.1
TotalRoomStayTotal of the RoomStay1
@AmountAfterTaxTotalNo decimal point: 120.50 becomes 120501
@AmountBeforeTaxTotalNo decimal point: 120.50 becomes 120501
@CurrencyCodeTotalEUR1
USD
@DecimalPlacesTotal21
TaxesTotal0..1
TaxTax1
@AmountTaxNo decimal point: 120.50 becomes 120501
@DecimalPlacesTax21
@CurrencyCodeTaxEUR
USD
1
ResGuestRPHsRoomStayReference which ResGuest is in which RoomStay1
@RPHResGuestRPHThe reference number of the guest. Must stay consistent with the RPH values defined in ResGuest.1
ResGuestsHotelResModify1
ResGuestResguests1..n
@ResguestRPHResGuest1
ProfilesResGuest1
ProfileInfoProfiles1..n
ProfileProfileInfo1
CustomerProfile1
PersonNameCustomer1
GivenNamePersonNameGivenName included as CDATA, to prevent invalid characters from breaking the XML.1
SurNamePersonNameSurname included as CDATA, to prevent invalid characters from breaking the XML.1
ResGlobalInfoHotelResModify1
ProfilesResGlobalInfoContains the data of the booker1
ProfileProfiles1..n
@ProfileTypeProfilePlease refer to Code List Profile Type (PRT)1
CustomerProfile1
@GenderCustomerMale
Female
0..1
@BirthDateCustomeryyyy-mm-dd0..1
PersonNameCustomer0..1
GivenNamePersonNameGivenName included as CDATA, to prevent invalid characters from breaking the XML.1
SurNamePersonNameSurName included as CDATA, to prevent invalid characters from breaking the XML.1
TelephoneCustomer0..1
@PhoneNumberTelephone1
EmailCustomer0..1
AddressCustomer0..1
StreetNmbrAddress1
CityNameAddress1
PostalCodeAddress1
CountryNameAddressCountry name, according to the ISO 3166-1 alpha-2 list (e.g., NL). The code of a country (e.g. as used in an address or to specify citizenship of a traveller).1
CompanyNameAddress0..1
CommentsResGlobalInfo1
CommentCommentsComment included as CDATA, to prevent invalid characters from breaking the XML.1..n
TextComment1
GuaranteeResGlobalInfoCredit card details related to the reservation0..1
GuaranteesAcceptedGuarantee1
PaymentCardGuaranteesAccepted1
@CardCodePaymentCard1
@CardNumberPaymentCard1
@ExpireDatePaymentCardyyyy/mm1
TotalResGlobalInfoReservation total1
@AmountAfterTaxTotalNo decimal point: 120.50 becomes 120501
@AmountBeforeTaxTotalNo decimal point: 120.50 becomes 120501
@CurrencyCodeTotalEUR
USD
1
@DecimalPlacesTotal21
BasicPropertyInfoResGlobalInfo1
@HotelCodeBasicPropertyInfoThe hotel code that identifies this hotel (PIN code).1
HotelreservationIDsResGlobalInfo1
HotelReservationIDHotelReservationIDs1
ResID_ValueHotelReservationIDThe reservation number supplied by the OTA. The same reservation number must be used for the lifespan of the reservation through all its possible mutations (modifications and cancellation).1
ResID_TypeHotelReservationID141
<?xml version="1.0" encoding="utf-8"?>
<OTA_HotelResModifyNotifRQ PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <POS>
    <Source AgentDutyCode="OTA">
      <RequestorID ID="APIKEY" MessagePassword="APIPASSWORD"/>
    </Source>
  </POS>
  <HotelResModifies>
    <HotelResModify ResStatus="Modify" CreateDateTime="2018-09-22T08:26:21" LastModifyDateTime="2018-09-22T08:27:06">
      <RoomStays>
        <RoomStay IndexNumber="401">
          <RoomTypes>
            <RoomType RoomTypeCode="20002" NumberOfUnits="1" />
          </RoomTypes>
          <RoomRates>
            <RoomRate RatePlanCode="1">
              <Rates>
                <Rate EffectiveDate="2018-10-11">
                  <Base AmountAfterTax="9500" AmountBeforeTax="9000" CurrencyCode="EUR" DecimalPlaces="2" />
                </Rate>
                <Rate EffectiveDate="2018-10-12">
                  <Base AmountAfterTax="9500" AmountBeforeTax="9000" CurrencyCode="EUR" DecimalPlaces="2" />
                </Rate>
                <Rate EffectiveDate="2018-10-13">
                  <Base AmountAfterTax="9500" AmountBeforeTax="9000" CurrencyCode="EUR" DecimalPlaces="2" />
                </Rate>
              </Rates>
            </RoomRate>
          </RoomRates>
          <RatePlans>
            <RatePlan>
              <MealsIncluded MealPlanCodes="12" />
              <Commission>
                <CommissionPayableAmount Amount="5355" DecimalPlaces="3" CurrencyCode="EUR"/>
              </Commission>
            </RatePlan>
          </RatePlans>
          <GuestCounts>
            <GuestCount AgeQualifyingCode="10" Count="2" isPerRoom="true" />
          </GuestCounts>
          <TimeSpan Start="2018-10-11" End="2018-10-13" />
          <Comments>
            <Comment>
              <Text>
                <![CDATA[Fictional comment]]>
              </Text>
            </Comment>
            <Comment>
              <Text>
                <![CDATA[Another fictional comment]]>
              </Text>
            </Comment>
          </Comments>
          <SpecialRequests>
            <SpecialRequest>
              <Text>
                <![CDATA[Smoking preference : Non-Smoking]]>
              </Text>
            </SpecialRequest>
          </SpecialRequests>
          <Total AmountAfterTax="28500" AmountBeforeTax="33000" CurrencyCode="EUR" DecimalPlaces="2" />
          <ResGuestRPHs>
            <ResGuestRPH RPH="0" />
          </ResGuestRPHs>
        </RoomStay>
        <RoomStay IndexNumber="402">
          <RoomTypes>
            <RoomType RoomTypeCode="20003" NumberOfUnits="1" />
          </RoomTypes>
          <RoomRates>
            <RoomRate RatePlanCode="1">
              <Rates>
                <Rate EffectiveDate="2018-10-11">
                  <Base AmountAfterTax="9500" AmountBeforeTax="9000" CurrencyCode="EUR" DecimalPlaces="2" />
                </Rate>
                <Rate EffectiveDate="2018-10-12">
                  <Base AmountAfterTax="9500" AmountBeforeTax="9000" CurrencyCode="EUR" DecimalPlaces="2" />
                </Rate>
                <Rate EffectiveDate="2018-10-13">
                  <Base AmountAfterTax="9500" AmountBeforeTax="9000" CurrencyCode="EUR" DecimalPlaces="2" />
                </Rate>
              </Rates>
            </RoomRate>
          </RoomRates>
          <RatePlans>
            <RatePlan>
              <MealsIncluded MealPlanCodes="12" />
              <Commission>
                <CommissionPayableAmount Amount="5355" DecimalPlaces="3" CurrencyCode="EUR"/>
              </Commission>
            </RatePlan>
          </RatePlans>
          <GuestCounts>
            <GuestCount AgeQualifyingCode="10" Count="2" isPerRoom="true" />
          </GuestCounts>
          <TimeSpan Start="2018-10-11" End="2018-10-13" />
          <Comments>
            <Comment>
              <Text>
                <![CDATA[Fictional comment]]>
              </Text>
            </Comment>
            <Comment>
              <Text>
                <![CDATA[Another fictional comment ]]>
              </Text>
            </Comment>
          </Comments>
          <SpecialRequests>
            <SpecialRequest>
              <Text>
                <![CDATA[Smoking preference : Non-Smoking]]>
              </Text>
            </SpecialRequest>
          </SpecialRequests>
          <Total AmountAfterTax="28500" AmountBeforeTax="33000" CurrencyCode="EUR" DecimalPlaces="2">
            <Taxes>
              <Tax Amount="2030" CurrencyCode="EUR" DecimalPlaces="2" />
            </Taxes>
          </Total>
          <ResGuestRPHs>
            <ResGuestRPH RPH="1" />
          </ResGuestRPHs>
        </RoomStay>
      </RoomStays>
      <ResGuests>
        <ResGuest ResGuestRPH="0">
          <Profiles>
            <ProfileInfo>
              <Profile>
                <Customer>
                  <PersonName>
                    <GivenName>
                      <![CDATA[John]]>
                    </GivenName>
                    <Surname>
                      <![CDATA[Smith]]>
                    </Surname>
                  </PersonName>
                </Customer>
              </Profile>
            </ProfileInfo>
            <ProfileInfo>
              <Profile>
                <Customer>
                  <PersonName>
                    <GivenName>
                      <![CDATA[Jane]]>
                    </GivenName>
                    <Surname>
                      <![CDATA[Smith]]>
                    </Surname>
                  </PersonName>
                </Customer>
              </Profile>
            </ProfileInfo>
          </Profiles>
        </ResGuest>
        <ResGuest ResGuestRPH="1">
          <Profiles>
            <ProfileInfo>
              <Profile>
                <Customer>
                  <PersonName>
                    <GivenName>
                      <![CDATA[John]]>
                    </GivenName>
                    <Surname>
                      <![CDATA[Doe]]>
                    </Surname>
                  </PersonName>
                </Customer>
              </Profile>
            </ProfileInfo>
            <ProfileInfo>
              <Profile>
                <Customer>
                  <PersonName>
                    <GivenName>
                      <![CDATA[Jane]]>
                    </GivenName>
                    <Surname>
                      <![CDATA[Doe]]>
                    </Surname>
                  </PersonName>
                </Customer>
              </Profile>
            </ProfileInfo>
            <ProfileInfo>
              <Profile>
                <Customer>
                  <PersonName>
                    <GivenName>
                      <![CDATA[Jake]]>
                    </GivenName>
                    <Surname>
                      <![CDATA[Doe]]>
                    </Surname>
                  </PersonName>
                </Customer>
              </Profile>
            </ProfileInfo>
          </Profiles>
        </ResGuest>
      </ResGuests>
      <ResGlobalInfo>
        <Profiles>
          <ProfileInfo>
            <Profile ProfileType="1">
              <Customer Gender="Male" BirthDate="1955-08-01">
                <PersonName>
                  <GivenName>
                    <![CDATA[John]]>
                  </GivenName>
                  <Surname>
                    <![CDATA[Doe]]>
                  </Surname>
                </PersonName>
                <Telephone PhoneNumber="+31182751118" />
                <Email>j.doe@gmail.com</Email>
                <Address>
                  <StreetNmbr>Einsteinstraat 5</StreetNmbr>
                  <CityName>Reeuwijk</CityName>
                  <PostalCode>2811EP</PostalCode>
                  <CountryName>NL</CountryName>
                  <CompanyName>Smarthotel</CompanyName>
                </Address>
              </Customer>
            </Profile>
          </ProfileInfo>
        </Profiles>
        <Comments>
          <Comment>
            <Text>
              <![CDATA[Comment that will be displayed on the reservation.]]>
            </Text>
          </Comment>
        </Comments>
        <Guarantee>
          <GuaranteesAccepted>
            <GuaranteeAccepted>
              <PaymentCard CardCode="VI" CardNumber="4444444444444444" SeriesCode="333" ExpireDate="0918">
                <CardHolderName>John Smith</CardHolderName>
              </PaymentCard>
            </GuaranteeAccepted>
          </GuaranteesAccepted>
        </Guarantee>
        <Total AmountAfterTax="28500" CurrencyCode="EUR" DecimalPlaces="2" />
        <BasicPropertyInfo HotelCode="101073" />
        <HotelReservationIDs>
          <HotelReservationID ResID_Value="your-unique-reference" ResID_Type="14" />
        </HotelReservationIDs>
      </ResGlobalInfo>
    </HotelResModify>
  </HotelResModifies>
</OTA_HotelResModifyNotifRQ>

 

OTA_HotelResModifyNotifRS

This is the response message for a full overlay modification to a reservation. The response could be as simple as indicating the modification was made or as complex as echoing back all reservation information.

Element / @AttributeParentInfoValuesOccurrence
SuccessOTA_HotelResModifyNotifRSOnly there if reservation was added successfully0..1
ErrorsOTA_HotelResModifyNotifRSOnly if the reservation was not added0..1
ErrorErrors1..n
@CodeError1
TextError
HotelReservationsOTA_HotelResModifyNotifRS0..1
HotelReservationHotelReservations1..n
UniqueIDHotelReservation1
@TypeUniqueID141
@IDUniqueIDReservation number supplied by the OTA1
ResGlobalInfoHotelReservation1
HotelReservationIDsResGlobalInfo1
HotelReservationIDHotelReservationIDs1..n
@ResID_TypeHotelReservationID141
@ResID_ValueHotelReservationIDReservation ID from the Channel manager1

Success

<?xml version="1.0" encoding="utf-8"?>
<OTA_HotelResModifyNotifRS>
  <Success />
  <HotelReservations>
    <HotelReservation>
      <UniqueID Type="14" ID="your-unique-reference" />
      <ResGlobalInfo>
        <HotelReservationIDs>
          <HotelReservationID ResID_Type="14" ResID_Value="1160" />
        </HotelReservationIDs>
      </ResGlobalInfo>
    </HotelReservation>
  </HotelReservations>
</OTA_HotelResmodifyNotifRS>

 

Error

<?xml version="1.0" encoding="utf-8"?>
<OTA_HotelResModifyNotifRS>
  <Errors>
    <Error Code="11">
      <Text>No ID was found for hotel with code 101073.</Text>
    </Error>
  </Errors>
</OTA_HotelResModifyNotifRS>

 

OTA_CancelRQ/RS.

OTA_CancelRQ

A generic message, available as an action on several OpenTravel services which requests a server to cancel the booking identified by the UniqueID element

Element / @AttributeParentInfoValuesOccurrence
UniqueIDOTA_CancelRQThis allows a user to send more than one UniqueID where there is more than one UniqueID associated to a single reservation (e.g. confirmation number and PNR record locator).1..n
@IDUniqueIDThe ID of the reservation.[integer]1
@ID_ContextUniqueIDThe ID of the booking site.[integer]1
@TypeUniqueIDA reference to the type of object defined by the UniqueID element.Refer to Code List Unique ID Type (UIT).
1
TPA_ExtensionsUniqueIDA placeholder in the schema to allow for additional elements and attributes to be included. Allows extensions to be added to the OpenTravel specification.1
HotelInfoTPA_ExtensionsThe element containing information related to the hotel.1
@HotelCodeHotelInfoThe ID of the hotel.[integer]1
<?xml version="1.0" encoding="UTF-16"?>
<OTA_CancelRQ EchoToken="Example123" PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <POS>
    <Source AgentDutyCode="OTA">
      <RequestorID ID="APIKEY" MessagePassword="APIPASSWORD"/>
    </Source>
  </POS>
  <UniqueID ID="123456" ID_Context="2" Type="15">
    <TPA_Extensions>
      <HotelInfo HotelCode="123" />
    </TPA_Extensions>
  </UniqueID>
</OTA_CancelRQ>

 

OTA_CancelRS

Used to rspond to a CancelRQ and may provide details about the cancellation.

Element / @AttributeParentInfoValuesOccurrence
UniqueIDOTA_CancelRSContains the reference(s) of the items being cancelled. An identifier used to uniquely reference an object in a system (e.g. an airline reservation reference, customer profile reference, booking confirmation number, or a reference to a previous availability quote).2
Two instance of this element are required, one to reference the reservation ID for which a cancellation was requested and one to reference the ID of the cancellation.
@IDUniqueIDThe ID of the reservation or cancellation.[integer]1
@TypeUniqueIDA reference to the type of object defined by the UniqueID element.Refer to Code List Unique ID Type (UIT).1
<?xml version="1.0" encoding="UTF-16"?>
<OTA_CancelRS EchoToken="Example123" PrimaryLangID="eng" Target="Production" TimeStamp="2018-07-29T07:38:54.729Z" Version="1.0">
  <Success />
  <UniqueID ID="123456" Type="15" />
  <UniqueID ID="123457" Type="15" />
</OTA_CancelRS>