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

1. **Itinerary data**: Define Room Bundle and itinerary data including:

   - *Hotel prices and inventory* : Set the minimum price for an itinerary that
     meets certain requirements. For more information, see
     [Updating Prices](https://developers.google.com/hotels/hotel-prices/dev-guide/updating-prices).
     You can also remove a room from inventory. For more information, see
     [Remove inventory](https://developers.google.com/hotels/hotel-prices/dev-guide/removing-inventory).

   - *Room Bundles* : Set the itinerary prices for a combination of a physical
     room and a package of additional services. For more information,
     [Room Bundles](https://developers.google.com/hotels/hotel-prices/dev-guide/room-bundles).
     Google caches the contents of your Transaction messages so that the prices
     are available at all times. In some cases, Google determines that the values
     in its cache are not up to date, so it might send additional [`<Query>`](https://developers.google.com/hotels/hotel-prices/xml-reference/queries#Query)
     messages (or in some cases, [Live Pricing Queries](https://developers.google.com/hotels/hotel-prices/dev-guide/query-messages#live_pricing_queries))
     to get updated prices. This data typically changes very frequently. To
     define pricing and availability of Transaction messages, use [`<Result>`](https://developers.google.com/hotels/hotel-prices/xml-reference/transaction-messages#Result).

2. **Room and package metadata** : Specifies details about rooms and packages,
   such as a descriptions, photos, and maximum occupancy. This data does not
   change very often. To define metadata Transaction messages, use
   [`<PropertyDataSet>`](https://developers.google.com/hotels/hotel-prices/xml-reference/transaction-messages#PropertyDataSet). Google stores this metadata so that you can refer to it
   from your pricing messages rather than include repetitive information about
   rooms and packages in every one. For more information, see
   [Define room and package metadata](https://developers.google.com/hotels/hotel-prices/dev-guide/room-bundles#metadata).

The root element of a Transaction message is [`<Transaction>`](https://developers.google.com/hotels/hotel-prices/xml-reference/transaction-messages#Transaction). Messages that use
the `<Transaction>` element as the root element require at least one of the
child elements. Transaction messages can have any number of child elements, as
long as the total message size does not exceed 100MB.

> [!IMPORTANT]
> **Key Point:** Use either `<AllowablePackageIDs>` or `<AllowableRoomIDs>`, but not both. If neither of these elements are defined in the Transaction message, room types can be combined with any rate plan.

For examples of Transaction messages responding to requests by Google, see
[Pricing \& Room Inventory (Transactions) XML Reference](https://developers.google.com/hotels/hotel-prices/xml-reference/transaction-messages).

## Delivery modes

The type and frequency with which you send Transaction messages depends on your
delivery mode:

- For the Pull delivery mode, you send Transaction messages when you receive a [`<Query>`](https://developers.google.com/hotels/hotel-prices/xml-reference/queries#Query) from Google.
- For the Changed Pricing delivery mode, you send a Transaction message after receiving and responding to a [`<HintRequest>`](https://developers.google.com/hotels/hotel-prices/xml-reference/queries#hintrequest) and `<Query>`.

For more information, see [Pricing Delivery modes](https://developers.google.com/hotels/hotel-prices/dev-guide/delivery-mode).

## Live pricing queries

Regardless of your delivery mode, Google might also send you requests known as
*Live pricing queries* . These Query messages seek prices in response to a
*current* search. If you respond within the specified timeframe which is
usually a few hundred milliseconds, then your ad can appear in the auction.
Your results can also better match the customer, including their country and
device type, and the number of guests they specified. For more information, see
[Live pricing queries](https://developers.google.com/hotels/hotel-prices/dev-guide/query-messages#live_pricing_queries).

> [!IMPORTANT]
> **Key Point:** Due to the [New Search experience](https://developers.google.com/search/blog/2024/02/search-experiences-in-eea), Live Query has limited availability for EEA users.

## Message size

You can include any combination of data updates in a single Transaction message,
but there is a 100MB limit on the size of each message. Typically, all Pull and
Hint Requests have a response time limit of 100 seconds. The timeout is a
configurable field adjustable by Google as requested. Google recommends that you
set the time-out to 10 minutes for very large messages.

To greatly reduce message size and potentially avoid issues with message
sizes and time-outs, use Transaction messages to pre-define your
[room and package metadata](https://developers.google.com/hotels/hotel-prices/dev-guide/room-bundles#metadata).
You can also add GNU zipped content to messages by adding
`Content-Encoding: gzip` to the message headers.