Transaction Message Syntax

Transaction messages send data about rooms and packages to Google. There are two primary types of Transaction messages:

  • Room and package metadata: Defines rooms and packages, such as a descriptions, photos, and maximum occupancy. This data does not change very often. To define metadata Transaction messages, you use the <PropertyDataSet> child element.
  • Inventory and pricing: Sets availability and rates for rooms and packages, including the base rate, taxes and fees, and number of nights. This data typically changes very frequently. To define pricing and availability Transaction messages, you use the <Result> element.

The <Transaction> element is the root element of a Transaction message and it uses the following syntax:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp" id="transaction_ID">

  <!-- Defines data about a room or package (Room Bundle) -->
  <PropertyDataSet>
    ...
  </PropertyDataSet>

  <!-- Updates/sets prices and availability for rooms and Room Bundles -->
  <!-- (Also removes itineraries from inventory) -->
  <Result>
    ...
  </Result>
</Transaction>

Messages that use the <Transaction> element as the root element require at least one of the child elements. Transaction messages can have any number of child elements, as long as the total message size does not exceed 100MB.

<Transaction> attributes

The following table describes the attributes of the <Transaction> element:

Attribute Required? Description
id Required Specifies a unique identifier for each Transaction message.
partner Optional Specifies the partner account that the Transaction message is for. You typically use this if your back end provides price feeds for multiple partner accounts. To get the value of your partner attribute, contact us.
timestamp Required Represents the moment in time that the Transaction message was sent. The timestamp attribute uses the RFC3339 format:

YYYY-MM-DDTHH:mm:ss.SSS+|-HH:mm

Where:

  • YYYY: Four-digit year
  • MM: Two-digit month
  • DD: Two-digit day
  • T: Separates the date from the time
  • HH: Hours
  • mm: Minutes
  • ss: (Optional) Seconds
  • SSS: (Optional) Fractional seconds
  • +/-: (Optional) Separates the date and time from the timezone offset
  • HH:mm: (Optional) Hours and minutes in timezone offset

For example:

2017-12-31T16:20:00-04:00

You can also specify "Z" for the timezone offset, which indicates 0 offset.

Any message sent with a timestamp within the prior 24 hours will be processed, and those that haven't will be discarded.

Messages are processed in order of timestamp and not in the order of being received. For example, a price update with a timestamp of 2016-05-03 14:09:00 that is received after a message with a timestamp of 2016-05-03 14:10:00 will still be processed in order and the price from the message with the timestamp of 2016-05-03 14:10:00 will be used.

<Transaction> child elements

The following table describes the child elements of the <Transaction> element:

Element Required? Description
<PropertyDataSet> Optional Contains descriptive information about specific rooms and related Room Bundles. You typically use this element in a separate Transaction message to define shared values for Room Bundles and reduce the size of your Transaction messages.

For more information, see <PropertyDataSet> element.

<Result> Optional

Contains pricing data for a room's itinerary or a <RoomBundle> element that defines Room Bundles and additional types of rooms for the property. The <Result> element can also be used to remove itineraries from inventory.

For more information, see <Result> element.

The following example shows a <Transaction> element:

<Transaction timestamp="2014-04-24T20:44:56" id="42" partner="capybara_ltd">
  ...
</Transaction>

<PropertyDataSet> element

The <PropertyDataSet> element is a container for room and package (or Room Bundle) information. Values set on a hotel override values set on a partner. Google stores this information for you so that you do not need to define it every time you send pricing updates.

For information about defining room data, see <RoomData> element. For information about defining package data, see <PackageData> element or Room Bundle metadata.

<PropertyDataSet> syntax

The <PropertyDataSet> element uses the following syntax:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp" id="transaction_ID">
  <!-- Defines data about a hotel, room, or package -->
  <PropertyDataSet>
    <!-- (Required) ID that matches the Hotel List Feed -->
    <Property>hotel_ID</Property>

    <!-- (Optional) Defines metadata about a room -->
    <RoomData>
      ...
    </RoomData>

    <!-- (Optional) Defines package metadata to be paired with rooms (room bundles) -->
    <PackageData>
      ...
    </PackageData>
  </PropertyDataSet>
</Transaction>

