Inventory & Pricing XML Reference (Transactions)

This section provides a reference for the XML-based Transaction messages.

<PackageData>

Defines itinerary-independent metadata about Room Bundles for a property. This element contains information that is associated with a partner and hotel, but not with an itinerary. The intended purpose is to define all non-itinerary data once and reference it from itinerary data.

The <PackageData> element appears in the following place in the Transaction message XML hierarchy:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

The <PackageData> element is similar to <RoomData>, but it describes rate features and terms that aren't part of the physical room description. You use <RoomData> and <PackageData> in combination to provide details about Room Bundles and rate features. For individual rooms that aren't part of a package, use just <RoomData>.

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.

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.

For more information, see Room Bundle metadata.

Syntax

The <PackageData> element uses the following syntax:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet ... >
    <PackageData>
      <PackageID>package_ID</PackageID>
      <Name>
        <Text text="package_name" language="language_code"/>
        ...
      </Name>
      <Description>
        <Text text="package_description" language="language_code"/>
        ...
      </Description>
      <Refundable available="[false|true]" refundable_until_days="number_of_days"
        refundable_until_time="time"/>
      <ChargeCurrency>[deposit|hotel|installment|web]</ChargeCurrency>
      <Capacity>max_number_of_occupants</Capacity>
      <Occupancy>max_number_of_intended_occupants</Occupancy>
      <OccupancyDetails><!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>
      <BreakfastIncluded/>
      <InternetIncluded/>
      <ParkingIncluded/>
      <MembershipBenefitsIncluded>
        <ProgramName>
          <Text language="en" text="Special Rewards">
        </ProgramName>
        <ProgramLevel>
          <Text language="en" text="Platinum">
        </ProgramLevel>
      </MembershipBenefitsIncluded>
      <OnPropertyCredit>
        <Amount currency="USD">123.45</Amount>
      </OnPropertyCredit>
    </PackageData>
<!-- a PackageID  with a MilesIncluded rate feature -->
    <PackageData>
      <PackageID>room_with_miles</PackageID>
      <Name>
       <Text text="Room with Bundled Miles" language="en">
      </Name>
      <ChargeCurrency>hotel </ChargeCurrency>
      <MilesIncluded>
        <NumberOfMiles>1000 </NumberOfMiles>
        <Provider>
          <Text language="en" text="United Airlines">
        </Provider>
      </MilesIncluded>
    </PackageData>
    ...
    ...
  </PropertyDataSet>
  ...
</Transaction>

Attributes

The <PackageData> element has no attributes.

Child elements

The <PackageData> element has the following child elements:

Child Element Required? Type Description
<BreakfastIncluded/> Optional Boolean Specifies whether this Room Bundle includes breakfast with the rate.
<Capacity> Optional Integer The maximum number of people that a Room Bundle can physically accommodate.

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

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

If you specify this element in both <RoomBundle> and <PackageData>, the value in <RoomBundle> takes precedence.

<ChargeCurrency> Optional Enum When and where the user pays for a booking. This element uses the same syntax as <ChargeCurrency> in a <Result>.

The default value is "web".

<Description> Optional Object 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 required 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 Boolean If 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.
<Name> Required String 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>
<Occupancy> Optional (strongly encouraged) Integer The maximum number of guests that a Room Bundle is intended for. For example, a large suite might be able to physically accommodate 6 guests, 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.

If you specify this element in both <RoomBundle> and <PackageData>, the value in <RoomBundle> takes precedence.

Note:

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

<PackageID> Required String The unique ID for the package. 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 Boolean 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" (or "false") and "1" (or "true").

The default value is "false".

<Refundable> Required Object 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 "1" or "true" to indicate if the Room Bundle allows a full refund; otherwise set to "0" or "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 assumed 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 Time format.

<MembershipBenefitsIncluded> Optional Boolean Rate includes elite status benefits for duration of stay. Includes the following parameters:

  • ProgramName -- name of the elite status program
  • ProgramLevel -- level of the program, e.g., “gold.”
  • NightlyValue (optional) -- nightly value of the benefits.
<CarRentalIncluded> Optional Boolean Rate includes free car rental for duration of stay.
<MilesIncluded> Optional Boolean Rate includes frequent flyer miles. Parameters include:
  • NumberofMiles
  • -- Number of miles per itinerary.
  • Provider
  • -- Frequent flyer miles provide.
<OnPropertyCredit> Optional Boolean Rate includes on-property credit (F&B, resort, spa, etc). Parameter:
  • Amount -- the value of the credit per itinerary, in local currency.

Examples

Example 1

The following example defines a single Room Bundle, with an occupancy of 2 (one adult and one child) and includes breakfast:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <PackageData>
      <Occupancy>2</Occupancy>
      <OccupancyDetails>
        <NumAdults>1</NumAdults>
        <Children>
          <Child age="17"/>
        </Children>
      </OccupancyDetails>
      <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>

