<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="androidenterprise_v1.html">Google Play EMM API</a> . <a href="androidenterprise_v1.storelayoutclusters.html">storelayoutclusters</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="#delete">delete(enterpriseId, pageId, clusterId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a cluster.</p>
<p class="toc_element">
  <code><a href="#get">get(enterpriseId, pageId, clusterId, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves details of a cluster.</p>
<p class="toc_element">
  <code><a href="#insert">insert(enterpriseId, pageId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Inserts a new cluster in a page.</p>
<p class="toc_element">
  <code><a href="#list">list(enterpriseId, pageId, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the details of all clusters on the specified page.</p>
<p class="toc_element">
  <code><a href="#update">update(enterpriseId, pageId, clusterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a cluster.</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="delete">delete(enterpriseId, pageId, clusterId, x__xgafv=None)</code>
  <pre>Deletes a cluster.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  pageId: string, The ID of the page. (required)
  clusterId: string, The ID of the cluster. (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(enterpriseId, pageId, clusterId, x__xgafv=None)</code>
  <pre>Retrieves details of a cluster.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  pageId: string, The ID of the page. (required)
  clusterId: string, The ID of the cluster. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Definition of a managed Google Play store cluster, a list of products displayed as part of a store page.
  &quot;id&quot;: &quot;A String&quot;, # Unique ID of this cluster. Assigned by the server. Immutable once assigned.
  &quot;name&quot;: [ # Ordered list of localized strings giving the name of this page. The text displayed is the one that best matches the user locale, or the first entry if there is no good match. There needs to be at least one entry.
    { # A localized string with its locale.
      &quot;locale&quot;: &quot;A String&quot;, # The BCP47 tag for a locale. (e.g. &quot;en-US&quot;, &quot;de&quot;).
      &quot;text&quot;: &quot;A String&quot;, # The text localized in the associated locale.
    },
  ],
  &quot;orderInPage&quot;: &quot;A String&quot;, # String (US-ASCII only) used to determine order of this cluster within the parent page&#x27;s elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined. The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
  &quot;productId&quot;: [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
    &quot;A String&quot;,
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(enterpriseId, pageId, body=None, x__xgafv=None)</code>
  <pre>Inserts a new cluster in a page.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  pageId: string, The ID of the page. (required)
  body: object, The request body.
    The object takes the form of:

{ # Definition of a managed Google Play store cluster, a list of products displayed as part of a store page.
  &quot;id&quot;: &quot;A String&quot;, # Unique ID of this cluster. Assigned by the server. Immutable once assigned.
  &quot;name&quot;: [ # Ordered list of localized strings giving the name of this page. The text displayed is the one that best matches the user locale, or the first entry if there is no good match. There needs to be at least one entry.
    { # A localized string with its locale.
      &quot;locale&quot;: &quot;A String&quot;, # The BCP47 tag for a locale. (e.g. &quot;en-US&quot;, &quot;de&quot;).
      &quot;text&quot;: &quot;A String&quot;, # The text localized in the associated locale.
    },
  ],
  &quot;orderInPage&quot;: &quot;A String&quot;, # String (US-ASCII only) used to determine order of this cluster within the parent page&#x27;s elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined. The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
  &quot;productId&quot;: [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
    &quot;A String&quot;,
  ],
}

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

Returns:
  An object of the form:

    { # Definition of a managed Google Play store cluster, a list of products displayed as part of a store page.
  &quot;id&quot;: &quot;A String&quot;, # Unique ID of this cluster. Assigned by the server. Immutable once assigned.
  &quot;name&quot;: [ # Ordered list of localized strings giving the name of this page. The text displayed is the one that best matches the user locale, or the first entry if there is no good match. There needs to be at least one entry.
    { # A localized string with its locale.
      &quot;locale&quot;: &quot;A String&quot;, # The BCP47 tag for a locale. (e.g. &quot;en-US&quot;, &quot;de&quot;).
      &quot;text&quot;: &quot;A String&quot;, # The text localized in the associated locale.
    },
  ],
  &quot;orderInPage&quot;: &quot;A String&quot;, # String (US-ASCII only) used to determine order of this cluster within the parent page&#x27;s elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined. The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
  &quot;productId&quot;: [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
    &quot;A String&quot;,
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(enterpriseId, pageId, x__xgafv=None)</code>
  <pre>Retrieves the details of all clusters on the specified page.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  pageId: string, The ID of the page. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;cluster&quot;: [ # A store cluster of an enterprise.
    { # Definition of a managed Google Play store cluster, a list of products displayed as part of a store page.
      &quot;id&quot;: &quot;A String&quot;, # Unique ID of this cluster. Assigned by the server. Immutable once assigned.
      &quot;name&quot;: [ # Ordered list of localized strings giving the name of this page. The text displayed is the one that best matches the user locale, or the first entry if there is no good match. There needs to be at least one entry.
        { # A localized string with its locale.
          &quot;locale&quot;: &quot;A String&quot;, # The BCP47 tag for a locale. (e.g. &quot;en-US&quot;, &quot;de&quot;).
          &quot;text&quot;: &quot;A String&quot;, # The text localized in the associated locale.
        },
      ],
      &quot;orderInPage&quot;: &quot;A String&quot;, # String (US-ASCII only) used to determine order of this cluster within the parent page&#x27;s elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined. The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
      &quot;productId&quot;: [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
        &quot;A String&quot;,
      ],
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(enterpriseId, pageId, clusterId, body=None, x__xgafv=None)</code>
  <pre>Updates a cluster.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  pageId: string, The ID of the page. (required)
  clusterId: string, The ID of the cluster. (required)
  body: object, The request body.
    The object takes the form of:

{ # Definition of a managed Google Play store cluster, a list of products displayed as part of a store page.
  &quot;id&quot;: &quot;A String&quot;, # Unique ID of this cluster. Assigned by the server. Immutable once assigned.
  &quot;name&quot;: [ # Ordered list of localized strings giving the name of this page. The text displayed is the one that best matches the user locale, or the first entry if there is no good match. There needs to be at least one entry.
    { # A localized string with its locale.
      &quot;locale&quot;: &quot;A String&quot;, # The BCP47 tag for a locale. (e.g. &quot;en-US&quot;, &quot;de&quot;).
      &quot;text&quot;: &quot;A String&quot;, # The text localized in the associated locale.
    },
  ],
  &quot;orderInPage&quot;: &quot;A String&quot;, # String (US-ASCII only) used to determine order of this cluster within the parent page&#x27;s elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined. The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
  &quot;productId&quot;: [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
    &quot;A String&quot;,
  ],
}

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

Returns:
  An object of the form:

    { # Definition of a managed Google Play store cluster, a list of products displayed as part of a store page.
  &quot;id&quot;: &quot;A String&quot;, # Unique ID of this cluster. Assigned by the server. Immutable once assigned.
  &quot;name&quot;: [ # Ordered list of localized strings giving the name of this page. The text displayed is the one that best matches the user locale, or the first entry if there is no good match. There needs to be at least one entry.
    { # A localized string with its locale.
      &quot;locale&quot;: &quot;A String&quot;, # The BCP47 tag for a locale. (e.g. &quot;en-US&quot;, &quot;de&quot;).
      &quot;text&quot;: &quot;A String&quot;, # The text localized in the associated locale.
    },
  ],
  &quot;orderInPage&quot;: &quot;A String&quot;, # String (US-ASCII only) used to determine order of this cluster within the parent page&#x27;s elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined. The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
  &quot;productId&quot;: [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
    &quot;A String&quot;,
  ],
}</pre>
</div>

</body></html>