<PropertyDataSet> child elements

The following table describes the child elements of the <PropertyDataSet> element:

Element Required? Description
<PackageData> Optional Contains descriptive information of Room Bundles. This data is associated with a partner and hotel, but not with an itinerary. This element is similar to <RoomData>, but it describes amenities and terms that are not part of the physical room description. You reference the package ID in your pricing updates. For more information, see Room Bundle metadata.

<Property> Required Specifies the ID of a hotel that the associated data applies to. The value of this element must be a string that matches the listing <id> in your Hotel List Feed.
<RoomData> Optional Contains descriptive information of rooms. This data is associated with a partner and hotel, but not with an itinerary. You reference the room ID in your pricing updates.

You can define both the <RoomData> and <PackageData> elements for the same room or Room Bundle. When Google displays that room or package in the search results, it will include the descriptions from both, separated by a hyphen.

<PropertyDataSet> attributes

The <PropertyDataSet> element does not have any attributes.

<PropertyDataSet> example

The following example shows a <PropertyDataSet> element that defines room data and package data for a hotel:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2014-04-24T20:44:56-04:00" id="42">
  <PropertyDataSet>
    <Property>180054</Property>
    <RoomData>
      <RoomID>060773</RoomID>
      <Name>
        <Text text="Single Bed Room" language="en"/>
        <Text text="Chambre single" language="fr"/>
      </Name>
      <Description>
        <Text text="Non-smoking" language="en"/>
        <Text text="Pas de fumiers" language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Living area" language="en"/>
          <Text text="Le chambre" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <PackageID>P54321</PackageID>
      <Name>
        <Text text="Breakfast Included" language="en"/>
        <Text text="Avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Includes a delightful array of jams and jellies." language="en"/>
        <Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
      </Description>
      <BreakfastIncluded>true</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

When you send prices and availability for this room and/or Room Bundle, you reference the room and package IDs in your Transaction messages. The result is that you greatly reduce the size of your messages, and also reduce the amount of errors you might encounter due to duplicate data. For more information, see Room Bundle metadata.

<RoomData> element

The <RoomData> elements define itinerary-independent metadata about the rooms and Room Bundles in the property. You use these elements to reduce the repetition of data such as descriptions and details about amenities, rates, taxes, fees, and other information. This reduces the size of the Hotel Price Feed messages and helps prevent errors or conflicting information in your Room Bundle definitions.

The <RoomData> elements contain information that is associated with a partner and hotel, but not with an itinerary. The intended purpose is for all non-itinerary data.

For information on using the <RoomData> elements to reduce the size of your messages, see Room Bundle metadata.

If you update a single <RoomData> element for a property, you must update all <PackageData> and <RoomData> elements for the property. Each <PropertyDataSet> is considered all data about the property, and overwrites any existing data.

<RoomData> syntax

The <RoomData> element uses the following syntax:

...
<PropertyDataSet>
  <Property>hotel_ID</Property>
    <RoomData>
        <!-- Required -->
        <RoomID>room_ID</RoomID>

        <!-- Required -->
        <Name>
          <!-- Use a separate entry for each supported language -->
          <Text text="room_name" language="language_code"/>
        </Name>

        <Description>
          <!-- Use a separate entry for each supported language -->
          <Text text="room_description" language="language_code"/>
        </Description>
        <Capaciy>max_physical_space</Capacity>

        <!-- Strongly Recommended -->
        <Occupancy>max_intended_space</Occupancy>

        <PhotoURL>
          <Caption>
            <!-- Use a separate entry for each supported language -->
            <Text text="photo_description" language="language_code"/>
          </Caption>
          <URL>photo_location</URL>
        </PhotoURL>
      </RoomData>

</PropertyDataSet>
...

<RoomData> child elements

The following table describes the child elements:

Element Required? Description
<RoomID> Required Specifies the unique ID for the room. Use this ID to match the room data with the <Result> blocks in your pricing updates. For more information, see Room Bundle metadata. (You can also use this ID to reference a common room definition in a single Transaction message when defining room data inline.)
<Name> Required Specifies the name of the category of room. This value should match what appears on the hotel's landing page. Do not set the value of this element to all capital letters.

