<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="#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="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;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;).
            # &lt;ul&gt;
            # &lt;li&gt;The image type can be png or jpg.
            # &lt;li&gt;The image should ideally be square.
            # &lt;li&gt;The image should ideally have a size of 512x512.
            # &lt;/ul&gt;
      },
    ],
    &quot;webAppId&quot;: &quot;A String&quot;, # The ID of the application.  A string of the form
        # &lt;code&gt;&amp;quot;app:&amp;lt;package name&amp;gt;&amp;quot;&lt;/code&gt; where the package name
        # always starts with the prefix
        # &lt;code&gt;&amp;quot;com.google.enterprise.webapp.&amp;quot;&lt;/code&gt; followed by a
        # random id.
    &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app. &lt;br&gt;&lt;br&gt;
        # Possible values include:
        # &lt;ul&gt;&lt;li&gt;&quot;&lt;code&gt;minimalUi&lt;/code&gt;&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.
        # &lt;li&gt;&quot;&lt;code&gt;standalone&lt;/code&gt;&quot;, the device&#x27;s status bar and navigation
        # bar are visible when the app is open.
        # &lt;li&gt;&quot;&lt;code&gt;fullScreen&lt;/code&gt;&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.
        # &lt;/ul&gt;
    &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app.
        #
        # &lt;p&gt;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;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;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the
        # application.
    &quot;isPublished&quot;: True or False, # A flag whether the app has been published to the Play store yet.
  }</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;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;).
          # &lt;ul&gt;
          # &lt;li&gt;The image type can be png or jpg.
          # &lt;li&gt;The image should ideally be square.
          # &lt;li&gt;The image should ideally have a size of 512x512.
          # &lt;/ul&gt;
    },
  ],
  &quot;webAppId&quot;: &quot;A String&quot;, # The ID of the application.  A string of the form
      # &lt;code&gt;&amp;quot;app:&amp;lt;package name&amp;gt;&amp;quot;&lt;/code&gt; where the package name
      # always starts with the prefix
      # &lt;code&gt;&amp;quot;com.google.enterprise.webapp.&amp;quot;&lt;/code&gt; followed by a
      # random id.
  &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app. &lt;br&gt;&lt;br&gt;
      # Possible values include:
      # &lt;ul&gt;&lt;li&gt;&quot;&lt;code&gt;minimalUi&lt;/code&gt;&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.
      # &lt;li&gt;&quot;&lt;code&gt;standalone&lt;/code&gt;&quot;, the device&#x27;s status bar and navigation
      # bar are visible when the app is open.
      # &lt;li&gt;&quot;&lt;code&gt;fullScreen&lt;/code&gt;&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.
      # &lt;/ul&gt;
  &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app.
      # 
      # &lt;p&gt;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;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;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the
      # application.
  &quot;isPublished&quot;: True or False, # A flag whether the app has been published to the Play store yet.
}

  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;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;).
            # &lt;ul&gt;
            # &lt;li&gt;The image type can be png or jpg.
            # &lt;li&gt;The image should ideally be square.
            # &lt;li&gt;The image should ideally have a size of 512x512.
            # &lt;/ul&gt;
      },
    ],
    &quot;webAppId&quot;: &quot;A String&quot;, # The ID of the application.  A string of the form
        # &lt;code&gt;&amp;quot;app:&amp;lt;package name&amp;gt;&amp;quot;&lt;/code&gt; where the package name
        # always starts with the prefix
        # &lt;code&gt;&amp;quot;com.google.enterprise.webapp.&amp;quot;&lt;/code&gt; followed by a
        # random id.
    &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app. &lt;br&gt;&lt;br&gt;
        # Possible values include:
        # &lt;ul&gt;&lt;li&gt;&quot;&lt;code&gt;minimalUi&lt;/code&gt;&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.
        # &lt;li&gt;&quot;&lt;code&gt;standalone&lt;/code&gt;&quot;, the device&#x27;s status bar and navigation
        # bar are visible when the app is open.
        # &lt;li&gt;&quot;&lt;code&gt;fullScreen&lt;/code&gt;&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.
        # &lt;/ul&gt;
    &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app.
        #
        # &lt;p&gt;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;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;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the
        # application.
    &quot;isPublished&quot;: True or False, # A flag whether the app has been published to the Play store yet.
  }</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;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;).
                # &lt;ul&gt;
                # &lt;li&gt;The image type can be png or jpg.
                # &lt;li&gt;The image should ideally be square.
                # &lt;li&gt;The image should ideally have a size of 512x512.
                # &lt;/ul&gt;
          },
        ],
        &quot;webAppId&quot;: &quot;A String&quot;, # The ID of the application.  A string of the form
            # &lt;code&gt;&amp;quot;app:&amp;lt;package name&amp;gt;&amp;quot;&lt;/code&gt; where the package name
            # always starts with the prefix
            # &lt;code&gt;&amp;quot;com.google.enterprise.webapp.&amp;quot;&lt;/code&gt; followed by a
            # random id.
        &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app. &lt;br&gt;&lt;br&gt;
            # Possible values include:
            # &lt;ul&gt;&lt;li&gt;&quot;&lt;code&gt;minimalUi&lt;/code&gt;&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.
            # &lt;li&gt;&quot;&lt;code&gt;standalone&lt;/code&gt;&quot;, the device&#x27;s status bar and navigation
            # bar are visible when the app is open.
            # &lt;li&gt;&quot;&lt;code&gt;fullScreen&lt;/code&gt;&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.
            # &lt;/ul&gt;
        &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app.
            #
            # &lt;p&gt;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;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;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the
            # application.
        &quot;isPublished&quot;: True or False, # A flag whether the app has been published to the Play store yet.
      },
    ],
  }</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;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;).
          # &lt;ul&gt;
          # &lt;li&gt;The image type can be png or jpg.
          # &lt;li&gt;The image should ideally be square.
          # &lt;li&gt;The image should ideally have a size of 512x512.
          # &lt;/ul&gt;
    },
  ],
  &quot;webAppId&quot;: &quot;A String&quot;, # The ID of the application.  A string of the form
      # &lt;code&gt;&amp;quot;app:&amp;lt;package name&amp;gt;&amp;quot;&lt;/code&gt; where the package name
      # always starts with the prefix
      # &lt;code&gt;&amp;quot;com.google.enterprise.webapp.&amp;quot;&lt;/code&gt; followed by a
      # random id.
  &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app. &lt;br&gt;&lt;br&gt;
      # Possible values include:
      # &lt;ul&gt;&lt;li&gt;&quot;&lt;code&gt;minimalUi&lt;/code&gt;&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.
      # &lt;li&gt;&quot;&lt;code&gt;standalone&lt;/code&gt;&quot;, the device&#x27;s status bar and navigation
      # bar are visible when the app is open.
      # &lt;li&gt;&quot;&lt;code&gt;fullScreen&lt;/code&gt;&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.
      # &lt;/ul&gt;
  &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app.
      # 
      # &lt;p&gt;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;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;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the
      # application.
  &quot;isPublished&quot;: True or False, # A flag whether the app has been published to the Play store yet.
}

  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;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;).
            # &lt;ul&gt;
            # &lt;li&gt;The image type can be png or jpg.
            # &lt;li&gt;The image should ideally be square.
            # &lt;li&gt;The image should ideally have a size of 512x512.
            # &lt;/ul&gt;
      },
    ],
    &quot;webAppId&quot;: &quot;A String&quot;, # The ID of the application.  A string of the form
        # &lt;code&gt;&amp;quot;app:&amp;lt;package name&amp;gt;&amp;quot;&lt;/code&gt; where the package name
        # always starts with the prefix
        # &lt;code&gt;&amp;quot;com.google.enterprise.webapp.&amp;quot;&lt;/code&gt; followed by a
        # random id.
    &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app. &lt;br&gt;&lt;br&gt;
        # Possible values include:
        # &lt;ul&gt;&lt;li&gt;&quot;&lt;code&gt;minimalUi&lt;/code&gt;&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.
        # &lt;li&gt;&quot;&lt;code&gt;standalone&lt;/code&gt;&quot;, the device&#x27;s status bar and navigation
        # bar are visible when the app is open.
        # &lt;li&gt;&quot;&lt;code&gt;fullScreen&lt;/code&gt;&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.
        # &lt;/ul&gt;
    &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app.
        #
        # &lt;p&gt;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;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;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the
        # application.
    &quot;isPublished&quot;: True or False, # A flag whether the app has been published to the Play store yet.
  }</pre>
</div>

</body></html>