Example 2

The following example defines room and package metadata:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-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>

Example 3

The following example defines room and package metadata for multiple Room Bundles:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <!-- A transaction message with room types result. -->
  <PropertyDataSet>
    <Property>12345</Property>
    <RoomData>
      <RoomID>single</RoomID>
      <Name>
        <Text text="Single room" language="en"/>
        <Text text="Chambre simple" language="fr"/>
      </Name>
      <Description>
        <Text text="A single room" language="en"/>
        <Text text="Le chambre simple" 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>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image1235.jpg</URL>
      </PhotoURL>
      <Capacity>2</Capacity>
    </RoomData>
    <RoomData>
      <RoomID>double</RoomID>
      <Name>
        <Text text="Double room" language="en"/>
        <Text text="Chambre double" language="fr"/>
      </Name>
      <Occupancy>1</Occupancy>
    </RoomData>
    <PackageData>
      <PackageID>refundbreakfast</PackageID>
      <Name>
        <Text text="Refundable Room with Breakfast" language="en"/>
        <Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Continental Breakfast" language="en"/>
        <Text text="Petit déjeuner continental" language="fr"/>
      </Description>
      <ChargeCurrency>hotel</ChargeCurrency>
      <Refundable available="1" refundable_until_days="3"/>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>prepaid</PackageID>
      <Name>
        <Text text="Nonrefundable" language="en"/>
        <Text text="Non remboursable" language="fr"/>
      </Name>
      <Description>
        <Text text="Blah blah blad" language="en"/>
        <Text text="Le blah blah blad" language="fr"/>
      </Description>
      <Occupancy>2</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="0"/>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Example 4

The following example defines room and package metadata for a Room Bundle with rate features:

<Transaction timestamp="2010-04-24T20:44:56-04:00" id="TXNID">
  <PropertyDataSet>
    <Property>12345</Property>
    <RoomData>
     ...
    </RoomData>
<!-- definitions of PackageData types including rate features -->
    <PackageData>
      <PackageID>room_with_addl_benefits</PackageID>
      <Name>
        <Text text="Acme Hotels 2017 Promotion Package" language="en"/>
      </Name>
      <ChargeCurrency>hotel</ChargeCurrency>
      <BreakfastIncluded/>
      <MembershipBenefitsIncluded>
        <ProgramName>
          <Text language="en" text="Marriott Rewards"/>
        </ProgramName>
        <ProgramLevel>
          <Text language="en" text="Platinum"/>
        </ProgramLevel>
      </MembershipBenefitsIncluded>
      <OnPropertyCredit>
        <Amount currency="USD">123.45</Amount>
      </OnPropertyCredit>
    </PackageData>
    <PackageData>
      <PackageID>room_with_miles</PackageID>
      <Name>
        <Text text="Room with Bundled Miles" language="en"/>
      </Name>
      <ChargeCurrency>hotel</ChargeCurrency>
      <MilesIncluded>
        <NumberOfMiles>1000</NumberOfMiles>
        <Provider>
          <Text language="en" text="United Airlines"/>
        </Provider>
      </MilesIncluded>
    </PackageData>
  </PropertyDataSet>

<!-- The actual list of prices -->
  <Result>
…
  </Result>
</Transaction>

<PropertyDataSet>

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

The <PropertyDataSet> element appears in the following place in the Transaction message XML hierarchy:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

For more information, see Room Bundle metadata.

Syntax

The <PropertyDataSet> element uses the following syntax:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <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>

Attributes

The <PropertyDataSet> element has no attributes.

Child elements

The <PropertyDataSet> element has the following child elements:

Child Element Required? Type Description
<PackageData> Optional <PackageData> Describes a Room Bundle. 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 String 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 <RoomData> Describes a room. This data is associated with a partner and hotel, but not with an itinerary.

You reference the room ID in your pricing updates.

Examples

Example 1

The following example shows both room and package data in a <PropertyDataSet>:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-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 pricing 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.

<Rates>

A container for one or more <Rate> blocks. Each <Rate> in <Rates> defines a different price for the room/itinerary combination.

Use the <Rates> element only when there are multiple rates for the same room/itinerary combination. For example, you define multiple rates for fenced rates, qualified rates, or fenced rates in Room Bundles).

The <Rates> element appears in the following place in the Transaction message XML hierarchy:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>           (Can also contain <Rates>)
        + ...

Values set in a <Rate> override pricing-related values on the parent <Result> or <RoomBundle> element. If they are not set in <Rate>, they inherit their value from the parent element.

Syntax

