<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.regions.html">regions</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, regionId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a region definition in your Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#delete">delete(merchantId, regionId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a region definition from your Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#get">get(merchantId, regionId, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves a region defined in your Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#list">list(merchantId, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the regions 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, regionId, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a region definition in your Merchant Center account.</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, regionId=None, x__xgafv=None)</code>
  <pre>Creates a region definition in your Merchant Center account.

Args:
  merchantId: string, Required. The id of the merchant for which to create region definition. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a geographic region that you can use as a target with both the `RegionalInventory` and `ShippingSettings` services. You can define regions as collections of either postal codes or, in some countries, using predefined geotargets.
  &quot;displayName&quot;: &quot;A String&quot;, # The display name of the region.
  &quot;geotargetArea&quot;: { # A list of geotargets that defines the region area. # A list of geotargets that defines the region area.
    &quot;geotargetCriteriaIds&quot;: [ # Required. A non-empty list of [location IDs](https://developers.google.com/adwords/api/docs/appendix/geotargeting). They must all be of the same location type (e.g., state).
      &quot;A String&quot;,
    ],
  },
  &quot;merchantId&quot;: &quot;A String&quot;, # Output only. Immutable. Merchant that owns the region.
  &quot;postalCodeArea&quot;: { # A list of postal codes that defines the region area. Note: All regions defined using postal codes are accessible via the account&#x27;s `ShippingSettings.postalCodeGroups` resource. # A list of postal codes that defines the region area.
    &quot;postalCodes&quot;: [ # Required. A range of postal codes.
      { # A range of postal codes that defines the region area.
        &quot;begin&quot;: &quot;A String&quot;, # Required. A postal code or a pattern of the form prefix* denoting the inclusive lower bound of the range defining the area. Examples values: &quot;94108&quot;, &quot;9410*&quot;, &quot;9*&quot;.
        &quot;end&quot;: &quot;A String&quot;, # Optional. A postal code or a pattern of the form prefix* denoting the inclusive upper bound of the range defining the area. It must have the same length as postalCodeRangeBegin: if postalCodeRangeBegin is a postal code then postalCodeRangeEnd must be a postal code too; if postalCodeRangeBegin is a pattern then postalCodeRangeEnd must be a pattern with the same prefix length. Optional: if not set, then the area is defined as being all the postal codes matching postalCodeRangeBegin.
      },
    ],
    &quot;regionCode&quot;: &quot;A String&quot;, # Required. CLDR territory code or the country the postal code group applies to.
  },
  &quot;regionId&quot;: &quot;A String&quot;, # Output only. Immutable. The ID uniquely identifying each region.
  &quot;regionalInventoryEligible&quot;: True or False, # Output only. Indicates if the region is eligible to use in the Regional Inventory configuration.
  &quot;shippingEligible&quot;: True or False, # Output only. Indicates if the region is eligible to use in the Shipping Services configuration.
}

  regionId: string, Required. The id of the region 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 geographic region that you can use as a target with both the `RegionalInventory` and `ShippingSettings` services. You can define regions as collections of either postal codes or, in some countries, using predefined geotargets.
  &quot;displayName&quot;: &quot;A String&quot;, # The display name of the region.
  &quot;geotargetArea&quot;: { # A list of geotargets that defines the region area. # A list of geotargets that defines the region area.
    &quot;geotargetCriteriaIds&quot;: [ # Required. A non-empty list of [location IDs](https://developers.google.com/adwords/api/docs/appendix/geotargeting). They must all be of the same location type (e.g., state).
      &quot;A String&quot;,
    ],
  },
  &quot;merchantId&quot;: &quot;A String&quot;, # Output only. Immutable. Merchant that owns the region.
  &quot;postalCodeArea&quot;: { # A list of postal codes that defines the region area. Note: All regions defined using postal codes are accessible via the account&#x27;s `ShippingSettings.postalCodeGroups` resource. # A list of postal codes that defines the region area.
    &quot;postalCodes&quot;: [ # Required. A range of postal codes.
      { # A range of postal codes that defines the region area.
        &quot;begin&quot;: &quot;A String&quot;, # Required. A postal code or a pattern of the form prefix* denoting the inclusive lower bound of the range defining the area. Examples values: &quot;94108&quot;, &quot;9410*&quot;, &quot;9*&quot;.
        &quot;end&quot;: &quot;A String&quot;, # Optional. A postal code or a pattern of the form prefix* denoting the inclusive upper bound of the range defining the area. It must have the same length as postalCodeRangeBegin: if postalCodeRangeBegin is a postal code then postalCodeRangeEnd must be a postal code too; if postalCodeRangeBegin is a pattern then postalCodeRangeEnd must be a pattern with the same prefix length. Optional: if not set, then the area is defined as being all the postal codes matching postalCodeRangeBegin.
      },
    ],
    &quot;regionCode&quot;: &quot;A String&quot;, # Required. CLDR territory code or the country the postal code group applies to.
  },
  &quot;regionId&quot;: &quot;A String&quot;, # Output only. Immutable. The ID uniquely identifying each region.
  &quot;regionalInventoryEligible&quot;: True or False, # Output only. Indicates if the region is eligible to use in the Regional Inventory configuration.
  &quot;shippingEligible&quot;: True or False, # Output only. Indicates if the region is eligible to use in the Shipping Services configuration.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(merchantId, regionId, x__xgafv=None)</code>
  <pre>Deletes a region definition from your Merchant Center account.

