<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)</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="#patch">patch(enterpriseId, webAppId, body)</a></code></p>
<p class="firstline">Updates an existing web app. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(enterpriseId, webAppId, body)</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's device, a web app opens its specified URL.
      "title": "A String", # 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).
      "icons": [ # 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.
          "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet").
              # - The image type can be png or jpg.
              # - The image should ideally be square.
              # - The image should ideally have a size of 512x512.
        },
      ],
      "displayMode": "A String", # The display mode of the web app.
          #
          # Possible values include:
          # - "minimalUi", the device's status bar, navigation bar, the app's URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option.
          # - "standalone", the device's status bar and navigation bar are visible when the app is open.
          # - "fullScreen", the app opens in full screen mode, hiding the device'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.
      "isPublished": True or False, # A flag whether the app has been published to the Play store yet.
      "webAppId": "A String", # The ID of the application. A string of the form "app:<package name>" where the package name always starts with the prefix "com.google.enterprise.webapp." followed by a random id.
      "versionCode": "A String", # 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.
      "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
    }</pre>
</div>

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

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  body: object, The request body. (required)
    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's device, a web app opens its specified URL.
    "title": "A String", # 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).
    "icons": [ # 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.
        "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet").
            # - The image type can be png or jpg.
            # - The image should ideally be square.
            # - The image should ideally have a size of 512x512.
      },
    ],
    "displayMode": "A String", # The display mode of the web app.
        # 
        # Possible values include:
        # - "minimalUi", the device's status bar, navigation bar, the app's URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option.
        # - "standalone", the device's status bar and navigation bar are visible when the app is open.
        # - "fullScreen", the app opens in full screen mode, hiding the device'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.
    "isPublished": True or False, # A flag whether the app has been published to the Play store yet.
    "webAppId": "A String", # The ID of the application. A string of the form "app:<package name>" where the package name always starts with the prefix "com.google.enterprise.webapp." followed by a random id.
    "versionCode": "A String", # 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.
    "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
  }


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's device, a web app opens its specified URL.
      "title": "A String", # 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).
      "icons": [ # 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.
          "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet").
              # - The image type can be png or jpg.
              # - The image should ideally be square.
              # - The image should ideally have a size of 512x512.
        },
      ],
      "displayMode": "A String", # The display mode of the web app.
          #
          # Possible values include:
          # - "minimalUi", the device's status bar, navigation bar, the app's URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option.
          # - "standalone", the device's status bar and navigation bar are visible when the app is open.
          # - "fullScreen", the app opens in full screen mode, hiding the device'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.
      "isPublished": True or False, # A flag whether the app has been published to the Play store yet.
      "webAppId": "A String", # The ID of the application. A string of the form "app:<package name>" where the package name always starts with the prefix "com.google.enterprise.webapp." followed by a random id.
      "versionCode": "A String", # 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.
      "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
    }</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.
    "webApp": [ # 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's device, a web app opens its specified URL.
          "title": "A String", # 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).
          "icons": [ # 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.
              "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet").
                  # - The image type can be png or jpg.
                  # - The image should ideally be square.
                  # - The image should ideally have a size of 512x512.
            },
          ],
          "displayMode": "A String", # The display mode of the web app.
              #
              # Possible values include:
              # - "minimalUi", the device's status bar, navigation bar, the app's URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option.
              # - "standalone", the device's status bar and navigation bar are visible when the app is open.
              # - "fullScreen", the app opens in full screen mode, hiding the device'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.
          "isPublished": True or False, # A flag whether the app has been published to the Play store yet.
          "webAppId": "A String", # The ID of the application. A string of the form "app:<package name>" where the package name always starts with the prefix "com.google.enterprise.webapp." followed by a random id.
          "versionCode": "A String", # 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.
          "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
        },
    ],
    "kind": "androidenterprise#webAppsListResponse", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#webAppsListResponse".
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(enterpriseId, webAppId, body)</code>
  <pre>Updates an existing web app. This method supports patch semantics.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  webAppId: string, The ID of the web app. (required)
  body: object, The request body. (required)
    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's device, a web app opens its specified URL.
    "title": "A String", # 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).
    "icons": [ # 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.
        "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet").
            # - The image type can be png or jpg.
            # - The image should ideally be square.
            # - The image should ideally have a size of 512x512.
      },
    ],
    "displayMode": "A String", # The display mode of the web app.
        # 
        # Possible values include:
        # - "minimalUi", the device's status bar, navigation bar, the app's URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option.
        # - "standalone", the device's status bar and navigation bar are visible when the app is open.
        # - "fullScreen", the app opens in full screen mode, hiding the device'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.
    "isPublished": True or False, # A flag whether the app has been published to the Play store yet.
    "webAppId": "A String", # The ID of the application. A string of the form "app:<package name>" where the package name always starts with the prefix "com.google.enterprise.webapp." followed by a random id.
    "versionCode": "A String", # 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.
    "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
  }


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's device, a web app opens its specified URL.
      "title": "A String", # 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).
      "icons": [ # 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.
          "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet").
              # - The image type can be png or jpg.
              # - The image should ideally be square.
              # - The image should ideally have a size of 512x512.
        },
      ],
      "displayMode": "A String", # The display mode of the web app.
          #
          # Possible values include:
          # - "minimalUi", the device's status bar, navigation bar, the app's URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option.
          # - "standalone", the device's status bar and navigation bar are visible when the app is open.
          # - "fullScreen", the app opens in full screen mode, hiding the device'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.
      "isPublished": True or False, # A flag whether the app has been published to the Play store yet.
      "webAppId": "A String", # The ID of the application. A string of the form "app:<package name>" where the package name always starts with the prefix "com.google.enterprise.webapp." followed by a random id.
      "versionCode": "A String", # 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.
      "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(enterpriseId, webAppId, body)</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. (required)
    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's device, a web app opens its specified URL.
    "title": "A String", # 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).
    "icons": [ # 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.
        "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet").
            # - The image type can be png or jpg.
            # - The image should ideally be square.
            # - The image should ideally have a size of 512x512.
      },
    ],
    "displayMode": "A String", # The display mode of the web app.
        # 
        # Possible values include:
        # - "minimalUi", the device's status bar, navigation bar, the app's URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option.
        # - "standalone", the device's status bar and navigation bar are visible when the app is open.
        # - "fullScreen", the app opens in full screen mode, hiding the device'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.
    "isPublished": True or False, # A flag whether the app has been published to the Play store yet.
    "webAppId": "A String", # The ID of the application. A string of the form "app:<package name>" where the package name always starts with the prefix "com.google.enterprise.webapp." followed by a random id.
    "versionCode": "A String", # 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.
    "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
  }


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's device, a web app opens its specified URL.
      "title": "A String", # 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).
      "icons": [ # 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.
          "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet").
              # - The image type can be png or jpg.
              # - The image should ideally be square.
              # - The image should ideally have a size of 512x512.
        },
      ],
      "displayMode": "A String", # The display mode of the web app.
          #
          # Possible values include:
          # - "minimalUi", the device's status bar, navigation bar, the app's URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option.
          # - "standalone", the device's status bar and navigation bar are visible when the app is open.
          # - "fullScreen", the app opens in full screen mode, hiding the device'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.
      "isPublished": True or False, # A flag whether the app has been published to the Play store yet.
      "webAppId": "A String", # The ID of the application. A string of the form "app:<package name>" where the package name always starts with the prefix "com.google.enterprise.webapp." followed by a random id.
      "versionCode": "A String", # 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.
      "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
    }</pre>
</div>

</body></html>