The <Rates> element uses the following syntax:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    <Rates>
      <Rate rate_rule_id="rate_rule_id">
        <Baserate currency="currency_code">price</Baserate>
        <Tax currency="currency_code">tax_amount</Tax>
        <OtherFees currency="currency_code">fee_amount</OtherFees>
        <ExpirationTime>expiration_time</ExpirationTime>
        <ChargeCurrency>[deposit|hotel|installment|web]</ChargeCurrency>
        <AllowablePointsOfSale>
          <PointOfSale id="point_of_sale"/>
        <Occupancy>max_number_of_occupants</Occupancy>
        <OccupancyDetails> <!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>
          ...
        </AllowablePointsOfSale>
        <Custom[1-5]>custom_value</Custom[1-5]>
      </Rate>
      ...
    </Rates>
  </Result>
  ...
</Transaction>

Attributes

The <Rates> element has the following attributes:

Attribute Required? Description
rate_rule_id Optional For fenced rates, this ID matches a rate to a definition in your Rate Rule Definition file.

Child elements

The <Rates> element has the following child elements:

Child Element Required? Type Description
<AllowablePointsOfSale> Optional Object One or more points of sale (POS) that are eligible for the hotel. This element uses the same syntax as the <AllowablePointsOfSale> on <Result>.
<Baserate> Optional Float The price of the room for the stay. This element uses the same syntax as the <Baserate> on <Result>.
<ChargeCurrency> Optional Enum When and where the user pays for a booking. This element uses the same syntax as a <ChargeCurrency> in a <Result>.
<Custom[1‑5]> Optional String Custom fields that you can use to pass additional data associated with a hotel to a Point of Sale. This element uses the same syntax as a <Custom[1‑5]> in a <Result>.
<ExpirationTime> Optional DateTime The date and time at which the rate is considered expired. This element uses the same syntax as an <ExpirationTime> in a <Result>.
<Occupancy> Optional Integer

Specifies the maximum number of occupants. <Occupancy> may be accompanied by <OccupancyDetails>, which specifies the type of guests (adults or children). See <OccupancyDetails> for syntax and description of child elements.

<OtherFees> Optional Float Fees other than the base rate and taxes that influence the final price of a room. This element uses the same syntax as <OtherFees> in a <Result>.
<Refundable> Optional Object The refund policy for a full refund of the Room Bundle.

This element uses the same syntax as a <Refundable> in a <PackageData>.

A refund policy at the Room Bundle level (defined in a <PackageData>) overrides the refund policy at the hotel level.

<Tax> Optional Float The taxes that are calculated for the final price of a room. This element uses the same syntax as the a <Tax> in a <Result>.

Note that <Rates> takes the same child elements as <Result>, except for <Checkin>, <Nights>, <Property>, <RoomBundle>, and <RoomID>.

Examples

Example 1

The following example shows a Transaction message that contains a base rate and a fenced rate:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>1</Nights>

    <Baserate currency="USD">200.00</Baserate>
    <Tax currency="USD">20.00</Tax>
    <OtherFees currency="USD">1.00</OtherFees>

    <Rates>
      <!-- The rate_rule_id is required when using fenced rate -->
      <Rate rate_rule_id="mobile">
        <!-- Override base rate and taxes for fenced rate -->
        <Baserate currency="USD">180.00</Baserate>
        <Tax currency="USD">18.00</Tax>
        <!-- NOTE: OtherFees is inherited from the above setting -->
        <Custom1>ratecode123</Custom1>
      </Rate>
    </Rates>

  </Result>
</Transaction>

Example 2

The following example defines a base rate and multiple rates within a <RoomBundle>:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>

    <Baserate currency="USD">300.00</Baserate>
    <Tax currency="USD">30.00</Tax>
    <OtherFees currency="USD">2.00</OtherFees>

    <RoomBundle>
      <RoomID>5</RoomID>
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <InternetIncluded>1</InternetIncluded>

      <!-- "mobile" overrides chargeCurrency, "us_or_gb" doesn’t -->
      <ChargeCurrency>web</ChargeCurrency>
      <!-- both Rates override Custom1 -->
      <Custom1>ratebasic</Custom1>
      <!-- neither Rate overrides Custom2 -->
      <Custom2>ratebasic</Custom2>

      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <ChargeCurrency>hotel</ChargeCurrency>
          <Custom1>ratecode321</Custom1>
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <Custom1>ratecode432</Custom1>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

<Result>

A container for pricing and availability updates in a <Transaction> message.

The <Result> element appears in the following place in the Transaction message XML hierarchy:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

Use <Result> to set or update room prices and define available inventory. Items defined in this element typically reference itinerary-independent metadata about a room or package (such as a description or set of amenities) defined in <PackageData> and <RoomData>.

You typically send Transaction messages with pricing updates very frequently. Exactly how and how often you do this depends on your delivery mode.

You can use <Result> in a Transaction message to remove itineraries, as described in Removing Inventory. For more information about using Transaction messages to update prices and availability, see Adding and Updating Inventory.

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.

Syntax

