<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.installs.html">installs</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(enterpriseId, userId, deviceId, installId)</a></code></p>
<p class="firstline">Requests to remove an app from a device. A call to get or list will still show the app as installed on the device until it is actually removed.</p>
<p class="toc_element">
  <code><a href="#get">get(enterpriseId, userId, deviceId, installId)</a></code></p>
<p class="firstline">Retrieves details of an installation of an app on a device.</p>
<p class="toc_element">
  <code><a href="#list">list(enterpriseId, userId, deviceId)</a></code></p>
<p class="firstline">Retrieves the details of all apps installed on the specified device.</p>
<p class="toc_element">
  <code><a href="#patch">patch(enterpriseId, userId, deviceId, installId, body)</a></code></p>
<p class="firstline">Requests to install the latest version of an app to a device. If the app is already installed then it is updated to the latest version if necessary. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(enterpriseId, userId, deviceId, installId, body)</a></code></p>
<p class="firstline">Requests to install the latest version of an app to a device. If the app is already installed then it is updated to the latest version if necessary.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(enterpriseId, userId, deviceId, installId)</code>
  <pre>Requests to remove an app from a device. A call to get or list will still show the app as installed on the device until it is actually removed.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  deviceId: string, The Android ID of the device. (required)
  installId: string, The ID of the product represented by the install, e.g. "app:com.google.android.gm". (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(enterpriseId, userId, deviceId, installId)</code>
  <pre>Retrieves details of an installation of an app on a device.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  deviceId: string, The Android ID of the device. (required)
  installId: string, The ID of the product represented by the install, e.g. "app:com.google.android.gm". (required)

Returns:
  An object of the form:

    { # The existence of an install resource indicates that an app is installed on a particular device (or that an install is pending).
        #
        # The API can be used to create an install resource using the update method. This triggers the actual install of the app on the device. If the user does not already have an entitlement for the app then an attempt is made to create one. If this fails (e.g. because the app is not free and there is no available license) then the creation of the install fails.
        #
        # The API can also be used to update an installed app. If the update method is used on an existing install then the app will be updated to the latest available version.
        #
        # Note that it is not possible to force the installation of a specific version of an app; the version code is read-only.
        #
        # If a user installs an app themselves (as permitted by the enterprise), then again an install resource and possibly an entitlement resource are automatically created.
        #
        # The API can also be used to delete an install resource, which triggers the removal of the app from the device. Note that deleting an install does not automatically remove the corresponding entitlement, even if there are no remaining installs. The install resource will also be deleted if the user uninstalls the app themselves.
      "installState": "A String", # Install state. The state "installPending" means that an install request has recently been made and download to the device is in progress. The state "installed" means that the app has been installed. This field is read-only.
      "versionCode": 42, # The version of the installed product. Guaranteed to be set only if the install state is "installed".
      "kind": "androidenterprise#install", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#install".
      "productId": "A String", # The ID of the product that the install is for, e.g. "app:com.google.android.gm".
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(enterpriseId, userId, deviceId)</code>
  <pre>Retrieves the details of all apps installed on the specified device.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  deviceId: string, The Android ID of the device. (required)

Returns:
  An object of the form:

    { # The install resources for the device.
    "kind": "androidenterprise#installsListResponse", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#installsListResponse".
    "install": [ # An installation of an app for a user on a specific device. The existence of an install implies that the user must have an entitlement to the app.
      { # The existence of an install resource indicates that an app is installed on a particular device (or that an install is pending).
            #
            # The API can be used to create an install resource using the update method. This triggers the actual install of the app on the device. If the user does not already have an entitlement for the app then an attempt is made to create one. If this fails (e.g. because the app is not free and there is no available license) then the creation of the install fails.
            #
            # The API can also be used to update an installed app. If the update method is used on an existing install then the app will be updated to the latest available version.
            #
            # Note that it is not possible to force the installation of a specific version of an app; the version code is read-only.
            #
            # If a user installs an app themselves (as permitted by the enterprise), then again an install resource and possibly an entitlement resource are automatically created.
            #
            # The API can also be used to delete an install resource, which triggers the removal of the app from the device. Note that deleting an install does not automatically remove the corresponding entitlement, even if there are no remaining installs. The install resource will also be deleted if the user uninstalls the app themselves.
          "installState": "A String", # Install state. The state "installPending" means that an install request has recently been made and download to the device is in progress. The state "installed" means that the app has been installed. This field is read-only.
          "versionCode": 42, # The version of the installed product. Guaranteed to be set only if the install state is "installed".
          "kind": "androidenterprise#install", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#install".
          "productId": "A String", # The ID of the product that the install is for, e.g. "app:com.google.android.gm".
        },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(enterpriseId, userId, deviceId, installId, body)</code>
  <pre>Requests to install the latest version of an app to a device. If the app is already installed then it is updated to the latest version if necessary. This method supports patch semantics.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  deviceId: string, The Android ID of the device. (required)
  installId: string, The ID of the product represented by the install, e.g. "app:com.google.android.gm". (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The existence of an install resource indicates that an app is installed on a particular device (or that an install is pending).
      # 
      # The API can be used to create an install resource using the update method. This triggers the actual install of the app on the device. If the user does not already have an entitlement for the app then an attempt is made to create one. If this fails (e.g. because the app is not free and there is no available license) then the creation of the install fails.
      # 
      # The API can also be used to update an installed app. If the update method is used on an existing install then the app will be updated to the latest available version.
      # 
      # Note that it is not possible to force the installation of a specific version of an app; the version code is read-only.
      # 
      # If a user installs an app themselves (as permitted by the enterprise), then again an install resource and possibly an entitlement resource are automatically created.
      # 
      # The API can also be used to delete an install resource, which triggers the removal of the app from the device. Note that deleting an install does not automatically remove the corresponding entitlement, even if there are no remaining installs. The install resource will also be deleted if the user uninstalls the app themselves.
    "installState": "A String", # Install state. The state "installPending" means that an install request has recently been made and download to the device is in progress. The state "installed" means that the app has been installed. This field is read-only.
    "versionCode": 42, # The version of the installed product. Guaranteed to be set only if the install state is "installed".
    "kind": "androidenterprise#install", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#install".
    "productId": "A String", # The ID of the product that the install is for, e.g. "app:com.google.android.gm".
  }


Returns:
  An object of the form:

    { # The existence of an install resource indicates that an app is installed on a particular device (or that an install is pending).
        #
        # The API can be used to create an install resource using the update method. This triggers the actual install of the app on the device. If the user does not already have an entitlement for the app then an attempt is made to create one. If this fails (e.g. because the app is not free and there is no available license) then the creation of the install fails.
        #
        # The API can also be used to update an installed app. If the update method is used on an existing install then the app will be updated to the latest available version.
        #
        # Note that it is not possible to force the installation of a specific version of an app; the version code is read-only.
        #
        # If a user installs an app themselves (as permitted by the enterprise), then again an install resource and possibly an entitlement resource are automatically created.
        #
        # The API can also be used to delete an install resource, which triggers the removal of the app from the device. Note that deleting an install does not automatically remove the corresponding entitlement, even if there are no remaining installs. The install resource will also be deleted if the user uninstalls the app themselves.
      "installState": "A String", # Install state. The state "installPending" means that an install request has recently been made and download to the device is in progress. The state "installed" means that the app has been installed. This field is read-only.
      "versionCode": 42, # The version of the installed product. Guaranteed to be set only if the install state is "installed".
      "kind": "androidenterprise#install", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#install".
      "productId": "A String", # The ID of the product that the install is for, e.g. "app:com.google.android.gm".
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(enterpriseId, userId, deviceId, installId, body)</code>
  <pre>Requests to install the latest version of an app to a device. If the app is already installed then it is updated to the latest version if necessary.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  deviceId: string, The Android ID of the device. (required)
  installId: string, The ID of the product represented by the install, e.g. "app:com.google.android.gm". (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The existence of an install resource indicates that an app is installed on a particular device (or that an install is pending).
      # 
      # The API can be used to create an install resource using the update method. This triggers the actual install of the app on the device. If the user does not already have an entitlement for the app then an attempt is made to create one. If this fails (e.g. because the app is not free and there is no available license) then the creation of the install fails.
      # 
      # The API can also be used to update an installed app. If the update method is used on an existing install then the app will be updated to the latest available version.
      # 
      # Note that it is not possible to force the installation of a specific version of an app; the version code is read-only.
      # 
      # If a user installs an app themselves (as permitted by the enterprise), then again an install resource and possibly an entitlement resource are automatically created.
      # 
      # The API can also be used to delete an install resource, which triggers the removal of the app from the device. Note that deleting an install does not automatically remove the corresponding entitlement, even if there are no remaining installs. The install resource will also be deleted if the user uninstalls the app themselves.
    "installState": "A String", # Install state. The state "installPending" means that an install request has recently been made and download to the device is in progress. The state "installed" means that the app has been installed. This field is read-only.
    "versionCode": 42, # The version of the installed product. Guaranteed to be set only if the install state is "installed".
    "kind": "androidenterprise#install", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#install".
    "productId": "A String", # The ID of the product that the install is for, e.g. "app:com.google.android.gm".
  }


Returns:
  An object of the form:

    { # The existence of an install resource indicates that an app is installed on a particular device (or that an install is pending).
        #
        # The API can be used to create an install resource using the update method. This triggers the actual install of the app on the device. If the user does not already have an entitlement for the app then an attempt is made to create one. If this fails (e.g. because the app is not free and there is no available license) then the creation of the install fails.
        #
        # The API can also be used to update an installed app. If the update method is used on an existing install then the app will be updated to the latest available version.
        #
        # Note that it is not possible to force the installation of a specific version of an app; the version code is read-only.
        #
        # If a user installs an app themselves (as permitted by the enterprise), then again an install resource and possibly an entitlement resource are automatically created.
        #
        # The API can also be used to delete an install resource, which triggers the removal of the app from the device. Note that deleting an install does not automatically remove the corresponding entitlement, even if there are no remaining installs. The install resource will also be deleted if the user uninstalls the app themselves.
      "installState": "A String", # Install state. The state "installPending" means that an install request has recently been made and download to the device is in progress. The state "installed" means that the app has been installed. This field is read-only.
      "versionCode": 42, # The version of the installed product. Guaranteed to be set only if the install state is "installed".
      "kind": "androidenterprise#install", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#install".
      "productId": "A String", # The ID of the product that the install is for, e.g. "app:com.google.android.gm".
    }</pre>
</div>

</body></html>