Pricing & Room Inventory (Transactions) XML Reference

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

<Transaction>

The root element of a Transaction message is <Transaction> . It is a container for descriptive information about rooms and packages and 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 100 MB.

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 backend provides price feeds for multiple partner accounts. This string value is the "Partner key" value listed on the Account settings page in Hotel Center.
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 2019-05-03 14:09:00 that is received after a message with a timestamp of 2019-05-03 14:10:00 will still be processed in order, and the price from the message with the timestamp of 2019-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*

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*

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

Room data

The following example defines room data in a 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> 

Pricing data

The following example defines pricing data in a 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>  
<PackageID>Package101</PackageID>  
<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>  
<PackageID>Package101</PackageID>  
<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>  
<MilesIncluded>  
<NumberOfMiles>1200</NumberOfMiles>  
<Provider>  
<Text  
language="en"  
text="United  
Airlines"/>  
</Provider>  
<LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>  
</MilesIncluded>  
</Result>
</Transaction> 

Nightly rates

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

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


Base & conditional rates

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

 <?xml  
version="1.0"  
encoding="UTF-8"  
?>
<Transaction  
timestamp="2023-05-18T16:20:00-04:00"  
id="42">  
<Result>  
<Property>1234</Property>  
<Checkin>2023-04-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  
conditional  
rates  
-->  
<Rate  
rate_rule_id="mobile">  
<!--  
Override  
base  
rate  
and  
taxes  
for  
conditional  
rates  
-->  
<Baserate  
currency="USD">180.00</Baserate>  
<Tax  
currency="USD">18.00</Tax>  
</Rate>  
</Rates>  
</Result>
</Transaction> 

Remove inventory

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="2023-05-23T16:20:00-04:00"  
id="42">  
<Result>  
<Property>1123581321</Property>  
<Checkin>2023-05-23</Checkin>  
<Nights>1</Nights>  
<Unavailable>  
<NoVacancy/>  
</Unavailable>  
<Tax  
currency="USD">0</Tax>  
<OtherFees  
currency="USD">0</OtherFees>  
</Result>  
<Result>  
<Property>1123581321</Property>  
<Checkin>2023-05-24</Checkin>  
<Nights>1</Nights>  
<Unavailable>  
<NoVacancy/>  
</Unavailable>  
<Tax  
currency="USD">0</Tax>  
<OtherFees  
currency="USD">0</OtherFees>  
</Result>  
<!---Sending  
<Baserate>  
is  
optional  
with  
<Unavailable>  
-->  
<Result>  
<Property>1123581321</Property>  
<Checkin>2023-05-25</Checkin>  
<Nights>1</Nights>  
<Baserate  
currency="USD">-1</Baserate>  
<Unavailable>  
<NoVacancy/>  
</Unavailable>  
<Tax  
currency="USD">0</Tax>  
<OtherFees  
currency="USD">0</OtherFees>  
</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, refer to 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*
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, refer to 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*
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.

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

Examples

Room and package data

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>1</BreakfastIncluded>  
</PackageData>  
</PropertyDataSet>
</Transaction> 

When you send prices and availability for this room and 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, refer to Room Bundle metadata .

<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, refer to 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_intended_occupants 
 
< / 
 Occupancy 
>  
< OccupancyDetails 
>  
< ! 
 -- 
  
 optional 
  
 info 
  
 about 
  
 the 
  
 types 
  
 of 
  
 guests 
 , 
  
 whether 
  
 adults 
 , 
  
 children 
 , 
  
 or 
  
 seniors 
  
 --></ 
 OccupancyDetails 
>  
< OccupancySettings 
>  
< MinOccupancy> min_number_of_occupants 
 
< / 
 MinOccupancy 
>  
< MinAge> min_age_of_occupants 
 
< / 
 MinAge 
>  
< / 
 OccupancySettings 
>  
< PhotoURL 
>  
< Caption 
>  
< Text 
  
 text 
 = 
 " photo_description 
" 
  
 language 
 = 
 " language_code 
" 
 / 
>  
 ... 
  
< / 
 Caption 
>  
< URL> photo_location 
 
< / 
 URL 
>  
< / 
 PhotoURL 
>  
< RoomFeatures 
>  
 ... 
  
< / 
 RoomFeatures 
>  
< / 
 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 guests that a room can physically accommodate . For a room, capacity is greater than or equal to occupancy.

When specified, this value must be equal to or greater than the value of the <Occupancy> element, which is the intended number of guests for a particular room. For example, a large suite's <Capacity> might be 6, but the <Occupancy> for it 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 shouldn't 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 or free booking link 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 (formerly point of sale). Don't 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 or free booking link 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
integer
The maximum number of guests that a room is intended for . For example, a large suite might be able to physically accommodate 6 guests (capacity = 6), but is intended for up to 4 guests only.

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

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

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

<OccupancySettings>
Optional
Object
Settings which can restrict or modify the occupancy requirements of a room.

The <OccupancySettings> element takes the following child elements:

  • <MinOccupancy> : The minimum number of guests that can stay in a room. For example, if this is set to 2 , this room cannot be booked for a single guest.

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

  • <MinAge> : The minimum age for all guests staying in a room. For example, if this is set to 18 , this room can only be booked for groups where all guests are of age 18 or older.

    The value of <MinAge> must be a positive integer between 0 and 99, inclusive.

<OccupancySettings>
  <MinOccupancy>2</MinOccupancy>
  <MinAge>16</MinAge>
</OccupancySettings>

Not all child elements need to be included.