This element takes a single child element, <Text>, which has two attributes, text and language. The text attribute is the description, and the language attribute specifies a two-letter language code. Use a separate <Text> element for each language that your ads might appear in (with different values for the language attributes), as the following example shows:

<Name>
  <Text text="Standard Double Room" language="en"/>
  <Text text="Le chambre double" language="fr"/>
</Name>
<Description> Optional Specifies a detailed description of the room. This element should contain information not described by other elements or the <Name> element. You should not use all capital letters when specifying the description of the room.

The <Description> element takes a single child element, <Text>, which has two attributes, text and language. The text attribute is the description, and the language attribute specifies a two-letter language code, as the following example shows:

<Description>
  <Text text="Two queen-sized beds" language="en"/>
  <Text text="Deux lits de la reine" language="fr"/>
</Description>
<Capacity> Optional The maximum number of people that a room can physically accommodate.

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 package. For example, a large suite's <Capacity> might be six, but the <Occupancy> for the "Honeymoon Package" is two.

This value must be greater than or equal to the <Occupancy> element, which is the number of people that the room is intented form.

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

<Occupancy> Optional (Strongly Encouraged) The maximum number of guests that a room is intended for. For example, a large suite might be able to physically accommodate six guests, but is intended for up to four 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.

<PhotoURL> Optional Defines a URL and optional caption for a photo of the given Room Bundle. You can specify more than one <PhotoURL> for a 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>. The <Text> element has two attributes, text and language. The text attribute is the caption, and the language attribute specifies a two-letter language code.
<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>

<RoomData> attributes

The <RoomData> element does not have any attributes.

<RoomData> example

The following example shows a <RoomData> element for a Transaction message:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2014-04-24T20:44:56-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>5440OF</RoomID>
      <Name>
        <Text text="Single King Bed Room" language="en"/>
        <Text text="Simple Lit de Roi" language="fr"/>
      </Name>
      <Description>
        <Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
          and down comforters (bedspreads). City view. 300 square feet. Desk with
          rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
          complimentary HBO and pay movies." language="en"/>
        <Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Bathroom View" language="en"/>
          <Text text="La salle de baines" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <Capacity>4</Capacity>
    </RoomData>
  </PropertyDataSet>
</Transaction>

<PackageData> element

The <PackageData> elements define itinerary-independent metadata about the rooms and Room Bundles in the property. You use these elements to reduce the repetition of data such as descriptions and details about amenities, rates, taxes, fees, and other information. This reduces the size of the Hotel Price Feed messages and helps prevent errors or conflicting information in your Room Bundle definitions.

The <PackageData> elements contain information that is associated with a partner and hotel, but not with an itinerary. The intended purpose is for all non-itinerary data.

For information on using the <PackageData> elements to reduce the size of your messages, see Room Bundle metadata.

If you update a single <PackageData> element for a property, you must update all <PackageData> and <RoomData> elements for the property. Each <PropertyDataSet> is considered all data about the property, and overwrites any existing data.

<PackageData> syntax

The <PackageData> element uses the following syntax:

...
<PropertyDataSet>
  <Property>hotel_ID</Property>
    <PackageData>
        <!-- Required -->
        <PackageID>package_ID</PackageID>

        <!-- Required -->
        <Name>
          <!-- Specify one for each supported language -->
          <Text text="package_name" language="language_code"/>
          ...
        </Name>

        <Description>
          <!-- Specify one for each supported language -->
          <Text text="package_description" language="language_code"/>
          ...
        </Description>

        <!-- Required -->
        <Refundable available="[ false | true ]" refundable_until_days="number_of_days"
          refundable_until_time="HH:MM:SS[<+|->HH:MM]"/>

        <BreakfastIncluded>[ false | true ]</BreakfastIncluded>
        <ChargeCurrency>[ deposit | hotel | installment | web ]</ChargeCurrency>
        <InternetIncluded>[ false | true ]</InternetIncluded>
        <ParkingIncluded>[ false | true ]</ParkingIncluded>
      </PackageData>

</PropertyDataSet>
...

<PackageData> child elements

Element Required Description
<BreakfastIncluded> Optional Specifies whether this Room Bundle includes breakfast.