The <Result> element uses the following syntax:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    <!-- Required -->
    <Property>hotel_ID</Property>
    <!-- Required -->
    <Checkin>YYYY-MM-DD</Checkin>

    <!-- Required -->
    <Baserate currency="currency_code">price</Baserate>
    <!-- Only required when <Baserate> contains a real price -->
    <Tax currency="currency_code">tax_amount</Tax>
    <!-- Only required when <Baserate> contains a real price  -->
    <OtherFees currency="currency_code">fee_amount</OtherFees>

    <RoomID>room_ID</RoomID>
    <Nights>number_of_nights</Nights>
    <ExpirationTime>expiration_time</ExpirationTime>
    <ChargeCurrency>[deposit|hotel|installment|web]</ChargeCurrency>

    <!-- For Live Query responses -->
    <Occupancy>max_number_of_occupants</Occupancy>
    <OccupancyDetails> <!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>

    <Rates>...</Rates>

    <RoomBundle>...</RoomBundle>

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

    <Custom[1-5]>custom_value</Custom[1-5]>
  </Result>
  ...
  </Transaction>

Attributes

The <Result> element has no attributes.

Child elements

The <Result> element has the following child elements:

Child Element Required? Type Description
<AllowablePointsOfSale> Optional Object 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> Optional Float The price of the room for the stay. The value of this element should reflect the following:

  • For a private room, set the least expensive double-occupancy rate that you offer.
  • For a shared room, leave empty and use <RoomBundle>.
  • 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. In such cases, you won't receive a Live Query. If, however, no <Baserate> element is given, a Live Query will be sent.

To remove a Room Bundle, use the instructions in Removing a Room Bundle.

The <Baserate> must not contain any digit grouping symbols, such as a comma (,) or period (.). Always separate fractions using a period (.) as the decimal mark. For example, represent $1,200.40 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-letter currency code. For example, "USD" for US dollars.
<ChargeCurrency> Optional Enum 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 Date The check-in date for an itinerary using the Date format. The combination of the <Nights> element and the <Checkin> element make up an itinerary.
<Custom[1‑5]> Optional String 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.

<ExpirationTime> Optional DateTime The date and time at which the price is considered expired.

<Nights> Optional Integer The number of nights for an itinerary. The value of the <Nights> element must be a positive integer. The combination of <Nights> and <Checkin> make up an itinerary.
<OtherFees> Required Float 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-letter currency code for the fees.

For example, "USD".

<Occupancy> Optional Integer Specifies the maximum number of occupants. When <Occupancy>appears under<Result>, it must specify "2" or more. <Occupancy>may be accompanied by <OccupancyDetails>, which specifies the type of guests (adults or children). See <OccupancyDetails> for syntax and description of child elements.
<Property> Required String 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 <RoomBundle> A container for 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, 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.

<Rates> Optional <Rates> A container for one or more <Rate> blocks. Each <Rate> in <Rates> defines a different price for the room/itinerary combination.

Use the <Rates> element only when there are multiple rates for the same room/itinerary combination. For example, you define multiple rates for fenced rates, qualified rates, or fenced rates in Room Bundles).

<RoomID> Optional String 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 Float 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-letter currency code for the taxes. For example, "USD".

Examples

Example 1

The following example defines one itinerary and its pricing for two properties:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <RoomID>RoomType101</RoomID>
    <Checkin>2018-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="site1"/>
    </AllowablePointsOfSale>
  </Result>
  <Result>
    <Property>052213</Property>
    <RoomID>RoomType101</RoomID>
    <Checkin>2018-06-10</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="otto"/>
      <PointOfSale id="simon"/>
    </AllowablePointsOfSale>
  </Result>
</Transaction>

Not shown in this example are details about the room, such as a description, a picture 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 in all subsequent pricing and inventory updates. For more information, see Room Bundle metadata.

<RoomBundle>

Defines pricing and availability for Room Bundles as a child of <Result> in a <Transaction> message. Define a separate element for each package/itinerary combination. To define the package and terms of the Room Bundles, use <RoomData>.

The <RoomBundle> element appears in the following place in the Transaction message XML hierarchy:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

For more information, see Using Room Bundles.

Syntax

The <RoomBundle> element uses the following syntax:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    ...
    <RoomBundle>
      <!-- Required -->
      <RoomID>room_ID</RoomID>
      <!-- Required -->
      <PackageID>package_ID</PackageID>

      <!-- Required -->
      <Baserate currency="currency_code">price</Baserate>
      <!-- Required -->
      <Tax currency="currency_code">taxes</Tax>
      <!-- Required -->
      <OtherFees currency="currency_code">other_fees</OtherFees>

      <Capacity>max_number_of_occupants</Capacity>
      <Occupancy>max_number_of_occupants</Occupancy>
      <OccupancyDetails> <!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>

      <RatePlanID>rate_plan_ID</RatePlanID>

      <Rates>...</Rates>

      <Custom1>custom_value_1</Custom1>
      <Custom2>custom_value_2</Custom2>
      <Custom3>custom_value_3</Custom3>
      <Custom4>custom_value_4</Custom4>
      <Custom5>custom_value_5</Custom5>
    </RoomBundle>
    ...
  </Result>
