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 |
Child elements
The <Transaction>
element has the following child elements:
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.
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.
<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:
<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 .
<id>
in your Hotel List Feed.You reference the room ID in your pricing updates.
<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:
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.
<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>
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>
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.
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 to2
, 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 to18
, 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>
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
andlanguage
. Thetext
attribute is the caption, and thelanguage
attribute specifies a two-letter language code such asen
.
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>
<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>
Room & package metadata
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:
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.
<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 aresingle
,semi_double
,double
,queen
, andking
.
<Bed>
has the following child elements: -
<Width>
(optional): Specifies the bed width. Must have the attributeunit
with the valuecm
and the attributenumber
with the width of the bed in integer centimeters. -
<Length>
(optional): Specifies the bed length. Must have the attributeunit
with the valuecm
and the attributenumber
with the length of the bed in integer centimeters.
<Beds> <Bed size="double"> <Width unit="cm" number="140"/> <Length unit="cm" number="195"/> </Bed> <Bed/> <!-- Size unknown --> </Beds>
shared
and private
.non_smoking
and smoking
.The attribute is:
-
relation
(optional): Indicates how the bath and toilet are placed against each other. Valid values aretogether
(both bath and toilet are located together in the same room (e.g. bathroom) right next to each other) andseparate
(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 are0
(orfalse
) and1
(ortrue
). -
shower
(optional): Indicates that the bath has a shower. Valid values are0
(orfalse
) and1
(ortrue
).
-
-
<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 are0
(orfalse
) and1
(ortrue
). -
mobility_accessible
(optional): Indicates that the toilet is mobility-accessible. Valid values are0
(orfalse
) and1
(ortrue
).
-
Example:
<BathAndToilet relation="separate"> <Bath bathtub="1" shower="1"/> <Toilet electronic_bidet="1" mobility_accessible="1"/> </BathAndToilet>
<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:
0
(or false
) and 1
(or true
). It is preferred that you use <Meals>
instead of <BreakfastIncluded>
.
<ChargeCurrency>
in a <Result>
. The default value is web
.
<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>
0
(or false
) and 1
(or true
).The <Meals>
element takes two optional child
elements, <Breakfast>
and <Dinner>
,
which have the following attributes:
-
included
(required): Set to1
(ortrue
) if the rate includes breakfast/dinner; otherwise set to0
orfalse
. -
in_room
(optional): Set to1
(ortrue
) if guests have the option to have breakfast/dinner in the room they stay in; otherwise set to0
(orfalse
). -
in_private_space
(optional): Set to1
(ortrue
) 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 to0
(orfalse
). -
buffet
(optional): Set to1
(ortrue
) if breakfast/dinner is served as a buffet; otherwise set to0
(orfalse
).
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.
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>
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.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.)
Valid values are 0
(or false
) and 1
(or true
). The default value is false
.
<PhotoURL>
in <RoomData>
,
but for the package (e.g. meal photos).)<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 to1
ortrue
to indicate if the rate allows a full refund; otherwise set to0
orfalse
. -
refundable_until_days
: (Required ifavailable
istrue
) Specifies the number of days in advance of check-in that a full refund can be requested. The value ofrefundable_until_days
must be an integer between 0 and 330, inclusive. -
refundable_until_time
: (Highly recommended ifavailable
istrue
) 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 withrefundable_until_days
to specify, for example, that "refunds are available until 4:00PM two days before check-in". Ifrefundable_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
orrefundable_until_days
isn't set, the rate does not display as refundable. - If
available
is0
orfalse
, the other attributes are ignored. The rate does not display as refundable even if one or both of the other attributes is set.
-
ProgramName
: Name of the elite status program -
ProgramLevel
: Level of the program. For example: "Gold." -
NightlyValue (optional)
: Nightly value of the benefits.
-
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.
-
Amount
: The value of the credit per itinerary, in local currency.
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>
Room and package metadata
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:
<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 .
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 tofalse
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 totrue
. 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.
<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>
tohotel
. 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
.
<Nights>
element and the <Checkin>
element make up an itinerary.-
<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.
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 .
-
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>
element must be a positive integer.
The combination of <Nights>
and <Checkin>
make up an itinerary.<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>
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.
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.
<id>
that you defined in your Hotel List Feed.<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.
<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 to1
(ortrue
) to indicate if the rate allows a full refund; otherwise set to0
(orfalse
). -
refundable_until_days
: (Required ifavailable
istrue
) Specifies the number of days in advance of check-in that a full refund can be requested. The value ofrefundable_until_days
must be an integer between 0 and 330, inclusive. -
refundable_until_time
: (Highly recommended ifavailable
istrue
) 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 withrefundable_until_days
to specify, for example, that "refunds are available until 4:00PM two days before check-in". Ifrefundable_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
orrefundable_until_days
isn't set, the rate does not display as refundable. - If
available
is0
(orfalse
), the other attributes are ignored. The rate does not display as refundable even if one or both of the other attributes is set.
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.
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>
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>
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 ofN
for the stay dates. -
<MaxNightStay value=N/>
: The itinerary was above the maximum night stay ofN
for the stay dates. -
<MinAdvancePurchase value=N/>
: The itinerary was below the minimum advance booking window ofN
for the stay dates. -
<MaxAdvancePurchase value=N/>
: The itinerary was above the maximum advance booking window ofN
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 attributesfirst_open
andfirst_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, andfirst_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, andfirst_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:
<AllowablePointsOfSale>
on <Result>
.<Baserate>
on <Result>
. Note:
The <Baserate>
child element under <Rate>
cannot be defined as being unavailable.
<ChargeCurrency>
in a <Result>
.<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>
in a <Result>
.-
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.
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>
in a <Result>
. If <Baserate>
element's
"all_inclusive" attribute is explicitly set to true, then setting this
value is optional.
<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 to1
(ortrue
) to indicate if the rate allows a full refund; otherwise set to0
(orfalse
). -
refundable_until_days
: (Required ifavailable
istrue
) Specifies the number of days in advance of check-in that a full refund can be requested. The value ofrefundable_until_days
must be an integer between 0 and 330, inclusive. -
refundable_until_time
: (Highly recommended ifavailable
istrue
) 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 withrefundable_until_days
to specify, for example, that "refunds are available until 4:00PM two days before check-in". Ifrefundable_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
orrefundable_until_days
isn't set, the rate does not display as refundable. - If
available
is0
(orfalse
), the other attributes are ignored. The rate does not display as refundable even if one or both of the other attributes is set.
<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:
<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 .
<ChargeCurrency>
in a <Result>
. The default value is web
.
<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.
-
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.
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>
element takes
a single required attribute, currency
, that defines the
three-letter currency code
for the fees. For example, use USD
for US dollars.<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.)Valid values are 0
(or false
) and 1
(or true
). The default value is false
.
<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>
in <Result>
.<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 to1
(ortrue
) to indicate if the rate allows a full refund; otherwise set to0
(orfalse
). -
refundable_until_days
: (Required ifavailable
istrue
) Specifies the number of days in advance of check-in that a full refund can be requested. The value ofrefundable_until_days
must be an integer between 0 and 330, inclusive. -
refundable_until_time
: (Highly recommended ifavailable
istrue
) 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 withrefundable_until_days
to specify, for example, that "refunds are available until 4:00PM two days before check-in". Ifrefundable_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
orrefundable_until_days
isn't set, the rate does not display as refundable. - If
available
is0
(orfalse
), the other attributes are ignored. The rate does not display as refundable even if one or both of the other attributes is set.
<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>
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>