Valid values are:

  • 0 or false
  • 1 or true

The default value is false.

<ChargeCurrency> Optional Defines when and where the user pays for a booking. This element can be used in a Transaction message in the <Result> element for the Hotel Price or <PackageData> block for a Room Bundle.

Valid values are:

  • "deposit': The user is charged some portion immediately and the remainder is charged at a later point in time, typically when the user checks out of the hotel.
  • "installment": The user is charged a set amount a certain number of times.
  • "hotel": The user is charged when checking in at the hotel. If payment must always be made in the hotel's currency, set the value of <ChargeCurrency> to hotel. The actual point of sale is not affected by the user's currency.
  • "web": The user is charged online at the time of booking. This is the default value. The actual point of sale is defined by the Points of Sale file, and can be affected by the user's currency, location, language, or other factors.

The default value is "web".

<Description> Optional Specifies a detailed description of the package. This element should contain information not described by other elements or the <Name> element. You should not use all capital letters when specifying the description of the room.

The <Description> element takes a single child element, <Text>, which has two attributes, text and language. The text attribute is the description, and the language attribute specifies a two-letter language code, as the following example shows:

<Description>
  <Text text="Two breakfast buffet certificates for each
    night of stay and free wifi." language="en"/>
  <Text text="Deux certificats petit-déjeuner buffet pour
    chaque nuit de séjour et wifi gratuit." language="fr"/>
</Description>
<InternetIncluded> Optional Indicates whether a Room Bundle includes internet access at no charge, while other bundles would not include that amenity. Do not set this element for Room Bundles in a hotel that provides free internet to all rooms. This element does not apply to in-room wired internet or wireless internet that is not available in guest rooms.

Valid values are:

  • 0 or false
  • 1 or true

The default value is false.

<Name> Required Specifies the name of the category of room. This value should match what appears on the hotel's landing page. Do not set the value of this element to all capital letters.

This element takes a single child element, <Text>, which has two attributes, text and language. The text attribute is the description, and the language attribute specifies a two-letter language code, as the following example shows:

<Name>
  <Text text="Bed and Breakfast" language="en"/>
  <Text text="Lit et petit déjeuné" language="fr"/>
</Name>
<PackageID> Required Specifies the unique ID for the package data. Use this ID to match the Room Bundle data with the <Result> blocks in your pricing updates. For more information, see Room Bundle metadata. (You can also use this ID to reference a common Room Bundle definition used in a single Transaction message when defining Room Bundle data inline.)
<ParkingIncluded> Optional Indicates whether a Room Bundle 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
  • false
  • 1
  • true

The default value is false.

<Refundable> Required Describes the Room Bundle's refund policy for a full refund. If not provided, no information about a refund is displayed. A refund policy at a Room Bundle level overrides the refund policy at the hotel level.

The <Refundable> element takes the following attributes:

  • available: (Required) Set to true to indicate if the Room Bundle allows a full refund; otherwise false.
  • refundable_until_days: (Optional) Specifies the number of days in advance of check-in that a full refund can be requested. If you do not specify a value, then the refund policy is assume to be on the day of check-in. The value of this attribute must be an integer between 0 and 330, inclusive.
  • refundable_until_time: (Optional) 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 the refundable_until_days attribute to specify, for example, that "refunds are available until 4:00PM two days before check-in".

    The value of this attribute uses the following format:

    HH:MM:SS[<+|->HH:MM], where:
    • HH: Hours
    • MM: Minutes
    • SS: (Optional) Seconds

    You can optionally add a number of hours and minutes for the UTC offset (either positive ("+") or negative ("-")).

<PackageData> attributes

The <PackageData> element does not have any attributes.

<PackageData> example

The following example shows a <PackageData> element for a Transaction message:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2014-04-24T20:44:56-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <PackageData>
      <PackageID>P54321</PackageID>
      <Name>
        <Text text="Breakfast Included" language="en"/>
        <Text text="Avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Two certificates for continental
          breakfast will be provided." language="en"/>
        <Text text="Deux certificats pour le petit déjeuner
          continental seront fournis." language="fr"/>
      </Description>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

<Result> element