<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. Each photo URL must be in its own <PhotoURL> .

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 (for example, https:// ). Use only one <URL> per <PhotoURL> .
  • <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 .

Example:

<PhotoURL>
  <URL>https://www.example.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>
<PhotoURL>
  <URL>https://www.foo.com/static/bar/image5678.jpg</URL>
  <Caption>
    <Text text="Or, perhaps you prefer coffee." language="en"/>
    <Text text="Ou peut-être préférez-vous le café." language="fr"/>
  </Caption>
</PhotoURL>
<RoomFeatures>
Optional
Contains information about room features.
<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, refer to 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

Room data

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> 

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>1</BreakfastIncluded>  
</PackageData>  
</PropertyDataSet>
</Transaction> 

Multiple room bundles

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> 

<RoomFeatures>

Defines features found in the room.

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

 + 
  
  < Transaction 
> 
 
  
 + 
  
  < PropertyDataSet 
> 
 
  
 // Room and package metadata 
  
 + 
  
 < Property 
> 
  
 + 
  
  < RoomData 
> 
 
  
 + 
  
  < RoomFeatures 
> 

Syntax

The <RoomFeatures> element uses the following syntax:

 < ? 
 xml 
  
 version 
 = 
 "1.0" 
  
 encoding 
 = 
 "UTF-8" 
 ? 
> 
 < Transaction 
  
 ... 
  
> 
  
 < PropertyDataSet 
  
 ... 
  
>  
 ... 
 
  
< RoomData 
>  
< RoomFeatures 
>  
< JapaneseHotelRoomStyle 
> [ 
 western 
 | 
 japanese 
 | 
 japanese_western 
 ] 
< / 
 JapaneseHotelRoomStyle 
>  
< Beds 
>  
< Bed 
  
 size 
 = 
 "[single|semi_double|double|queen|king]" 
>  
< Width 
  
 unit 
 = 
 "cm" 
  
 number 
 = 
 " width 
" 
 / 
>  
< Length 
  
 unit 
 = 
 "cm" 
  
 number 
 = 
 " length 
" 
 / 
>  
< / 
 Bed 
>  
< ! 
 -- 
  
 Include 
  
 with 
  
 any 
  
 additional 
  
 beds 
 . 
  
 -- 
>  
< / 
 Beds 
>  
< Suite 
 / 
>  
< Capsule 
 / 
>  
< Roomsharing 
> [ 
 shared 
 | 
 private 
 ] 
< / 
 Roomsharing 
>  
< Outdoor 
 / 
>  
< MobilityAccessible 
 / 
>  
< Smoking 
> [ 
 smoking 
 | 
 non_smoking 
 ] 
< / 
 Smoking 
>  
< BathAndToilet 
  
 relation 
 = 
 "[together|separate]" 
>  
< Bath 
  
 bathtub 
 = 
 "[false|true]" 
  
 shower 
 = 
 "[false|true]" 
 / 
>  
< Toilet 
  
 electronic_bidet 
 = 
 "[false|true]" 
  
 mobility_accessible 
 = 
 "[false|true]" 
 / 
>  
< / 
 BathAndToilet 
>  
< OpenAirBath 
 / 
>  
< AirConditioning 
 / 
>  
< Balcony 
 / 
>  
< Views 
>  
< ! 
 -- 
  
 ( 
 Optional 
 ) 
  
 Defines 
  
 the 
  
 type 
  
 of 
  
 views 
  
 from 
  
 the 
  
 room 
 . 
  
 -- 
>  
< ! 
 -- 
  
 Example 
 : 
  
< OceanView 
 / 
>  
 -- 
>  
< / 
 Views 
>  
< / 
 RoomFeatures 
>  
 ... 
  
< / 
 RoomData 
>  
  ... 
  
< / 
 PropertyDataSet 
>
< / 
 Transactions 
> 

Attributes

The <RoomFeatures> element has no attributes.

Child elements

The <RoomFeatures> element has the following child elements:

Child Element
Required?
Type
Description
<JapaneseHotelRoomStyle>
Optional
enum

Indicates the style of a Japanese hotel room.

Valid values are:

  • western : A western style room with beds.
  • japanese : A Japanese style room with futon beds.
  • japanese_western : A Japanese western style room with both western style beds and Japanese style futons.
<Beds>
Optional
Object
Contains as many <Bed> as the room has. Note that the Japanese futons shouldn't be counted here.

Each <Bed> has the following attributes:

  • size (optional): Valid values are single , semi_double , double , queen , and king .
Each <Bed> has the following child elements:
  • <Width> (optional): Specifies the bed width. Must have the attribute unit with the value cm and the attribute number with the width of the bed in integer centimeters.
  • <Length> (optional): Specifies the bed length. Must have the attribute unit with the value cm and the attribute number with the length of the bed in integer centimeters.
Example:
<Beds>
  <Bed size="double">
    <Width unit="cm" number="140"/>
    <Length unit="cm" number="195"/>
  </Bed>
  <Bed/> <!-- Size unknown -->
</Beds>
<Suite>
Optional
empty
Provide this element when this room is a suite.
<Capsule>
Optional
empty
Provide this element when this room is a capsule room.
<Roomsharing>
Optional
enum
Whether this room is shared with other occupants such as owners or other guests. Valid values are shared and private .
<Outdoor>
Optional
empty
Provide this element when this room is outdoor lodging that doesn't have fixed walls, plumbing, and climate control. For example, hotel rooms are not outdoor lodging whereas campsites where guests stay in tents and RV parks where guests bring their own RV are outdoor lodging.
<MobilityAccessible>
Optional
empty
Provide this element when this room is mobility-accessible.
<Smoking>
Optional
enum
Whether this room is a non-smoking room or a smoking room. Valid values are non_smoking and smoking .
<BathAndToilet>
Optional
Object
Contains information about a bath and toilet in the room.

The attribute is:

  • relation (optional): Indicates how the bath and toilet are placed against each other. Valid values are together (both bath and toilet are located together in the same room (e.g. bathroom) right next to each other) and separate (bath and toilet each have dedicated spaces). This attribute must not be set when the room doesn't have both a bath and toilet.

The element optionally takes the following child elements:

  • <Bath> (optional): The existence of this element indicates that the room has a bath.

    The attributes are:

    • bathtub (optional): Indicates that the bath has a bathtub in the bathroom. Valid values are 0 (or false ) and 1 (or true ).
    • shower (optional): Indicates that the bath has a shower. Valid values are 0 (or false ) and 1 (or true ).
  • <Toilet> (optional): The existence of this element indicates that this room has a toilet.

    The attributes are:

    • electronic_bidet (optional): Indicates that the toilet has an electronic bidet . Valid values are 0 (or false ) and 1 (or true ).
    • mobility_accessible (optional): Indicates that the toilet is mobility-accessible. Valid values are 0 (or false ) and 1 (or true ).

Example:

<BathAndToilet relation="separate">
  <Bath bathtub="1" shower="1"/>
  <Toilet
    electronic_bidet="1"
    mobility_accessible="1"/>
</BathAndToilet>
<OpenAirBath>
Optional
empty
Provide this element when this room has a private open-air bath.
<AirConditioning>
Optional
empty
Provide this element when this room has air conditioning.
<Balcony>
Optional
empty
Provide this element when this room has a balcony or lanai.
<Views>
Optional
Object
Valid options include:

<AirportView/>
<BayView/>
<BeachView>/>
<CastleView/>
<CityView/>
<CountrysideView/>
<CourtyardView/>
<DuneView/>
<ForestView/>
<GardenView/>
<GolfCourseView/>
<HarborView/>
<LagoonView/>
<LakeView/>
<MarinaView/>
<MountainView/>
<NatureView/>
<OceanView/>
<ParkView/>
<PartialOceanView/>
<PisteView/>
<PoolView/>
<PyramidView/>
<RiverView/>
<StreetView/>

Examples

JapaneseHotelRoomStyle doesn't have a default value. Omitting a value does not result in an XML error, but your listing is not shown in the search results, when the user filters by room style or beds.

Two single beds

The following example shows how to use <RoomFeatures> :

 <?xml  
version="1.0"  
encoding="UTF-8"?>
<Transaction  
timestamp="2017-07-18T16:20:00-04:00"  
id="42">  
<PropertyDataSet>  
<Property>1234</Property>  
<RoomData>  
<RoomID>RoomID_1</RoomID>  
<RoomFeatures>  
<JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>  
<Beds>  
<!--  
Two  
single  
beds  
-->  
<Bed  
size="single">  
<Width  
unit="cm"  
number="97"/>  
<Length  
unit="cm"  
number="195"/>  
</Bed>  
<Bed  
size="single">  
<Width  
unit="cm"  
number="97"/>  
<Length  
unit="cm"  
number="195"/>  
</Bed>  
</Beds>  
<Suite/>  
<Capsule/>  
<Roomsharing>private</Roomsharing>  
<Outdoor/>  
<MobilityAccessible/>  
<Smoking>non_smoking</Smoking>  
<BathAndToilet  
relation="separate">  
<Bath  
bathtub="1"  
shower="1"/>  
<Toilet  
electronic_bidet="1"  
mobility_accessible="1"/>  
</BathAndToilet>  
<OpenAirBath/>  
<AirConditioning/>  
<Balcony/>  
<Views>  
<LakeView/>  
<MarinaView/>  
<BeachView/>  
<ForestView/>  
<MountainView/>  
<NatureView/>  
</Views>  
</RoomFeatures>  
</RoomData>  
</PropertyDataSet>
</Transaction> 

Two double beds

The following is an example of western style Japanese room with two double beds.

 <?xml  
version="1.0"  
encoding="UTF-8"?>
<Transaction  
timestamp="2023-07-23T16:20:00-04:00"  
id="42">  
<PropertyDataSet>  
<Property>1234</Property>  
<RoomData>  
<RoomID>RoomID_1</RoomID>  
<RoomFeatures>  
<JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>  
<Beds>  
<!--  
Two  
double  
beds-->  
<Bed  
size="double"></Bed>  
<Bed  
size="double"></Bed>  
</Beds>  
</RoomFeatures>  
</RoomData>  
</PropertyDataSet>
</Transaction> 


Japanese style without bed

The following is an example of a Japanese style room without bed. Bed information is not required for japanese style room.

 <?xml  
version="1.0"  
encoding="UTF-8"?>
<Transaction  
timestamp="2023-07-23T16:20:00-04:00"  
id="42">  
<PropertyDataSet>  
<Property>1234</Property>  
<RoomData>  
<RoomID>RoomID_1</RoomID>  
<RoomFeatures>  
<JapaneseHotelRoomStyle>japanese</JapaneseHotelRoomStyle>  
</RoomFeatures>  
</RoomData>  
</PropertyDataSet>
</Transaction> 

Japanese western with bed

The following is an example of a japanese_western style room with king size bed.

 <?xml  
version="1.0"  
encoding="UTF-8"?>
<Transaction  
timestamp="2023-07-23T16:20:00-04:00"  
id="42">  
<PropertyDataSet>  
<Property>1234</Property>  
<RoomData>  
<RoomID>RoomID_1</RoomID>  
<RoomFeatures>  
<JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>  
<Beds>  
<Bed  
size="king"></Bed>  
</Beds>  
</RoomFeatures>  
</RoomData>  
</PropertyDataSet>
</Transaction> 

If partner doesn't have the number of beds information in japanese_western rooms, then follow the example:

 <?xml  
version="1.0"  
encoding="UTF-8"?>
<Transaction  
timestamp="2023-07-23T16:20:00-04:00"  
id="42">  
<PropertyDataSet>  
<Property>1234</Property>  
<RoomData>  
<RoomID>RoomID_1</RoomID>  
<RoomFeatures>  
<JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>  
</RoomFeatures>  
</RoomData>  
</PropertyDataSet>
</Transaction> 

<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, refer to 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 
 | 
 installments 
 | 
 web 
 ] 
< / 
 ChargeCurrency 
>  
< Occupancy> max_number_of_intended_occupants 
 
< / 
 Occupancy 
>  
< OccupancyDetails 
>< ! 
 -- 
  
 optional 
  
 info 
  
 about 
  
 the 
  
 types 
  
 of 
  
 guests 
 , 
  
 whether 
  
 adults 
  
 or 
  
 children 
  
 --></ 
 OccupancyDetails 
>  
< ! 
 -- 
  
 For 
  
 these 
  
 next 
  
 3 
  
 elements 
 , 
  
 boolean_value 
  
 can 
  
 be 
  
 0 
 / 
 1 
  
 or 
  
 true 
 / 
 false 
  
 -- 
>  
< BreakfastIncluded> boolean_value 
 
< / 
 BreakfastIncluded 
>  
< InternetIncluded> boolean_value 
 
< / 
 InternetIncluded 
>  
< ParkingIncluded> boolean_value 
 
< / 
 ParkingIncluded 
>  
< PhotoURL 
>  
< Caption 
>  
< Text 
  
 text 
 = 
 " photo_description 
" 
  
 language 
 = 
 " language_code 
