<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.storelayoutpages.html">storelayoutpages</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, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a store page.</p>
<p class="toc_element">
  <code><a href="#get">get(enterpriseId, pageId, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves details of a store page.</p>
<p class="toc_element">
  <code><a href="#insert">insert(enterpriseId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Inserts a new store page.</p>
<p class="toc_element">
  <code><a href="#list">list(enterpriseId, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the details of all pages in the store.</p>
<p class="toc_element">
  <code><a href="#update">update(enterpriseId, pageId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the content of a store page.</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, x__xgafv=None)</code>
  <pre>Deletes a store 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
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(enterpriseId, pageId, x__xgafv=None)</code>
  <pre>Retrieves details of a store 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:

    { # Definition of a managed Google Play store page, made of a localized name and links to other pages. A page also contains clusters defined as a subcollection.
  &quot;id&quot;: &quot;A String&quot;, # Unique ID of this page. Assigned by the server. Immutable once assigned.
  &quot;link&quot;: [ # Ordered list of pages a user should be able to reach from this page. The list can&#x27;t include this page. It is recommended that the basic pages are created first, before adding the links between pages. The API doesn&#x27;t verify that the pages exist or the pages are reachable.
    &quot;A String&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.
    },
  ],
}</pre>
</div>

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

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

{ # Definition of a managed Google Play store page, made of a localized name and links to other pages. A page also contains clusters defined as a subcollection.
  &quot;id&quot;: &quot;A String&quot;, # Unique ID of this page. Assigned by the server. Immutable once assigned.
  &quot;link&quot;: [ # Ordered list of pages a user should be able to reach from this page. The list can&#x27;t include this page. It is recommended that the basic pages are created first, before adding the links between pages. The API doesn&#x27;t verify that the pages exist or the pages are reachable.
    &quot;A String&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.
    },
  ],
}

  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 page, made of a localized name and links to other pages. A page also contains clusters defined as a subcollection.
  &quot;id&quot;: &quot;A String&quot;, # Unique ID of this page. Assigned by the server. Immutable once assigned.
  &quot;link&quot;: [ # Ordered list of pages a user should be able to reach from this page. The list can&#x27;t include this page. It is recommended that the basic pages are created first, before adding the links between pages. The API doesn&#x27;t verify that the pages exist or the pages are reachable.
    &quot;A String&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.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(enterpriseId, x__xgafv=None)</code>
  <pre>Retrieves the details of all pages in the store.

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

Returns:
  An object of the form:

    {
  &quot;page&quot;: [ # A store page of an enterprise.
    { # Definition of a managed Google Play store page, made of a localized name and links to other pages. A page also contains clusters defined as a subcollection.
      &quot;id&quot;: &quot;A String&quot;, # Unique ID of this page. Assigned by the server. Immutable once assigned.
      &quot;link&quot;: [ # Ordered list of pages a user should be able to reach from this page. The list can&#x27;t include this page. It is recommended that the basic pages are created first, before adding the links between pages. The API doesn&#x27;t verify that the pages exist or the pages are reachable.
        &quot;A String&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.
        },
      ],
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(enterpriseId, pageId, body=None, x__xgafv=None)</code>
  <pre>Updates the content of a store 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 page, made of a localized name and links to other pages. A page also contains clusters defined as a subcollection.
  &quot;id&quot;: &quot;A String&quot;, # Unique ID of this page. Assigned by the server. Immutable once assigned.
  &quot;link&quot;: [ # Ordered list of pages a user should be able to reach from this page. The list can&#x27;t include this page. It is recommended that the basic pages are created first, before adding the links between pages. The API doesn&#x27;t verify that the pages exist or the pages are reachable.
    &quot;A String&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.
    },
  ],
}

  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 page, made of a localized name and links to other pages. A page also contains clusters defined as a subcollection.
  &quot;id&quot;: &quot;A String&quot;, # Unique ID of this page. Assigned by the server. Immutable once assigned.
  &quot;link&quot;: [ # Ordered list of pages a user should be able to reach from this page. The list can&#x27;t include this page. It is recommended that the basic pages are created first, before adding the links between pages. The API doesn&#x27;t verify that the pages exist or the pages are reachable.
    &quot;A String&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.
    },
  ],
}</pre>
</div>

</body></html>