Args:
  merchantId: string, Required. The id of the merchant for which to delete region definition. (required)
  regionId: string, Required. The id of the region 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, regionId, x__xgafv=None)</code>
  <pre>Retrieves a region defined in your Merchant Center account.

Args:
  merchantId: string, Required. The id of the merchant for which to retrieve region definition. (required)
  regionId: string, Required. The id of the region 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 geographic region that you can use as a target with both the `RegionalInventory` and `ShippingSettings` services. You can define regions as collections of either postal codes or, in some countries, using predefined geotargets.
  &quot;displayName&quot;: &quot;A String&quot;, # The display name of the region.
  &quot;geotargetArea&quot;: { # A list of geotargets that defines the region area. # A list of geotargets that defines the region area.
    &quot;geotargetCriteriaIds&quot;: [ # Required. A non-empty list of [location IDs](https://developers.google.com/adwords/api/docs/appendix/geotargeting). They must all be of the same location type (e.g., state).
      &quot;A String&quot;,
    ],
  },
  &quot;merchantId&quot;: &quot;A String&quot;, # Output only. Immutable. Merchant that owns the region.
  &quot;postalCodeArea&quot;: { # A list of postal codes that defines the region area. Note: All regions defined using postal codes are accessible via the account&#x27;s `ShippingSettings.postalCodeGroups` resource. # A list of postal codes that defines the region area.
    &quot;postalCodes&quot;: [ # Required. A range of postal codes.
      { # A range of postal codes that defines the region area.
        &quot;begin&quot;: &quot;A String&quot;, # Required. A postal code or a pattern of the form prefix* denoting the inclusive lower bound of the range defining the area. Examples values: &quot;94108&quot;, &quot;9410*&quot;, &quot;9*&quot;.
        &quot;end&quot;: &quot;A String&quot;, # Optional. A postal code or a pattern of the form prefix* denoting the inclusive upper bound of the range defining the area. It must have the same length as postalCodeRangeBegin: if postalCodeRangeBegin is a postal code then postalCodeRangeEnd must be a postal code too; if postalCodeRangeBegin is a pattern then postalCodeRangeEnd must be a pattern with the same prefix length. Optional: if not set, then the area is defined as being all the postal codes matching postalCodeRangeBegin.
      },
    ],
    &quot;regionCode&quot;: &quot;A String&quot;, # Required. CLDR territory code or the country the postal code group applies to.
  },
  &quot;regionId&quot;: &quot;A String&quot;, # Output only. Immutable. The ID uniquely identifying each region.
  &quot;regionalInventoryEligible&quot;: True or False, # Output only. Indicates if the region is eligible to use in the Regional Inventory configuration.
  &quot;shippingEligible&quot;: True or False, # Output only. Indicates if the region is eligible to use in the Shipping Services configuration.
}</pre>
</div>

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