" 
 / 
>  
 ... 
  
< / 
 Caption 
>  
< URL> photo_location 
 
< / 
 URL 
>  
< / 
 PhotoURL 
>  
 ... 
  
< Meals 
>  
< Breakfast 
  
 included 
 = 
 "[true|false]" 
  
 buffet 
 = 
 "[true|false]" 
  
 in_room 
 = 
 "[true|false]" 
  
 in_private_space 
 = 
 "[true|false]" 
 / 
>  
< Dinner 
  
 included 
 = 
 "[true|false]" 
  
 buffet 
 = 
 "[true|false]" 
  
 in_room 
 = 
 "[true|false]" 
  
 in_private_space 
 = 
 "[true|false]" 
 / 
>  
< / 
 Meals 
>  
< CheckinTime> checkin_time 
 
< / 
 CheckinTime 
>  
< CheckoutTime> checkout_time 
 
< / 
 CheckoutTime 
>  
< 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> integer 
 
< / 
 NumberOfMiles 
>  
< Provider 
>  
< Text 
  
 language 
 = 
 "en" 
  
 text 
 = 
  "provider-name" 
 
>  
< / 
 Provider 
>  
< ! 
 -- 
  
 Add 
  
 Loyalty 
  
 point 
  
 information 
  
 -- 
>  
< LoyaltyCampaignID> campaign_ID 
 
< / 
 LoyaltyCampaignID 
>  
< / 
 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 package includes breakfast with the rate. Valid values are 0 (or false ) and 1 (or true ).

It is preferred that you use <Meals> instead of <BreakfastIncluded> .

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

<CheckinTime>
Optional
Earliest possible check-in time. Time must be less than 24:00 in the local time of the hotel.
<CheckoutTime>
Optional
Latest possible check-out time in the local time of the hotel.
<Description>
Optional
Object
A detailed description of the package. This element should contain information not described by other elements or the <Name> element. You shouldn't 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." language="en"/>
  <Text text="Deux certificats petit-déjeuner buffet
    pour chaque nuit de séjour." language="fr"/>
</Description>
<InternetIncluded>
Optional
boolean
If a package includes internet access at no charge, while other packages wouldn't include that amenity. Don't 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 ) and 1 (or true ).
<Meals>
Optional
Object
Contains information about meals in this package.

The <Meals> element takes two optional child elements, <Breakfast> and <Dinner> , which have the following attributes:

  • included (required): Set to 1 (or true ) if the rate includes breakfast/dinner; otherwise set to 0 or false .
  • in_room (optional): Set to 1 (or true ) if guests have the option to have breakfast/dinner in the room they stay in; otherwise set to 0 (or false ).
  • in_private_space (optional): Set to 1 (or true ) if guests have the option to have breakfast/dinner in a space (except the room they stay in) where they can avoid contact with other guests; otherwise set to 0 (or false ).
  • buffet (optional): Set to 1 (or true ) if breakfast/dinner is served as a buffet; otherwise set to 0 (or false ).

The optional attributes are used only when included is true.

For meal filters ( no meals , breakfast only , dinner only , and breakfast and dinner ) to work, both <Breakfast> and <Dinner> need to be provided with the included attribute.

<Name>
Required
string
The name of the package. This value should match what appears on the hotel's landing page. Don't 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
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 99, 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). Refer to <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, refer to 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. Don't 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 .

<PhotoURL>
Optional
Object
(Same as <PhotoURL> in <RoomData> , but for the package (e.g. meal photos).)
<Refundable>
Optional
Object
Enables listing a rate as being fully refundable or providing a free cancellation. If not provided, no information about a refund is displayed. A refund policy at the <PackageData> level overrides the refund policy at the <Result> level. A refund policy at the <Rates> level overrides the refund policy at the <PackageData> level. Refundable pricing can also be highlighted to users through alternative options without directly modifying your transaction message schema. Learn more about these options Refundable rates policy .

The following example shows the <Refundable> element with all of its attributes set:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

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

If you don't set any attributes, the rate does not display as refundable. The attributes are:

  • available : (Required) Set to 1 or true to indicate if the rate allows a full refund; otherwise set to 0 or false .
  • refundable_until_days : (Required if available is true ) Specifies the number of days in advance of check-in that a full refund can be requested. The value of refundable_until_days must be an integer between 0 and 330, inclusive.
  • refundable_until_time : (Highly recommended if available is true ) Specifies the latest time of day, in the local time of the hotel, that a full refund request will be honored. This can be combined with refundable_until_days to specify, for example, that "refunds are available until 4:00PM two days before check-in". If refundable_until_time isn't set, the value defaults to midnight.

    The value of this attribute uses the Time format.

When setting the attributes, note the following:

  • If available or refundable_until_days isn't set, the rate does not display as refundable.
  • If available is 0 or false , the other attributes are ignored. The rate does not display as refundable even if one or both of the other attributes is set.
<MembershipBenefits Included>
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. For example: "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 provider.
  • LoyaltyCampaignID : A unique ID that identifies the specific Loyalty Campaign that was configured and updated with Google. It adds loyalty points to the hotel price.

    To include <MilesIncluded> element, campaign ID should be configured in the Loyalty Campaign configuration. The specific details on how Google uses loyalty points in the results are determined by the Loyalty Campaign configuration.

    The <MilesIncluded> element has a child element, <NumberOfMiles> which calculates the number of points earned. If the <NumberOfMiles> is not set, the points earned are determined by the Loyalty Campaign configuration.

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • Note: <NumberOfMiles> and <Provider> are optional.

<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.
<AirportTransportationIncluded>
Optional
Object
Rate includes free transportation to/from a nearby airport. The optional direction attribute specifies the directionality of the transportation. Valid values include:
    from : Transportation is provided from the airport to the property. This is the default value if no direction is specified. to : Transportation is provided to the airport from the property. round_trip : Transportation is provided both to and from the airport.

Examples

Single room bundle

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> 

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>1</BreakfastIncluded>  
</PackageData>  
</PropertyDataSet>
</Transaction> 

Multiple room bundles

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> 


Room bundle with rates

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>1</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>  
<LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>  
</MilesIncluded>  
<AirportTransportationIncluded  
direction="from"/>  
</PackageData>  
</PropertyDataSet>

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

Meals & photos

The following example defines room and package metadata for meals, photos, and check-in and check-out times:

 <?xml  
version="1.0"  
encoding="UTF-8"?>
<Transaction  
timestamp="2017-07-18T16:20:00-04:00"  
id="42">  
<PropertyDataSet>  
<Property>1234</Property>  
<PackageData>  
<PackageID>PackageID_1</PackageID>  
<Name>  
<Text  
text="Meals  
Included"  
language="en"/>  
</Name>  
<PhotoURL>  
<Caption>  
<Text  
text="Breakfast"  
language="en"/>  
<Text  
text="朝食"  
language="ja"/>  
</Caption>  
<URL>http://example.com/static/bar/image1234.jpg</URL>  
</PhotoURL>  
<Meals>  
<!--  
Guests  
can  
choose  
to  
have  
breakfast  
in  
their  
room  
or  
in  
another  
space  
to  
avoid  
contact  
with  
other  
guests.  
-->  
<Breakfast  
included="1"  
in_room="1"  
in_private_space="1"/>  
<Dinner  
included="1"  
buffet="1"/>  
</Meals>  
<CheckinTime>15:00</CheckinTime>  
<CheckoutTime>11:00</CheckoutTime>  
</PackageData>  
</PropertyDataSet>
</Transaction> 

Breakfast

 <?xml  
version="1.0"  
encoding="UTF-8"?>
<Transaction  
timestamp="2017-07-18T16:20:00-04:00"  
id="42">  
<PropertyDataSet>  
<Property>1234</Property>  
<PackageData>  
<PackageID>PackageID_1</PackageID>  
<Name>  
<Text  
text="Breakfast  
Included"  
language="en"/>  
</Name>  
<PhotoURL>  
<Caption>  
<Text  
text="Breakfast"  
language="en"/>  
<Text  
text="朝食"  
language="ja"/>  
</Caption>  
<URL>http://example.com/static/bar/image1234.jpg</URL>  
</PhotoURL>  
<Meals>  
<Breakfast  
included="true"/>  
<!--  
Dinner  
not  
included  
needs  
to  
be  
explicitly  
specified  
-->  
<Dinner  
included="false"/>  
</Meals>  
<CheckinTime>15:00</CheckinTime>  
<CheckoutTime>11:00</CheckoutTime>  
</PackageData>  
</PropertyDataSet>
</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, 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 
  
 -- 
>  
< Nights> number_of_nights 
 
< / 
 Nights 
>  
< 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 
>  
< Refundable 
  
 available 
 = 
 "[false|true]" 
  
 refundable_until_days 
 = 
 " number_of_days 
" 
  
 refundable_until_time 
 = 
 " time 
" 
 / 
>  
< RoomID> room_ID 
 
< / 
 RoomID 
>  
< PackageID> package_ID 
 
< / 
 PackageID 
>  
< ExpirationTime> expiration_time 
 
< / 
 ExpirationTime 
>  
< ChargeCurrency 
> [ 
 deposit 
 | 
 hotel 
 | 
 installments 
 | 
 web 
 ] 
< / 
 ChargeCurrency 
