<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="content_v2_1.html">Content API for Shopping</a> . <a href="content_v2_1.repricingrules.html">repricingrules</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(merchantId, body=None, ruleId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a repricing rule for your Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#delete">delete(merchantId, ruleId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a repricing rule in your Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#get">get(merchantId, ruleId, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves a repricing rule from your Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#list">list(merchantId, pageSize=None, pageToken=None, languageCode=None, countryCode=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the repricing rules in your Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(merchantId, ruleId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a repricing rule in your Merchant Center account. All mutable fields will be overwritten in each update request. In each update, you must provide all required mutable fields, or an error will be thrown. If you do not provide an optional field in the update request, if that field currently exists, it will be deleted from the rule.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(merchantId, body=None, ruleId=None, x__xgafv=None)</code>
  <pre>Creates a repricing rule for your Merchant Center account.

Args:
  merchantId: string, Required. The id of the merchant who owns the repricing rule. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a repricing rule. A repricing rule is used by shopping serving to adjust transactable offer prices if conditions are met. Next ID: 24
  &quot;languageCode&quot;: &quot;A String&quot;, # Required. Immutable. The two-letter ISO 639-1 language code associated with the repricing rule.
  &quot;effectiveTimePeriod&quot;: { # Required. Time period when the rule should take effect.
    &quot;fixedTimePeriods&quot;: [ # A list of fixed time periods combined with OR. The maximum number of entries is limited to 5.
      { # Definition of a fixed time period.
        &quot;endTime&quot;: &quot;A String&quot;, # The end time (exclusive) of the period. It can only be hour granularity.
        &quot;startTime&quot;: &quot;A String&quot;, # The start time (inclusive) of the period. It can only be hour granularity.
      },
    ],
  },
  &quot;type&quot;: &quot;A String&quot;, # Required. Immutable. The type of the rule.
  &quot;restriction&quot;: { # Definition of a rule restriction. At least one of the following needs to be true: (1) use_auto_pricing_min_price is true (2) floor.price_delta exists (3) floor.percentage_delta exists If floor.price_delta and floor.percentage_delta are both set on a rule, the highest value will be chosen by the Repricer. In other words, for a product with a price of $50, if the `floor.percentage_delta` is &quot;-10&quot; and the floor.price_delta is &quot;-12&quot;, the offer price will only be lowered $5 (10% lower than the original offer price). # Required. Restriction of the rule appliance.
    &quot;floor&quot;: { # Definition of a boundary. # The inclusive floor lower bound. The repricing rule only applies when new price &gt;= floor.
      &quot;priceDelta&quot;: &quot;A String&quot;, # The price micros relative to the offer selling price. This field is signed. It must be negative in floor. For example, if an offer is selling at $10 and this field is -$2 in floor, the repricing rule only applies if the calculated new price is &gt;= $8.
      &quot;percentageDelta&quot;: 42, # The percentage delta relative to the offer selling price. This field is signed. It must be negative in floor. When it is used in floor, it should be &gt; -100. For example, if an offer is selling at $10 and this field is -30 in floor, the repricing rule only applies if the calculated new price is &gt;= $7.
    },
    &quot;useAutoPricingMinPrice&quot;: True or False, # If true, use the AUTO_PRICING_MIN_PRICE offer attribute as the lower bound of the rule. If use_auto_pricing_min_price is true, then only offers with `AUTO_PRICING_MIN_PRICE` existing on the offer will get Repricer treatment, even if a floor value is set on the rule. Also, if use_auto_pricing_min_price is true, the floor restriction will be ignored.
  },
  &quot;countryCode&quot;: &quot;A String&quot;, # Required. Immutable. CLDR country code (e.g. &quot;US&quot;).
  &quot;merchantId&quot;: &quot;A String&quot;, # Output only. Immutable. Merchant that owns the repricing rule.
  &quot;eligibleOfferMatcher&quot;: { # Matcher that specifies eligible offers. When the USE_FEED_ATTRIBUTE option is selected, only the repricing_rule_id attribute on the product feed is used to specify offer-rule mapping. When the CUSTOM_FILTER option is selected, only the *_matcher fields are used to filter the offers for offer-rule mapping. If the CUSTOM_FILTER option is selected, an offer needs to satisfy each custom filter matcher to be eligible for a rule. Size limit: the sum of the number of entries in all the matchers should not exceed 20. For example, there can be 15 product ids and 5 brands, but not 10 product ids and 11 brands. # Required. Match criteria for the eligible offers.
    &quot;brandMatcher&quot;: { # Matcher by string attributes. # Filter by the brand.
      &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
        &quot;A String&quot;,
      ],
    },
    &quot;itemGroupIdMatcher&quot;: { # Matcher by string attributes. # Filter by the item group id.
      &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
        &quot;A String&quot;,
      ],
    },
    &quot;offerIdMatcher&quot;: { # Matcher by string attributes. # Filter by the offer id.
      &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
        &quot;A String&quot;,
      ],
    },
    &quot;matcherOption&quot;: &quot;A String&quot;, # Determines whether to use the custom matchers or the product feed attribute &quot;repricing_rule_id&quot; to specify offer-rule mapping.
  },
  &quot;paused&quot;: True or False, # Represents whether a rule is paused. A paused rule will behave like a non-paused rule within CRUD operations, with the major difference that a paused rule will not be evaluated and will have no effect on offers.
  &quot;ruleId&quot;: &quot;A String&quot;, # Output only. Immutable. The ID to uniquely identify each repricing rule.
  &quot;title&quot;: &quot;A String&quot;, # The title for the rule.
}

  ruleId: string, Required. The id of the rule to create.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a repricing rule. A repricing rule is used by shopping serving to adjust transactable offer prices if conditions are met. Next ID: 24
    &quot;languageCode&quot;: &quot;A String&quot;, # Required. Immutable. The two-letter ISO 639-1 language code associated with the repricing rule.
    &quot;effectiveTimePeriod&quot;: { # Required. Time period when the rule should take effect.
      &quot;fixedTimePeriods&quot;: [ # A list of fixed time periods combined with OR. The maximum number of entries is limited to 5.
        { # Definition of a fixed time period.
          &quot;endTime&quot;: &quot;A String&quot;, # The end time (exclusive) of the period. It can only be hour granularity.
          &quot;startTime&quot;: &quot;A String&quot;, # The start time (inclusive) of the period. It can only be hour granularity.
        },
      ],
    },
    &quot;type&quot;: &quot;A String&quot;, # Required. Immutable. The type of the rule.
    &quot;restriction&quot;: { # Definition of a rule restriction. At least one of the following needs to be true: (1) use_auto_pricing_min_price is true (2) floor.price_delta exists (3) floor.percentage_delta exists If floor.price_delta and floor.percentage_delta are both set on a rule, the highest value will be chosen by the Repricer. In other words, for a product with a price of $50, if the `floor.percentage_delta` is &quot;-10&quot; and the floor.price_delta is &quot;-12&quot;, the offer price will only be lowered $5 (10% lower than the original offer price). # Required. Restriction of the rule appliance.
      &quot;floor&quot;: { # Definition of a boundary. # The inclusive floor lower bound. The repricing rule only applies when new price &gt;= floor.
        &quot;priceDelta&quot;: &quot;A String&quot;, # The price micros relative to the offer selling price. This field is signed. It must be negative in floor. For example, if an offer is selling at $10 and this field is -$2 in floor, the repricing rule only applies if the calculated new price is &gt;= $8.
        &quot;percentageDelta&quot;: 42, # The percentage delta relative to the offer selling price. This field is signed. It must be negative in floor. When it is used in floor, it should be &gt; -100. For example, if an offer is selling at $10 and this field is -30 in floor, the repricing rule only applies if the calculated new price is &gt;= $7.
      },
      &quot;useAutoPricingMinPrice&quot;: True or False, # If true, use the AUTO_PRICING_MIN_PRICE offer attribute as the lower bound of the rule. If use_auto_pricing_min_price is true, then only offers with `AUTO_PRICING_MIN_PRICE` existing on the offer will get Repricer treatment, even if a floor value is set on the rule. Also, if use_auto_pricing_min_price is true, the floor restriction will be ignored.
    },
    &quot;countryCode&quot;: &quot;A String&quot;, # Required. Immutable. CLDR country code (e.g. &quot;US&quot;).
    &quot;merchantId&quot;: &quot;A String&quot;, # Output only. Immutable. Merchant that owns the repricing rule.
    &quot;eligibleOfferMatcher&quot;: { # Matcher that specifies eligible offers. When the USE_FEED_ATTRIBUTE option is selected, only the repricing_rule_id attribute on the product feed is used to specify offer-rule mapping. When the CUSTOM_FILTER option is selected, only the *_matcher fields are used to filter the offers for offer-rule mapping. If the CUSTOM_FILTER option is selected, an offer needs to satisfy each custom filter matcher to be eligible for a rule. Size limit: the sum of the number of entries in all the matchers should not exceed 20. For example, there can be 15 product ids and 5 brands, but not 10 product ids and 11 brands. # Required. Match criteria for the eligible offers.
      &quot;brandMatcher&quot;: { # Matcher by string attributes. # Filter by the brand.
        &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
          &quot;A String&quot;,
        ],
      },
      &quot;itemGroupIdMatcher&quot;: { # Matcher by string attributes. # Filter by the item group id.
        &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
          &quot;A String&quot;,
        ],
      },
      &quot;offerIdMatcher&quot;: { # Matcher by string attributes. # Filter by the offer id.
        &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
          &quot;A String&quot;,
        ],
      },
      &quot;matcherOption&quot;: &quot;A String&quot;, # Determines whether to use the custom matchers or the product feed attribute &quot;repricing_rule_id&quot; to specify offer-rule mapping.
    },
    &quot;paused&quot;: True or False, # Represents whether a rule is paused. A paused rule will behave like a non-paused rule within CRUD operations, with the major difference that a paused rule will not be evaluated and will have no effect on offers.
    &quot;ruleId&quot;: &quot;A String&quot;, # Output only. Immutable. The ID to uniquely identify each repricing rule.
    &quot;title&quot;: &quot;A String&quot;, # The title for the rule.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(merchantId, ruleId, x__xgafv=None)</code>
  <pre>Deletes a repricing rule in your Merchant Center account.