The <Result> element is a container for a specific room or Room Bundle plus itinerary that shows up in search results. A single Transaction message can include any number of <Result> elements in it, as long as the size of the message does not exceed 100MB.

You typically use <Result> elements to set or update room prices and define available inventory. These elements usually reference pre-defined data for descriptions of the rooms and Room Bundles using metadata that you define in a separate Transaction message.

You can also use the <Result> element to remove specific itineraries from inventory. For more information, see Removing Inventory.

<Result> syntax

The <Result> element uses the following syntax:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp" id="transaction_ID">
  <!-- Updates/sets prices for rooms and Room Bundles -->
  <Result>
    <!-- Required: ID that matches the Hotel List Feed -->
    <Property>hotel_id</Property>

    <!-- Required -->
    <Checkin>YYYY-MM-DD</Checkin>

    <!-- Required -->
    <Tax currency="currency_code">tax_amount</Tax>

    <!-- Required -->
    <OtherFees currency="currency_code">fee_amount</OtherFees>

    <RoomID>room_ID</RoomID>

    <RoomBundle>
      ...
    </RoomBundle>

    <Nights>number_of_nights</Nights>

    <ExpirationTimestamp>YYYY-MM-DDTHH:MM:SSz</ExpirationTimestamp>

    <Baserate currency="currency_code">price</Baserate>

    <ChargeCurrency>[ deposit | hotel | installment | web ]</ChargeCurrency>

    <Custom1>custom_value</Custom1>
    <Custom2>custom_value</Custom2>
    <Custom3>custom_value</Custom3>
    <Custom4>custom_value</Custom4>
    <Custom5>custom_value</Custom5>

    <AllowablePointsOfSale>
      <PointOfSale id="point_of_sale"/>
      ...
    </AllowablePointsOfSale>

  </Result>
</Transaction>

<Result> child elements

The following table describes the child elements of the <Result> element:

Element Required Description
<AllowablePointsOfSale> Optional Identifies one or more points of sale (POS) that are eligible for the hotel. A POS is a website that can handle the booking process for the end-user. To explicitly include certain POS (and exclude others), add one or more <AllowablePointsOfSale> elements that match the <PointOfSale> element's id attribute in the Points of Sale file.

If you do not include this element, all points of sale defined in the Points of Sale file are considered eligible to be used for booking the room. For more information, see Points of Sale Files.

<Baserate> Required Defines the price of the room for the stay. The value of this element should reflect the following:

  • For the price, set the least expensive double-occupancy rate that you offer.
  • The room must be private; shared rooms are not considered at this time.
  • The total length of a stay, not the average nightly rate.

When the room is unavailable for the itinerary, set the value of the <Baserate> element to -1 to indicate that a room is no longer in inventory. To remove a Room Bundle, use the instructions in Updating Room Bundles.

The <Baserate> must not contain any digit grouping symbols, such as the comma (,) or period (.). Always separate fractions using the period (.) as the decimal mark. For example, $1,200.40 must be represented as:

<Baserate currency="USD">1200.40</Baserate>

The <Baserate> element takes the following optional attributes:

  • all_inclusive: A Boolean that indicates if this rate includes taxes and fees. In general, set this value to false for US and Canadian end-users and supply values for the <Tax> and <OtherFees> elements. If you use all-inclusive prices, you may not be eligible to appear in the listings if your prices do not separate out taxes and fees for US and Canadian users.

    For all other end-users, you typically include the taxes and fees in the base rate and set the value of the all_inclusive attribute to true. For more information, see Taxes and Fees Policy.

    The default value is false.

  • currency: The 3-digit currency code. For example, USD for US dollars.
<ChargeCurrency> Optional Defines when and where the user pays for a booking. This element can be used in a Transaction message in the <Result> element for the Hotel Price or <PackageData> block for a Room Bundle.

Valid values are:

  • web: The user is charged online at the time of booking. This is the default value. The actual point of sale is defined by the Points of Sale file, and can be affected by the user's currency, location, language, or other factors.
  • hotel: The user is charged when checking in at the hotel. If payment must always be made in the hotel's currency, set the value of <ChargeCurrency> to hotel. The actual point of sale is not affected by the user's currency.
  • deposit: The user is charged some portion immediately and the remainder is charged at a later point in time, typically when the user checks out of the hotel.