>  
< Occupancy> max_number_of_intended_occupants 
 
< / 
 Occupancy 
>  
< ! 
 -- 
  
 For 
  
 Baserate 
 , 
  
 occupancy 
  
 value 
  
 must 
  
 be 
  
 greater 
  
 than 
  
 or 
  
 equal 
  
 to 
  
 2 
 . 
  
 If 
  
 a 
  
 value 
  
 is 
  
 not 
  
 provided 
  
 for 
  
 occupancy 
 , 
  
 it 
  
 defaults 
  
 to 
  
 2 
 . 
  
 -- 
>  
< ! 
 -- 
  
 Child 
  
 occupancy 
  
 rates 
  
 should 
  
 only 
  
 be 
  
 sent 
  
 through 
  
 Live 
  
 pricing 
  
 with 
  
 context 
  
 and 
  
 not 
  
 through 
  
 Pull 
  
 or 
  
 Changed 
  
 pricing 
  
 -- 
>  
< OccupancyDetails> occupancy_info 
 
< / 
 OccupancyDetails 
>  
< Rates 
> ...</ 
 Rates 
>  
< RoomBundle 
> ...</ 
 RoomBundle 
>  
< AllowablePointsOfSale 
>  
< PointOfSale 
  
 id 
 = 
 " landing_page_identifier 
" 
 / 
>  
 ... 
  
< / 
 AllowablePointsOfSale 
>  
< MilesIncluded 
>  
< NumberOfMiles> integer 
 
< / 
 NumberOfMiles 
>  
< Provider 
>  
< Text 
  
 language 
 = 
 "en" 
  
 text 
 = 
  "provider-name" 
 
>  
< / 
 Provider 
>  
< ! 
 -- 
  
 Add 
  
 Loyalty 
  
 point 
  
 information 
  
 -- 
>  
< LoyaltyCampaignID> campaign_ID 
 
< / 
 LoyaltyCampaignID 
>  
< / 
 MilesIncluded 
>  
< / 
 Result 
>  
  ... 
  
< / 
 Transaction 
> 

Attributes

The <Result> element has the following attributes:

Attribute Required? Type Description
mergeable
Optional boolean By default, new prices for a specific hotel and itinerary pair will overwrite any previous (non-expired) prices present in Google's cache. The mergeable attribute lets you store additional prices to Google's cache without deleting previous pricing information. Live Pricing Query with Context responses will always have this attribute set to true (regardless of your transaction message response).

Child elements

The <Result> element has the following child elements:

Child Element
Required?
Type
Description
<AllowablePointsOfSale>
Optional
Object
One or more landing pages that are eligible for the hotel. A landing page is a website that can handle the booking process for the end-user. To explicitly include certain landing page (and exclude others), add one or more <AllowablePointsOfSale> elements that match the <PointOfSale> element's id attribute in the landing pages file.

If you don't include this element, all landing pages defined in the landing pages file are considered eligible to be used for booking the room. For more information, refer to Landing Pages File Syntax .

<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. Higher occupancies are allowed here if you don't have a double-occupancy rate and your account has non-double occupancy rates enabled. Please contact us to enable non-double occupancy rates. Single occupancy rates are not allowed here—they must be set under <Rates> .
  • For a shared room, leave empty and use <RoomBundle> .
  • This value should be the total base price for all nights, not the average nightly rate.

When the room is unavailable for the itinerary, <Baserate> should either be omitted or set to -1 , and <Unavailable> should be specified, along with any known reasons for the unavailability.

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 don't separate out taxes and fees for Canadian users.

    All-inclusive prices are now shown to US 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, refer to Taxes and Fees Policy .

    The default value is false .

  • currency : The three-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 landing page is defined by the landing page 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 landing page 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.
  • installments : The user is charged an initial fraction of the total sum due and is expected to routinely pay a set balance over a fixed period of time.

The default value is web .

<Checkin>
Required
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.
Optional
string
Deprecated: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 landing pages file to construct a custom URL for a landing page. There is a limit of 200 characters per custom field. For more information, refer to landing page files . <Custom> elements provided in the <Rate> element are not inherited to the <RoomBundle> element. You should define <Custom> attribute separately in each <RoomBundle> .

Important: Contact your Technical Account Manager (TAM) if you want to use CUSTOM variables.

<ExpirationTime>
Optional
The date and time at which the price is considered expired (3 hours minimum).

We recommend that you don't provide expiration timestamps if it isn't critical to your pricing structure.

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

<MilesIncluded>
Optional
boolean
Rate includes frequent flyer miles. Parameters include:
  • NumberOfMiles : Number of miles per itinerary.
  • Provider : Frequent flyer miles provider.
  • LoyaltyCampaignID : A unique ID that identifies the specific Loyalty Campaign that was configured and updated with Google. It adds loyalty points to the hotel price.

    To include <MilesIncluded> element, the campaign ID should be configured in the Loyalty Campaign configuration. The specific details on how Google uses loyalty points in the results are determined by the Loyalty Campaign configuration.

    The <MilesIncluded> element has a child element, <NumberOfMiles> which calculates the number of points earned. If the <NumberOfMiles> is not set, the points earned are determined by the Loyalty Campaign configuration.

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • Note: <NumberOfMiles> and <Provider> are optional.

<Nights>
Required
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>
Optional
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 .

The <OtherFees> element is required if <Baserate> is greater than zero.

<Occupancy>
Optional
integer
Specifies the maximum allowed occupants for this rate. When <Occupancy> appears directly under <Result> , it must specify 2 or more. <Occupancy> may be accompanied by <OccupancyDetails> , which specifies the type of guests (adults or children). If guest types are not specified, they are assumed to be adults. Consult <OccupancyDetails> for syntax and description of child elements. If the <Occupancy> element is not provided, occupancy is defaulted as 2 .

Key Point: Child occupancy rates should only be sent through Live pricing with context and not through Pull or Changed pricing.

Note: Contact your support team to enable the feature to send non-double occupancy prices.

<PackageID>
Optional
string
The unique ID of the package to map it to predefined package data. Also used to populate the PACKAGE-ID landing page variable. For more information, refer to Room Bundle metadata .

It is mandatory to include <RoomBundle> to define <PackageID> and <RoomID> in the <Result> element. However, it is preferred that you specify package and room IDs only within the <RoomBundle> element instead of the <Result> element.

<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.
<Rates>
Optional
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 when there are multiple rates for the same room/itinerary combination or when a rate is not allowed to be specified at the <Result> level. For example, you define multiple rates for conditional rates , private rates , conditional rates in Room Bundles , or different occupancies.

Note: Within <Result> , single-occupancy rates can only be specified in <Rates> . Please contact us to allow non-double occupancy prices.

<Refundable>
Optional
Object
Enables listing a rate as being fully refundable or providing a free cancellation. If not provided, no information about a refund is displayed. A refund policy at the <PackageData> level overrides the refund policy at the <Result> level. A refund policy at the <Rates> level overrides the refund policy at the <PackageData> level. Refundable pricing can also be highlighted to users through alternative options without directly modifying your transaction message schema. Learn more about Refundable rates policy .

The following example shows the <Refundable> element with all of its attributes set:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

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

If you don't set any attributes, the rate does not display as refundable. The attributes are:

  • available : (Required) Set to 1 (or true ) to indicate if the rate allows a full refund; otherwise set to 0 (or false ).
  • refundable_until_days : (Required if available is true ) Specifies the number of days in advance of check-in that a full refund can be requested. The value of refundable_until_days must be an integer between 0 and 330, inclusive.
  • refundable_until_time : (Highly recommended if available is true ) Specifies the latest time of day, in the local time of the hotel, that a full refund request will be honored. This can be combined with refundable_until_days to specify, for example, that "refunds are available until 4:00PM two days before check-in". If refundable_until_time isn't set, the value defaults to midnight.

    The value of this attribute uses the Time format.

When setting the attributes, note the following:

  • If available or refundable_until_days isn't set, the rate does not display as refundable.
  • If available is 0 (or false ), the other attributes are ignored. The rate does not display as refundable even if one or both of the other attributes is set.
<RoomBundle>
Optional
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.

<RoomID>
Optional
string
The unique ID of the room to map it to predefined room data. Also used to populate the PARTNER-ROOM-ID landing page variable. For more information, refer to Room Bundle metadata .

It is mandatory to include <RoomBundle> to define <PackageID> and <RoomID> in the <Result> element. However, it is preferred that you specify package and room IDs only within the <RoomBundle> element instead of the <Result> element.

<Tax>
Optional
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 . The <Tax> element is required if <Baserate> is greater than zero.

If <Baserate> element's "all_inclusive" attribute is explicitly set to true, then setting this value is optional.

