<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.webapps.html">webapps</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, webAppId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an existing web app.</p>
<p class="toc_element">
  <code><a href="#get">get(enterpriseId, webAppId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets an existing web app.</p>
<p class="toc_element">
  <code><a href="#insert">insert(enterpriseId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new web app for the enterprise.</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 web apps for a given enterprise.</p>
<p class="toc_element">
  <code><a href="#update">update(enterpriseId, webAppId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing web app.</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, webAppId, x__xgafv=None)</code>
  <pre>Deletes an existing web app.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  webAppId: string, The ID of the web app. (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, webAppId, x__xgafv=None)</code>
  <pre>Gets an existing web app.

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

Returns:
  An object of the form:

    { # A WebApps resource represents a web app created for an enterprise. Web apps are published to managed Google Play and can be distributed like other Android apps. On a user&#x27;s device, a web app opens its specified URL.
  &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app. Possible values include: - &quot;minimalUi&quot;, the device&#x27;s status bar, navigation bar, the app&#x27;s URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option. - &quot;standalone&quot;, the device&#x27;s status bar and navigation bar are visible when the app is open. - &quot;fullScreen&quot;, the app opens in full screen mode, hiding the device&#x27;s status and navigation bars. All browser UI elements, page URL, system status bar and back button are not visible, and the web app takes up the entirety of the available display area.
  &quot;icons&quot;: [ # A list of icons representing this website. If absent, a default icon (for create) or the current icon (for update) will be used.
    { # Icon for a web app.
      &quot;imageData&quot;: &quot;A String&quot;, # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 &quot;Base 64 Encoding with URL and Filename Safe Alphabet&quot;). - The image type can be png or jpg. - The image should ideally be square. - The image should ideally have a size of 512x512.
    },
  ],
  &quot;isPublished&quot;: True or False, # A flag whether the app has been published to the Play store yet.
  &quot;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the application.
  &quot;title&quot;: &quot;A String&quot;, # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
  &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app. Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
  &quot;webAppId&quot;: &quot;A String&quot;, # The ID of the application. A string of the form &quot;app:&lt;package name&gt;&quot; where the package name always starts with the prefix &quot;com.google.enterprise.webapp.&quot; followed by a random id.
}</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(enterpriseId, body=None, x__xgafv=None)</code>
  <pre>Creates a new web app for the enterprise.

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

{ # A WebApps resource represents a web app created for an enterprise. Web apps are published to managed Google Play and can be distributed like other Android apps. On a user&#x27;s device, a web app opens its specified URL.
  &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app. Possible values include: - &quot;minimalUi&quot;, the device&#x27;s status bar, navigation bar, the app&#x27;s URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option. - &quot;standalone&quot;, the device&#x27;s status bar and navigation bar are visible when the app is open. - &quot;fullScreen&quot;, the app opens in full screen mode, hiding the device&#x27;s status and navigation bars. All browser UI elements, page URL, system status bar and back button are not visible, and the web app takes up the entirety of the available display area.
  &quot;icons&quot;: [ # A list of icons representing this website. If absent, a default icon (for create) or the current icon (for update) will be used.
    { # Icon for a web app.
      &quot;imageData&quot;: &quot;A String&quot;, # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 &quot;Base 64 Encoding with URL and Filename Safe Alphabet&quot;). - The image type can be png or jpg. - The image should ideally be square. - The image should ideally have a size of 512x512.
    },
  ],
  &quot;isPublished&quot;: True or False, # A flag whether the app has been published to the Play store yet.
  &quot;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the application.
  &quot;title&quot;: &quot;A String&quot;, # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
  &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app. Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
  &quot;webAppId&quot;: &quot;A String&quot;, # The ID of the application. A string of the form &quot;app:&lt;package name&gt;&quot; where the package name always starts with the prefix &quot;com.google.enterprise.webapp.&quot; followed by a random id.
}

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

Returns:
  An object of the form:

    { # A WebApps resource represents a web app created for an enterprise. Web apps are published to managed Google Play and can be distributed like other Android apps. On a user&#x27;s device, a web app opens its specified URL.
  &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app. Possible values include: - &quot;minimalUi&quot;, the device&#x27;s status bar, navigation bar, the app&#x27;s URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option. - &quot;standalone&quot;, the device&#x27;s status bar and navigation bar are visible when the app is open. - &quot;fullScreen&quot;, the app opens in full screen mode, hiding the device&#x27;s status and navigation bars. All browser UI elements, page URL, system status bar and back button are not visible, and the web app takes up the entirety of the available display area.
  &quot;icons&quot;: [ # A list of icons representing this website. If absent, a default icon (for create) or the current icon (for update) will be used.
    { # Icon for a web app.
      &quot;imageData&quot;: &quot;A String&quot;, # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 &quot;Base 64 Encoding with URL and Filename Safe Alphabet&quot;). - The image type can be png or jpg. - The image should ideally be square. - The image should ideally have a size of 512x512.
    },
  ],
  &quot;isPublished&quot;: True or False, # A flag whether the app has been published to the Play store yet.
  &quot;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the application.
  &quot;title&quot;: &quot;A String&quot;, # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
  &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app. Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
  &quot;webAppId&quot;: &quot;A String&quot;, # The ID of the application. A string of the form &quot;app:&lt;package name&gt;&quot; where the package name always starts with the prefix &quot;com.google.enterprise.webapp.&quot; followed by a random id.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(enterpriseId, x__xgafv=None)</code>
  <pre>Retrieves the details of all web apps for a given enterprise.

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;webApp&quot;: [ # The manifest describing a web app.
    { # A WebApps resource represents a web app created for an enterprise. Web apps are published to managed Google Play and can be distributed like other Android apps. On a user&#x27;s device, a web app opens its specified URL.
      &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app. Possible values include: - &quot;minimalUi&quot;, the device&#x27;s status bar, navigation bar, the app&#x27;s URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option. - &quot;standalone&quot;, the device&#x27;s status bar and navigation bar are visible when the app is open. - &quot;fullScreen&quot;, the app opens in full screen mode, hiding the device&#x27;s status and navigation bars. All browser UI elements, page URL, system status bar and back button are not visible, and the web app takes up the entirety of the available display area.
      &quot;icons&quot;: [ # A list of icons representing this website. If absent, a default icon (for create) or the current icon (for update) will be used.
        { # Icon for a web app.
          &quot;imageData&quot;: &quot;A String&quot;, # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 &quot;Base 64 Encoding with URL and Filename Safe Alphabet&quot;). - The image type can be png or jpg. - The image should ideally be square. - The image should ideally have a size of 512x512.
        },
      ],
      &quot;isPublished&quot;: True or False, # A flag whether the app has been published to the Play store yet.
      &quot;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the application.
      &quot;title&quot;: &quot;A String&quot;, # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
      &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app. Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
      &quot;webAppId&quot;: &quot;A String&quot;, # The ID of the application. A string of the form &quot;app:&lt;package name&gt;&quot; where the package name always starts with the prefix &quot;com.google.enterprise.webapp.&quot; followed by a random id.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(enterpriseId, webAppId, body=None, x__xgafv=None)</code>
  <pre>Updates an existing web app.

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

{ # A WebApps resource represents a web app created for an enterprise. Web apps are published to managed Google Play and can be distributed like other Android apps. On a user&#x27;s device, a web app opens its specified URL.
  &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app. Possible values include: - &quot;minimalUi&quot;, the device&#x27;s status bar, navigation bar, the app&#x27;s URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option. - &quot;standalone&quot;, the device&#x27;s status bar and navigation bar are visible when the app is open. - &quot;fullScreen&quot;, the app opens in full screen mode, hiding the device&#x27;s status and navigation bars. All browser UI elements, page URL, system status bar and back button are not visible, and the web app takes up the entirety of the available display area.
  &quot;icons&quot;: [ # A list of icons representing this website. If absent, a default icon (for create) or the current icon (for update) will be used.
    { # Icon for a web app.
      &quot;imageData&quot;: &quot;A String&quot;, # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 &quot;Base 64 Encoding with URL and Filename Safe Alphabet&quot;). - The image type can be png or jpg. - The image should ideally be square. - The image should ideally have a size of 512x512.
    },
  ],
  &quot;isPublished&quot;: True or False, # A flag whether the app has been published to the Play store yet.
  &quot;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the application.
  &quot;title&quot;: &quot;A String&quot;, # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
  &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app. Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
  &quot;webAppId&quot;: &quot;A String&quot;, # The ID of the application. A string of the form &quot;app:&lt;package name&gt;&quot; where the package name always starts with the prefix &quot;com.google.enterprise.webapp.&quot; followed by a random id.
}

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

Returns:
  An object of the form:

    { # A WebApps resource represents a web app created for an enterprise. Web apps are published to managed Google Play and can be distributed like other Android apps. On a user&#x27;s device, a web app opens its specified URL.
  &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app. Possible values include: - &quot;minimalUi&quot;, the device&#x27;s status bar, navigation bar, the app&#x27;s URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option. - &quot;standalone&quot;, the device&#x27;s status bar and navigation bar are visible when the app is open. - &quot;fullScreen&quot;, the app opens in full screen mode, hiding the device&#x27;s status and navigation bars. All browser UI elements, page URL, system status bar and back button are not visible, and the web app takes up the entirety of the available display area.
  &quot;icons&quot;: [ # A list of icons representing this website. If absent, a default icon (for create) or the current icon (for update) will be used.
    { # Icon for a web app.
      &quot;imageData&quot;: &quot;A String&quot;, # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 &quot;Base 64 Encoding with URL and Filename Safe Alphabet&quot;). - The image type can be png or jpg. - The image should ideally be square. - The image should ideally have a size of 512x512.
    },
  ],
  &quot;isPublished&quot;: True or False, # A flag whether the app has been published to the Play store yet.
  &quot;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the application.
  &quot;title&quot;: &quot;A String&quot;, # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
  &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app. Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
  &quot;webAppId&quot;: &quot;A String&quot;, # The ID of the application. A string of the form &quot;app:&lt;package name&gt;&quot; where the package name always starts with the prefix &quot;com.google.enterprise.webapp.&quot; followed by a random id.
}</pre>
</div>

</body></html>