</Transaction>

Note that you can also define a <PackageData> and/or a <RoomData> inside a <RoomBundle>. However, this is less efficient than defining them separately and referring to them with <RoomID> and <PackageID>, and is therefor not recommended.

Attributes

The <RoomBundle> element has no attributes.

Child elements

The <RoomBundle> element has the following child elements:

Child Element Required? Type Description
<Baserate> Required Float Defines the price of the Room Bundle for the stay. This element uses the same syntax as <Baserate> in <Result>, with the following exception:

  • When the room is unavailable for the itinerary, remove the <RoomBundle> element to indicate that a room is no longer in inventory. For more information, see Removing a Room Bundle.
<Capacity> Optional Integer The maximum number of people that a Room Bundle can physically accommodate.

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

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

If you specify this element in both <RoomBundle> and <PackageData>, the value in <RoomBundle> takes precedence.

<Custom[1‑5]> Optional String Custom fields for passing additional data to Points of Sale for the Room Bundle. These elements use the same syntax as <Custom[1-5]> in <Result>.
<Occupancy> Required Integer The maximum number of guests for which a Room Bundle is intended. For example, a large suite might be able to physically accommodate 6 guests, but the "Honeymoon Package" is intended for 2 guests only.

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

When setting the occupancy in a Points of Sale file, use the NUM-ADULTS attribute, as described in Building Dynamic POS URLs. The default value is "2".

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

Notes:

  • <Occupancy> may be accompanied by <OccupancyDetails>, which specifies the type of guests (adults or children). See <OccupancyDetails> for syntax and description of child elements.
  • If you specify <Occupancy> in both <RoomBundle> and <PackageData>, the value in <RoomBundle> takes precedence.
<OtherFees> Required Float 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-letter currency code for the fees. For example, use "USD" for US dollars.
<PackageID> Required String The unique ID for the package data. Use this ID to match the Room Bundle data with what was sent in <PackageData>. 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.)
<RatePlanID> Optional String Specifies a value that can then be used by the Points of Sale to construct a custom URL for a Point of Sale (POS). This is the value of the RATE-PLAN-ID variable.

For more information, see Building Dynamic URLs.

<Rates> Optional <Rates> Rates that override the defaults for this Room Bundle. This element uses the same syntax as <Rates> in <Result>.
<RoomID> Required String The unique ID for the room data. Use this ID to match the Room Bundle data with what you sent in <RoomData>. 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.)
<Tax> Required Float 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-letter currency code for the taxes. For example, use "USD" for US dollars.

Examples

Example 1

The following example defines the pricing of two Room Bundles for the given itinerary (a 2-night check-in starting on 6/7/18).

This example references pre-defined room and package metadata with the <RoomID> and <PackageID> elements. Use the <RoomData> and <PackageData> elements to define that information.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2018-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">199.99</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="bookingsite1.com"/>
    </AllowablePointsOfSale>

    <!-- Base Rate Room Bundle -->
    <RoomBundle>
      <RoomID>single</RoomID>
      <PackageID>standard_stay</PackageID>
      <!-- Price for 2 ("occupancy") -->
      <Baserate currency="USD">199.99</Baserate>
      <Tax currency="USD">25.12</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
    </RoomBundle>

    <!-- Premium Room Bundle -->
    <RoomBundle>
      <RoomID>single</RoomID>
      <PackageID>refund_breakfast</PackageID>
      <!-- Price for 2 ("occupancy") -->
      <Baserate currency="USD">298.88</Baserate>
      <Tax currency="USD">42.12</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
    </RoomBundle>
  </Result>
</Transaction>

Example 2

The following example sets both Capacity and Occupancy in multiple Room Bundles to demonstrate possible hostel room pricing.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    ...
    <!-- Suite Room Bundle -->
    <RoomBundle>
      <RoomID>suite1</RoomID>
      <PackageID>standard</PackageID>
      <Capacity>2</Capacity>
      <Occupancy>2</Occupancy>
      <!-- Price for room -->
      <Baserate currency="USD">80.00</Baserate>
      <Tax currency="USD">5.12</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
      <RoomData>
        <Name>
          <Text text="Suite for 2" language="en"/>
        </Name>
      </RoomData>
    </RoomBundle>

    <!-- Small Dorm Room Bundle -->
    <RoomBundle>
      <RoomID>small_dorm</RoomID>
      <PackageID>economy</PackageID>
      <Capacity>4</Capacity>
      <Occupancy>1</Occupancy>
      <!-- Price per bed -->
      <Baserate currency="USD">35.00</Baserate>
      <Tax currency="USD">3.50</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
      <RoomData>
        <Name>
          <Text text="1 bed in small dorm" language="en"/>
        </Name>
      </RoomData>
    </RoomBundle>

    <!-- Large Dorm Room Bundle -->
    <RoomBundle>
      <RoomID>large_dorm</RoomID>
      <PackageID>economy</PackageID>
      <Capacity>8</Capacity>
      <Occupancy>1</Occupancy>
      <!-- Price per bed -->
      <Baserate currency="USD">20.00</Baserate>
      <Tax currency="USD">2.50</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
      <RoomData>
        <Name>
          <Text text="1 bed in large dorm" language="en"/>
        </Name>
      </RoomData>
    </RoomBundle>
    ...
  </Result>