<Unavailable>
Optional
Object
Indicates that the itinerary is unavailable for booking. Serves as a container for more detailed reasons why the itinerary was unavailable. One or more of the following unavailability reasons may be nested underneath the <Unavailable> tag:
  • <NoVacancy/> : No more rooms are available for sale for one or more nights of the stay.
  • <MinNightStay value=N/> : The itinerary was below the minimum night stay of N for the stay dates.
  • <MaxNightStay value=N/> : The itinerary was above the maximum night stay of N for the stay dates.
  • <MinAdvancePurchase value=N/> : The itinerary was below the minimum advance booking window of N for the stay dates.
  • <MaxAdvancePurchase value=N/> : The itinerary was above the maximum advance booking window of N for the stay dates.
  • <ClosedToArrival/> : The property does not allow check-in on the itinerary's arrival date.
  • <ClosedToDeparture/> : The property does not allow check-out on the itinerary's departure date.
  • <PropertyClosed first_open="YYYY-MM-DD" first_closed="YYYY-MM-DD"/> : The property is closed for some or all of the stay. Recommended attributes first_open and first_closed specify the first dates greater than or equal to the arrival date for which the property is open or closed, respectively. For a property that closes after the arrival date, first_open should be equal to the arrival date, and first_closed should be the date on which the property closes. For a property that is closed on the arrival date, first_closed should be equal to the arrival date, and first_opened should be the next date on which the property is open.
  • <NotFetched/> : A price for the itinerary was not provided by downstream data sources.
  • <InvalidProperty/> : The requested property identifier was not recognized.
  • <InvalidOccupancy/> : The requested occupancy is not supported by the property.
  • <PriceIssue/> : An issue with the price caused it to not be sent.
  • <InternalError reason=""/> : Some unenumerated error occurred. Optional reason attribute can report the error as text.
  • <OtherRestriction restriction=""/> : The itinerary was not available due to some unenumerated booking restriction. Optional restriction attribute allows reporting the restriction as text.

Examples

Multi-property example

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>  
<PackageID>Package101</PackageID>  
<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>  
<PackageID>Package101</PackageID>  
<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>  
<MilesIncluded>  
<NumberOfMiles>1200</NumberOfMiles>  
<Provider>  
<Text  
language="en"  
text="United  
Airlines"/>  
</Provider>  
<LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>  
</MilesIncluded>  
</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, refer to Room Bundle metadata .

Multi-rate example

The following example defines a single itinerary and property with multiple rates for various occupancies. The <Rates> element can be utilized to provide multi-rate pricing for a specific property. The following example is also useful for Vacation Rental (VR) properties:

 <?xml  
version="1.0"  
encoding="UTF-8"?>
<Transaction  
timestamp="2020-07-23T16:20:00-04:00"  
id="42">  
<Result>  
<Property>1234</Property>  
<Checkin>2021-01-13</Checkin>  
<Nights>9</Nights>  
<Baserate  
currency="USD">3196.1</Baserate>  
<Tax  
currency="USD">559.49</Tax>  
<OtherFees  
currency="USD">543.34</OtherFees>  
<Occupancy>2</Occupancy>  
<Rates>  
<Rate>  
<Baserate  
currency="USD">3196.1</Baserate>  
<Tax  
currency="USD">559.49</Tax>  
<OtherFees  
currency="USD">543.34</OtherFees>  
<Occupancy>1</Occupancy>  
</Rate>  
<Rate>  
<Baserate  
currency="USD">3196.1</Baserate>  
<Tax  
currency="USD">559.49</Tax>  
<OtherFees  
currency="USD">543.34</OtherFees>  
<Occupancy>3</Occupancy>  
</Rate>  
<Rate>  
<Baserate  
currency="USD">3196.1</Baserate>  
<Tax  
currency="USD">559.49</Tax>  
<OtherFees  
currency="USD">543.34</OtherFees>  
<Occupancy>4</Occupancy>  
</Rate>  
<Rate>  
<Baserate  
currency="USD">3196.1</Baserate>  
<Tax  
currency="USD">559.49</Tax>  
<OtherFees  
currency="USD">543.34</OtherFees>  
<Occupancy>5</Occupancy>  
</Rate>  
<Rate>  
<Baserate  
currency="USD">3196.1</Baserate>  
<Tax  
currency="USD">559.49</Tax>  
<OtherFees  
currency="USD">543.34</OtherFees>  
<Occupancy>6</Occupancy>  
</Rate>  
</Rates>  
</Result>
</Transaction> 

Unavailable example

The following example defines one itinerary whose availability couldn't be retrieved from downstream channels, a second that is both below the minimum night stay and already booked for the specified dates, and a third whose property is closed on the arrival date, but that opens during the course of the stay:

 <?xml  
version="1.0"  
encoding="UTF-8"?>
<Transaction  
timestamp="2017-07-23T16:20:00-04:00"  
id="42">  
<Result>  
<Property>060773</Property>  
<Checkin>2018-06-10</Checkin>  
<Nights>2</Nights>  
<Unavailable>  
<NotFetched/>  
</Unavailable>  
</Result>  
<Result>  
<Property>073313</Property>  
<Checkin>2018-06-10</Checkin>  
<Nights>2</Nights>  
<Unavailable>  
<NoVacancy/>  
<MinNightStay  
value=3/>  
</Unavailable>  
</Result>  
<Result>  
<Property>052213</Property>  
<Checkin>2018-06-10</Checkin>  
<Nights>10</Nights>  
<Unavailable>  
<PropertyClosed  
first_open="2018-06-15"  
first_closed="2018-06-10"/>  
</Unavailable>  
</Result>
</Transaction> 

<Rates>

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

Use the <Rates> element only when there are multiple rates for the same room or itinerary combination. For example, you define multiple rates for conditional rates , private rates , or conditional 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. Only <AllowablePointsofSale> is inherited to the <RoomBundle> 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 
>  
< Refundable 
  
 available 
 = 
 "[false|true]" 
  
 refundable_until_days 
 = 
 " number_of_days 
" 
  
 refundable_until_time 
 = 
 " time 
" 
 / 
>  
< ChargeCurrency 
> [ 
 deposit 
 | 
 hotel 
 | 
 installments 
 | 
 web 
 ] 
< / 
 ChargeCurrency 
>  
< AllowablePointsOfSale 
>  
< PointOfSale 
  
 id 
 = 
 " landing_page_identifier 
" 
 / 
>  
< / 
 AllowablePointsOfSale 
>  
< Occupancy> max_number_of_intended_occupants 
 
< / 
 Occupancy 
>  
< OccupancyDetails 
>  
< ! 
 -- 
  
 optional 
  
 info 
  
 about 
  
 the 
  
 types 
  
 of 
  
 guests 
 , 
  
 whether 
  
 adults 
  
 or 
  
 children 
  
 --></ 
 OccupancyDetails 
>  
 ... 
  
< MilesIncluded 
>  
< NumberOfMiles> integer 
 
< / 
 NumberOfMiles 
>  
< Provider 
>  
< Text 
  
 language 
 = 
 "en" 
  
 text 
 = 
  "provider-name" 
 
>  
< / 
 Provider 
>  
< LoyaltyCampaignID> campaign_ID 
 
< / 
 LoyaltyCampaignID 
>  
< / 
 MilesIncluded 
>  
 ... 
  
< / 
 Rate 
>  
 ... 
  
< / 
 Rates 
>  
 < / 
 Result 
>  
 ... 
< / 
 Transaction 
> 

Attributes

The <Rates> element has the following attributes:

Attribute Required? Description
rate_rule_id
Optional For conditional rates , this ID matches a rate to a definition in your Rate Rule Definition file. The character limit for this field is 40 characters.

Child elements

The <Rates> element has the following child elements:

Child Element
Required?
Type
Description
<AllowablePointsOfSale>
Optional
Object
One or more landing pages that are eligible for the hotel. This element uses the same syntax as the <AllowablePointsOfSale> on <Result> .
<Baserate>
Required
float
The price of the room for the stay. This element uses the same syntax as the <Baserate> on <Result> .

Note: The <Baserate> child element under <Rate> cannot be defined as being unavailable.

<ChargeCurrency>
Optional
enum
When and where the user pays for a booking. This element uses the same syntax as a <ChargeCurrency> in a <Result> .
Optional
string
Deprecated:Custom fields that you can use to pass additional data associated with a hotel to a landing page. This element uses the same syntax as a <Custom[1‑5]> in a <Result> . There is a limit of 200 characters per custom field. For more information, refer to landing page files . If <Custom> elements are provided in the <Result> element, then they are not inherited in the <RoomBundle> element and should be defined separately for each <RoomBundle> or it can be included in <PackageData> if needed.

Important: Contact your Technical Account Manager (TAM) if you want to use CUSTOM variables.

<ExpirationTime>
Optional
The date and time at which the rate is considered expired. This element uses the same syntax as an <ExpirationTime> in a <Result> .
<MilesIncluded>
Optional
boolean
Rate includes frequent flyer miles. Parameters include:
  • NumberOfMiles : Number of miles per itinerary.
  • Provider : Frequent flyer miles provider.
  • LoyaltyCampaignID : A unique ID that identifies the specific Loyalty Campaign that was configured and updated with Google. It adds loyalty points to the hotel price.

    To include <MilesIncluded> element, the campaign ID should be configured in the Loyalty Campaign configuration. The specific details on how Google uses loyalty points in the results are determined by the Loyalty Campaign configuration.

    The <MilesIncluded> element has a child element, <NumberOfMiles> which calculates the number of points earned. If the <NumberOfMiles> is not set, the points earned are determined by the Loyalty Campaign configuration.

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • Note: <NumberOfMiles> and <Provider> are optional.

<Occupancy>
Optional
integer

