<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.enterprises.html">enterprises</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#acknowledgeNotificationSet">acknowledgeNotificationSet(notificationSetId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Acknowledges notifications that were received from Enterprises.PullNotificationSet to prevent subsequent calls from returning the same notifications.</p>
<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="#completeSignup">completeSignup(completionToken=None, enterpriseToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Completes the signup flow, by specifying the Completion token and Enterprise token. This request must not be called multiple times for a given Enterprise Token.</p>
<p class="toc_element">
  <code><a href="#createWebToken">createWebToken(enterpriseId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a unique token to access an embeddable UI. To generate a web UI, pass the generated token into the managed Google Play javascript API. Each token may only be used to start one UI session. See the javascript API documentation for further information.</p>
<p class="toc_element">
  <code><a href="#enroll">enroll(token, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Enrolls an enterprise with the calling EMM.</p>
<p class="toc_element">
  <code><a href="#generateSignupUrl">generateSignupUrl(callbackUrl=None, x__xgafv=None)</a></code></p>
<p class="firstline">Generates a sign-up URL.</p>
<p class="toc_element">
  <code><a href="#get">get(enterpriseId, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the name and domain of an enterprise.</p>
<p class="toc_element">
  <code><a href="#getServiceAccount">getServiceAccount(enterpriseId, keyType=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a service account and credentials. The service account can be bound to the enterprise by calling setAccount. The service account is unique to this enterprise and EMM, and will be deleted if the enterprise is unbound. The credentials contain private key data and are not stored server-side. This method can only be called after calling Enterprises.Enroll or Enterprises.CompleteSignup, and before Enterprises.SetAccount; at other times it will return an error. Subsequent calls after the first will generate a new, unique set of credentials, and invalidate the previously generated credentials. Once the service account is bound to the enterprise, it can be managed using the serviceAccountKeys resource.</p>
<p class="toc_element">
  <code><a href="#getStoreLayout">getStoreLayout(enterpriseId, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the store layout for the enterprise. If the store layout has not been set, returns "basic" as the store layout type and no homepage.</p>
<p class="toc_element">
  <code><a href="#list">list(domain, x__xgafv=None)</a></code></p>
<p class="firstline">Looks up an enterprise by domain name. This is only supported for enterprises created via the Google-initiated creation flow. Lookup of the id is not needed for enterprises created via the EMM-initiated flow since the EMM learns the enterprise ID in the callback specified in the Enterprises.generateSignupUrl call.</p>
<p class="toc_element">
  <code><a href="#pullNotificationSet">pullNotificationSet(requestMode=None, x__xgafv=None)</a></code></p>
<p class="firstline">Pulls and returns a notification set for the enterprises associated with the service account authenticated for the request. The notification set may be empty if no notification are pending. A notification set returned needs to be acknowledged within 20 seconds by calling Enterprises.AcknowledgeNotificationSet, unless the notification set is empty. Notifications that are not acknowledged within the 20 seconds will eventually be included again in the response to another PullNotificationSet request, and those that are never acknowledged will ultimately be deleted according to the Google Cloud Platform Pub/Sub system policy. Multiple requests might be performed concurrently to retrieve notifications, in which case the pending notifications (if any) will be split among each caller, if any are pending. If no notifications are present, an empty notification list is returned. Subsequent requests may return more notifications once they become available.</p>
<p class="toc_element">
  <code><a href="#sendTestPushNotification">sendTestPushNotification(enterpriseId, x__xgafv=None)</a></code></p>
<p class="firstline">Sends a test notification to validate the EMM integration with the Google Cloud Pub/Sub service for this enterprise.</p>
<p class="toc_element">
  <code><a href="#setAccount">setAccount(enterpriseId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Sets the account that will be used to authenticate to the API as the enterprise.</p>
<p class="toc_element">
  <code><a href="#setStoreLayout">setStoreLayout(enterpriseId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Sets the store layout for the enterprise. By default, storeLayoutType is set to "basic" and the basic store layout is enabled. The basic layout only contains apps approved by the admin, and that have been added to the available product set for a user (using the setAvailableProductSet call). Apps on the page are sorted in order of their product ID value. If you create a custom store layout (by setting storeLayoutType = "custom" and setting a homepage), the basic store layout is disabled.</p>
<p class="toc_element">
  <code><a href="#unenroll">unenroll(enterpriseId, x__xgafv=None)</a></code></p>
<p class="firstline">Unenrolls an enterprise from the calling EMM.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="acknowledgeNotificationSet">acknowledgeNotificationSet(notificationSetId=None, x__xgafv=None)</code>
  <pre>Acknowledges notifications that were received from Enterprises.PullNotificationSet to prevent subsequent calls from returning the same notifications.

Args:
  notificationSetId: string, The notification set ID as returned by Enterprises.PullNotificationSet. This must be provided.
  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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="completeSignup">completeSignup(completionToken=None, enterpriseToken=None, x__xgafv=None)</code>
  <pre>Completes the signup flow, by specifying the Completion token and Enterprise token. This request must not be called multiple times for a given Enterprise Token.

Args:
  completionToken: string, The Completion token initially returned by GenerateSignupUrl.
  enterpriseToken: string, The Enterprise token appended to the Callback URL.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An Enterprises resource represents the binding between an EMM and a specific organization. That binding can be instantiated in one of two different ways using this API as follows: - For Google managed domain customers, the process involves using Enterprises.enroll and Enterprises.setAccount (in conjunction with artifacts obtained from the Admin console and the Google API Console) and submitted to the EMM through a more-or-less manual process. - For managed Google Play Accounts customers, the process involves using Enterprises.generateSignupUrl and Enterprises.completeSignup in conjunction with the managed Google Play sign-up UI (Google-provided mechanism) to create the binding without manual steps. As an EMM, you can support either or both approaches in your EMM console. See Create an Enterprise for details.
  &quot;administrator&quot;: [ # Admins of the enterprise. This is only supported for enterprises created via the EMM-initiated flow.
    { # This represents an enterprise admin who can manage the enterprise in the managed Google Play store.
      &quot;email&quot;: &quot;A String&quot;, # The admin&#x27;s email address.
    },
  ],
  &quot;id&quot;: &quot;A String&quot;, # The unique ID for the enterprise.
  &quot;name&quot;: &quot;A String&quot;, # The name of the enterprise, for example, &quot;Example, Inc&quot;.
  &quot;primaryDomain&quot;: &quot;A String&quot;, # The enterprise&#x27;s primary domain, such as &quot;example.com&quot;.
}</pre>
</div>

<div class="method">
    <code class="details" id="createWebToken">createWebToken(enterpriseId, body=None, x__xgafv=None)</code>
  <pre>Returns a unique token to access an embeddable UI. To generate a web UI, pass the generated token into the managed Google Play javascript API. Each token may only be used to start one UI session. See the javascript API documentation for further information.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  body: object, The request body.
    The object takes the form of:

{ # Specification for a token used to generate iframes. The token specifies what data the admin is allowed to modify and the URI the iframe is allowed to communiate with.
  &quot;managedConfigurations&quot;: { # Options for displaying the Managed Configuration page.
    &quot;enabled&quot;: True or False, # Whether the Managed Configuration page is displayed. Default is true.
  },
  &quot;parent&quot;: &quot;A String&quot;, # The URI of the parent frame hosting the iframe. To prevent XSS, the iframe may not be hosted at other URIs. This URI must be https. Use whitespaces to separate multiple parent URIs.
  &quot;permission&quot;: [ # Deprecated. Use PlaySearch.approveApps.
    &quot;A String&quot;,
  ],
  &quot;playSearch&quot;: { # Options for displaying the managed Play Search apps page.
    &quot;approveApps&quot;: True or False, # Allow access to the iframe in approve mode. Default is false.
    &quot;enabled&quot;: True or False, # Whether the managed Play Search apps page is displayed. Default is true.
  },
  &quot;privateApps&quot;: { # Options for displaying the Private Apps page.
    &quot;enabled&quot;: True or False, # Whether the Private Apps page is displayed. Default is true.
  },
  &quot;storeBuilder&quot;: { # Options for displaying the Organize apps page.
    &quot;enabled&quot;: True or False, # Whether the Organize apps page is displayed. Default is true.
  },
  &quot;webApps&quot;: { # Options for displaying the Web Apps page.
    &quot;enabled&quot;: True or False, # Whether the Web Apps page is displayed. Default is true.
  },
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A token authorizing an admin to access an iframe.
  &quot;token&quot;: &quot;A String&quot;, # An opaque token to be passed to the Play front-end to generate an iframe.
}</pre>
</div>

<div class="method">
    <code class="details" id="enroll">enroll(token, body=None, x__xgafv=None)</code>
  <pre>Enrolls an enterprise with the calling EMM.

Args:
  token: string, Required. The token provided by the enterprise to register the EMM. (required)
  body: object, The request body.
    The object takes the form of:

{ # An Enterprises resource represents the binding between an EMM and a specific organization. That binding can be instantiated in one of two different ways using this API as follows: - For Google managed domain customers, the process involves using Enterprises.enroll and Enterprises.setAccount (in conjunction with artifacts obtained from the Admin console and the Google API Console) and submitted to the EMM through a more-or-less manual process. - For managed Google Play Accounts customers, the process involves using Enterprises.generateSignupUrl and Enterprises.completeSignup in conjunction with the managed Google Play sign-up UI (Google-provided mechanism) to create the binding without manual steps. As an EMM, you can support either or both approaches in your EMM console. See Create an Enterprise for details.
  &quot;administrator&quot;: [ # Admins of the enterprise. This is only supported for enterprises created via the EMM-initiated flow.
    { # This represents an enterprise admin who can manage the enterprise in the managed Google Play store.
      &quot;email&quot;: &quot;A String&quot;, # The admin&#x27;s email address.
    },
  ],
  &quot;id&quot;: &quot;A String&quot;, # The unique ID for the enterprise.
  &quot;name&quot;: &quot;A String&quot;, # The name of the enterprise, for example, &quot;Example, Inc&quot;.
  &quot;primaryDomain&quot;: &quot;A String&quot;, # The enterprise&#x27;s primary domain, such as &quot;example.com&quot;.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An Enterprises resource represents the binding between an EMM and a specific organization. That binding can be instantiated in one of two different ways using this API as follows: - For Google managed domain customers, the process involves using Enterprises.enroll and Enterprises.setAccount (in conjunction with artifacts obtained from the Admin console and the Google API Console) and submitted to the EMM through a more-or-less manual process. - For managed Google Play Accounts customers, the process involves using Enterprises.generateSignupUrl and Enterprises.completeSignup in conjunction with the managed Google Play sign-up UI (Google-provided mechanism) to create the binding without manual steps. As an EMM, you can support either or both approaches in your EMM console. See Create an Enterprise for details.
  &quot;administrator&quot;: [ # Admins of the enterprise. This is only supported for enterprises created via the EMM-initiated flow.
    { # This represents an enterprise admin who can manage the enterprise in the managed Google Play store.
      &quot;email&quot;: &quot;A String&quot;, # The admin&#x27;s email address.
    },
  ],
  &quot;id&quot;: &quot;A String&quot;, # The unique ID for the enterprise.
  &quot;name&quot;: &quot;A String&quot;, # The name of the enterprise, for example, &quot;Example, Inc&quot;.
  &quot;primaryDomain&quot;: &quot;A String&quot;, # The enterprise&#x27;s primary domain, such as &quot;example.com&quot;.
}</pre>
</div>

<div class="method">
    <code class="details" id="generateSignupUrl">generateSignupUrl(callbackUrl=None, x__xgafv=None)</code>
  <pre>Generates a sign-up URL.

Args:
  callbackUrl: string, The callback URL to which the Admin will be redirected after successfully creating an enterprise. Before redirecting there the system will add a single query parameter to this URL named &quot;enterpriseToken&quot; which will contain an opaque token to be used for the CompleteSignup request. Beware that this means that the URL will be parsed, the parameter added and then a new URL formatted, i.e. there may be some minor formatting changes and, more importantly, the URL must be well-formed so that it can be parsed.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A resource returned by the GenerateSignupUrl API, which contains the Signup URL and Completion Token.
  &quot;completionToken&quot;: &quot;A String&quot;, # An opaque token that will be required, along with the Enterprise Token, for obtaining the enterprise resource from CompleteSignup.
  &quot;kind&quot;: &quot;A String&quot;, # Deprecated.
  &quot;url&quot;: &quot;A String&quot;, # A URL under which the Admin can sign up for an enterprise. The page pointed to cannot be rendered in an iframe.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(enterpriseId, x__xgafv=None)</code>
  <pre>Retrieves the name and domain of an 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:

    { # An Enterprises resource represents the binding between an EMM and a specific organization. That binding can be instantiated in one of two different ways using this API as follows: - For Google managed domain customers, the process involves using Enterprises.enroll and Enterprises.setAccount (in conjunction with artifacts obtained from the Admin console and the Google API Console) and submitted to the EMM through a more-or-less manual process. - For managed Google Play Accounts customers, the process involves using Enterprises.generateSignupUrl and Enterprises.completeSignup in conjunction with the managed Google Play sign-up UI (Google-provided mechanism) to create the binding without manual steps. As an EMM, you can support either or both approaches in your EMM console. See Create an Enterprise for details.
  &quot;administrator&quot;: [ # Admins of the enterprise. This is only supported for enterprises created via the EMM-initiated flow.
    { # This represents an enterprise admin who can manage the enterprise in the managed Google Play store.
      &quot;email&quot;: &quot;A String&quot;, # The admin&#x27;s email address.
    },
  ],
  &quot;id&quot;: &quot;A String&quot;, # The unique ID for the enterprise.
  &quot;name&quot;: &quot;A String&quot;, # The name of the enterprise, for example, &quot;Example, Inc&quot;.
  &quot;primaryDomain&quot;: &quot;A String&quot;, # The enterprise&#x27;s primary domain, such as &quot;example.com&quot;.
}</pre>
</div>

<div class="method">
    <code class="details" id="getServiceAccount">getServiceAccount(enterpriseId, keyType=None, x__xgafv=None)</code>
  <pre>Returns a service account and credentials. The service account can be bound to the enterprise by calling setAccount. The service account is unique to this enterprise and EMM, and will be deleted if the enterprise is unbound. The credentials contain private key data and are not stored server-side. This method can only be called after calling Enterprises.Enroll or Enterprises.CompleteSignup, and before Enterprises.SetAccount; at other times it will return an error. Subsequent calls after the first will generate a new, unique set of credentials, and invalidate the previously generated credentials. Once the service account is bound to the enterprise, it can be managed using the serviceAccountKeys resource.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  keyType: string, The type of credential to return with the service account. Required.
    Allowed values
      googleCredentials - Google Credentials File format.
      pkcs12 - PKCS12 format. The password for the PKCS12 file is &#x27;notasecret&#x27;. For more information, see https://tools.ietf.org/html/rfc7292. The data for keys of this type are base64 encoded according to RFC 4648 Section 4. See http://tools.ietf.org/html/rfc4648#section-4.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A service account identity, including the name and credentials that can be used to authenticate as the service account.
  &quot;key&quot;: { # Credentials that can be used to authenticate as a service account. # Credentials that can be used to authenticate as this ServiceAccount.
    &quot;data&quot;: &quot;A String&quot;, # The body of the private key credentials file, in string format. This is only populated when the ServiceAccountKey is created, and is not stored by Google.
    &quot;id&quot;: &quot;A String&quot;, # An opaque, unique identifier for this ServiceAccountKey. Assigned by the server.
    &quot;publicData&quot;: &quot;A String&quot;, # Public key data for the credentials file. This is an X.509 cert. If you are using the googleCredentials key type, this is identical to the cert that can be retrieved by using the X.509 cert url inside of the credentials file.
    &quot;type&quot;: &quot;A String&quot;, # The file format of the generated key data.
  },
  &quot;name&quot;: &quot;A String&quot;, # The account name of the service account, in the form of an email address. Assigned by the server.
}</pre>
</div>

<div class="method">
    <code class="details" id="getStoreLayout">getStoreLayout(enterpriseId, x__xgafv=None)</code>
  <pre>Returns the store layout for the enterprise. If the store layout has not been set, returns &quot;basic&quot; as the store layout type and no homepage.

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:

    { # General setting for the managed Google Play store layout, currently only specifying the page to display the first time the store is opened.
  &quot;homepageId&quot;: &quot;A String&quot;, # The ID of the store page to be used as the homepage. The homepage is the first page shown in the managed Google Play Store. Not specifying a homepage is equivalent to setting the store layout type to &quot;basic&quot;.
  &quot;storeLayoutType&quot;: &quot;A String&quot;, # The store layout type. By default, this value is set to &quot;basic&quot; if the homepageId field is not set, and to &quot;custom&quot; otherwise. If set to &quot;basic&quot;, the layout will consist of all approved apps that have been whitelisted for the user.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(domain, x__xgafv=None)</code>
  <pre>Looks up an enterprise by domain name. This is only supported for enterprises created via the Google-initiated creation flow. Lookup of the id is not needed for enterprises created via the EMM-initiated flow since the EMM learns the enterprise ID in the callback specified in the Enterprises.generateSignupUrl call.

Args:
  domain: string, Required. The exact primary domain name of the enterprise to look up. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;enterprise&quot;: [ # An enterprise.
    { # An Enterprises resource represents the binding between an EMM and a specific organization. That binding can be instantiated in one of two different ways using this API as follows: - For Google managed domain customers, the process involves using Enterprises.enroll and Enterprises.setAccount (in conjunction with artifacts obtained from the Admin console and the Google API Console) and submitted to the EMM through a more-or-less manual process. - For managed Google Play Accounts customers, the process involves using Enterprises.generateSignupUrl and Enterprises.completeSignup in conjunction with the managed Google Play sign-up UI (Google-provided mechanism) to create the binding without manual steps. As an EMM, you can support either or both approaches in your EMM console. See Create an Enterprise for details.
      &quot;administrator&quot;: [ # Admins of the enterprise. This is only supported for enterprises created via the EMM-initiated flow.
        { # This represents an enterprise admin who can manage the enterprise in the managed Google Play store.
          &quot;email&quot;: &quot;A String&quot;, # The admin&#x27;s email address.
        },
      ],
      &quot;id&quot;: &quot;A String&quot;, # The unique ID for the enterprise.
      &quot;name&quot;: &quot;A String&quot;, # The name of the enterprise, for example, &quot;Example, Inc&quot;.
      &quot;primaryDomain&quot;: &quot;A String&quot;, # The enterprise&#x27;s primary domain, such as &quot;example.com&quot;.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="pullNotificationSet">pullNotificationSet(requestMode=None, x__xgafv=None)</code>
  <pre>Pulls and returns a notification set for the enterprises associated with the service account authenticated for the request. The notification set may be empty if no notification are pending. A notification set returned needs to be acknowledged within 20 seconds by calling Enterprises.AcknowledgeNotificationSet, unless the notification set is empty. Notifications that are not acknowledged within the 20 seconds will eventually be included again in the response to another PullNotificationSet request, and those that are never acknowledged will ultimately be deleted according to the Google Cloud Platform Pub/Sub system policy. Multiple requests might be performed concurrently to retrieve notifications, in which case the pending notifications (if any) will be split among each caller, if any are pending. If no notifications are present, an empty notification list is returned. Subsequent requests may return more notifications once they become available.

Args:
  requestMode: string, The request mode for pulling notifications. Specifying waitForNotifications will cause the request to block and wait until one or more notifications are present, or return an empty notification list if no notifications are present after some time. Speciying returnImmediately will cause the request to immediately return the pending notifications, or an empty list if no notifications are present. If omitted, defaults to waitForNotifications.
    Allowed values
      waitForNotifications - Wait until one or more notifications are present.
      returnImmediately - Returns immediately whether notifications are present or not.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A resource returned by the PullNotificationSet API, which contains a collection of notifications for enterprises associated with the service account authenticated for the request.
  &quot;notification&quot;: [ # The notifications received, or empty if no notifications are present.
    { # A notification of one event relating to an enterprise.
      &quot;appRestrictionsSchemaChangeEvent&quot;: { # An event generated when a new app version is uploaded to Google Play and its app restrictions schema changed. To fetch the app restrictions schema for an app, use Products.getAppRestrictionsSchema on the EMM API. # Notifications about new app restrictions schema changes.
        &quot;productId&quot;: &quot;A String&quot;, # The id of the product (e.g. &quot;app:com.google.android.gm&quot;) for which the app restriction schema changed. This field will always be present.
      },
      &quot;appUpdateEvent&quot;: { # An event generated when a new version of an app is uploaded to Google Play. Notifications are sent for new public versions only: alpha, beta, or canary versions do not generate this event. To fetch up-to-date version history for an app, use Products.Get on the EMM API. # Notifications about app updates.
        &quot;productId&quot;: &quot;A String&quot;, # The id of the product (e.g. &quot;app:com.google.android.gm&quot;) that was updated. This field will always be present.
      },
      &quot;deviceReportUpdateEvent&quot;: { # An event generated when an updated device report is available. # Notifications about device report updates.
        &quot;deviceId&quot;: &quot;A String&quot;, # The Android ID of the device. This field will always be present.
        &quot;report&quot;: { # Device report updated with the latest app states for managed apps on the device. # The device report updated with the latest app states. This field will always be present.
          &quot;appState&quot;: [ # List of app states set by managed apps on the device. App states are defined by the app&#x27;s developers. This field will always be present.
            { # List of states set by the app.
              &quot;keyedAppState&quot;: [ # List of keyed app states. This field will always be present.
                { # Represents a keyed app state containing a key, timestamp, severity level, optional description, and optional data.
                  &quot;data&quot;: &quot;A String&quot;, # Additional field intended for machine-readable data. For example, a number or JSON object. To prevent XSS, we recommend removing any HTML from the data before displaying it.
                  &quot;key&quot;: &quot;A String&quot;, # Key indicating what the app is providing a state for. The content of the key is set by the app&#x27;s developer. To prevent XSS, we recommend removing any HTML from the key before displaying it. This field will always be present.
                  &quot;message&quot;: &quot;A String&quot;, # Free-form, human-readable message describing the app state. For example, an error message. To prevent XSS, we recommend removing any HTML from the message before displaying it.
                  &quot;severity&quot;: &quot;A String&quot;, # Severity of the app state. This field will always be present.
                  &quot;stateTimestampMillis&quot;: &quot;A String&quot;, # Timestamp of when the app set the state in milliseconds since epoch. This field will always be present.
                },
              ],
              &quot;packageName&quot;: &quot;A String&quot;, # The package name of the app. This field will always be present.
            },
          ],
          &quot;lastUpdatedTimestampMillis&quot;: &quot;A String&quot;, # The timestamp of the last report update in milliseconds since epoch. This field will always be present.
        },
        &quot;userId&quot;: &quot;A String&quot;, # The ID of the user. This field will always be present.
      },
      &quot;enterpriseId&quot;: &quot;A String&quot;, # The ID of the enterprise for which the notification is sent. This will always be present.
      &quot;installFailureEvent&quot;: { # An event generated when an app installation failed on a device # Notifications about an app installation failure.
        &quot;deviceId&quot;: &quot;A String&quot;, # The Android ID of the device. This field will always be present.
        &quot;failureDetails&quot;: &quot;A String&quot;, # Additional details on the failure if applicable.
        &quot;failureReason&quot;: &quot;A String&quot;, # The reason for the installation failure. This field will always be present.
        &quot;productId&quot;: &quot;A String&quot;, # The id of the product (e.g. &quot;app:com.google.android.gm&quot;) for which the install failure event occured. This field will always be present.
        &quot;userId&quot;: &quot;A String&quot;, # The ID of the user. This field will always be present.
      },
      &quot;newDeviceEvent&quot;: { # An event generated when a new device is ready to be managed. # Notifications about new devices.
        &quot;deviceId&quot;: &quot;A String&quot;, # The Android ID of the device. This field will always be present.
        &quot;dpcPackageName&quot;: &quot;A String&quot;, # Policy app on the device.
        &quot;managementType&quot;: &quot;A String&quot;, # Identifies the extent to which the device is controlled by an Android EMM in various deployment configurations. Possible values include: - &quot;managedDevice&quot;, a device where the DPC is set as device owner, - &quot;managedProfile&quot;, a device where the DPC is set as profile owner.
        &quot;userId&quot;: &quot;A String&quot;, # The ID of the user. This field will always be present.
      },
      &quot;newPermissionsEvent&quot;: { # An event generated when new permissions are added to an app. # Notifications about new app permissions.
        &quot;approvedPermissions&quot;: [ # The set of permissions that the enterprise admin has already approved for this application. Use Permissions.Get on the EMM API to retrieve details about these permissions.
          &quot;A String&quot;,
        ],
        &quot;productId&quot;: &quot;A String&quot;, # The id of the product (e.g. &quot;app:com.google.android.gm&quot;) for which new permissions were added. This field will always be present.
        &quot;requestedPermissions&quot;: [ # The set of permissions that the app is currently requesting. Use Permissions.Get on the EMM API to retrieve details about these permissions.
          &quot;A String&quot;,
        ],
      },
      &quot;notificationType&quot;: &quot;A String&quot;, # Type of the notification.
      &quot;productApprovalEvent&quot;: { # An event generated when a product&#x27;s approval status is changed. # Notifications about changes to a product&#x27;s approval status.
        &quot;approved&quot;: &quot;A String&quot;, # Whether the product was approved or unapproved. This field will always be present.
        &quot;productId&quot;: &quot;A String&quot;, # The id of the product (e.g. &quot;app:com.google.android.gm&quot;) for which the approval status has changed. This field will always be present.
      },
      &quot;productAvailabilityChangeEvent&quot;: { # An event generated whenever a product&#x27;s availability changes. # Notifications about product availability changes.
        &quot;availabilityStatus&quot;: &quot;A String&quot;, # The new state of the product. This field will always be present.
        &quot;productId&quot;: &quot;A String&quot;, # The id of the product (e.g. &quot;app:com.google.android.gm&quot;) for which the product availability changed. This field will always be present.
      },
      &quot;timestampMillis&quot;: &quot;A String&quot;, # The time when the notification was published in milliseconds since 1970-01-01T00:00:00Z. This will always be present.
    },
  ],
  &quot;notificationSetId&quot;: &quot;A String&quot;, # The notification set ID, required to mark the notification as received with the Enterprises.AcknowledgeNotification API. This will be omitted if no notifications are present.
}</pre>
</div>

<div class="method">
    <code class="details" id="sendTestPushNotification">sendTestPushNotification(enterpriseId, x__xgafv=None)</code>
  <pre>Sends a test notification to validate the EMM integration with the Google Cloud Pub/Sub service for this 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;messageId&quot;: &quot;A String&quot;, # The message ID of the test push notification that was sent.
  &quot;topicName&quot;: &quot;A String&quot;, # The name of the Cloud Pub/Sub topic to which notifications for this enterprise&#x27;s enrolled account will be sent.
}</pre>
</div>

<div class="method">
    <code class="details" id="setAccount">setAccount(enterpriseId, body=None, x__xgafv=None)</code>
  <pre>Sets the account that will be used to authenticate to the API as the enterprise.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  body: object, The request body.
    The object takes the form of:

{ # A service account that can be used to authenticate as the enterprise to API calls that require such authentication.
  &quot;accountEmail&quot;: &quot;A String&quot;, # The email address of the service account.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A service account that can be used to authenticate as the enterprise to API calls that require such authentication.
  &quot;accountEmail&quot;: &quot;A String&quot;, # The email address of the service account.
}</pre>
</div>

<div class="method">
    <code class="details" id="setStoreLayout">setStoreLayout(enterpriseId, body=None, x__xgafv=None)</code>
  <pre>Sets the store layout for the enterprise. By default, storeLayoutType is set to &quot;basic&quot; and the basic store layout is enabled. The basic layout only contains apps approved by the admin, and that have been added to the available product set for a user (using the setAvailableProductSet call). Apps on the page are sorted in order of their product ID value. If you create a custom store layout (by setting storeLayoutType = &quot;custom&quot; and setting a homepage), the basic store layout is disabled.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  body: object, The request body.
    The object takes the form of:

{ # General setting for the managed Google Play store layout, currently only specifying the page to display the first time the store is opened.
  &quot;homepageId&quot;: &quot;A String&quot;, # The ID of the store page to be used as the homepage. The homepage is the first page shown in the managed Google Play Store. Not specifying a homepage is equivalent to setting the store layout type to &quot;basic&quot;.
  &quot;storeLayoutType&quot;: &quot;A String&quot;, # The store layout type. By default, this value is set to &quot;basic&quot; if the homepageId field is not set, and to &quot;custom&quot; otherwise. If set to &quot;basic&quot;, the layout will consist of all approved apps that have been whitelisted for the user.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # General setting for the managed Google Play store layout, currently only specifying the page to display the first time the store is opened.
  &quot;homepageId&quot;: &quot;A String&quot;, # The ID of the store page to be used as the homepage. The homepage is the first page shown in the managed Google Play Store. Not specifying a homepage is equivalent to setting the store layout type to &quot;basic&quot;.
  &quot;storeLayoutType&quot;: &quot;A String&quot;, # The store layout type. By default, this value is set to &quot;basic&quot; if the homepageId field is not set, and to &quot;custom&quot; otherwise. If set to &quot;basic&quot;, the layout will consist of all approved apps that have been whitelisted for the user.
}</pre>
</div>

<div class="method">
    <code class="details" id="unenroll">unenroll(enterpriseId, x__xgafv=None)</code>
  <pre>Unenrolls an enterprise from the calling EMM.

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
</pre>
</div>

</body></html>