</Transaction>

<RoomData>

Defines itinerary-independent metadata about rooms, and by extension, Room Bundles (since Room Bundles are rooms plus additional amenities). Use <RoomData> to reduce the repetition of descriptive data in your Price Feed.

The <RoomData> element appears in the following place in the Transaction message XML hierarchy:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

<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.

The <RoomData> element is similar to <PackageData>, but it describes the physical room rather than amenities and terms of a package. You use <RoomData> and <PackageData> in combination to provide details about Room Bundles. For individual rooms that are not part of a package, use just <RoomData>.

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.

For more information, see Room Bundle metadata.

Syntax

The <RoomData> element uses the following syntax:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet>
    ...
    <RoomData>
      <RoomID>room_ID</RoomID>

      <Name>
        <Text text="room_name" language="language_code"/>
        ...
      </Name>

      <Description>
        <Text text="room_description" language="language_code"/>
        ...
      </Description>

      <Capacity>max_number_of_occupants</Capacity>
      <Occupancy>max_number_of_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>
    ...
  </PropertyDataSet>
</Transaction>

Attributes

The <RoomData> element has no attributes.

Child elements

The <RoomData> element has the following child elements:

Child Element Required? Type Description
<Capacity> Optional Integer 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 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.

<Description> Optional Object 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 the following two required attributes:

  • text: A detailed description of the room.
  • language: A two-letter language code; for example, "fr".

Use a separate <Text> element for each language in which your ad might appear (with different values for the language attributes).

The following example shows French and English versions of the room description:

<Description>
  <Text text="Two queen-sized beds" language="en"/>
  <Text text="Deux lits de la reine" language="fr"/>
</Description>
<Name> Required String 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 the following two required attributes:

  • text: The name of the room.
  • language: A two-letter language code; for example, "fr".

Use a separate <Text> element for each language in which your ad might appear (with different values for the language attributes).

The following example shows French and English versions of the room name:

<Name>
  <Text text="Standard Double Room" language="en"/>
  <Text text="Le chambre double" language="fr"/>
</Name>
<Occupancy> Optional (strongly encouraged) 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, 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). See <OccupancyDetails> for syntax and description of child elements.

<PhotoURL> Optional Object 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>
<RoomID> Required String 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.)

Examples

Example 1

The following example defines room data:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-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>

Example 2

The following example defines room and package metadata:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-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>

Example 3

The following example defines room and package metadata for multiple Room Bundles:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <!-- A transaction message with room types result. -->
  <PropertyDataSet>
    <Property>12345</Property>
    <RoomData>
      <RoomID>single</RoomID>
      <Name>
        <Text text="Single room" language="en"/>
        <Text text="Chambre simple" language="fr"/>
      </Name>
      <Description>
        <Text text="A single room" language="en"/>
        <Text text="Le chambre simple" 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>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image1235.jpg</URL>
      </PhotoURL>
      <Capacity>2</Capacity>
    </RoomData>
    <RoomData>
      <RoomID>double</RoomID>
      <Name>
        <Text text="Double room" language="en"/>
        <Text text="Chambre double" language="fr"/>
      </Name>
      <Occupancy>1</Occupancy>
    </RoomData>
    <PackageData>
      <PackageID>refundbreakfast</PackageID>
      <Name>
        <Text text="Refundable Room with Breakfast" language="en"/>
        <Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Continental Breakfast" language="en"/>
        <Text text="Petit déjeuner continental" language="fr"/>
      </Description>
      <ChargeCurrency>hotel</ChargeCurrency>
      <Refundable available="1" refundable_until_days="3"/>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>prepaid</PackageID>
      <Name>
        <Text text="Nonrefundable" language="en"/>
        <Text text="Non remboursable" language="fr"/>
      </Name>
      <Description>
        <Text text="Blah blah blad" language="en"/>
        <Text text="Le blah blah blad" language="fr"/>
      </Description>
      <Occupancy>2</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="0"/>
    </PackageData>
  </PropertyDataSet>
</Transaction>

<Transaction>

The root element of a Transaction message. <Transaction> is a container for descriptive information about rooms and packages and/or pricing and availability for rooms and packages.