Specifies the maximum allowed occupants for this rate. If not specified, it is assumed to be the same as parent rate. <Occupancy> may be accompanied by <OccupancyDetails> , which specifies the type of guests (adults or children). Consult <OccupancyDetails> for syntax and description of child elements.

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

If <Baserate> element's "all_inclusive" attribute is explicitly set to true, then setting this value is optional.

<Refundable>
Optional
Object
Enables listing a rate as being fully refundable or providing a free cancellation. If not provided, no information about a refund is displayed. A refund policy at the <PackageData> level overrides the refund policy at the <Result> level. A refund policy at the <Rates> level overrides the refund policy at the <PackageData> level. Refundable pricing can also be highlighted to users through alternative options without directly modifying your transaction message schema. Learn more about these options Refundable rates policy .

The following example shows the <Refundable> element with all of its attributes set:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

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

If you don't set any attributes, the rate does not display as refundable. The attributes are:

  • available : (Required) Set to 1 (or true ) to indicate if the rate allows a full refund; otherwise set to 0 (or false ).
  • refundable_until_days : (Required if available is true ) Specifies the number of days in advance of check-in that a full refund can be requested. The value of refundable_until_days must be an integer between 0 and 330, inclusive.
  • refundable_until_time : (Highly recommended if available is true ) Specifies the latest time of day, in the local time of the hotel, that a full refund request will be honored. This can be combined with refundable_until_days to specify, for example, that "refunds are available until 4:00PM two days before check-in". If refundable_until_time isn't set, the value defaults to midnight.

    The value of this attribute uses the Time format.

When setting the attributes, note the following:

  • If available or refundable_until_days isn't set, the rate does not display as refundable.
  • If available is 0 (or false ), the other attributes are ignored. The rate does not display as refundable even if one or both of the other attributes is set.
<Tax>
Required
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> .

Examples

Base rate and conditional rate

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

 <?xml  
version="1.0"  
encoding="UTF-8"  
?>
<Transaction  
timestamp="2023-05-18T16:20:00-04:00"  
id="42">  
<Result>  
<Property>1234</Property>  
<Checkin>2023-04-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  
conditional  
rates  
-->  
<Rate  
rate_rule_id="mobile">  
<!--  
Override  
base  
rate  
and  
taxes  
for  
conditional  
rates  
-->  
<Baserate  
currency="USD">180.00</Baserate>  
<Tax  
currency="USD">18.00</Tax>  
</Rate>  
</Rates>  
</Result>
</Transaction> 

Multiple conditional rates

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

 <?xml  
version="1.0"  
encoding="UTF-8"  
?>
<Transaction  
timestamp="2023-05-18T16:20:00-04:00"  
id="42">  
<Result>  
<Property>1234</Property>  
<Checkin>2023-04-10</Checkin>  
<Nights>2</Nights>  
<!--  
When  
Google  
receives  
new  
room  
bundle  
information  
for  
an  
itinerary,  
all  
previous  
room  
bundle  
pricing  
is  
dropped  
from  
Google's  
cache.  
Thus,  
if  
you  
want  
to  
delete  
a  
specific  
room  
bundle  
from  
Google's  
cache,  
you  
may  
do  
so  
by  
simply  
not  
providing  
that  
specific  
room  
bundle  
in  
subsequent  
transaction  
messages.  
-->  
<RoomBundle>  
...  
<!--  
RoomID  
is  
required,  
PackageID  
is  
recommended.  
-->  
<RoomID>5</RoomID>  
<PackageID>ABC</PackageID>  
<!--  
Baserate  
is  
required.  
-->  
<Baserate  
currency="USD">275.00</Baserate>  
<Tax  
currency="USD">27.50</Tax>  
<OtherFees  
currency="USD">2.00</OtherFees>  
<!--  
RatePlanID  
is  
optional  
and  
represents  
the  
unique  
identifier  
for  
a  
room  
and  
package  
data  
combination.  
We  
strongly  
recommend  
using  
RatePlanID  
as  
a  
variable  
to  
build  
your  
dynamic  
landing  
page  
(formerly  
Point  
of  
Sale)  
URL.  
For  
details,  
see  
Using  
Variables  
and  
Conditions.  
-->  
<RatePlanID>5-ABC</RatePlanID>  
<!--  
Occupancy  
is  
mandatory  
for  
RoomBundle  
elements.  
-->  
<!--  
Elements  
below  
will  
get  
inherited  
to  
nested  
rate  
elements.  
-->  
<Occupancy>2</Occupancy>  
<OccupancyDetails>  
<NumAdults>2</NumAdults>  
</OccupancyDetails>  
<InternetIncluded>1</InternetIncluded>  
<!--  
Rate  
rule  
"mobile"  
overrides  
chargeCurrency,  
"us_or_gb"  
doesn't.  
-->  
<ChargeCurrency>web</ChargeCurrency>  
<Rates>  
<Rate  
rate_rule_id="mobile">  
<Baserate  
currency="USD">258.33</Baserate>  
<Tax  
currency="USD">25.83</Tax>  
<OtherFees  
currency="USD">1.00</OtherFees>  
<!--  
The  
value  
below  
overrides  
ChargeCurrency  
from  
roombundle.  
-->  
<ChargeCurrency>hotel</ChargeCurrency>  
</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>  
</Rate>  
</Rates>  
</RoomBundle>  
</Result>
</Transaction> 

<RoomBundle>

Defines pricing and availability for Room Bundles as a child of <Result> in a <Transaction> message. Define a separate element for each package or 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, refer to Using Room Bundles .

Syntax

The <RoomBundle> element uses the following syntax:

 < ? 
 xml 
  
 version 
 = 
 "1.0" 
  
 encoding 
 = 
 "UTF-8" 
 ? 
>
< Transaction 
  
 ... 
  
>  
< Result 
>  
 ... 
 
  
< RoomBundle 
>  
< ! 
 -- 
  
 Required 
  
 unless 
  
 specified 
  
 inline 
  
 under 
  
  < RoomData 
> 
 
  
 -- 
>  
< RoomID> room_ID 
 
< / 
 RoomID 
>  
< ! 
 -- 
  
 Required 
  
  < PackageData 
> 
 
  
 -- 
>  
< PackageID> package_ID 
 
< / 
 PackageID 
>  
< ! 
 -- 
  
 Add 
  
 Loyalty 
  
 point 
  
 information 
  
 -- 
>  
< MilesIncluded 
>  
< NumberOfMiles> integer 
 
< / 
 NumberOfMiles 
>  
< Provider 
>  
< Text 
  
 language 
 = 
 "en" 
  
 text 
 = 
  "provider-name" 
 
>  
< / 
 Provider 
>  
< LoyaltyCampaignID> campaign_ID 
 
< / 
 LoyaltyCampaignID 
 > 
>  
< / 
 MilesIncluded 
>  
< ! 
 -- 
  
 Required 
  
 -- 
>  
< Baserate 
  
 currency 
 = 
 " currency_code 
" 
>  price 
 
< / 
 Baserate 
>  
< ! 
 -- 
  
 Required 
  
 -- 
>  
< Tax 
  
 currency 
 = 
 " currency_code 
" 
>  taxes 
 
< / 
 Tax 
>  
< ! 
 -- 
  
 Required 
  
 -- 
>  
< OtherFees 
  
 currency 
 = 
 " currency_code 
" 
>  other_fees 
 
< / 
 OtherFees 
>  
< Refundable 
  
 available 
 = 
 "[false|true]" 
  
 refundable_until_days 
 = 
 " number_of_days 
" 
  
 refundable_until_time 
 = 
 " time 
" 
 / 
>  
< ! 
 -- 
  
 Required 
  
 -- 
>  
< ChargeCurrency 
> [ 
 deposit 
 | 
 hotel 
 | 
 installments 
 | 
 web 
 ] 
< / 
 ChargeCurrency 
>  
< Occupancy> max_number_of_intended_occupants 
 
< / 
 Occupancy 
>  
< OccupancyDetails 
>  
< ! 
 -- 
  
 optional 
  
 info 
  
 about 
  
 the 
  
 types 
  
 of 
  
 guests 
 , 
  
 whether 
  
 adults 
  
 or 
  
 children 
  
 --></ 
 OccupancyDetails 
>  
< BreakfastIncluded> boolean_value 
 
< / 
 BreakfastIncluded 
>  
< InternetIncluded> boolean_value 
 
< / 
 InternetIncluded 
>  
< ParkingIncluded> boolean_value 
 
< / 
 ParkingIncluded 
>  
< RatePlanID> rate_plan_ID 
 
< / 
 RatePlanID 
>  
< Rates 
> ...</ 
 Rates 
>  
< / 
 RoomBundle 
>  
  ... 
  
< / 
 Result 
>
< / 
 Transaction 
> 

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, refer to Removing a Room Bundle .
<BreakfastIncluded>
Optional
boolean
Specifies whether this Room Bundle includes breakfast with the rate.
<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 .

Optional
string
Deprecated:Custom fields for passing additional data to the landing pages for the Room Bundle. These elements use the same syntax as <Custom[1-5]> in <Result> . There is a limit of 200 characters per custom field. For more information, refer to landing page files . Custom variables are listed only when you send the prices in the Transaction message. If <Custom> elements are provided in the <Result> element, then they are not inherited in the <RoomBundle> element and should be defined separately for each <RoomBundle> or it can be included in <PackageData> if needed.

