## Overview

This API lets you define ways to dynamically apply actions to a rate whenever
conditions are met, such as adjusting the price or enabling refundability.
Unlike the [Promotions API](https://developers.google.com/hotels/hotel-prices/xml-reference/ari-promotions), which can only apply
eligible promotions with the deepest discounts, this API applies any actions
when certain conditions are met, including price adjustments that might
ultimately increase the final price.

## Requests

### Syntax

The `RateModifications` message uses the following syntax:

    <?xml version="1.0" encoding="UTF-8"?>
    <RateModifications partner="partner_key"
                          id="message_ID"
                          timestamp="timestamp">
      <HotelRateModifications hotel_id="HotelID" action="[overlay]">
        <ItineraryRateModification id="ModificationID" action="[delete]">
          <BookingDates>
            <DateRange start="YYYY-MM-DD" end="YYYY-MM-DD" days_of_week=""MTWHFSU_or_subset""/>
            <DateRange start="YYYY-MM-DD" end="YYYY-MM-DD" days_of_week=""MTWHFSU_or_subset""/>
          </BookingDates>
          <BookingWindow min="integer" max="integer"/>
          <CheckinDates>
            <DateRange start="YYYY-MM-DD" end="YYYY-MM-DD" days_of_week=""MTWHFSU_or_subset""/>
          </CheckinDates>
          <CheckoutDates>
            <DateRange start="YYYY-MM-DD" end="YYYY-MM-DD" days_of_week=""MTWHFSU_or_subset""/>
          </CheckoutDates>
          <Devices>
            <Device type="[desktop|tablet|mobile]"/>
          </Devices>
          <LengthOfStay min="integer" max="integer"/>
          <MinimumAmount before_discount="integer"/>
          <RatePlans>
            <RatePlan id="PackageID_1"/>
            <RatePlan id="PackageID_2"/>
          </RatePlans>
          <RoomTypes>
            <RoomType id="RoomID_1"/>
            <RoomType id="RoomID_2"/>
          </RoomTypes>
          <StayDates application="[all|any]">
            <DateRange start="YYYY-MM-DD" end="YYYY-MM-DD" days_of_week=""MTWHFSU_or_subset""/>
          </StayDates>
          <UserCountries type="[include|exclude]">
            <Country code="country_code"/>
          </UserCountries>
          <ModificationActions>
            <PriceAdjustment multiplier="float"/>
            <RateRule id="RateRuleID"/>
            <Refundable available="[false|true]"
                           refundable_until_days="number_of_days"
                           refundable_until_time="time"/>
            <Availability status="[unavailable]"/>
          </ModificationActions>
        </ItineraryRateModification>
      </HotelRateModifications>
    </RateModifications>

> [!IMPORTANT]
> **Key Point:** There is a limit of 200 rate modifications per property. You can use the [`<HotelRateModifications/@action>`](https://developers.google.com/hotels/hotel-prices/xml-reference/ari-rate-modifications#hotelratemodification) or [`<ItineraryRateModification/@action>`](https://developers.google.com/hotels/hotel-prices/xml-reference/ari-rate-modifications#itineraryratemodification) message to remove rate modifications.

### Elements and attributes

The `RateModifications` message has the following elements and
attributes:

| Element / @Attribute | Occurrences | Type | Description |
|---|---|---|---|
| RateModifications | 1 | Complex element | The root element of a rate modifications message. |
| RateModifications / @partner | 1 | string | The partner account for this message. This string value is the "Partner key" value listed on the [Account settings page](https://hotelcenter.google.com/accountsettings/basicsettings?a) in Hotel Center. **Note:** If you have a backend that provides feeds for multiple accounts, this value needs to match the `ID` attribute value specified in the `<RequestorID>` element of your `<OTA_HotelRateAmountNotifRQ>` and `<OTA_HotelAvailNotifRQ>` messages for the same account. |
| RateModifications / @id | 1 | string | A unique identifier for this request message. This value is returned in the response message. Allowed characters are a-z, A-Z, 0-9, _ (underscore), and - (dash). |
| RateModifications / @timestamp | 1 | [DateTime](https://developers.google.com/hotels/hotel-prices/xml-reference/datetime#DateTime) | The creation date and time of this message. |
| RateModifications / HotelRateModifications | 0..n | HotelRateModifications | Rate modifications for a property. Each rate modification applies to a single property. **Note:** If multiple rate modifications can be applied to the same rate, all modifications are applied. No specific order is guaranteed. |
| RateModifications / HotelRateModifications / @hotel_id | 1 | string | The unique identifier for the property. This value must match the Hotel ID specified using [`<id>` in the `<listing>`](https://developers.google.com/hotels/hotel-prices/xml-reference/hotel-list-feed#listing) element in the Hotel List Feed. The Hotel ID is also listed in [Hotel Center](https://hotelcenter.google.com). |
| RateModifications / HotelRateModifications / @action | 0..1 | enum | If `action` is not specified, then the modifications within this element are added or updated for this hotel. If `action="overlay"` is specified, then all previously defined modifications for this hotel are first deleted. Then, the modifications specified here are written. If `action="overlay"` is used and no modifications are specified within this element, then all modifications for this hotel are deleted. |
| RateModifications / HotelRateModifications / ItineraryRateModification | 0..200 | ItineraryRateModification | A single rate modification for a property. **Note:**Rate modifications are difficult to debug and we recommend using them sparingly. Contact your Technical Account Manager (TAM) for use cases that require more than 200 rate modifications. |
| RateModifications / HotelRateModifications / ItineraryRateModification / @id | 1 | string | A unique identifier for the rate modification. The maximum number of characters allowed is 40. Allowed characters are a-z, A-Z, 0-9, _ (underscore), - (dash), and . (period). |
| RateModifications / HotelRateModifications / ItineraryRateModification / @action | 0..1 | enum | If not specified and a rate modification with the same `id` isn't stored, then this rate modification is stored. Otherwise, if not specified and a rate modification with the same `id` is stored, then the existing rate modification is updated. If specified, the value must be `"delete"`. If `"delete"` is specified, the stored rate modification with the same `id` is deleted. When using `"delete"`, don't include any child elements in `<ItineraryRateModification>`. Also, `"delete"` is not allowed in conjunction with `<HotelRateModifications action="overlay"/>`. |
| RateModifications / HotelRateModifications / ItineraryRateModification / BookingDates | 0..1 | BookingDates | A container for one or more date ranges that define when booking must occur in order for the rate modification to be applied. |
| RateModifications / HotelRateModifications / ItineraryRateModification / BookingDates / DateRange | 1..99 | DateRange | A date range specifying when booking must occur for the rate modification to be applied. |
| RateModifications / HotelRateModifications / ItineraryRateModification / BookingDates / DateRange / @start | 0..1 | [Date](https://developers.google.com/hotels/hotel-prices/xml-reference/datetime#Date) | The starting date (based on the property's time zone), inclusive, of the date range. This date must be before, or the same as, the `end` date. If `start` isn't specified, the date range is effectively unlimited in terms of a start date. |
| RateModifications / HotelRateModifications / ItineraryRateModification / BookingDates / DateRange / @end | 0..1 | [Date](https://developers.google.com/hotels/hotel-prices/xml-reference/datetime#Date) | The ending date (based on the property's time zone), inclusive, of the date range. This date must be the same as, or after, the `start` date. If `end` isn't specified, the date range is effectively unlimited in terms of an end date. |
| RateModifications / HotelRateModifications / ItineraryRateModification / BookingDates / DateRange / @days_of_week | 0..1 | string | The days of the week that are allowed in the date range. If not specified, all days are allowed in the date range. Each character in the string specifies a day. For example, "MTWHF" specifies that weekdays are allowed in the date range. Valid characters are: - `M` for Monday - `T` for Tuesday - `W` for Wednesday - `H` for Thursday - `F` for Friday - `S` for Saturday - `U` for Sunday Any character combination is valid. |
| RateModifications / HotelRateModifications / ItineraryRateModification / BookingWindow | 0..1 | BookingWindow | Specifies the time period when booking must occur relative to the check-in date (based on the property's time zone). For example, the booking window can be set to least 7 days, but not more than 180 days, prior to check-in. |
| RateModifications / HotelRateModifications / ItineraryRateModification / BookingWindow / @min | 0..1 | integer | The minimum number of days prior to check-in when booking must occur for the rate modification to be applied. If this isn't specified, there is no minimum. |
| RateModifications / HotelRateModifications / ItineraryRateModification / BookingWindow / @max | 0..1 | integer | The maximum number of days prior to check-in when booking must occur for the rate modification to be applied. If this isn't specified, there is no maximum. |
| RateModifications / HotelRateModifications / ItineraryRateModification / CheckinDates | 0..1 | CheckinDates | A container for one or more date ranges that define when check-in must occur for the rate modification to be applied. |
| RateModifications / HotelRateModifications / ItineraryRateModification / CheckinDates / DateRange | 1..99 | DateRange | A date range specifying when check-in must occur for the rate modification to be applied. This element is not required if you're deleting one or more rate modifications. |
| RateModifications / HotelRateModifications / ItineraryRateModification / CheckinDates / DateRange / @start | 0..1 | [Date](https://developers.google.com/hotels/hotel-prices/xml-reference/datetime#Date) | The starting date (based on the property's time zone), inclusive, of the date range. This date must be before, or the same as, the `end` date. If `start` isn't specified, the date range is effectively unlimited in terms of a start date. |
| RateModifications / HotelRateModifications / ItineraryRateModification / CheckinDates / DateRange / @end | 0..1 | [Date](https://developers.google.com/hotels/hotel-prices/xml-reference/datetime#Date) | The ending date (based on the property's time zone), inclusive, of the date range. This date must be the same as, or after, the `start` date. If `end` isn't specified, the date range is effectively unlimited in terms of an end date. |
| RateModifications / HotelRateModifications / ItineraryRateModification / CheckinDates / DateRange / @days_of_week | 0..1 | string | The days of the week that are allowed in the date range. If not specified, all days are allowed in the date range. Each character in the string specifies a day. For example, "MTWHF" specifies that weekdays are allowed in the date range. Valid characters are: - `M` for Monday - `T` for Tuesday - `W` for Wednesday - `H` for Thursday - `F` for Friday - `S` for Saturday - `U` for Sunday Any character combination is valid. |
| RateModifications / HotelRateModifications / ItineraryRateModification / CheckoutDates | 0..1 | CheckoutDates | A container for one or more date ranges that define when check-out must occur for the rate modification to be applied. |
| RateModifications / HotelRateModifications / ItineraryRateModification / CheckoutDates / DateRange | 1..99 | DateRange | A date range specifying when check-out must occur for the rate modification to be applied. This element is not required if you're deleting one or more rate modifications. |
| RateModifications / HotelRateModifications / ItineraryRateModification / CheckoutDates / DateRange / @start | 0..1 | [Date](https://developers.google.com/hotels/hotel-prices/xml-reference/datetime#Date) | The starting date (based on the property's time zone), inclusive, of the date range. This date must be before, or the same as, the `end` date. If `start` isn't specified, the date range is effectively unlimited in terms of a start date. |
| RateModifications / HotelRateModifications / ItineraryRateModification / CheckoutDates / DateRange / @end | 0..1 | [Date](https://developers.google.com/hotels/hotel-prices/xml-reference/datetime#Date) | The ending date (based on the property's time zone), inclusive, of the date range. This date must be the same as, or after, the `start` date. If `end` isn't specified, the date range is effectively unlimited in terms of an end date. |
| RateModifications / HotelRateModifications / ItineraryRateModification / CheckoutDates / DateRange / @days_of_week | 0..1 | string | The days of the week that are allowed in the date range. If not specified, all days are allowed in the date range. Each character in the string specifies a day. For example, "MTWHF" specifies that weekdays are allowed in the date range. Valid characters are: - `M` for Monday - `T` for Tuesday - `W` for Wednesday - `H` for Thursday - `F` for Friday - `S` for Saturday - `U` for Sunday Any character combination is valid. |
| RateModifications / HotelRateModifications / ItineraryRateModification / Devices | 0..1 | Devices | Container for listing the user devices that are eligible for the rate modification. If specified, then the rate modification is only applied if the user matches one of the listed devices. If not specified, then this does not restrict application of the rate modification. |
| RateModifications / HotelRateModifications / ItineraryRateModification / Devices / Device | 1..3 | Device | Defines one type of user device that is eligible for the rate modification. |
| RateModifications / HotelRateModifications / ItineraryRateModification / Devices / Device / @type | 1 | enum | A type of device. The value must be `desktop`, `tablet`, or `mobile`. |
| RateModifications / HotelRateModifications / ItineraryRateModification / ModificationActions | 1 | ModificationActions | Action(s) which are applied to the rate if all specified conditions are met. |
| RateModifications / HotelRateModifications / ItineraryRateModification / ModificationActions / PriceAdjustment | 0..1 | PriceAdjustment | Modifies the rate by multiplying both `AmountBeforeTax` and `AmountAfterTax` by the specified multiplier |
| RateModifications / HotelRateModifications / ItineraryRateModification / ModificationActions / PriceAdjustment / @multiplier | 1 | float | Both `AmountBeforeTax` and `AmountAfterTax` are multiplied by this value. |
| RateModifications / HotelRateModifications / ItineraryRateModification / ModificationActions / RateRule | 0..1 | RateRule | Modifies the rate by applying the specified rate rule ID to it. |
| RateModifications / HotelRateModifications / ItineraryRateModification / ModificationActions / RateRule / @id | 1 | string | This ID matches a rate to a definition in your [Rate Rule Definition](https://developers.google.com/hotels/hotel-prices/xml-reference/rate-rules) file. Note: - The character limit for this field is 40 characters. - Each rate may only be associated with a single rate rule. - If there are multiple modifications applying a rate rule ID, the rate rule ID that is lexicographically smallest is assigned to the rate. - If this ID does not match a rate rule in your rate rule definition file, it is considered ineligible. See [this article](https://support.google.com/hotelprices/answer/9984299) for information about the different private rate UI treatments. |
| RateModifications / HotelRateModifications / ItineraryRateModification / ModificationActions / Refundable | 0..1 | Refundable | Overwrites the rate's refundability to the specified value. When setting the attributes, note the following: - This modification action fully rewrites a qualifying rate's Refundable setting, not just the populated fields. - If `available` or `refundable_until_days` is not set, the rate does not display as refundable. - If `available` is `0` or `false`, the other attributes are ignored. The rate does not display as refundable even if one or both of the other attributes is set. - Setting `refundable_until_time` is recommended; if not set, the earliest time (midnight) is used. |
| RateModifications / HotelRateModifications / ItineraryRateModification / ModificationActions / Refundable / @available | 1 | boolean | (Required) Set to `1` or `true` to indicate if the rate allows a full refund; otherwise set to `0` or `false`. |
| Transaction / PropertyDataSet / PackageData / Refundable / @refundable_until_days | 0..1 | integer | (Required if `available` is `true`) Specifies the number of days in advance of check-in that a full refund can be requested. The value of `refundable_until_days` must be an integer between 0 and 330, inclusive. |
| RateModifications / HotelRateModifications / ItineraryRateModification / ModificationActions / Refundable / @refundable_until_time | 0..1 | [Time](https://developers.google.com/hotels/hotel-prices/xml-reference/datetime#Time) | (Recommended if `available` is `true`) Specifies the latest time of day, in the local time of the hotel, that a full refund request is honored. This can be combined with `refundable_until_days` to specify, for example, that "refunds are available until 4:00PM two days before check-in". If `refundable_until_time` isn't set, the value defaults to midnight. |
| RateModifications / HotelRateModifications / ItineraryRateModification / ModificationActions / Availability | 0..1 | Availability | Overwrites the rate's availability to the specified value. We only support setting the rate to `unavailable`. |
| RateModifications / HotelRateModifications / ItineraryRateModification / ModificationActions / Availability / @status | 1 | enum | If **`status="unavailable"`**, the rate is treated as if it is unavailable, regardless of whether a valid price exists for it. |
| RateModifications / HotelRateModifications / ItineraryRateModification / LengthOfStay | 0..1 | LengthOfStay | Defines length of stay limits within which this rate modification can be applied. The rate modification is not applied when length of stay is outside of the min and max limits. |
| RateModifications / HotelRateModifications / ItineraryRateModification / LengthOfStay / @min | 0..1 | integer | The minimum nights allowed in the stay for the rate modification to be applied. If this isn't specified, there is no minimum. |
| RateModifications / HotelRateModifications / ItineraryRateModification / LengthOfStay / @max | 0..1 | integer | The maximum nights allowed in the stay for the rate modification to be applied. If this isn't specified, there is no maximum. |
| RateModifications / HotelRateModifications / ItineraryRateModification / MinimumAmount | 0..1 | MinimumAmount | Specifies the minimum sum of the daily room rates (using the larger of `AmountBeforeTax` or `AmountAfterTax`) that must be exceeded for the rate modification to be applied. |
| RateModifications / HotelRateModifications / ItineraryRateModification / MinimumAmount / @before_discount | 1 | integer | The value that must be exceeded for the rate modification to be applied. |
| RateModifications / HotelRateModifications / ItineraryRateModification / RatePlans | 0..1 | RatePlans | Container for a list of rate plans to which the rate modification applies. If `<RatePlans>` isn't specified, the rate modification applies to all rate plans. |
| RateModifications / HotelRateModifications / ItineraryRateModification / RatePlans / RatePlan | 1..n | RatePlan | Specifies a rate plan. A rate plan is defined by a combination of package, rates, and availability, as defined in Transaction (Property Data), OTA_HotelRateAmountNotifRQ, and OTA_HotelAvailNotifRQ messages, and as identified by the PackageID. |
| RateModifications / HotelRateModifications / ItineraryRateModification / RatePlans / RatePlan / @id | 1 | string | The unique identifier for the rate plan. This value maps to the PackageID value in `<PackageData>` in a Transaction (Property Data) message, and in the `RatePlanCode` attribute in `<StatusApplicationControl>` in both `<OTA_HotelRateAmountNotifRQ>` and `<OTA_HotelAvailNotifRQ>` messages. The maximum number of characters allowed is 50. |
| RateModifications / HotelRateModifications / ItineraryRateModification / RoomTypes | 0..1 | RoomTypes | Container for a list of room types to which the rate modification applies. The rate modification is applied to each `<RoomType>` specified. If `<RoomTypes>` isn't specified, the rate modification applies to all rooms. |
| RateModifications / HotelRateModifications / ItineraryRateModification / RoomTypes / RoomType | 1..n | RoomType | Specifies a room type. A room type is defined in a `<RoomData>` element in a [Transaction (Property Data)](https://developers.google.com/hotels/hotel-prices/xml-reference/ari-property) message and is referenced using its `<RoomID>` value. (Its `<RoomID>` value is also referenced by the `InvTypeCode` attribute in OTA_HotelRateAmountNotifRQ messages.) |
| RateModifications / HotelRateModifications / ItineraryRateModification / RoomTypes / RoomType / @id | 1 | string | The unique identifier for the inventory (room type). This value maps to `<RoomID>` in a Transaction (Property Data) message. The maximum number of characters allowed is 50. |
| RateModifications / HotelRateModifications / ItineraryRateModification / StayDates | 0..1 | StayDates | A container for one or more date ranges that determine how the rate modification is applied, such as to accommodate seasonal pricing. |
| RateModifications / HotelRateModifications / ItineraryRateModification / StayDates / @application | 1 | enum | Describes how the rate modification should be applied. Valid values are: - `all`: Applies the rate modification to each night in the itinerary if **all** dates in the itinerary overlap with the stay dates. - `any`: Applies the rate modification to all nights in the itinerary if any date in the itinerary overlaps with a date in the stay dates range. This attribute must always be specified. |
| RateModifications / HotelRateModifications / ItineraryRateModification / StayDates / DateRange | 1..99 | DateRange | A date range specifying dates when the rate modification is to be applied. |
| RateModifications / HotelRateModifications / ItineraryRateModification / StayDates / DateRange / @start | 0..1 | [Date](https://developers.google.com/hotels/hotel-prices/xml-reference/datetime#Date) | The starting date (based on the property's time zone), inclusive, of the date range. This date must be before, or the same as, the `end` date. If `start` isn't specified, the date range is effectively unlimited in terms of a start date. |
| RateModifications / HotelRateModifications / ItineraryRateModification / StayDates / DateRange / @end | 0..1 | [Date](https://developers.google.com/hotels/hotel-prices/xml-reference/datetime#Date) | The ending date (based on the property's time zone), inclusive, of the date range. This date must be the same as, or after, the `start` date. If `end` isn't specified, the date range is effectively unlimited in terms of an end date. |
| RateModifications / HotelRateModifications / ItineraryRateModification / StayDates / DateRange / @days_of_week | 0..1 | string | The days of the week that are allowed in the date range. If not specified, all days are allowed in the date range. Each character in the string specifies a day. For example, "MTWHF" specifies that weekdays are allowed in the date range. Valid characters are: - `M` for Monday - `T` for Tuesday - `W` for Wednesday - `H` for Thursday - `F` for Friday - `S` for Saturday - `U` for Sunday Any character combination is valid. |
| RateModifications / HotelRateModifications / ItineraryRateModification / UserCountries | 0..1 | UserCountries | If specified, the rate modification is only applied if the user is located in one of the specified countries. If not specified, the rate modification is applied regardless of the user's location. |
| RateModifications / HotelRateModifications / ItineraryRateModification / UserCountries / @type | 0..1 | enum | The type of UserCountries specification. Valid values are `include` and `exclude`. If the UserCountries `type` is set as `include`, the rate modification applies to users from the listed countries. If the UserCountries `type` is `exclude`, the rate modification applies to users outside the listed countries. If the UserCountries `type` is unset, it is treated as `include` and the rate modification applies to users from the listed countries. |
| RateModifications / HotelRateModifications / ItineraryRateModification / UserCountries / Country | 1..300 | Country | Specifies an allowed user country for the rate modification. |
| RateModifications / HotelRateModifications / ItineraryRateModification / UserCountries / Country / @code | 1 | string | A [CLDR country code](https://developers.google.com/hotels/hotel-prices/dev-guide/country-codes), such as `DE` or `FR`. Note that, for some countries, the CLDR country code isn't the same as the 2-letter ISO country code. Also, CLDR region codes are not supported. |

### Examples

### Basic message

The following example shows a basic `RateModifications`\` message:

    <?xml version="1.0" encoding="UTF-8"?>
    <RateModifications partner="account_xyz"
                       id="123_abc"
                       timestamp="2023-05-22T16:20:00-04:00">
      <HotelRateModifications hotel_id="Property_1">
        <ItineraryRateModification id="1">
          <BookingDates>
             <DateRange start="2023-07-01" end="2023-07-31" days_of_week="MTWHF"/>
             <DateRange start="2023-09-01" end="2023-09-30"/>
          </BookingDates>
          <BookingWindow min="7" max="330"/>
          <CheckinDates>
             <DateRange start="2023-10-01" end="2023-10-31" days_of_week="FSU"/>
          </CheckinDates>
          <CheckoutDates>
             <DateRange start="2023-10-08" end="2023-11-07" days_of_week="FSU"/>
          </CheckoutDates>
          <Devices>
            <Device type="mobile"/>
            <Device type="tablet"/>
          </Devices>
          <LengthOfStay min="2" max="14"/>
          <RatePlans>
             <RatePlan id="234"/>
             <RatePlan id="567"/>
          </RatePlans>
          <RoomTypes>
             <RoomType id="123"/>
             <RoomType id="456"/>
          </RoomTypes>
          <UserCountries>
            <Country code="US"/>
            <Country code="GB"/>
          </UserCountries>
          <ModificationActions>
            <PriceAdjustment multiplier="1.2"/>
          </ModificationActions>
        </ItineraryRateModification>
      </HotelRateModifications>
    </RateModifications>


### Delete one rate modification

The following example shows how to delete one rate modification for a
property:

    <?xml version="1.0" encoding="UTF-8"?>
    <RateModifications partner="account_xyz"
                       id="123_abc"
                       timestamp="2023-05-22T16:20:00-04:00">
      <HotelRateModifications hotel_id="Property_1">
        <ItineraryRateModification id="1" action="delete"/>
      </HotelRateModifications>
    </RateModifications>

### Delete all rate modifications

The following example shows how to delete all rate modifications for a
property:

    <?xml version="1.0" encoding="UTF-8"?>
    <RateModifications partner="account_xyz"
                       id="123_abc"
                       timestamp="2023-05-22T16:20:00-04:00">
      <HotelRateModifications hotel_id="Property_1" action="overlay"/>
    </RateModifications>


### Overlay all rate modifications

The following example shows how to overlay `<HotelRateModifications>` for
property with one or more new rate modifications. When
**`action="overlay"`**, all stored rate modifications are deleted prior to
storing the rate modifications specified in the current message:

    <?xml version="1.0" encoding="UTF-8"?>
    <RateModifications partner="account_xyz"
                       id="123_abc"
                       timestamp="2023-05-22T16:20:00-04:00">
      <HotelRateModifications hotel_id="Property_1" action="overlay"/>
        <ItineraryRateModification id="1">
          <BookingDates>
             <DateRange start="2023-09-01" end="2023-09-30"/>
          </BookingDates>
          <ModificationActions>
            <PriceAdjustment multiplier="1.2"/>
          </ModificationActions>
          <RoomTypes>
             <RoomType id="123"/>
             <RoomType id="456"/>
          </RoomTypes>
          <RatePlans>
             <RatePlan id="234"/>
             <RatePlan id="567"/>
          </RatePlans>
        </ItineraryRateModification>
      </HotelRateModifications>
    </RateModifications>

### Multiple modification actions

The following example shows how to perform multiple modification actions
at one time:

    <?xml version="1.0" encoding="UTF-8"?>
    <RateModifications partner="account_xyz"
                       id="123_abc"
                       timestamp="2023-05-22T16:20:00-04:00">
      <HotelRateModifications hotel_id="Property_1">
        <ItineraryRateModification id="1">
          <BookingDates>
             <DateRange start="2023-01-01" end="2023-02-28"/>
          </BookingDates>
          <ModificationActions>
            <PriceAdjustment multiplier=".95"/>
            <Refundable available="true"
                        refundable_until_days="1"
                        refundable_until_time="12:00:00"/>
          </ModificationActions>
        </ItineraryRateModification>
      </HotelRateModifications>
    </RateModifications>


### Turn off a rate plan for user countries

The following example shows how to limit a rate plan to only
Japanese (`JP`) users:

    <?xml version="1.0" encoding="UTF-8"?>
    <RateModifications partner="account_xyz"
                       id="123_abc"
                       timestamp="2023-05-22T16:20:00-04:00">
      <HotelRateModifications hotel_id="Property_1">
        <ItineraryRateModification id="1">
          <RatePlans>
             <RatePlan id="jp_only"/>
          </RatePlans>
          <UserCountries type="exclude">
            <Country code="JP"/>
          </UserCountries>
          <ModificationActions>
            <Availability status="unavailable"/>
          </ModificationActions>
        </ItineraryRateModification>
      </HotelRateModifications>
    </RateModifications>


## Responses

### Syntax

The `RateModificationsResponse` message uses the following syntax:

    <?xml version="1.0" encoding="UTF-8"?>
    <RateModificationsResponse timestamp="timestamp"
                        id="message_ID"
                        partner="partner_key">
      <!-- Either Success or Issues will be populated. -->
      <Success/>
      <Issues>
        <Issue code="issue_code" status="issue_type"><var>issue_description</var></Issue>
      </Issues>
    </RateModificationsResponse>

### Elements and attributes

The `RateModificationsResponse` message has the following
elements and attributes:

| Element / @Attribute | Occurrences | Type | Description |
|---|---|---|---|
| RateModifications | 1 | Complex element | The root element indicating the success or issues for a received RateModifications request message. |
| RateModificationsResponse / @timestamp | 1 | [DateTime](https://developers.google.com/hotels/hotel-prices/xml-reference/datetime#DateTime) | The creation date and time of this message. |
| RateModificationsResponse / @id | 1 | string | The unique identifier from the associated RateModifications message. |
| RateModificationsResponse / @partner | 1 | string | The partner account for this message. |
| RateModificationsResponse / Success | 0..1 | Success | Indicates that the RateModifications message was processed successfully without warnings, errors, or failures. Either `<Success>` or `<Issues>` is present in each message. |
| RateModificationsResponse / Issues | 0..1 | Issues | A container for one or more issues encountered while processing the RateModifications message. Either `<Success>` or `<Issues>` is present in each message. |
| RateModificationsResponse / Issues / Issue | 1..n | Issue | The description of a warning, error, or failure encountered while processing the RateModifications message. Details on these issues can be found in [Feed Status Error Messages](https://developers.google.com/hotels/hotel-prices/dev-guide/feed-status-errors). |
| RateModificationsResponse / Issues / Issue / @code | 1 | integer | The identifier for the issue. |
| RateModificationsResponse / Issues / Issue / @status | 1 | enum | The type of issue encountered. Valid values are `warning`, `error`, and `failure`. |

### Examples

### Success

The following is a response to a successfully processed RateModifications
message.

    <?xml version="1.0" encoding="UTF-8"?>
    <RateModificationsResponse timestamp="2023-05-22T16:20:00-04:00"
                        id="12345678"
                        partner="partner_key">
      <Success/>
    </RateModificationsResponse>

### Issues

The following is a response to a RateModifications message not processed
due to errors.

    <?xml version="1.0" encoding="UTF-8"?>
    <RateModificationsResponse timestamp="2023-05-22T16:20:00-04:00"
                        id="12345678"
                        partner="partner_key">
      <Issues>
        <Issue code="1001" status="error">Example</Issue>
      </Issues>
    </RateModificationsResponse>