<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.pos.html">pos</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#custombatch">custombatch(body=None, dryRun=None)</a></code></p>
<p class="firstline">Batches multiple POS-related calls in a single request.</p>
<p class="toc_element">
  <code><a href="#delete">delete(merchantId, targetMerchantId, storeCode, dryRun=None)</a></code></p>
<p class="firstline">Deletes a store for the given merchant.</p>
<p class="toc_element">
  <code><a href="#get">get(merchantId, targetMerchantId, storeCode)</a></code></p>
<p class="firstline">Retrieves information about the given store.</p>
<p class="toc_element">
  <code><a href="#insert">insert(merchantId, targetMerchantId, body=None, dryRun=None)</a></code></p>
<p class="firstline">Creates a store for the given merchant.</p>
<p class="toc_element">
  <code><a href="#inventory">inventory(merchantId, targetMerchantId, body=None, dryRun=None)</a></code></p>
<p class="firstline">Submit inventory for the given merchant.</p>
<p class="toc_element">
  <code><a href="#list">list(merchantId, targetMerchantId)</a></code></p>
<p class="firstline">Lists the stores of the target merchant.</p>
<p class="toc_element">
  <code><a href="#sale">sale(merchantId, targetMerchantId, body=None, dryRun=None)</a></code></p>
<p class="firstline">Submit a sale event for the given merchant.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="custombatch">custombatch(body=None, dryRun=None)</code>
  <pre>Batches multiple POS-related calls in a single request.

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

