<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="#delete">delete(enterpriseId, pageId, clusterId)</a></code></p>
<p class="firstline">Deletes a cluster.</p>
<p class="toc_element">
  <code><a href="#get">get(enterpriseId, pageId, clusterId)</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)</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)</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)</a></code></p>
<p class="firstline">Updates a cluster.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(enterpriseId, pageId, clusterId)</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)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(enterpriseId, pageId, clusterId)</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)

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;kind&quot;: &quot;androidenterprise#storeCluster&quot;,
    &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)</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;kind&quot;: &quot;androidenterprise#storeCluster&quot;,
  &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;,
  ],
}


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;kind&quot;: &quot;androidenterprise#storeCluster&quot;,
    &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)</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)

Returns:
  An object of the form:

    { # The store page resources for the enterprise.
    &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;kind&quot;: &quot;androidenterprise#storeCluster&quot;,
        &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;,
        ],
      },
    ],
    &quot;kind&quot;: &quot;androidenterprise#storeLayoutClustersListResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;androidenterprise#storeLayoutClustersListResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(enterpriseId, pageId, clusterId, body=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;kind&quot;: &quot;androidenterprise#storeCluster&quot;,
  &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;,
  ],
}


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;kind&quot;: &quot;androidenterprise#storeCluster&quot;,
    &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>