Args:
  merchantId: string, Required. The id of the merchant for which to list region definitions. (required)
  pageSize: integer, The maximum number of regions 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 `ListRegions` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListRegions` must match the call that provided the page token.
  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 `ListRegions` method.
  &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.
  &quot;regions&quot;: [ # The regions from the specified merchant.
    { # Represents a geographic region that you can use as a target with both the `RegionalInventory` and `ShippingSettings` services. You can define regions as collections of either postal codes or, in some countries, using predefined geotargets.
      &quot;displayName&quot;: &quot;A String&quot;, # The display name of the region.
      &quot;geotargetArea&quot;: { # A list of geotargets that defines the region area. # A list of geotargets that defines the region area.
        &quot;geotargetCriteriaIds&quot;: [ # Required. A non-empty list of [location IDs](https://developers.google.com/adwords/api/docs/appendix/geotargeting). They must all be of the same location type (e.g., state).
          &quot;A String&quot;,
        ],
      },
      &quot;merchantId&quot;: &quot;A String&quot;, # Output only. Immutable. Merchant that owns the region.
      &quot;postalCodeArea&quot;: { # A list of postal codes that defines the region area. Note: All regions defined using postal codes are accessible via the account&#x27;s `ShippingSettings.postalCodeGroups` resource. # A list of postal codes that defines the region area.
        &quot;postalCodes&quot;: [ # Required. A range of postal codes.
          { # A range of postal codes that defines the region area.
            &quot;begin&quot;: &quot;A String&quot;, # Required. A postal code or a pattern of the form prefix* denoting the inclusive lower bound of the range defining the area. Examples values: &quot;94108&quot;, &quot;9410*&quot;, &quot;9*&quot;.
            &quot;end&quot;: &quot;A String&quot;, # Optional. A postal code or a pattern of the form prefix* denoting the inclusive upper bound of the range defining the area. It must have the same length as postalCodeRangeBegin: if postalCodeRangeBegin is a postal code then postalCodeRangeEnd must be a postal code too; if postalCodeRangeBegin is a pattern then postalCodeRangeEnd must be a pattern with the same prefix length. Optional: if not set, then the area is defined as being all the postal codes matching postalCodeRangeBegin.
          },
        ],
        &quot;regionCode&quot;: &quot;A String&quot;, # Required. CLDR territory code or the country the postal code group applies to.
      },
      &quot;regionId&quot;: &quot;A String&quot;, # Output only. Immutable. The ID uniquely identifying each region.
      &quot;regionalInventoryEligible&quot;: True or False, # Output only. Indicates if the region is eligible to use in the Regional Inventory configuration.
      &quot;shippingEligible&quot;: True or False, # Output only. Indicates if the region is eligible to use in the Shipping Services configuration.
    },
  ],
}</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, regionId, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a region definition in your Merchant Center account.

Args:
  merchantId: string, Required. The id of the merchant for which to update region definition. (required)
  regionId: string, Required. The id of the region to update. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a geographic region that you can use as a target with both the `RegionalInventory` and `ShippingSettings` services. You can define regions as collections of either postal codes or, in some countries, using predefined geotargets.
  &quot;displayName&quot;: &quot;A String&quot;, # The display name of the region.
  &quot;geotargetArea&quot;: { # A list of geotargets that defines the region area. # A list of geotargets that defines the region area.
    &quot;geotargetCriteriaIds&quot;: [ # Required. A non-empty list of [location IDs](https://developers.google.com/adwords/api/docs/appendix/geotargeting). They must all be of the same location type (e.g., state).
      &quot;A String&quot;,
    ],
  },
  &quot;merchantId&quot;: &quot;A String&quot;, # Output only. Immutable. Merchant that owns the region.
  &quot;postalCodeArea&quot;: { # A list of postal codes that defines the region area. Note: All regions defined using postal codes are accessible via the account&#x27;s `ShippingSettings.postalCodeGroups` resource. # A list of postal codes that defines the region area.
    &quot;postalCodes&quot;: [ # Required. A range of postal codes.
      { # A range of postal codes that defines the region area.
        &quot;begin&quot;: &quot;A String&quot;, # Required. A postal code or a pattern of the form prefix* denoting the inclusive lower bound of the range defining the area. Examples values: &quot;94108&quot;, &quot;9410*&quot;, &quot;9*&quot;.
        &quot;end&quot;: &quot;A String&quot;, # Optional. A postal code or a pattern of the form prefix* denoting the inclusive upper bound of the range defining the area. It must have the same length as postalCodeRangeBegin: if postalCodeRangeBegin is a postal code then postalCodeRangeEnd must be a postal code too; if postalCodeRangeBegin is a pattern then postalCodeRangeEnd must be a pattern with the same prefix length. Optional: if not set, then the area is defined as being all the postal codes matching postalCodeRangeBegin.
      },
    ],
    &quot;regionCode&quot;: &quot;A String&quot;, # Required. CLDR territory code or the country the postal code group applies to.
  },
  &quot;regionId&quot;: &quot;A String&quot;, # Output only. Immutable. The ID uniquely identifying each region.
  &quot;regionalInventoryEligible&quot;: True or False, # Output only. Indicates if the region is eligible to use in the Regional Inventory configuration.
  &quot;shippingEligible&quot;: True or False, # Output only. Indicates if the region is eligible to use in the Shipping Services configuration.
}

  updateMask: string, Optional. The field mask indicating the fields to update.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a geographic region that you can use as a target with both the `RegionalInventory` and `ShippingSettings` services. You can define regions as collections of either postal codes or, in some countries, using predefined geotargets.
  &quot;displayName&quot;: &quot;A String&quot;, # The display name of the region.
  &quot;geotargetArea&quot;: { # A list of geotargets that defines the region area. # A list of geotargets that defines the region area.
    &quot;geotargetCriteriaIds&quot;: [ # Required. A non-empty list of [location IDs](https://developers.google.com/adwords/api/docs/appendix/geotargeting). They must all be of the same location type (e.g., state).
      &quot;A String&quot;,
    ],
  },
  &quot;merchantId&quot;: &quot;A String&quot;, # Output only. Immutable. Merchant that owns the region.
  &quot;postalCodeArea&quot;: { # A list of postal codes that defines the region area. Note: All regions defined using postal codes are accessible via the account&#x27;s `ShippingSettings.postalCodeGroups` resource. # A list of postal codes that defines the region area.
    &quot;postalCodes&quot;: [ # Required. A range of postal codes.
      { # A range of postal codes that defines the region area.
        &quot;begin&quot;: &quot;A String&quot;, # Required. A postal code or a pattern of the form prefix* denoting the inclusive lower bound of the range defining the area. Examples values: &quot;94108&quot;, &quot;9410*&quot;, &quot;9*&quot;.
        &quot;end&quot;: &quot;A String&quot;, # Optional. A postal code or a pattern of the form prefix* denoting the inclusive upper bound of the range defining the area. It must have the same length as postalCodeRangeBegin: if postalCodeRangeBegin is a postal code then postalCodeRangeEnd must be a postal code too; if postalCodeRangeBegin is a pattern then postalCodeRangeEnd must be a pattern with the same prefix length. Optional: if not set, then the area is defined as being all the postal codes matching postalCodeRangeBegin.
      },
    ],
    &quot;regionCode&quot;: &quot;A String&quot;, # Required. CLDR territory code or the country the postal code group applies to.
  },
  &quot;regionId&quot;: &quot;A String&quot;, # Output only. Immutable. The ID uniquely identifying each region.
  &quot;regionalInventoryEligible&quot;: True or False, # Output only. Indicates if the region is eligible to use in the Regional Inventory configuration.
  &quot;shippingEligible&quot;: True or False, # Output only. Indicates if the region is eligible to use in the Shipping Services configuration.
}</pre>
</div>

</body></html>