{
    &quot;entries&quot;: [ # The request entries to be processed in the batch.
      {
        &quot;batchId&quot;: 42, # An entry ID, unique within the batch request.
        &quot;inventory&quot;: { # The absolute quantity of an item available at the given store. # The inventory to submit. Set this only if the method is `inventory`.
          &quot;contentLanguage&quot;: &quot;A String&quot;, # Required. The two-letter ISO 639-1 language code for the item.
          &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number.
          &quot;itemId&quot;: &quot;A String&quot;, # Required. A unique identifier for the item.
          &quot;kind&quot;: &quot;content#posInventory&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#posInventory`&quot;
          &quot;price&quot;: { # Required. The current price of the item.
            &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;: &quot;A String&quot;, # Required. The available quantity of the item.
          &quot;storeCode&quot;: &quot;A String&quot;, # Required. The identifier of the merchant&#x27;s store. Either a `storeCode` inserted via the API or the code of the store in Google My Business.
          &quot;targetCountry&quot;: &quot;A String&quot;, # Required. The CLDR territory code for the item.
          &quot;timestamp&quot;: &quot;A String&quot;, # Required. The inventory timestamp, in ISO 8601 format.
        },
        &quot;merchantId&quot;: &quot;A String&quot;, # The ID of the POS data provider.
        &quot;method&quot;: &quot;A String&quot;, # The method of the batch entry.
            #
            # Acceptable values are:
            # - &quot;`delete`&quot;
            # - &quot;`get`&quot;
            # - &quot;`insert`&quot;
            # - &quot;`inventory`&quot;
            # - &quot;`sale`&quot;
        &quot;sale&quot;: { # The change of the available quantity of an item at the given store. # The sale information to submit. Set this only if the method is `sale`.
          &quot;contentLanguage&quot;: &quot;A String&quot;, # Required. The two-letter ISO 639-1 language code for the item.
          &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number.
          &quot;itemId&quot;: &quot;A String&quot;, # Required. A unique identifier for the item.
          &quot;kind&quot;: &quot;content#posSale&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#posSale`&quot;
          &quot;price&quot;: { # Required. The price of the item.
            &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;: &quot;A String&quot;, # Required. The relative change of the available quantity. Negative for items returned.
          &quot;saleId&quot;: &quot;A String&quot;, # A unique ID to group items from the same sale event.
          &quot;storeCode&quot;: &quot;A String&quot;, # Required. The identifier of the merchant&#x27;s store. Either a `storeCode` inserted via the API or the code of the store in Google My Business.
          &quot;targetCountry&quot;: &quot;A String&quot;, # Required. The CLDR territory code for the item.
          &quot;timestamp&quot;: &quot;A String&quot;, # Required. The inventory timestamp, in ISO 8601 format.
        },
        &quot;store&quot;: { # Store resource. # The store information to submit. Set this only if the method is `insert`.
          &quot;kind&quot;: &quot;content#posStore&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#posStore`&quot;
          &quot;storeAddress&quot;: &quot;A String&quot;, # Required. The street address of the store.
          &quot;storeCode&quot;: &quot;A String&quot;, # Required. A store identifier that is unique for the given merchant.
        },
        &quot;storeCode&quot;: &quot;A String&quot;, # The store code. Set this only if the method is `delete` or `get`.
        &quot;targetMerchantId&quot;: &quot;A String&quot;, # The ID of the account for which to get/submit data.
      },
    ],
  }

  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).

Returns:
  An object of the form:

    {
    &quot;entries&quot;: [ # The result of the execution of the batch requests.
      {
        &quot;batchId&quot;: 42, # The ID of the request entry to which this entry responds.
        &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;inventory&quot;: { # The absolute quantity of an item available at the given store. # The updated inventory information.
          &quot;contentLanguage&quot;: &quot;A String&quot;, # Required. The two-letter ISO 639-1 language code for the item.
          &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number.
          &quot;itemId&quot;: &quot;A String&quot;, # Required. A unique identifier for the item.
          &quot;kind&quot;: &quot;content#posInventory&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#posInventory`&quot;
          &quot;price&quot;: { # Required. The current price of the item.
            &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;: &quot;A String&quot;, # Required. The available quantity of the item.
          &quot;storeCode&quot;: &quot;A String&quot;, # Required. The identifier of the merchant&#x27;s store. Either a `storeCode` inserted via the API or the code of the store in Google My Business.
          &quot;targetCountry&quot;: &quot;A String&quot;, # Required. The CLDR territory code for the item.
          &quot;timestamp&quot;: &quot;A String&quot;, # Required. The inventory timestamp, in ISO 8601 format.
        },
        &quot;kind&quot;: &quot;content#posCustomBatchResponseEntry&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#posCustomBatchResponseEntry`&quot;
        &quot;sale&quot;: { # The change of the available quantity of an item at the given store. # The updated sale information.
          &quot;contentLanguage&quot;: &quot;A String&quot;, # Required. The two-letter ISO 639-1 language code for the item.
          &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number.
          &quot;itemId&quot;: &quot;A String&quot;, # Required. A unique identifier for the item.
          &quot;kind&quot;: &quot;content#posSale&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#posSale`&quot;
          &quot;price&quot;: { # Required. The price of the item.
            &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;: &quot;A String&quot;, # Required. The relative change of the available quantity. Negative for items returned.
          &quot;saleId&quot;: &quot;A String&quot;, # A unique ID to group items from the same sale event.
          &quot;storeCode&quot;: &quot;A String&quot;, # Required. The identifier of the merchant&#x27;s store. Either a `storeCode` inserted via the API or the code of the store in Google My Business.
          &quot;targetCountry&quot;: &quot;A String&quot;, # Required. The CLDR territory code for the item.
          &quot;timestamp&quot;: &quot;A String&quot;, # Required. The inventory timestamp, in ISO 8601 format.
        },
        &quot;store&quot;: { # Store resource. # The retrieved or updated store information.
          &quot;kind&quot;: &quot;content#posStore&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#posStore`&quot;
          &quot;storeAddress&quot;: &quot;A String&quot;, # Required. The street address of the store.
          &quot;storeCode&quot;: &quot;A String&quot;, # Required. A store identifier that is unique for the given merchant.
        },
      },
    ],
    &quot;kind&quot;: &quot;content#posCustomBatchResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#posCustomBatchResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(merchantId, targetMerchantId, storeCode, dryRun=None)</code>
  <pre>Deletes a store for the given merchant.

Args:
  merchantId: string, The ID of the POS or inventory data provider. (required)
  targetMerchantId: string, The ID of the target merchant. (required)
  storeCode: string, A store code that is unique per merchant. (required)
  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).
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(merchantId, targetMerchantId, storeCode)</code>
  <pre>Retrieves information about the given store.

Args:
  merchantId: string, The ID of the POS or inventory data provider. (required)
  targetMerchantId: string, The ID of the target merchant. (required)
  storeCode: string, A store code that is unique per merchant. (required)

Returns:
  An object of the form:

    { # Store resource.
    &quot;kind&quot;: &quot;content#posStore&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#posStore`&quot;
    &quot;storeAddress&quot;: &quot;A String&quot;, # Required. The street address of the store.
    &quot;storeCode&quot;: &quot;A String&quot;, # Required. A store identifier that is unique for the given merchant.
  }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(merchantId, targetMerchantId, body=None, dryRun=None)</code>
  <pre>Creates a store for the given merchant.

Args:
  merchantId: string, The ID of the POS or inventory data provider. (required)
  targetMerchantId: string, The ID of the target merchant. (required)
  body: object, The request body.
    The object takes the form of:

{ # Store resource.
  &quot;kind&quot;: &quot;content#posStore&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#posStore`&quot;
  &quot;storeAddress&quot;: &quot;A String&quot;, # Required. The street address of the store.
  &quot;storeCode&quot;: &quot;A String&quot;, # Required. A store identifier that is unique for the given merchant.
}

  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).

Returns:
  An object of the form:

    { # Store resource.
    &quot;kind&quot;: &quot;content#posStore&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#posStore`&quot;
    &quot;storeAddress&quot;: &quot;A String&quot;, # Required. The street address of the store.
    &quot;storeCode&quot;: &quot;A String&quot;, # Required. A store identifier that is unique for the given merchant.
  }</pre>
</div>

<div class="method">
    <code class="details" id="inventory">inventory(merchantId, targetMerchantId, body=None, dryRun=None)</code>
  <pre>Submit inventory for the given merchant.

Args:
  merchantId: string, The ID of the POS or inventory data provider. (required)
  targetMerchantId: string, The ID of the target merchant. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;contentLanguage&quot;: &quot;A String&quot;, # Required. The two-letter ISO 639-1 language code for the item.
    &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number.
    &quot;itemId&quot;: &quot;A String&quot;, # Required. A unique identifier for the item.
    &quot;price&quot;: { # Required. The current price of the item.
      &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;: &quot;A String&quot;, # Required. The available quantity of the item.
    &quot;storeCode&quot;: &quot;A String&quot;, # Required. The identifier of the merchant&#x27;s store. Either a `storeCode` inserted via the API or the code of the store in Google My Business.
    &quot;targetCountry&quot;: &quot;A String&quot;, # Required. The CLDR territory code for the item.
    &quot;timestamp&quot;: &quot;A String&quot;, # Required. The inventory timestamp, in ISO 8601 format.
  }

  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).

Returns:
  An object of the form:

    {
    &quot;contentLanguage&quot;: &quot;A String&quot;, # Required. The two-letter ISO 639-1 language code for the item.
    &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number.
    &quot;itemId&quot;: &quot;A String&quot;, # Required. A unique identifier for the item.
    &quot;kind&quot;: &quot;content#posInventoryResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#posInventoryResponse&quot;.
    &quot;price&quot;: { # Required. The current price of the item.
      &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;: &quot;A String&quot;, # Required. The available quantity of the item.
    &quot;storeCode&quot;: &quot;A String&quot;, # Required. The identifier of the merchant&#x27;s store. Either a `storeCode` inserted via the API or the code of the store in Google My Business.
    &quot;targetCountry&quot;: &quot;A String&quot;, # Required. The CLDR territory code for the item.
    &quot;timestamp&quot;: &quot;A String&quot;, # Required. The inventory timestamp, in ISO 8601 format.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(merchantId, targetMerchantId)</code>
  <pre>Lists the stores of the target merchant.

Args:
  merchantId: string, The ID of the POS or inventory data provider. (required)
  targetMerchantId: string, The ID of the target merchant. (required)

Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#posListResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#posListResponse&quot;.
    &quot;resources&quot;: [
      { # Store resource.
        &quot;kind&quot;: &quot;content#posStore&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#posStore`&quot;
        &quot;storeAddress&quot;: &quot;A String&quot;, # Required. The street address of the store.
        &quot;storeCode&quot;: &quot;A String&quot;, # Required. A store identifier that is unique for the given merchant.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="sale">sale(merchantId, targetMerchantId, body=None, dryRun=None)</code>
  <pre>Submit a sale event for the given merchant.

Args:
  merchantId: string, The ID of the POS or inventory data provider. (required)
  targetMerchantId: string, The ID of the target merchant. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;contentLanguage&quot;: &quot;A String&quot;, # Required. The two-letter ISO 639-1 language code for the item.
    &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number.
    &quot;itemId&quot;: &quot;A String&quot;, # Required. A unique identifier for the item.
    &quot;price&quot;: { # Required. The price of the item.
      &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;: &quot;A String&quot;, # Required. The relative change of the available quantity. Negative for items returned.
    &quot;saleId&quot;: &quot;A String&quot;, # A unique ID to group items from the same sale event.
    &quot;storeCode&quot;: &quot;A String&quot;, # Required. The identifier of the merchant&#x27;s store. Either a `storeCode` inserted via the API or the code of the store in Google My Business.
    &quot;targetCountry&quot;: &quot;A String&quot;, # Required. The CLDR territory code for the item.
    &quot;timestamp&quot;: &quot;A String&quot;, # Required. The inventory timestamp, in ISO 8601 format.
  }

  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).

Returns:
  An object of the form:

    {
    &quot;contentLanguage&quot;: &quot;A String&quot;, # Required. The two-letter ISO 639-1 language code for the item.
    &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number.
    &quot;itemId&quot;: &quot;A String&quot;, # Required. A unique identifier for the item.
    &quot;kind&quot;: &quot;content#posSaleResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#posSaleResponse&quot;.
    &quot;price&quot;: { # Required. The price of the item.
      &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;: &quot;A String&quot;, # Required. The relative change of the available quantity. Negative for items returned.
    &quot;saleId&quot;: &quot;A String&quot;, # A unique ID to group items from the same sale event.
    &quot;storeCode&quot;: &quot;A String&quot;, # Required. The identifier of the merchant&#x27;s store. Either a `storeCode` inserted via the API or the code of the store in Google My Business.
    &quot;targetCountry&quot;: &quot;A String&quot;, # Required. The CLDR territory code for the item.
    &quot;timestamp&quot;: &quot;A String&quot;, # Required. The inventory timestamp, in ISO 8601 format.
  }</pre>
</div>

</body></html>