The <Transaction> element appears in the following place in the Transaction message XML hierarchy:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

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

Syntax

The <Transaction> element 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>

Attributes

The <Transaction> element has the following attributes:

Attribute Required? Type Description
id Required String A unique identifier for each Transaction message.
partner Optional String 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 DateTime The moment in time that the Transaction message was sent.

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.

Child elements

The <Transaction> element has the following child elements:

Child Element Required? Type Description
<PropertyDataSet> Optional* <PropertyDataSet> Describes a specific room and 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.

<Result> Optional* <Result>

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.

* At least one of <PropertyDataSet> or <Result> is required.

Examples

Example 1

The following example defines room data in a simple Transaction message:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-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>

Example 2

The following example defines pricing data in a simple Transaction message:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <RoomID>RoomType101</RoomID>
    <Checkin>2018-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="site1"/>
    </AllowablePointsOfSale>
  </Result>
  <Result>
    <Property>052213</Property>
    <RoomID>RoomType101</RoomID>
    <Checkin>2018-06-10</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="otto"/>
      <PointOfSale id="simon"/>
    </AllowablePointsOfSale>
  </Result>
</Transaction>

Example 3

The following example defines pricing data for 1 to 7 nights beginning June 7th, 2018:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-08-24T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>1</Nights>
    <Baserate currency="USD">209.99</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">419.98</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>3</Nights>
    <Baserate currency="USD">614.97</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>4</Nights>
    <Baserate currency="USD">819.96</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>5</Nights>
    <Baserate currency="USD">999.95</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>6</Nights>
    <Baserate currency="USD">1193.94</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>7</Nights>
    <Baserate currency="USD">1259.93</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
</Transaction>

Example 4

The following example shows a Transaction message that contains a base rate and a fenced rate:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>1</Nights>

    <Baserate currency="USD">200.00</Baserate>
    <Tax currency="USD">20.00</Tax>
    <OtherFees currency="USD">1.00</OtherFees>

    <Rates>
      <!-- The rate_rule_id is required when using fenced rate -->
      <Rate rate_rule_id="mobile">
        <!-- Override base rate and taxes for fenced rate -->
        <Baserate currency="USD">180.00</Baserate>
        <Tax currency="USD">18.00</Tax>
        <!-- NOTE: OtherFees is inherited from the above setting -->
        <Custom1>ratecode123</Custom1>
      </Rate>
    </Rates>

  </Result>
</Transaction>

Example 5

The following example defines a base rate and multiple rates within a <RoomBundle>:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>

    <Baserate currency="USD">300.00</Baserate>
    <Tax currency="USD">30.00</Tax>
    <OtherFees currency="USD">2.00</OtherFees>

    <RoomBundle>
      <RoomID>5</RoomID>
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <InternetIncluded>1</InternetIncluded>

      <!-- "mobile" overrides chargeCurrency, "us_or_gb" doesn’t -->
      <ChargeCurrency>web</ChargeCurrency>
      <!-- both Rates override Custom1 -->
      <Custom1>ratebasic</Custom1>
      <!-- neither Rate overrides Custom2 -->
      <Custom2>ratebasic</Custom2>

      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <ChargeCurrency>hotel</ChargeCurrency>
          <Custom1>ratecode321</Custom1>
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <Custom1>ratecode432</Custom1>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

Example 6

The following example removes several inventories (1-night stays for several different dates) for a hotel from inventory:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1123581321</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>1</Nights>
    <strong><Baserate currency=&quot;USD&quot;>-1</Baserate>
    <Tax currency=&quot;USD&quot;>0</Tax>
    <OtherFees currency=&quot;USD&quot;>0</OtherFees></strong>
  </Result>
  <Result>
    <Property>1123581321</Property>
    <Checkin>2018-06-08</Checkin>
    <Nights>1</Nights>
    <strong><Baserate currency=&quot;USD&quot;>-1</Baserate>
    <Tax currency=&quot;USD&quot;>0</Tax>
    <OtherFees currency=&quot;USD&quot;>0</OtherFees></strong>
  </Result>
  <Result>
    <Property>1123581321</Property>
    <Checkin>2018-06-09</Checkin>
    <Nights>1</Nights>
    <strong><Baserate currency=&quot;USD&quot;>-1</Baserate>
    <Tax currency=&quot;USD&quot;>0</Tax>
    <OtherFees currency=&quot;USD&quot;>0</OtherFees></strong>
  </Result>
</Transaction>

<OccupancyDetails>

<Occupancy>> in a transaction message specifies the maximum number of guests for a room or package. <OccupancyDetails> can contain additional information such as the number and type of guests (adults or children).

When <Occupancy> and <OccupancyDetails> appear within the <Rates> element of <Result> or <RoomBundle>, it means that the rate is constrained by the occupancy details.

Syntax