Args:
  merchantId: string, Required. The id of the merchant who owns the repricing rule. (required)
  ruleId: string, Required. The id of the rule to Delete. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(merchantId, ruleId, x__xgafv=None)</code>
  <pre>Retrieves a repricing rule from your Merchant Center account.

Args:
  merchantId: string, Required. The id of the merchant who owns the repricing rule. (required)
  ruleId: string, Required. The id of the rule to retrieve. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a repricing rule. A repricing rule is used by shopping serving to adjust transactable offer prices if conditions are met. Next ID: 24
    &quot;languageCode&quot;: &quot;A String&quot;, # Required. Immutable. The two-letter ISO 639-1 language code associated with the repricing rule.
    &quot;effectiveTimePeriod&quot;: { # Required. Time period when the rule should take effect.
      &quot;fixedTimePeriods&quot;: [ # A list of fixed time periods combined with OR. The maximum number of entries is limited to 5.
        { # Definition of a fixed time period.
          &quot;endTime&quot;: &quot;A String&quot;, # The end time (exclusive) of the period. It can only be hour granularity.
          &quot;startTime&quot;: &quot;A String&quot;, # The start time (inclusive) of the period. It can only be hour granularity.
        },
      ],
    },
    &quot;type&quot;: &quot;A String&quot;, # Required. Immutable. The type of the rule.
    &quot;restriction&quot;: { # Definition of a rule restriction. At least one of the following needs to be true: (1) use_auto_pricing_min_price is true (2) floor.price_delta exists (3) floor.percentage_delta exists If floor.price_delta and floor.percentage_delta are both set on a rule, the highest value will be chosen by the Repricer. In other words, for a product with a price of $50, if the `floor.percentage_delta` is &quot;-10&quot; and the floor.price_delta is &quot;-12&quot;, the offer price will only be lowered $5 (10% lower than the original offer price). # Required. Restriction of the rule appliance.
      &quot;floor&quot;: { # Definition of a boundary. # The inclusive floor lower bound. The repricing rule only applies when new price &gt;= floor.
        &quot;priceDelta&quot;: &quot;A String&quot;, # The price micros relative to the offer selling price. This field is signed. It must be negative in floor. For example, if an offer is selling at $10 and this field is -$2 in floor, the repricing rule only applies if the calculated new price is &gt;= $8.
        &quot;percentageDelta&quot;: 42, # The percentage delta relative to the offer selling price. This field is signed. It must be negative in floor. When it is used in floor, it should be &gt; -100. For example, if an offer is selling at $10 and this field is -30 in floor, the repricing rule only applies if the calculated new price is &gt;= $7.
      },
      &quot;useAutoPricingMinPrice&quot;: True or False, # If true, use the AUTO_PRICING_MIN_PRICE offer attribute as the lower bound of the rule. If use_auto_pricing_min_price is true, then only offers with `AUTO_PRICING_MIN_PRICE` existing on the offer will get Repricer treatment, even if a floor value is set on the rule. Also, if use_auto_pricing_min_price is true, the floor restriction will be ignored.
    },
    &quot;countryCode&quot;: &quot;A String&quot;, # Required. Immutable. CLDR country code (e.g. &quot;US&quot;).
    &quot;merchantId&quot;: &quot;A String&quot;, # Output only. Immutable. Merchant that owns the repricing rule.
    &quot;eligibleOfferMatcher&quot;: { # Matcher that specifies eligible offers. When the USE_FEED_ATTRIBUTE option is selected, only the repricing_rule_id attribute on the product feed is used to specify offer-rule mapping. When the CUSTOM_FILTER option is selected, only the *_matcher fields are used to filter the offers for offer-rule mapping. If the CUSTOM_FILTER option is selected, an offer needs to satisfy each custom filter matcher to be eligible for a rule. Size limit: the sum of the number of entries in all the matchers should not exceed 20. For example, there can be 15 product ids and 5 brands, but not 10 product ids and 11 brands. # Required. Match criteria for the eligible offers.
      &quot;brandMatcher&quot;: { # Matcher by string attributes. # Filter by the brand.
        &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
          &quot;A String&quot;,
        ],
      },
      &quot;itemGroupIdMatcher&quot;: { # Matcher by string attributes. # Filter by the item group id.
        &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
          &quot;A String&quot;,
        ],
      },
      &quot;offerIdMatcher&quot;: { # Matcher by string attributes. # Filter by the offer id.
        &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
          &quot;A String&quot;,
        ],
      },
      &quot;matcherOption&quot;: &quot;A String&quot;, # Determines whether to use the custom matchers or the product feed attribute &quot;repricing_rule_id&quot; to specify offer-rule mapping.
    },
    &quot;paused&quot;: True or False, # Represents whether a rule is paused. A paused rule will behave like a non-paused rule within CRUD operations, with the major difference that a paused rule will not be evaluated and will have no effect on offers.
    &quot;ruleId&quot;: &quot;A String&quot;, # Output only. Immutable. The ID to uniquely identify each repricing rule.
    &quot;title&quot;: &quot;A String&quot;, # The title for the rule.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(merchantId, pageSize=None, pageToken=None, languageCode=None, countryCode=None, x__xgafv=None)</code>
  <pre>Lists the repricing rules in your Merchant Center account.

