<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="chromemanagement_v1.html">Chrome Management API</a> . <a href="chromemanagement_v1.customers.html">customers</a> . <a href="chromemanagement_v1.customers.reports.html">reports</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="#countChromeVersions">countChromeVersions(customer, filter=None, orgUnitId=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Generate report of installed Chrome versions.</p>
<p class="toc_element">
  <code><a href="#countChromeVersions_next">countChromeVersions_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#countInstalledApps">countInstalledApps(customer, filter=None, orderBy=None, orgUnitId=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Generate report of app installations.</p>
<p class="toc_element">
  <code><a href="#countInstalledApps_next">countInstalledApps_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#findInstalledAppDevices">findInstalledAppDevices(customer, appId=None, appType=None, filter=None, orderBy=None, orgUnitId=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Generate report of devices that have a specified app installed.</p>
<p class="toc_element">
  <code><a href="#findInstalledAppDevices_next">findInstalledAppDevices_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</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="countChromeVersions">countChromeVersions(customer, filter=None, orgUnitId=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Generate report of installed Chrome versions.

Args:
  customer: string, Required. Customer id or &quot;my_customer&quot; to use the customer associated to the account making the request. (required)
  filter: string, Query string to filter results, AND-separated fields in EBNF syntax. Note: OR operations are not supported in this filter. Supported filter fields: * last_active_date
  orgUnitId: string, The ID of the organizational unit.
  pageSize: integer, Maximum number of results to return. Maximum and default are 100.
  pageToken: string, Token to specify the page of the request to be returned.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response containing requested browser versions details and counts.
  &quot;browserVersions&quot;: [ # List of all browser versions and their install counts.
    { # Describes a browser version and its install count.
      &quot;channel&quot;: &quot;A String&quot;, # Output only. The release channel of the installed browser.
      &quot;count&quot;: &quot;A String&quot;, # Output only. Count grouped by device_system and major version
      &quot;deviceOsVersion&quot;: &quot;A String&quot;, # Output only. Version of the system-specified operating system.
      &quot;system&quot;: &quot;A String&quot;, # Output only. The device operating system.
      &quot;version&quot;: &quot;A String&quot;, # Output only. The full version of the installed browser.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to specify the next page of the request.
  &quot;totalSize&quot;: 42, # Total number browser versions matching request.
}</pre>
</div>

<div class="method">
    <code class="details" id="countChromeVersions_next">countChromeVersions_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="countInstalledApps">countInstalledApps(customer, filter=None, orderBy=None, orgUnitId=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Generate report of app installations.

Args:
  customer: string, Required. Customer id or &quot;my_customer&quot; to use the customer associated to the account making the request. (required)
  filter: string, Query string to filter results, AND-separated fields in EBNF syntax. Note: OR operations are not supported in this filter. Supported filter fields: * app_name * app_type * install_type * number_of_permissions * total_install_count * latest_profile_active_date * permission_name
  orderBy: string, Field used to order results. Supported order by fields: * app_name * app_type * install_type * number_of_permissions * total_install_count
  orgUnitId: string, The ID of the organizational unit.
  pageSize: integer, Maximum number of results to return. Maximum and default are 100.
  pageToken: string, Token to specify the page of the request to be returned.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response containing details of queried installed apps.
  &quot;installedApps&quot;: [ # List of installed apps matching request.
    { # Describes an installed app.
      &quot;appId&quot;: &quot;A String&quot;, # Output only. Unique identifier of the app. For Chrome apps and extensions, the 32-character id (e.g. ehoadneljpdggcbbknedodolkkjodefl). For Android apps, the package name (e.g. com.evernote).
      &quot;appInstallType&quot;: &quot;A String&quot;, # Output only. How the app was installed.
      &quot;appSource&quot;: &quot;A String&quot;, # Output only. Source of the installed app.
      &quot;appType&quot;: &quot;A String&quot;, # Output only. Type of the app.
      &quot;browserDeviceCount&quot;: &quot;A String&quot;, # Output only. Count of browser devices with this app installed.
      &quot;description&quot;: &quot;A String&quot;, # Output only. Description of the installed app.
      &quot;disabled&quot;: True or False, # Output only. Whether the app is disabled.
      &quot;displayName&quot;: &quot;A String&quot;, # Output only. Name of the installed app.
      &quot;homepageUri&quot;: &quot;A String&quot;, # Output only. Homepage uri of the installed app.
      &quot;osUserCount&quot;: &quot;A String&quot;, # Output only. Count of ChromeOS users with this app installed.
      &quot;permissions&quot;: [ # Output only. Permissions of the installed app.
        &quot;A String&quot;,
      ],
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to specify the next page of the request.
  &quot;totalSize&quot;: 42, # Total number of installed apps matching request.
}</pre>
</div>

<div class="method">
    <code class="details" id="countInstalledApps_next">countInstalledApps_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="findInstalledAppDevices">findInstalledAppDevices(customer, appId=None, appType=None, filter=None, orderBy=None, orgUnitId=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Generate report of devices that have a specified app installed.

Args:
  customer: string, Required. Customer id or &quot;my_customer&quot; to use the customer associated to the account making the request. (required)
  appId: string, Unique identifier of the app. For Chrome apps and extensions, the 32-character id (e.g. ehoadneljpdggcbbknedodolkkjodefl). For Android apps, the package name (e.g. com.evernote).
  appType: string, Type of the app.
    Allowed values
      APP_TYPE_UNSPECIFIED - App type not specified.
      EXTENSION - Chrome extension.
      APP - Chrome app.
      THEME - Chrome theme.
      HOSTED_APP - Chrome hosted app.
      ANDROID_APP - ARC++ app.
  filter: string, Query string to filter results, AND-separated fields in EBNF syntax. Note: OR operations are not supported in this filter. Supported filter fields: * last_active_date
  orderBy: string, Field used to order results. Supported order by fields: * machine * device_id
  orgUnitId: string, The ID of the organizational unit.
  pageSize: integer, Maximum number of results to return. Maximum and default are 100.
  pageToken: string, Token to specify the page of the request to be returned.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response containing a list of devices with queried app installed.
  &quot;devices&quot;: [ # A list of devices which have the app installed. Sorted in ascending alphabetical order on the Device.machine field.
    { # Describes a device reporting Chrome browser information.
      &quot;deviceId&quot;: &quot;A String&quot;, # Output only. The ID of the device that reported this Chrome browser information.
      &quot;machine&quot;: &quot;A String&quot;, # Output only. The name of the machine within its local network.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to specify the next page of the request.
  &quot;totalSize&quot;: 42, # Total number of devices matching request.
}</pre>
</div>

<div class="method">
    <code class="details" id="findInstalledAppDevices_next">findInstalledAppDevices_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>