When <OccupancyDetails> appears, it is always preceded by <Occupancy>. Note the following syntax:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
  ...
    <Occupancy>max_number_of_occupants</Occupancy>
    <OccupancyDetails>
      <NumAdults>number_of_adults</NumAdults>
      <Children>
        <Child age=age_of_one_child_guest/>
        <Child age=age_of_one_child_guest/>
      </Children>
    </OccupancyDetails>
  </Result>
</Transaction>

Child elements

The <OccupancyDetails> element has the following child elements:

Child Element Required? Type Description
<NumAdults> Yes Integer Specifies the number of adult guests
<Children> No Integer Specifies whether any guests are children
<Child "age"> No Integer Specifies the maximum age for each child

Examples

The following examples show how <OccupancyDetails> may appear within <Results>,<RoomBundle>, or the <Rates> child element.

Example 1

The following example defines one itinerary and its pricing for one property in response to a Live Query where the user specified the number and types of guests. Here, the <OccupancyDetails> -- 2 adults and one child -- are returned in <Result>.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <RoomID>RoomType101</RoomID>
    <Checkin>2018-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="site1"/>
    </AllowablePointsOfSale>
    <Occupancy>3</Occupancy>
    <OccupancyDetails>
      <NumAdults>2</NumAdults>
      <Children>
        <Child age="17"/>
      </Children>
    </OccupancyDetails>
  </Result>
</Transaction>

Example 2

The following example defines one itinerary and its pricing for 1 adult and 1 child. Here, the <OccupancyDetails> are returned in the <Rates> element of <Result>.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Transaction id="Wtdj8QoQIWcAAbaTGlIAAAC4" timestamp="2018-04-18T11:27:45-04:00">
  <Result>
    <Property>8251</Property>
    <Checkin>2018-06-20</Checkin>
    <Nights>1</Nights>
    <Baserate currency="USD">62.18</Baserate>
    <Tax currency="USD">2.45</Tax>
    <OtherFees currency="USD">0.00</OtherFees>
    <Rates>
      <Rate rate_rule_id="rule-951">
        <Occupancy>2</Occupancy>
        <OccupancyDetails>
          <NumAdults>1</NumAdults>
          <Children>
            <Child age="17"/>
          </Children>
        </OccupancyDetails>
        <Baserate currency="USD">42.61</Baserate>
        <Tax currency="USD">5.70</Tax>
        <OtherFees currency="USD">0.00</OtherFees>
        <Custom1>abc4</Custom1>
        <AllowablePointsOfSale>
          <PointOfSale id="yourhotelpartnersite.com"/>
        </AllowablePointsOfSale>
      </Rate>
    </Rates>
  </Result>
</Transaction>

Example 3

The following example defines an occupancy of 2 adults and 1 child for two nights, with a refundable rate. Here, the <OccupancyDetails> appear inside <RoomBundle>.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>6781291</Property>
    <Checkin>2017-08-05</Checkin>
    <Nights>2</Nights>
    <RoomBundle>
      <RoomID>10291</RoomID>
      <RatePlanID>564739</RatePlanID>
      <PackageID>564739</PackageID>
      <Occupancy>3</Occupancy>
      <OccupancyDetails>
        <NumAdults>2</NumAdults>
        <Children>
          <Child age="17"/>
        </Children>
      </OccupancyDetails>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="true" refundable_until_days="1" refundable_until_time="23:59:00" />
      <Baserate currency="USD">185.34</Baserate>
      <Tax currency="USD">37.06</Tax>
      <OtherFees currency="USD">2.22</OtherFees>
    </RoomBundle>
  </Result>
</Transaction>

Example 4

The following example defines multiple <RoomBundle> rates that are restricted to an occupancy of 2 adults and 2 children. Here, the <OccupancyDetails> appear in the <Rates> element of <RoomBundle>

.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">275.00</Baserate>
    <Tax currency="USD">27.50</Tax>
    <OtherFees currency="USD">0</OtherFees>
    <RoomBundle>
      <RoomID>5</RoomID>
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <InternetIncluded>1</InternetIncluded>
      <ChargeCurrency>web</ChargeCurrency>
      <Custom1>ratebasic</Custom1>
      <Custom2>ratebasic</Custom2>
      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <ChargeCurrency>hotel</ChargeCurrency>
          <Custom1>ratecode321</Custom1>
          <Occupancy>4</Occupancy>
          <OccupancyDetails>
            <NumAdults>2</NumAdults>
            <Children>
              <Child age="17"/>
              <Child age="17"/>
            </Children>
          </OccupancyDetails>
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <Custom1>ratecode432</Custom1>
          <Occupancy>4</Occupancy>
          <OccupancyDetails>
            <NumAdults>2</NumAdults>
            <Children>
              <Child age="17"/>
              <Child age="17"/>
            </Children>
          </OccupancyDetails>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

Send feedback about...

Hotel Prices
Need help? Visit our support page.