Args:
  merchantId: string, Required. The id of the merchant who owns the repricing rule. (required)
  pageSize: integer, The maximum number of repricing rules to return. The service may return fewer than this value. If unspecified, at most 50 rules will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.
  pageToken: string, A page token, received from a previous `ListRepricingRules` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListRepricingRules` must match the call that provided the page token.
  languageCode: string, The two-letter ISO 639-1 language code associated with the repricing rule, used as a filter.
  countryCode: string, CLDR country code (e.g. &quot;US&quot;), used as a filter on repricing rules.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for the `ListRepricingRules` method.
    &quot;repricingRules&quot;: [ # The rules from the specified merchant.
      { # Represents a repricing rule. A repricing rule is used by shopping serving to adjust transactable offer prices if conditions are met. Next ID: 24
        &quot;languageCode&quot;: &quot;A String&quot;, # Required. Immutable. The two-letter ISO 639-1 language code associated with the repricing rule.
        &quot;effectiveTimePeriod&quot;: { # Required. Time period when the rule should take effect.
          &quot;fixedTimePeriods&quot;: [ # A list of fixed time periods combined with OR. The maximum number of entries is limited to 5.
            { # Definition of a fixed time period.
              &quot;endTime&quot;: &quot;A String&quot;, # The end time (exclusive) of the period. It can only be hour granularity.
              &quot;startTime&quot;: &quot;A String&quot;, # The start time (inclusive) of the period. It can only be hour granularity.
            },
          ],
        },
        &quot;type&quot;: &quot;A String&quot;, # Required. Immutable. The type of the rule.
        &quot;restriction&quot;: { # Definition of a rule restriction. At least one of the following needs to be true: (1) use_auto_pricing_min_price is true (2) floor.price_delta exists (3) floor.percentage_delta exists If floor.price_delta and floor.percentage_delta are both set on a rule, the highest value will be chosen by the Repricer. In other words, for a product with a price of $50, if the `floor.percentage_delta` is &quot;-10&quot; and the floor.price_delta is &quot;-12&quot;, the offer price will only be lowered $5 (10% lower than the original offer price). # Required. Restriction of the rule appliance.
          &quot;floor&quot;: { # Definition of a boundary. # The inclusive floor lower bound. The repricing rule only applies when new price &gt;= floor.
            &quot;priceDelta&quot;: &quot;A String&quot;, # The price micros relative to the offer selling price. This field is signed. It must be negative in floor. For example, if an offer is selling at $10 and this field is -$2 in floor, the repricing rule only applies if the calculated new price is &gt;= $8.
            &quot;percentageDelta&quot;: 42, # The percentage delta relative to the offer selling price. This field is signed. It must be negative in floor. When it is used in floor, it should be &gt; -100. For example, if an offer is selling at $10 and this field is -30 in floor, the repricing rule only applies if the calculated new price is &gt;= $7.
          },
          &quot;useAutoPricingMinPrice&quot;: True or False, # If true, use the AUTO_PRICING_MIN_PRICE offer attribute as the lower bound of the rule. If use_auto_pricing_min_price is true, then only offers with `AUTO_PRICING_MIN_PRICE` existing on the offer will get Repricer treatment, even if a floor value is set on the rule. Also, if use_auto_pricing_min_price is true, the floor restriction will be ignored.
        },
        &quot;countryCode&quot;: &quot;A String&quot;, # Required. Immutable. CLDR country code (e.g. &quot;US&quot;).
        &quot;merchantId&quot;: &quot;A String&quot;, # Output only. Immutable. Merchant that owns the repricing rule.
        &quot;eligibleOfferMatcher&quot;: { # Matcher that specifies eligible offers. When the USE_FEED_ATTRIBUTE option is selected, only the repricing_rule_id attribute on the product feed is used to specify offer-rule mapping. When the CUSTOM_FILTER option is selected, only the *_matcher fields are used to filter the offers for offer-rule mapping. If the CUSTOM_FILTER option is selected, an offer needs to satisfy each custom filter matcher to be eligible for a rule. Size limit: the sum of the number of entries in all the matchers should not exceed 20. For example, there can be 15 product ids and 5 brands, but not 10 product ids and 11 brands. # Required. Match criteria for the eligible offers.
          &quot;brandMatcher&quot;: { # Matcher by string attributes. # Filter by the brand.
            &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
              &quot;A String&quot;,
            ],
          },
          &quot;itemGroupIdMatcher&quot;: { # Matcher by string attributes. # Filter by the item group id.
            &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
              &quot;A String&quot;,
            ],
          },
          &quot;offerIdMatcher&quot;: { # Matcher by string attributes. # Filter by the offer id.
            &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
              &quot;A String&quot;,
            ],
          },
          &quot;matcherOption&quot;: &quot;A String&quot;, # Determines whether to use the custom matchers or the product feed attribute &quot;repricing_rule_id&quot; to specify offer-rule mapping.
        },
        &quot;paused&quot;: True or False, # Represents whether a rule is paused. A paused rule will behave like a non-paused rule within CRUD operations, with the major difference that a paused rule will not be evaluated and will have no effect on offers.
        &quot;ruleId&quot;: &quot;A String&quot;, # Output only. Immutable. The ID to uniquely identify each repricing rule.
        &quot;title&quot;: &quot;A String&quot;, # The title for the rule.
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(merchantId, ruleId, body=None, x__xgafv=None)</code>
  <pre>Updates a repricing rule in your Merchant Center account. All mutable fields will be overwritten in each update request. In each update, you must provide all required mutable fields, or an error will be thrown. If you do not provide an optional field in the update request, if that field currently exists, it will be deleted from the rule.

Args:
  merchantId: string, Required. The id of the merchant who owns the repricing rule. (required)
  ruleId: string, Required. The id of the rule to update. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a repricing rule. A repricing rule is used by shopping serving to adjust transactable offer prices if conditions are met. Next ID: 24
  &quot;languageCode&quot;: &quot;A String&quot;, # Required. Immutable. The two-letter ISO 639-1 language code associated with the repricing rule.
  &quot;effectiveTimePeriod&quot;: { # Required. Time period when the rule should take effect.
    &quot;fixedTimePeriods&quot;: [ # A list of fixed time periods combined with OR. The maximum number of entries is limited to 5.
      { # Definition of a fixed time period.
        &quot;endTime&quot;: &quot;A String&quot;, # The end time (exclusive) of the period. It can only be hour granularity.
        &quot;startTime&quot;: &quot;A String&quot;, # The start time (inclusive) of the period. It can only be hour granularity.
      },
    ],
  },
  &quot;type&quot;: &quot;A String&quot;, # Required. Immutable. The type of the rule.
  &quot;restriction&quot;: { # Definition of a rule restriction. At least one of the following needs to be true: (1) use_auto_pricing_min_price is true (2) floor.price_delta exists (3) floor.percentage_delta exists If floor.price_delta and floor.percentage_delta are both set on a rule, the highest value will be chosen by the Repricer. In other words, for a product with a price of $50, if the `floor.percentage_delta` is &quot;-10&quot; and the floor.price_delta is &quot;-12&quot;, the offer price will only be lowered $5 (10% lower than the original offer price). # Required. Restriction of the rule appliance.
    &quot;floor&quot;: { # Definition of a boundary. # The inclusive floor lower bound. The repricing rule only applies when new price &gt;= floor.
      &quot;priceDelta&quot;: &quot;A String&quot;, # The price micros relative to the offer selling price. This field is signed. It must be negative in floor. For example, if an offer is selling at $10 and this field is -$2 in floor, the repricing rule only applies if the calculated new price is &gt;= $8.
      &quot;percentageDelta&quot;: 42, # The percentage delta relative to the offer selling price. This field is signed. It must be negative in floor. When it is used in floor, it should be &gt; -100. For example, if an offer is selling at $10 and this field is -30 in floor, the repricing rule only applies if the calculated new price is &gt;= $7.
    },
    &quot;useAutoPricingMinPrice&quot;: True or False, # If true, use the AUTO_PRICING_MIN_PRICE offer attribute as the lower bound of the rule. If use_auto_pricing_min_price is true, then only offers with `AUTO_PRICING_MIN_PRICE` existing on the offer will get Repricer treatment, even if a floor value is set on the rule. Also, if use_auto_pricing_min_price is true, the floor restriction will be ignored.
  },
  &quot;countryCode&quot;: &quot;A String&quot;, # Required. Immutable. CLDR country code (e.g. &quot;US&quot;).
  &quot;merchantId&quot;: &quot;A String&quot;, # Output only. Immutable. Merchant that owns the repricing rule.
  &quot;eligibleOfferMatcher&quot;: { # Matcher that specifies eligible offers. When the USE_FEED_ATTRIBUTE option is selected, only the repricing_rule_id attribute on the product feed is used to specify offer-rule mapping. When the CUSTOM_FILTER option is selected, only the *_matcher fields are used to filter the offers for offer-rule mapping. If the CUSTOM_FILTER option is selected, an offer needs to satisfy each custom filter matcher to be eligible for a rule. Size limit: the sum of the number of entries in all the matchers should not exceed 20. For example, there can be 15 product ids and 5 brands, but not 10 product ids and 11 brands. # Required. Match criteria for the eligible offers.
    &quot;brandMatcher&quot;: { # Matcher by string attributes. # Filter by the brand.
      &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
        &quot;A String&quot;,
      ],
    },
    &quot;itemGroupIdMatcher&quot;: { # Matcher by string attributes. # Filter by the item group id.
      &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
        &quot;A String&quot;,
      ],
    },
    &quot;offerIdMatcher&quot;: { # Matcher by string attributes. # Filter by the offer id.
      &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
        &quot;A String&quot;,
      ],
    },
    &quot;matcherOption&quot;: &quot;A String&quot;, # Determines whether to use the custom matchers or the product feed attribute &quot;repricing_rule_id&quot; to specify offer-rule mapping.
  },
  &quot;paused&quot;: True or False, # Represents whether a rule is paused. A paused rule will behave like a non-paused rule within CRUD operations, with the major difference that a paused rule will not be evaluated and will have no effect on offers.
  &quot;ruleId&quot;: &quot;A String&quot;, # Output only. Immutable. The ID to uniquely identify each repricing rule.
  &quot;title&quot;: &quot;A String&quot;, # The title for the rule.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a repricing rule. A repricing rule is used by shopping serving to adjust transactable offer prices if conditions are met. Next ID: 24
    &quot;languageCode&quot;: &quot;A String&quot;, # Required. Immutable. The two-letter ISO 639-1 language code associated with the repricing rule.
    &quot;effectiveTimePeriod&quot;: { # Required. Time period when the rule should take effect.
      &quot;fixedTimePeriods&quot;: [ # A list of fixed time periods combined with OR. The maximum number of entries is limited to 5.
        { # Definition of a fixed time period.
          &quot;endTime&quot;: &quot;A String&quot;, # The end time (exclusive) of the period. It can only be hour granularity.
          &quot;startTime&quot;: &quot;A String&quot;, # The start time (inclusive) of the period. It can only be hour granularity.
        },
      ],
    },
    &quot;type&quot;: &quot;A String&quot;, # Required. Immutable. The type of the rule.
    &quot;restriction&quot;: { # Definition of a rule restriction. At least one of the following needs to be true: (1) use_auto_pricing_min_price is true (2) floor.price_delta exists (3) floor.percentage_delta exists If floor.price_delta and floor.percentage_delta are both set on a rule, the highest value will be chosen by the Repricer. In other words, for a product with a price of $50, if the `floor.percentage_delta` is &quot;-10&quot; and the floor.price_delta is &quot;-12&quot;, the offer price will only be lowered $5 (10% lower than the original offer price). # Required. Restriction of the rule appliance.
      &quot;floor&quot;: { # Definition of a boundary. # The inclusive floor lower bound. The repricing rule only applies when new price &gt;= floor.
        &quot;priceDelta&quot;: &quot;A String&quot;, # The price micros relative to the offer selling price. This field is signed. It must be negative in floor. For example, if an offer is selling at $10 and this field is -$2 in floor, the repricing rule only applies if the calculated new price is &gt;= $8.
        &quot;percentageDelta&quot;: 42, # The percentage delta relative to the offer selling price. This field is signed. It must be negative in floor. When it is used in floor, it should be &gt; -100. For example, if an offer is selling at $10 and this field is -30 in floor, the repricing rule only applies if the calculated new price is &gt;= $7.
      },
      &quot;useAutoPricingMinPrice&quot;: True or False, # If true, use the AUTO_PRICING_MIN_PRICE offer attribute as the lower bound of the rule. If use_auto_pricing_min_price is true, then only offers with `AUTO_PRICING_MIN_PRICE` existing on the offer will get Repricer treatment, even if a floor value is set on the rule. Also, if use_auto_pricing_min_price is true, the floor restriction will be ignored.
    },
    &quot;countryCode&quot;: &quot;A String&quot;, # Required. Immutable. CLDR country code (e.g. &quot;US&quot;).
    &quot;merchantId&quot;: &quot;A String&quot;, # Output only. Immutable. Merchant that owns the repricing rule.
    &quot;eligibleOfferMatcher&quot;: { # Matcher that specifies eligible offers. When the USE_FEED_ATTRIBUTE option is selected, only the repricing_rule_id attribute on the product feed is used to specify offer-rule mapping. When the CUSTOM_FILTER option is selected, only the *_matcher fields are used to filter the offers for offer-rule mapping. If the CUSTOM_FILTER option is selected, an offer needs to satisfy each custom filter matcher to be eligible for a rule. Size limit: the sum of the number of entries in all the matchers should not exceed 20. For example, there can be 15 product ids and 5 brands, but not 10 product ids and 11 brands. # Required. Match criteria for the eligible offers.
      &quot;brandMatcher&quot;: { # Matcher by string attributes. # Filter by the brand.
        &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
          &quot;A String&quot;,
        ],
      },
      &quot;itemGroupIdMatcher&quot;: { # Matcher by string attributes. # Filter by the item group id.
        &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
          &quot;A String&quot;,
        ],
      },
      &quot;offerIdMatcher&quot;: { # Matcher by string attributes. # Filter by the offer id.
        &quot;strAttributes&quot;: [ # String attributes, as long as such attribute of an offer is one of the string attribute values, the offer is considered as passing the matcher. The string matcher checks an offer for inclusivity in the string attributes, not equality. Only literal string matching is supported, no regex.
          &quot;A String&quot;,
        ],
      },
      &quot;matcherOption&quot;: &quot;A String&quot;, # Determines whether to use the custom matchers or the product feed attribute &quot;repricing_rule_id&quot; to specify offer-rule mapping.
    },
    &quot;paused&quot;: True or False, # Represents whether a rule is paused. A paused rule will behave like a non-paused rule within CRUD operations, with the major difference that a paused rule will not be evaluated and will have no effect on offers.
    &quot;ruleId&quot;: &quot;A String&quot;, # Output only. Immutable. The ID to uniquely identify each repricing rule.
    &quot;title&quot;: &quot;A String&quot;, # The title for the rule.
  }</pre>
</div>

</body></html>