<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.html">Content API for Shopping</a> . <a href="content_v2.inventory.html">inventory</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="#custombatch">custombatch(body=None, dryRun=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates price and availability for multiple products or stores in a single request. This operation does not update the expiration date of the products.</p>
<p class="toc_element">
  <code><a href="#set">set(merchantId, storeCode, productId, body=None, dryRun=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates price and availability of a product 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="custombatch">custombatch(body=None, dryRun=None, x__xgafv=None)</code>
  <pre>Updates price and availability for multiple products or stores in a single request. This operation does not update the expiration date of the products.

Args:
  body: object, The request body.
    The object takes the form of:

{
  &quot;entries&quot;: [ # The request entries to be processed in the batch.
    { # A batch entry encoding a single non-batch inventory request.
      &quot;batchId&quot;: 42, # An entry ID, unique within the batch request.
      &quot;inventory&quot;: { # Price and availability of the product.
        &quot;availability&quot;: &quot;A String&quot;, # The availability of the product. Acceptable values are: - &quot;`in stock`&quot; - &quot;`out of stock`&quot; - &quot;`preorder`&quot;
        &quot;customLabel0&quot;: &quot;A String&quot;, # Custom label 0 for custom grouping of items in a Shopping campaign. Only supported for online products.
        &quot;customLabel1&quot;: &quot;A String&quot;, # Custom label 1 for custom grouping of items in a Shopping campaign. Only supported for online products.
        &quot;customLabel2&quot;: &quot;A String&quot;, # Custom label 2 for custom grouping of items in a Shopping campaign. Only supported for online products.
        &quot;customLabel3&quot;: &quot;A String&quot;, # Custom label 3 for custom grouping of items in a Shopping campaign. Only supported for online products.
        &quot;customLabel4&quot;: &quot;A String&quot;, # Custom label 3 for custom grouping of items in a Shopping campaign. Only supported for online products.
        &quot;installment&quot;: { # Number and amount of installments to pay for an item. Brazil only.
          &quot;amount&quot;: { # The amount the buyer has to pay per month.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;months&quot;: &quot;A String&quot;, # The number of installments the buyer has to pay.
        },
        &quot;instoreProductLocation&quot;: &quot;A String&quot;, # The instore product location. Supported only for local products.
        &quot;kind&quot;: &quot;A String&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#inventory`&quot;
        &quot;loyaltyPoints&quot;: { # Loyalty points that users receive after purchasing the item. Japan only.
          &quot;name&quot;: &quot;A String&quot;, # Name of loyalty points program. It is recommended to limit the name to 12 full-width characters or 24 Roman characters.
          &quot;pointsValue&quot;: &quot;A String&quot;, # The retailer&#x27;s loyalty points in absolute value.
          &quot;ratio&quot;: 3.14, # The ratio of a point when converted to currency. Google assumes currency based on Merchant Center settings. If ratio is left out, it defaults to 1.0.
        },
        &quot;pickup&quot;: { # Store pickup information. Only supported for local inventory. Not setting `pickup` means &quot;don&#x27;t update&quot; while setting it to the empty value (`{}` in JSON) means &quot;delete&quot;. Otherwise, `pickupMethod` and `pickupSla` must be set together, unless `pickupMethod` is &quot;not supported&quot;.
          &quot;pickupMethod&quot;: &quot;A String&quot;, # Whether store pickup is available for this offer and whether the pickup option should be shown as buy, reserve, or not supported. Only supported for local inventory. Unless the value is &quot;not supported&quot;, must be submitted together with `pickupSla`. Acceptable values are: - &quot;`buy`&quot; - &quot;`not supported`&quot; - &quot;`reserve`&quot; - &quot;`ship to store`&quot;
          &quot;pickupSla&quot;: &quot;A String&quot;, # The expected date that an order will be ready for pickup, relative to when the order is placed. Only supported for local inventory. Must be submitted together with `pickupMethod`. Acceptable values are: - &quot;`five day`&quot; - &quot;`four day`&quot; - &quot;`multi day`&quot; - &quot;`multi week`&quot; - &quot;`next day`&quot; - &quot;`same day`&quot; - &quot;`seven day`&quot; - &quot;`six day`&quot; - &quot;`three day`&quot; - &quot;`two day`&quot;
        },
        &quot;price&quot;: { # The price of the product.
          &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
          &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
        },
        &quot;quantity&quot;: 42, # The quantity of the product. Must be equal to or greater than zero. Supported only for local products.
        &quot;salePrice&quot;: { # The sale price of the product. Mandatory if `sale_price_effective_date` is defined.
          &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
          &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
        },
        &quot;salePriceEffectiveDate&quot;: &quot;A String&quot;, # A date range represented by a pair of ISO 8601 dates separated by a space, comma, or slash. Both dates might be specified as &#x27;null&#x27; if undecided.
        &quot;sellOnGoogleQuantity&quot;: 42, # The quantity of the product that is available for selling on Google. Supported only for online products.
      },
      &quot;merchantId&quot;: &quot;A String&quot;, # The ID of the managing account.
      &quot;productId&quot;: &quot;A String&quot;, # The ID of the product for which to update price and availability.
      &quot;storeCode&quot;: &quot;A String&quot;, # The code of the store for which to update price and availability. Use `online` to update price and availability of an online product.
    },
  ],
}

  dryRun: boolean, Flag to simulate a request like in a live environment. If set to true, dry-run mode checks the validity of the request and returns errors (if any).
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;entries&quot;: [ # The result of the execution of the batch requests.
    { # A batch entry encoding a single non-batch inventory response.
      &quot;batchId&quot;: 42, # The ID of the request entry this entry responds to.
      &quot;errors&quot;: { # A list of errors returned by a failed batch entry. # A list of errors defined if and only if the request failed.
        &quot;code&quot;: 42, # The HTTP status of the first error in `errors`.
        &quot;errors&quot;: [ # A list of errors.
          { # An error returned by the API.
            &quot;domain&quot;: &quot;A String&quot;, # The domain of the error.
            &quot;message&quot;: &quot;A String&quot;, # A description of the error.
            &quot;reason&quot;: &quot;A String&quot;, # The error code.
          },
        ],
        &quot;message&quot;: &quot;A String&quot;, # The message of the first error in `errors`.
      },
      &quot;kind&quot;: &quot;A String&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#inventoryCustomBatchResponseEntry`&quot;
    },
  ],
  &quot;kind&quot;: &quot;A String&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#inventoryCustomBatchResponse&quot;.
}</pre>
</div>

<div class="method">
    <code class="details" id="set">set(merchantId, storeCode, productId, body=None, dryRun=None, x__xgafv=None)</code>
  <pre>Updates price and availability of a product in your Merchant Center account.

Args:
  merchantId: string, The ID of the account that contains the product. This account cannot be a multi-client account. (required)
  storeCode: string, The code of the store for which to update price and availability. Use `online` to update price and availability of an online product. (required)
  productId: string, The REST ID of the product for which to update price and availability. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;availability&quot;: &quot;A String&quot;, # The availability of the product. Acceptable values are: - &quot;`in stock`&quot; - &quot;`out of stock`&quot; - &quot;`preorder`&quot;
  &quot;customLabel0&quot;: &quot;A String&quot;, # Custom label 0 for custom grouping of items in a Shopping campaign. Only supported for online products.
  &quot;customLabel1&quot;: &quot;A String&quot;, # Custom label 1 for custom grouping of items in a Shopping campaign. Only supported for online products.
  &quot;customLabel2&quot;: &quot;A String&quot;, # Custom label 2 for custom grouping of items in a Shopping campaign. Only supported for online products.
  &quot;customLabel3&quot;: &quot;A String&quot;, # Custom label 3 for custom grouping of items in a Shopping campaign. Only supported for online products.
  &quot;customLabel4&quot;: &quot;A String&quot;, # Custom label 3 for custom grouping of items in a Shopping campaign. Only supported for online products.
  &quot;installment&quot;: { # Number and amount of installments to pay for an item. Brazil only.
    &quot;amount&quot;: { # The amount the buyer has to pay per month.
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;months&quot;: &quot;A String&quot;, # The number of installments the buyer has to pay.
  },
  &quot;instoreProductLocation&quot;: &quot;A String&quot;, # The instore product location. Supported only for local products.
  &quot;loyaltyPoints&quot;: { # Loyalty points that users receive after purchasing the item. Japan only.
    &quot;name&quot;: &quot;A String&quot;, # Name of loyalty points program. It is recommended to limit the name to 12 full-width characters or 24 Roman characters.
    &quot;pointsValue&quot;: &quot;A String&quot;, # The retailer&#x27;s loyalty points in absolute value.
    &quot;ratio&quot;: 3.14, # The ratio of a point when converted to currency. Google assumes currency based on Merchant Center settings. If ratio is left out, it defaults to 1.0.
  },
  &quot;pickup&quot;: { # Store pickup information. Only supported for local inventory. Not setting `pickup` means &quot;don&#x27;t update&quot; while setting it to the empty value (`{}` in JSON) means &quot;delete&quot;. Otherwise, `pickupMethod` and `pickupSla` must be set together, unless `pickupMethod` is &quot;not supported&quot;.
    &quot;pickupMethod&quot;: &quot;A String&quot;, # Whether store pickup is available for this offer and whether the pickup option should be shown as buy, reserve, or not supported. Only supported for local inventory. Unless the value is &quot;not supported&quot;, must be submitted together with `pickupSla`. Acceptable values are: - &quot;`buy`&quot; - &quot;`not supported`&quot; - &quot;`reserve`&quot; - &quot;`ship to store`&quot;
    &quot;pickupSla&quot;: &quot;A String&quot;, # The expected date that an order will be ready for pickup, relative to when the order is placed. Only supported for local inventory. Must be submitted together with `pickupMethod`. Acceptable values are: - &quot;`five day`&quot; - &quot;`four day`&quot; - &quot;`multi day`&quot; - &quot;`multi week`&quot; - &quot;`next day`&quot; - &quot;`same day`&quot; - &quot;`seven day`&quot; - &quot;`six day`&quot; - &quot;`three day`&quot; - &quot;`two day`&quot;
  },
  &quot;price&quot;: { # The price of the product.
    &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
    &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
  },
  &quot;quantity&quot;: 42, # The quantity of the product. Must be equal to or greater than zero. Supported only for local products.
  &quot;salePrice&quot;: { # The sale price of the product. Mandatory if `sale_price_effective_date` is defined.
    &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
    &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
  },
  &quot;salePriceEffectiveDate&quot;: &quot;A String&quot;, # A date range represented by a pair of ISO 8601 dates separated by a space, comma, or slash. Both dates might be specified as &#x27;null&#x27; if undecided.
  &quot;sellOnGoogleQuantity&quot;: 42, # The quantity of the product that is available for selling on Google. Supported only for online products.
}

  dryRun: boolean, Flag to simulate a request like in a live environment. If set to true, dry-run mode checks the validity of the request and returns errors (if any).
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;kind&quot;: &quot;A String&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#inventorySetResponse&quot;.
}</pre>
</div>

</body></html>