Important: Contact your Technical Account Manager (TAM) if you want to use CUSTOM variables.

<InternetIncluded>
Optional
boolean
If a Room Bundle includes internet access at no charge, while other bundles wouldn't include that amenity. Don't 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.
<MilesIncluded>
Optional
boolean
Rate includes frequent flyer miles. Parameters include:
  • NumberOfMiles : Number of miles per itinerary.
  • Provider : Frequent flyer miles provider.
  • LoyaltyCampaignID : A unique ID that identifies the specific Loyalty Campaign that was configured and updated with Google. It adds loyalty points to the hotel price.

    To include <MilesIncluded> campaign ID should be configured in the Loyalty Campaign configuration. The specific details on how Google uses loyalty points in the results are determined by the Loyalty Campaign configuration.

    The <MilesIncluded> element has a child element, <NumberOfMiles> which calculates the number of points earned. If the <NumberOfMiles> is not set, the points earned are determined by the Loyalty Campaign configuration.

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • Note: <NumberOfMiles> and <Provider> are optional.

<Occupancy>
Required
integer
Specifies the maximum allowed occupants for this rate. For example, a large suite might be able to physically accommodate 6 guests, but the "Honeymoon Package" allows 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 defining occupancy in your landing page URL, use the NUM-ADULTS and NUM-CHILDREN variables, as described in Using Variables and Conditions . The default value is 2 adults and 0 children.

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

Notes :

  • <Occupancy> for <RoomBundle> is strongly recommended so flagged as required and if omitted will throw a 1097 error.
  • <Occupancy> comes from the data object in this order: <RoomBundle> , <PackageData> , and then = <RoomData> . If there is no value present in any of these, the value defaults to 2.
  • <Occupancy> may be accompanied by <OccupancyDetails> , which specifies the type of guests (adults or children). If guest types are not specified, they are assumed to be adults. Consult <OccupancyDetails> for syntax and description of child elements.
  • When you set <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>
Optional (recommended)
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, refer to 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. Don't 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 .

<RatePlanID>
Optional
string
The Rate Plan ID represents the unique identifier for a room and package combination. For example, given a <RoomID> value of 5 and a <PackageID> value of ABC, you could use a value of 5-ABC for <RatePlanID> . We strongly recommend using RatePlanID as a variable to build your dynamic landing page (formerly Point of Sale) URL.

For more information, refer to Using Variables and Conditions .

<Rates>
Optional
Rates that override the defaults for this Room Bundle. This element uses the same syntax as <Rates> in <Result> .
<Refundable>
Optional
Object
Enables listing a rate as being fully refundable or providing a free cancellation. If not provided, no information about a refund is displayed. A refund policy at the <PackageData> level overrides the refund policy at the <Result> level. A refund policy at the <Rates> level overrides the refund policy at the <PackageData> level. Refundable pricing can also be highlighted to users through alternative options without directly modifying your transaction message schema. Learn more about these options Refundable rates policy .

The following example shows the <Refundable> element with all of its attributes set:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

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

If you don't set any attributes, the rate does not display as refundable. The attributes are:

  • available : (Required) Set to 1 (or true ) to indicate if the rate allows a full refund; otherwise set to 0 (or false ).
  • refundable_until_days : (Required if available is true ) Specifies the number of days in advance of check-in that a full refund can be requested. The value of refundable_until_days must be an integer between 0 and 330, inclusive.
  • refundable_until_time : (Highly recommended if available is true ) Specifies the latest time of day, in the local time of the hotel, that a full refund request will be honored. This can be combined with refundable_until_days to specify, for example, that "refunds are available until 4:00PM two days before check-in". If refundable_until_time isn't set, the value defaults to midnight.

    The value of this attribute uses the Time format.

When setting the attributes, note the following:

  • If available or refundable_until_days isn't set, the rate does not display as refundable.
  • If available is 0 (or false ), the other attributes are ignored. The rate does not display as refundable even if one or both of the other attributes is set.
<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, refer to 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

Single occupancy bundle

The following example defines a response with a single occupancy bundle. When a user selects 1 in the Occupancy picker, Google displays the lowest eligible price regardless of occupancy.

If a single occupancy price is not available, then Google will show the lowest double-occupancy price. Note that single occupancy prices are not live queried if double-occupancy or more prices are cached for an itinerary.

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

 <!--  
Efficient  
method  
of  
defining  
Room  
Bundles-->
<!-----  
Occupancy  
of  
1  
example  
----->

<Transaction  
timestamp="2017-07-18T16:20:00-04:00"  
id="12345678">  
<!--  
Part1:  
Define  
RoomData  
and  
PackageData  
in  
PropertyDataSet  
-->  
<!--  
Note:  
Once  
defined  
it  
does  
not  
have  
to  
be  
repeated  
for  
future  
Transaction  
Messages.  
PropertyDataSets  
can  
also  
be  
defined  
and  
sent  
in  
their  
own  
Transaction  
Message  
separately  
from  
pricing.  
Google  
can  
be  
configured  
to  
pull  
just  
PropertyDataSets  
once  
per  
day  
(or  
on  
a  
predefined  
frequency).  
-->  
<PropertyDataSet>  
<Property>180054</Property>  
<!--  
Can  
be  
reused  
by  
multiple  
Room  
Bundles  
-->  
<RoomData>  
<RoomID>060773</RoomID>  
<Name>  
<Text  
text="Single  
Queen  
Room  
-  
Non-Smoking"  
language="en"/>  
<Text  
text="Chambre  
de  
la  
Roi  
Premium  
-  
Pas  
de  
Fumeurs"  
language="fr"/>  
</Name>  
<!--  
Room  
can  
accommodate  
up  
to  
4,  
but  
package  
data  
specifies  
occupancy  
between  
1  
to  
4  
-->  
<Capacity>4</Capacity>  
</RoomData>  
<RoomData>  
<RoomID>436233</RoomID>  
<Name>  
<Text  
text="Premium  
King  
Room  
-  
Non-Smoking"  
language="en"/>  
<Text  
text="Chambre  
de  
le  
Roi  
Premium  
-  
Pas  
de  
Fumeurs"  
language="fr"/>  
</Name>  
<Capacity>4</Capacity>  
</RoomData>  
<!--  
Can  
be  
reused  
by  
multiple  
Room  
Bundles  
-->  
<PackageData>  
<PackageID>P11111</PackageID>  
<Occupancy>1</Occupancy>  
<ChargeCurrency>web</ChargeCurrency>  
<Refundable  
available="1"  
refundable_until_days="7"  
refundable_until_time="18:00:00"/>  
<ParkingIncluded>1</ParkingIncluded>  
<InternetIncluded>1</InternetIncluded>  
</PackageData>  
<PackageData>  
<PackageID>P54321</PackageID>  
<Occupancy>2</Occupancy>  
<ChargeCurrency>web</ChargeCurrency>  
<Refundable  
available="1"  
refundable_until_days="7"  
refundable_until_time="18:00:00"/>  
<ParkingIncluded>1</ParkingIncluded>  
<InternetIncluded>1</InternetIncluded>  
</PackageData>  
<PackageData>  
<PackageID>P12345</PackageID>  
<Occupancy>4</Occupancy>  
<ChargeCurrency>web</ChargeCurrency>  
<Refundable  
available="1"  
refundable_until_days="1"  
refundable_until_time="18:00:00"/>  
<ParkingIncluded>1</ParkingIncluded>  
<InternetIncluded>1</InternetIncluded>  
</PackageData>  
</PropertyDataSet>  
<!--  
Efficient  
method  
of  
defining  
Room  
Bundles  
-->  
<!--  
Part  
2:  
Reference  
RoomData  
and  
PackageData  
through  
ID  
-->  
<Result>  
<!--  
Single  
occupancy  
pricing  
will  
be  
specified  
in  
a  
room  
bundle  
below  
-->  
<Property>180054</Property>  
<Checkin>2017-10-07</Checkin>  
<Nights>2</Nights>  
<!--  
Base  
Room  
Bundle  
-->  
<RoomBundle>  
<RoomID>060773</RoomID>  
<PackageID>P54321</PackageID>  
<Baserate  
currency="USD">199.99</Baserate>  
<Tax  
currency="USD">25.12</Tax>  
<OtherFees  
currency="USD">2.00</OtherFees>  
<RatePlanID>060773-P54321</RatePlanID>  
</RoomBundle>  
<RoomBundle>  
<RoomID>060773</RoomID>  
<PackageID>P11111</PackageID>  
<!--  
Price  
for  
1  
("occupancy")  
is  
the  
lowest  
price  
and  
will  
be  
displayed  
-->  
<Baserate  
currency="USD">174.99</Baserate>  
<Tax  
currency="USD">22.08</Tax>  
<OtherFees  
currency="USD">2.00</OtherFees>  
<RatePlanID>060773-P11111</RatePlanID>  
</RoomBundle>  
<!--  
Premium  
Room  
Bundle  
-->  
<RoomBundle>  
<RoomID>436233</RoomID>  
<PackageID>P12345</PackageID>  
<!--  
Price  
for  
4  
("occupancy"),  
any  
eligible  
room  
bundle  
with  
1  
or  
more  
occupancy  
will  
be  
displayed-->  
<Baserate  
currency="USD">298.88</Baserate>  
<Tax  
currency="USD">42.12</Tax>  
<OtherFees  
currency="USD">10.00</OtherFees>  
<RatePlanID>436233-P12345</RatePlanID>  
</RoomBundle>  
<!--  
..Continue  
providing  
all  
available  
RoomBundle  
rates  
under  
matched  
property  
for  
1  
or  
more  
occupancies..-->  
</Result>
</Transaction> 

