Transaction (Property Data)

Syntax

The Transaction (Property Data) message uses the following syntax:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp"
             id="message_ID"
             partner="partner_account_name">
  <PropertyDataSet action="[overlay|delta]">
    <!-- (Required) ID that matches the Hotel List Feed -->
    <Property>HotelID</Property>
    <RoomData>
      <!-- (Required) One room ID per RoomData element -->
      <RoomID>RoomID</RoomID>
      <!-- (Optional) Restricts the rate plans allowed for this room type to
        those listed here. If specified, don't specify AllowableRoomIDs. -->
      <AllowablePackageIDs>
        <AllowablePackageID>PackageID</AllowablePackageID>
      </AllowablePackageIDs>
      <Name>
        <Text text="room_name" language="language_code"/>
      </Name>
      <Capacity>max_number_of_occupants</Capacity>
      <Occupancy>max_number_of_intended_occupants</Occupancy>
      <OccupancyDetails><!-- optional info about the types of guests,
      whether adults, children, or seniors --></OccupancyDetails>
      <PhotoURL>
        <Caption>
          <Text text="photo_description" language="language_code"/>
          ...
        </Caption>
        <URL>photo_location</URL>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <!-- (Required) One package ID per PackageData element -->
      <PackageID>PackageID</PackageID>
      <!-- (Optional) Restricts the room types allowed for this rate plan to
        those listed here. If specified, don't specify AllowablePackageIDs. -->
      <AllowableRoomIDs>
        <AllowableRoomID>RoomID</AllowableRoomID>
      </AllowableRoomIDs>
      <Refundable available="[false|true]" refundable_until_days="
        number_of_days"
        refundable_until_time="time"/>
      <BreakfastIncluded>boolean_value</BreakfastIncluded>
      <InternetIncluded>boolean_value</InternetIncluded>
      <ParkingIncluded>boolean_value</ParkingIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Elements & Attributes

The Transaction (Property Data) message has the following elements and attributes:
Element / @Attribute Occurrences Type Description
Transaction 1 Complex element In an ARI implementation, this is the root element for a message defining room types and packages for a single property.
Transaction / @timestamp 1 DateTime The creation date and time of this message.
Transaction / @id 1 String A unique identifier for each Transaction message.
Transaction / @partner 1 String The partner account for this message. To get this value, contact us.

Note: If you have a backend that provides feeds for multiple accounts, this value needs to match the ID attribute value specified in the <RequestorID> element of your <OTA_HotelRateAmountNotifRQ> and <OTA_HotelAvailNotifRQ> messages for the same account.

Transaction / PropertyDataSet 1 PropertyDataSet A container for defining room types and packages for a single property.
Transaction / PropertyDataSet / @action 0..1 Enum

The type of update to apply to room rate definitions.

Valid values are:

  • overlay : Replaces all previously defined <RoomData> and <PackageData> for the property. Only the <RoomData> and <PackageData> in the current message are valid.
  • delta : Adds previously undefined <RoomData> and <PackageData> or modifies existing ones.

This attribute is optional and defaults to delta if not specified.

Transaction / PropertyDataSet / Property 1 String The unique identifier for the property. This value must match the Hotel ID specified using <id> in the <listing> element in the Hotel List Feed. The Hotel ID is also listed in Hotel Center.
Transaction / PropertyDataSet / RoomData 0..n RoomData

Describes a room.

Note: At least one of <RoomData> or <PackageData> is required.

Transaction / PropertyDataSet / RoomData / RoomID 1 RoomID A unique identifier for a type of room. This value is referenced using the InvTypeCode attribute in the <StatusApplicationControl> element in <OTA_HotelAvailNotifRQ> and <OTA_HotelRateAmountNotifRQ> messages.
Transaction / PropertyDataSet / RoomData / AllowablePackageIDs 0..1 AllowablePackageIDs A container for <AllowablePackageID> elements.

If <AllowablePackageIDs> is specified, the room type identified by the <RoomID> in the parent <RoomData> element can only be combined with the rate plans defined by the <AllowablePackageID> elements.

If <AllowablePackageIDs> isn't specified, the room type identified by the <RoomID> in the parent <RoomData> element can be combined with any rate plan.

Transaction / PropertyDataSet / RoomData / AllowablePackageIDs / AllowablePackageID 1..n AllowablePackageID Specifies the PackageID of a rate plan that can be combined with this room type. A rate plan is defined by a combination of package, rates, and availability. The PackageID corresponds to the RatePlanCode in the OTA_HotelRateAmountNotifRQ and OTA_HotelAvailNotifRQ messages.
Transaction / PropertyDataSet / RoomData / Name 1 Name Container for the name of the category of room in one or more languages.
Transaction / PropertyDataSet / RoomData / Name / Text 1..n Text Specifies the name of the category of room in one language.
Transaction / PropertyDataSet / RoomData / Name / Text / @text 1..n String The name of the category of room in the language specified by the language attribute.
Transaction / PropertyDataSet / RoomData / Name / Text / @language 1..n String A two-letter language code.
Transaction / PropertyDataSet / RoomData / Capacity 0..1 Integer The maximum number of guests that a room can physically accommodate. For a room, capacity is greater than or equal to occupancy.

When specified, this value must be equal to or greater than the value of the <Occupancy> element, which is the intended number of guests for a particular room. For example, a large suite's <Capacity> might be 6, but the <Occupancy> for is 4.

The value of <Capacity> must be a positive integer between 1 and 20, inclusive.

Transaction / PropertyDataSet / RoomData / Occupancy 0..1 Integer The maximum number of guests that a room is intended for. For example, a large suite might be able to physically accommodate 6 guests (capacity = 6), but is intended for up to 4 guests only.

This value must be less than or equal to the <Capacity> element, which is the number of people that the room can physically accommodate.

The value of <Occupancy> must be a positive integer between 1 and 20, inclusive.

<Occupancy> may be accompanied by <OccupancyDetails>, which specifies the type of guests (adults or children). Refer to <OccupancyDetails> for syntax and description of child elements.

Transaction / PropertyDataSet / RoomData / PhotoURL 0..n PhotoURL A URL and optional caption for a photo of the given room or Room Bundle. You can specify more than one <PhotoURL> for a room or Room Bundle.

This element takes the following child elements:

  • <URL>: Specifies the location of the photo. The location should be public (not behind a firewall) and should include the protocol (http://).
  • <Caption>: Defines the caption for the photo. This element takes a single child element, <Text>, which has two required attributes, text and language. The text attribute is the caption, and the language attribute specifies a two-letter language code such as "en".
<PhotoURL>
  <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
  <Caption>
    <Text text="A bright and breezy way to enjoy your mornin'
      cuppa tea." language="en"/>
    <Text text="Une façon lumineuse et aérée pour profiter
      de votre journée tasse de thé." language="fr"/>
  </Caption>
</PhotoURL>
Transaction / PropertyDataSet / RoomData / AllowableRoomIDs 0..1 AllowableRoomIDs A container for <AllowableRoomID> elements.

If <AllowableRoomIDs> is specified, the rate plan identified by the <PackageID> in the parent <PackageData> element can only be combined with the room types defined by the <AllowableRoomID> elements.

If <AllowableRoomIDs> isn't specified, the rate plan identified by the <PackageID> in the parent <PackageData> element can be combined with any room type.

Transaction / PropertyDataSet / RoomData / AllowableRoomIDs / AllowableRoomID 1..n AllowableRoomID Specifies the RoomID of a room type that can be combined with this rate plan. A room type is defined in a <RoomData> element.
Transaction / PropertyDataSet / PackageData 0..n PackageData Container for elements that describe rate features and terms that aren't part of the physical room description.
Transaction / PropertyDataSet / PackageData / PackageID 1 String PackageID in these messages corresponds to the RatePlanCode in the OTA_HotelRateAmountNotifRQ and OTA_HotelAvailNotifRQ messages.
Transaction / PropertyDataSet / PackageData / Refundable 0..1 Refundable Enables listing a rate as being fully refundable or providing a free cancellation. If not provided, no information about a refund is displayed.

Note: We recommend setting all of the attributes. A feed status warning message is generated when one or more attributes are not set.

If you do not set any attributes, the rate does not display as refundable.

When setting the attributes, note the following:

  • If available or refundable_until_days isn't set, the rate does not display as refundable.
  • If available is 0 or false, the other attributes are ignored. The rate does not display as refundable even if one or both of the other attributes is set.
Transaction / PropertyDataSet / PackageData / Refundable / @available 1 Boolean (Required) Set to 1 or true to indicate if the rate allows a full refund; otherwise set to 0 or false.
Transaction / PropertyDataSet / PackageData / Refundable / @refundable_until_days 0..1 Integer (Required if available is true) Specifies the number of days in advance of check-in that a full refund can be requested. The value of refundable_until_days must be an integer between 0 and 330, inclusive.
Transaction / PropertyDataSet / PackageData / Refundable / @refundable_until_time 0..1 Time (Highly recommended if available is true) Specifies the latest time of day, in the local time of the hotel, that a full refund request will be honored. This can be combined with refundable_until_days to specify, for example, that "refunds are available until 4:00PM two days before check-in". If refundable_until_time isn't set, the value defaults to midnight.
Transaction / PropertyDataSet / PackageData / BreakfastIncluded 0..1 Boolean Specifies whether this room type includes breakfast.
Transaction / PropertyDataSet / PackageData / InternetIncluded 0..1 Boolean If the room includes internet access at no charge, while other rooms don't include this amenity. Don't set this element in a hotel that provides free internet to all rooms. This element doesn't apply to in-room wired internet or wireless internet that is not available in guest rooms.
Transaction / PropertyDataSet / PackageData / ParkingIncluded 0..1 Boolean

Whether a room includes parking at no charge, where parking would otherwise be a paid service at this hotel. Do not specify a value for this element for a hotel that offers free parking.

Valid values are 0 (or false) and 1 (or true). The default value is false.

Examples

Example 1

The following is a basic example of how to define a property's room and package data in a Transaction (Property Data) message. The overlay attribute is used to ensure that, if any data unexpectedly exists already, all existing data is deleted and replaced with the data in this message:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-05-18T16:20:00-04:00"
             id="12345678"
             partner="partner_account_name">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="King" language="en"/>
      </Name>
      <Capacity>2</Capacity>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image.jpg</URL>
        <Caption>
          <Text text="Room with a king bed" language="en"/>
        </Caption>
      </PhotoURL>
    </RoomData>
    <RoomData>
      <RoomID>RoomID_2</RoomID>
      <Name>
        <Text text="Double" language="en"/>
      </Name>
      ...
    </RoomData>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Refundable>1</Refundable>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>PackageID_2</PackageID>
      <Refundable>1</Refundable>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Example 2

The following is an example of how to add a room type and package to existing <Transaction> data:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-07-18T16:20:00-04:00"
             id="12345678"
             partner="partner_account_name">
  <PropertyDataSet action="delta">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_3</RoomID>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      ...
    </RoomData>
    <PackageData>
      <PackageID>PackageID_3</PackageID>
      <Refundable>0</Refundable>
      <BreakfastIncluded>1</BreakfastIncluded>
      <ParkingIncluded>1<ParkingIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Example 3

The following is an example of how to remove existing room types and packages. In this scenario, if the messages in Example 1 and Example 2 had been sent to Google previously, the King and Double room types would no longer exist once Google receives the message shown below. Note that removing package data affects the overall rate plan as defined across Transaction (Property Data), OTA_HotelRateAmountNotifRQ, and OTA_HotelAvailNotifRQ messages (by referencing the same PackageID value), and thus corresponding updates using the other message types may be required to reflect that PackageID_2 and PackageID_3 are no longer defined here.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-08-18T16:20:00-04:00"
             id="12345678"
             partner="partner_account_name">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      <Capacity>2</Capacity>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image.jpg</URL>
        <Caption>
          <Text text="Room with a king bed" language="en"/>
        </Caption>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Refundable>1</Refundable>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Example 4

The following is an example of how to use the <AllowablePackageIDs> element to restrict the rate plans allowed for a room type. In this example, the Queen room type (RoomID_2) can only be combined with the package and rate plan identified as PackageID_1.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-12-18T16:20:00-04:00"
             id="12345678"
             partner="partner_account_name">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="King" language="en"/>
      </Name>
      ...
    </RoomData>
    <RoomData>
      <RoomID>RoomID_2</RoomID>
      <AllowablePackageIDs>
        <AllowablePackageID>PackageID_1</AllowablePackageID>
      </AllowablePackageIDs>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      ...
    </RoomData>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Refundable>1</Refundable>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>PackageID_2</PackageID>
      <Refundable>1</Refundable>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>