The default value is web.

<Checkin> Required Specifies the check-in date for an itinerary. The combination of the <Nights> element and the <Checkin> element make up an itinerary. The date is in the form YYYY-MM-DD, where YYYY represents a four-digit year, MM represents a two-digit month, and DD represents a two-digit day.
<Custom[1-5]> Optional Defines a custom field that you can use to pass additional data associated with a hotel. You can pass up to five custom values with the following element names:

  • <Custom1>
  • <Custom2>
  • <Custom3>
  • <Custom4>
  • <Custom5>

The <Custom> elements let you pass arbitrary data. For example, you can specify a value in this field that will then be used by the Points of Sale file to construct a custom URL for a point of sale. For more information, see Points of Sale Files.

<ExpirationTimestamp> Optional Specifies the date and time at which the price is considered expired, using the RFC3339 format:

YYYY-MM-DDTHH:mm:ss.SSS+|-HH:mm

Where:

  • YYYY: Four-digit year
  • MM: Two-digit month
  • DD: Two-digit day
  • T: Separates the date from the time
  • HH: Hours
  • mm: Minutes
  • ss: (Optional) Seconds
  • SSS: (Optional) Milliseconds
  • +/-: (Optional) Separates the date and time from the timezone offset
  • HH:mm: (Optional) Hours and minutes in the timezone offset

For example:

2017-12-31T16:20:00-04:00

You can also specify "Z" for the timezone offset, which indicates 0 offset.

Google will not serve any prices that are expired, and any itinerary that has an expired price will become eligible for Live Querying.

<Nights> Optional Specifies the number of nights for an itinerary. The value of the <Nights> element is expressed as a positive integer. The combination of the <Nights> element and the <Checkin> element make up an itinerary.
<OtherFees> Required Defines fees other than the base rate and taxes that influence the final price of a room. The <OtherFees> element takes a single required attribute, currency, that defines the three-digit currency code for the fees.

For example, USD.

<Property> Required Specifies the ID of a hotel affected by the associated data (price, itinerary, Room Bundle, or metadata). The value of this element must be a string. The value of this element must match the listing <id> that you defined in your Hotel List Feed.
<RoomBundle> Optional Contains information on priced physical descriptions of a room, any packaging of amenities, and some purchase policy details for the given hotel and itinerary.

In general,you use this element to define pricing for the base room and different types of rooms within the same property. While it is possible to define Room Bundle descriptions inline, you should use a separate Transaction message to define that information. Google will store metadata so that you can reference it, rather than repeat it, in all future pricing updates.

For more information, see Room Bundles.

<RoomID> Optional Specifies the unique ID of the room to map it to pre-defined room or package data. For more information, see Room Bundle metadata.
<Tax> Required Defines the taxes that are calculated for the final price of a room. The <Tax> element takes a single required attribute, currency, that defines the three-digit currency code for the taxes. For example, USD.

<Result> attributes

The <Result> element does not have any attributes.

<Result> example

The following example shows a <Result> element that sets the prices for two different itineraries for the same room type:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2015-04-24T20:44:56-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <RoomID>RoomType101</RoomID>
    <Checkin>2015-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">278.33</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="pos-mobile"/>
      <PointOfSale id="pos-us-desktop"/>
    </AllowablePointsOfSale>
  </Result>
  <Result>
    <Property>052213</Property>
    <RoomID>RoomType101</RoomID>
    <Checkin>2015-06-17</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">299.98</Baserate>
    <Tax currency="USD">26.42</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="pos-mobile"/>
      <PointOfSale id="pos-us-desktop"/>
    </AllowablePointsOfSale>
  </Result>
</Transaction>

Not shown in this example is the information about the room, such as a description, a picture URL and caption, the room's name, and its capacity. You can define that information once in a separate Transaction message that Google stores. You can then reference it by the RoomID in all subsequent pricing and inventory updates. For more information, see Room Bundle metadata.

In addition to defining prices for itineraries, you also use the <Result> element to do the following:

  • Remove a room/itinerary from inventory. For more information, see Removing Inventory.
  • Specify additional room types as Room Bundles. For more information, see Room Bundles.