<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)</a></code></p>
<p class="firstline">Deletes an existing web app.</p>
<p class="toc_element">
  <code><a href="#get">get(enterpriseId, webAppId)</a></code></p>
<p class="firstline">Gets an existing web app.</p>
<p class="toc_element">
  <code><a href="#insert">insert(enterpriseId, body=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)</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)</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)</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)
</pre>
</div>

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

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)</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.
}


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)</code>
  <pre>Retrieves the details of all web apps for a given enterprise.

Args:
  enterpriseId: string, The ID of the enterprise. (required)

Returns:
  An object of the form:

    { # The web app details for an enterprise.
    &quot;kind&quot;: &quot;androidenterprise#webAppsListResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;androidenterprise#webAppsListResponse&quot;.
    &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)</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.
}


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>