Two or more occupancies

The following example defines a response containing two or more occupancies.

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

 <!--  
Efficient  
method  
of  
defining  
Room  
Bundles-->
<!-----  
Occupancy  
of  
3  
example  
----->

<Transaction  
timestamp="2017-07-18T16:20:00-04:00"  
id="12345678">  
<!--  
Efficient  
method  
of  
defining  
Room  
Bundles-->  
<!--  
Part1:  
Define  
RoomData  
and  
PackageData  
in  
PropertyDataSet  
-->  
<PropertyDataSet>  
<Property>180054</Property>  
<!--  
Can  
be  
reused  
by  
multiple  
Room  
Bundles  
-->  
<RoomData>  
<RoomID>060773</RoomID>  
<Name>  
<Text  
text="Single  
Queen  
Room  
-  
Non-Smoking"  
language="en"/>  
<Text  
text="Chambre  
de  
la  
Roi  
Premium  
-  
Pas  
de  
Fumeurs"  
language="fr"/>  
</Name>  
<!--  
Room  
can  
accommodate  
up  
to  
4,  
but  
package  
data  
specifies  
occupancy  
between  
1  
to  
4  
-->  
<Capacity>4</Capacity>  
</RoomData>  
<RoomData>  
<RoomID>436233</RoomID>  
<Name>  
<Text  
text="Premium  
King  
Room  
-  
Non-Smoking"  
language="en"/>  
<Text  
text="Chambre  
de  
le  
Roi  
Premium  
-  
Pas  
de  
Fumeurs"  
language="fr"/>  
</Name>  
<Capacity>4</Capacity>  
</RoomData>  
<!--  
Can  
be  
reused  
by  
multiple  
Room  
Bundles  
-->  
<PackageData>  
<PackageID>P33333</PackageID>  
<Occupancy>3</Occupancy>  
<ChargeCurrency>web</ChargeCurrency>  
<Refundable  
available="1"  
refundable_until_days="7"  
refundable_until_time="18:00:00"/>  
<ParkingIncluded>1</ParkingIncluded>  
<InternetIncluded>1</InternetIncluded>  
</PackageData>  
<PackageData>  
<PackageID>P12345</PackageID>  
<Occupancy>4</Occupancy>  
<ChargeCurrency>web</ChargeCurrency>  
<Refundable  
available="1"  
refundable_until_days="1"  
refundable_until_time="18:00:00"/>  
<ParkingIncluded>1</ParkingIncluded>  
<InternetIncluded>1</InternetIncluded>  
</PackageData>  
</PropertyDataSet>  
<Result>  
<Property>180054</Property>  
<Checkin>2017-10-07</Checkin>  
<Nights>2</Nights>  
<!--  
Efficient  
method  
of  
defining  
Room  
Bundles  
-->  
<!--  
Part  
2:  
Reference  
RoomData  
and  
PackageData  
through  
ID  
-->  
<!--  
Base  
Room  
Bundle  
-->  
<RoomBundle>  
<!--  
Baserate  
above  
and  
attributes  
must  
match  
atleast  
one  
room  
bundle  
below  
-->  
<RoomID>060773</RoomID>  
<PackageID>P33333</PackageID>  
<Baserate  
currency="USD">499.99</Baserate>  
<Tax  
currency="USD">55.12</Tax>  
<OtherFees  
currency="USD">22.00</OtherFees>  
</RoomBundle>  
<!--  
Premium  
Room  
Bundle  
-->  
<RoomBundle>  
<RoomID>436233</RoomID>  
<PackageID>P12345</PackageID>  
<!--  
Lowest  
price  
for  
3  
("occupancy"),  
shown  
below,  
will  
be  
displayed  
-->  
<Baserate  
currency="USD">598.88</Baserate>  
<Tax  
currency="USD">62.12</Tax>  
<OtherFees  
currency="USD">30.00</OtherFees>  
</RoomBundle>  
<!--  
..Continue  
providing  
all  
available  
RoomBundle  
rates  
under  
matched  
property  
for  
2  
or  
more  
occupancies..-->  
</Result>
</Transaction> 


Multiple room bundles

The following example sets 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>  
<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>  
<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>  
<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> 

Multiple Conditional rates

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

 <?xml  
version="1.0"  
encoding="UTF-8"  
?>
<Transaction  
timestamp="2023-05-18T16:20:00-04:00"  
id="42">  
<Result>  
<Property>1234</Property>  
<Checkin>2023-04-10</Checkin>  
<Nights>2</Nights>  
<!--  
When  
Google  
receives  
new  
room  
bundle  
information  
for  
an  
itinerary,  
all  
previous  
room  
bundle  
pricing  
is  
dropped  
from  
Google's  
cache.  
Thus,  
if  
you  
want  
to  
delete  
a  
specific  
room  
bundle  
from  
Google's  
cache,  
you  
may  
do  
so  
by  
simply  
not  
providing  
that  
specific  
room  
bundle  
in  
subsequent  
transaction  
messages.  
-->  
<RoomBundle>  
...  
<!--  
RoomID  
is  
required,  
PackageID  
is  
recommended.  
-->  
<RoomID>5</RoomID>  
<PackageID>ABC</PackageID>  
<!--  
Baserate  
is  
required.  
-->  
<Baserate  
currency="USD">275.00</Baserate>  
<Tax  
currency="USD">27.50</Tax>  
<OtherFees  
currency="USD">2.00</OtherFees>  
<!--  
RatePlanID  
is  
optional  
and  
represents  
the  
unique  
identifier  
for  
a  
room  
and  
package  
data  
combination.  
We  
strongly  
recommend  
using  
RatePlanID  
as  
a  
variable  
to  
build  
your  
dynamic  
landing  
page  
(formerly  
Point  
of  
Sale)  
URL.  
For  
details,  
see  
Using  
Variables  
and  
Conditions.  
-->  
<RatePlanID>5-ABC</RatePlanID>  
<!--  
Occupancy  
is  
mandatory  
for  
RoomBundle  
elements.  
-->  
<!--  
Elements  
below  
will  
get  
inherited  
to  
nested  
rate  
elements.  
-->  
<Occupancy>2</Occupancy>  
<OccupancyDetails>  
<NumAdults>2</NumAdults>  
</OccupancyDetails>  
<InternetIncluded>1</InternetIncluded>  
<!--  
Rate  
rule  
"mobile"  
overrides  
chargeCurrency,  
"us_or_gb"  
doesn't.  
-->  
<ChargeCurrency>web</ChargeCurrency>  
<Rates>  
<Rate  
rate_rule_id="mobile">  
<Baserate  
currency="USD">258.33</Baserate>  
<Tax  
currency="USD">25.83</Tax>  
<OtherFees  
currency="USD">1.00</OtherFees>  
<!--  
The  
value  
below  
overrides  
ChargeCurrency  
from  
roombundle.  
-->  
<ChargeCurrency>hotel</ChargeCurrency>  
</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>  
</Rate>  
</Rates>  
</RoomBundle>  
</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.

If you include <OccupancyDetails> in a <RoomBundle> , along with a nested <Rate> element you can't send a basic <Occupancy> within the <Rate> ; instead one of the following options is recommended:

  • Omit occupancy from <Rate> :In this case, the <Rate> inherits the <OccupancyDetails> directly from the <RoomBundle>

or,

  • Duplicate <OccupancyDetails> :In this case, send additional identical <OccupancyDetails> in both the <RoomBundle> and the nested <Rate> element

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_intended_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>
Required integer The number of adult guests. Min:1, Max:20.
<Children>
Optional Object A container for one or more <Child> elements.
<Child age>
Optional integer The maximum age for this Child—for example, <Child age="17"> .

Examples

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

Result response

The following example defines one itinerary and its pricing for one property in response to a Live Pricing 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>  
<PackageID>Package101</PackageID>  
<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> 

Rates response

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>  
<AllowablePointsOfSale>  
<PointOfSale  
id="yourhotelpartnersite.com"/>  
</AllowablePointsOfSale>  
</Rate>  
</Rates>  
</Result>
</Transaction> 

Room bundle

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> 

Multiple room bundles

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>  
<PackageID>STD</PackageID>  
<Baserate  
currency="USD">275.00</Baserate>  
<Tax  
currency="USD">27.50</Tax>  
<OtherFees  
currency="USD">0</OtherFees>  
<InternetIncluded>1</InternetIncluded>  
<ChargeCurrency>web</ChargeCurrency>  
<Occupancy>4</Occupancy>  
<OccupancyDetails>  
<NumAdults>2</NumAdults>  
<Children>  
<Child  
age="17"/>  
<Child  
age="17"/>  
</Children>  
</OccupancyDetails>  
<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>  
</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>  
</Rate>  
</Rates>  
</RoomBundle>  
</Result>
</Transaction> 
Create a Mobile Website
View Site in Mobile | Classic
Share by: