<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.users.html">users</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(enterpriseId, userId, x__xgafv=None)</a></code></p>
<p class="firstline">Deleted an EMM-managed user.</p>
<p class="toc_element">
  <code><a href="#generateAuthenticationToken">generateAuthenticationToken(enterpriseId, userId, x__xgafv=None)</a></code></p>
<p class="firstline">Generates an authentication token which the device policy client can use to</p>
<p class="toc_element">
  <code><a href="#get">get(enterpriseId, userId, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves a user's details.</p>
<p class="toc_element">
  <code><a href="#getAvailableProductSet">getAvailableProductSet(enterpriseId, userId, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the set of products a user is entitled to access.</p>
<p class="toc_element">
  <code><a href="#insert">insert(enterpriseId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new EMM-managed user.</p>
<p class="toc_element">
  <code><a href="#list">list(enterpriseId, email, x__xgafv=None)</a></code></p>
<p class="firstline">Looks up a user by primary email address.</p>
<p class="toc_element">
  <code><a href="#revokeDeviceAccess">revokeDeviceAccess(enterpriseId, userId, x__xgafv=None)</a></code></p>
<p class="firstline">Revokes access to all devices currently provisioned to the user. The user</p>
<p class="toc_element">
  <code><a href="#setAvailableProductSet">setAvailableProductSet(enterpriseId, userId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Modifies the set of products that a user is entitled to access (referred to</p>
<p class="toc_element">
  <code><a href="#update">update(enterpriseId, userId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the details of an EMM-managed user.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(enterpriseId, userId, x__xgafv=None)</code>
  <pre>Deleted an EMM-managed user.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  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="generateAuthenticationToken">generateAuthenticationToken(enterpriseId, userId, x__xgafv=None)</code>
  <pre>Generates an authentication token which the device policy client can use to
provision the given EMM-managed user account on a device.
The generated token is single-use and expires after a few minutes.

You can provision a maximum of 10 devices per user.

This call only works with EMM-managed accounts.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An AuthenticationToken is used by the EMM&#x27;s device policy client on a device
      # to provision the given EMM-managed user on that device.
    &quot;token&quot;: &quot;A String&quot;, # The authentication token to be passed to the device policy client on the
        # device where it can be used to provision the account for which this token
        # was generated.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(enterpriseId, userId, x__xgafv=None)</code>
  <pre>Retrieves a user&#x27;s details.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Users resource represents an account associated with an enterprise. The
      # account may be specific to a device or to an individual user (who can then
      # use the account across multiple devices). The account may provide access to
      # managed Google Play only, or to other Google services, depending on the
      # identity model:
      # &lt;ul&gt;&lt;li&gt;The Google managed domain identity model requires synchronization to
      # Google account sources (via &lt;code&gt;primaryEmail&lt;/code&gt;).&lt;/li&gt;
      # &lt;li&gt;The managed Google Play Accounts identity model provides a dynamic means
      # for enterprises to create user or device accounts as needed. These accounts
      # provide access to managed Google Play.&lt;/li&gt;
      # &lt;/ul&gt;
    &quot;accountType&quot;: &quot;A String&quot;, # The type of account that this user represents. A &lt;code&gt;userAccount&lt;/code&gt;
        # can be installed on multiple devices, but a &lt;code&gt;deviceAccount&lt;/code&gt; is
        # specific to a single device. An EMM-managed user (&lt;code&gt;emmManaged&lt;/code&gt;)
        # can be either type (&lt;code&gt;userAccount&lt;/code&gt;, &lt;code&gt;deviceAccount&lt;/code&gt;),
        # but a Google-managed user (&lt;code&gt;googleManaged&lt;/code&gt;) is always a
        # &lt;code&gt;userAccount&lt;/code&gt;.
    &quot;managementType&quot;: &quot;A String&quot;, # The entity that manages the user.  With &lt;code&gt;googleManaged&lt;/code&gt; users,
        # the source of truth is Google so EMMs have to make sure a Google Account
        # exists for the user.  With &lt;code&gt;emmManaged&lt;/code&gt; users, the
        # EMM is in charge.
    &quot;id&quot;: &quot;A String&quot;, # The unique ID for the user.
    &quot;primaryEmail&quot;: &quot;A String&quot;, # The user&#x27;s primary email address, for example, &quot;jsmith@example.com&quot;.
        # Will always be set for Google managed users and not set for EMM managed
        # users.
    &quot;displayName&quot;: &quot;A String&quot;, # The name that will appear in user interfaces. Setting this property is
        # optional when creating EMM-managed users. If you do set this property,
        # use something generic about the organization (such as &quot;Example, Inc.&quot;) or
        # your name (as EMM).
        # Not used for Google-managed user accounts.
        # @mutable androidenterprise.users.update
    &quot;accountIdentifier&quot;: &quot;A String&quot;, # A unique identifier you create for this user, such as &quot;user342&quot; or
        # &quot;asset#44418&quot;. Do not use personally identifiable information (PII) for
        # this property. Must always be set for EMM-managed users.
        # Not set for Google-managed users.
  }</pre>
</div>

<div class="method">
    <code class="details" id="getAvailableProductSet">getAvailableProductSet(enterpriseId, userId, x__xgafv=None)</code>
  <pre>Retrieves the set of products a user is entitled to access.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A set of products.
      &quot;productId&quot;: [ # The list of product IDs making up the set of products.
        &quot;A String&quot;,
      ],
      &quot;productVisibility&quot;: [ # Additional list of product IDs making up the product set.
          # Unlike the productID array, in this list It&#x27;s possible to specify
          # which tracks (alpha, beta, production) of a product are visible to the
          # user. See ProductVisibility and its fields for more information. Specifying
          # the same product ID both here and in the productId array is not allowed and
          # it will result in an error.
        { # A product to be made visible to a user.
          &quot;trackIds&quot;: [ # Grants the user visibility to the specified product track(s), identified by
              # &lt;code&gt;trackIds&lt;/code&gt;.
            &quot;A String&quot;,
          ],
          &quot;productId&quot;: &quot;A String&quot;, # The product ID to make visible to the user.
              # Required for each item in the productVisibility list.
          &quot;tracks&quot;: [ # Deprecated. Use &lt;code&gt;trackIds&lt;/code&gt; instead.
            &quot;A String&quot;,
          ],
        },
      ],
      &quot;productSetBehavior&quot;: &quot;A String&quot;, # The interpretation of this product set. &quot;unknown&quot; should never be sent and
          # is ignored if received. &quot;whitelist&quot; means that the user is entitled to
          # access the product set. &quot;includeAll&quot; means that all products are
          # accessible, including products that are approved, products with revoked
          # approval, and products that have never been approved. &quot;allApproved&quot; means
          # that the user is entitled to access all products that are approved for the
          # enterprise. If the value is &quot;allApproved&quot; or &quot;includeAll&quot;, the productId
          # field is ignored. If no value is provided, it is interpreted as
          # &quot;whitelist&quot; for backwards compatibility.
          # Further &quot;allApproved&quot; or &quot;includeAll&quot; does not enable automatic
          # visibility of &quot;alpha&quot; or &quot;beta&quot; tracks for Android app. Use
          # ProductVisibility to enable &quot;alpha&quot; or &quot;beta&quot; tracks per user.
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(enterpriseId, body=None, x__xgafv=None)</code>
  <pre>Creates a new EMM-managed user.

The &lt;a href=&quot;/android/work/play/emm-api/v1/users.html&quot;&gt;Users&lt;/a&gt; resource
passed in the body of the request should include an
&lt;code&gt;accountIdentifier&lt;/code&gt; and an &lt;code&gt;accountType&lt;/code&gt;.
&lt;p&gt;If a corresponding user already exists with the same account identifier,
the user will be updated with the resource. In this case only the
&lt;code&gt;displayName&lt;/code&gt; field can be changed.

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

{ # A Users resource represents an account associated with an enterprise. The
    # account may be specific to a device or to an individual user (who can then
    # use the account across multiple devices). The account may provide access to
    # managed Google Play only, or to other Google services, depending on the
    # identity model:
    # &lt;ul&gt;&lt;li&gt;The Google managed domain identity model requires synchronization to
    # Google account sources (via &lt;code&gt;primaryEmail&lt;/code&gt;).&lt;/li&gt;
    # &lt;li&gt;The managed Google Play Accounts identity model provides a dynamic means
    # for enterprises to create user or device accounts as needed. These accounts
    # provide access to managed Google Play.&lt;/li&gt;
    # &lt;/ul&gt;
  &quot;accountType&quot;: &quot;A String&quot;, # The type of account that this user represents. A &lt;code&gt;userAccount&lt;/code&gt;
      # can be installed on multiple devices, but a &lt;code&gt;deviceAccount&lt;/code&gt; is
      # specific to a single device. An EMM-managed user (&lt;code&gt;emmManaged&lt;/code&gt;)
      # can be either type (&lt;code&gt;userAccount&lt;/code&gt;, &lt;code&gt;deviceAccount&lt;/code&gt;),
      # but a Google-managed user (&lt;code&gt;googleManaged&lt;/code&gt;) is always a
      # &lt;code&gt;userAccount&lt;/code&gt;.
  &quot;managementType&quot;: &quot;A String&quot;, # The entity that manages the user.  With &lt;code&gt;googleManaged&lt;/code&gt; users,
      # the source of truth is Google so EMMs have to make sure a Google Account
      # exists for the user.  With &lt;code&gt;emmManaged&lt;/code&gt; users, the
      # EMM is in charge.
  &quot;id&quot;: &quot;A String&quot;, # The unique ID for the user.
  &quot;primaryEmail&quot;: &quot;A String&quot;, # The user&#x27;s primary email address, for example, &quot;jsmith@example.com&quot;.
      # Will always be set for Google managed users and not set for EMM managed
      # users.
  &quot;displayName&quot;: &quot;A String&quot;, # The name that will appear in user interfaces. Setting this property is
      # optional when creating EMM-managed users. If you do set this property,
      # use something generic about the organization (such as &quot;Example, Inc.&quot;) or
      # your name (as EMM).
      # Not used for Google-managed user accounts.
      # @mutable androidenterprise.users.update
  &quot;accountIdentifier&quot;: &quot;A String&quot;, # A unique identifier you create for this user, such as &quot;user342&quot; or
      # &quot;asset#44418&quot;. Do not use personally identifiable information (PII) for
      # this property. Must always be set for EMM-managed users.
      # Not set for Google-managed users.
}

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

Returns:
  An object of the form:

    { # A Users resource represents an account associated with an enterprise. The
      # account may be specific to a device or to an individual user (who can then
      # use the account across multiple devices). The account may provide access to
      # managed Google Play only, or to other Google services, depending on the
      # identity model:
      # &lt;ul&gt;&lt;li&gt;The Google managed domain identity model requires synchronization to
      # Google account sources (via &lt;code&gt;primaryEmail&lt;/code&gt;).&lt;/li&gt;
      # &lt;li&gt;The managed Google Play Accounts identity model provides a dynamic means
      # for enterprises to create user or device accounts as needed. These accounts
      # provide access to managed Google Play.&lt;/li&gt;
      # &lt;/ul&gt;
    &quot;accountType&quot;: &quot;A String&quot;, # The type of account that this user represents. A &lt;code&gt;userAccount&lt;/code&gt;
        # can be installed on multiple devices, but a &lt;code&gt;deviceAccount&lt;/code&gt; is
        # specific to a single device. An EMM-managed user (&lt;code&gt;emmManaged&lt;/code&gt;)
        # can be either type (&lt;code&gt;userAccount&lt;/code&gt;, &lt;code&gt;deviceAccount&lt;/code&gt;),
        # but a Google-managed user (&lt;code&gt;googleManaged&lt;/code&gt;) is always a
        # &lt;code&gt;userAccount&lt;/code&gt;.
    &quot;managementType&quot;: &quot;A String&quot;, # The entity that manages the user.  With &lt;code&gt;googleManaged&lt;/code&gt; users,
        # the source of truth is Google so EMMs have to make sure a Google Account
        # exists for the user.  With &lt;code&gt;emmManaged&lt;/code&gt; users, the
        # EMM is in charge.
    &quot;id&quot;: &quot;A String&quot;, # The unique ID for the user.
    &quot;primaryEmail&quot;: &quot;A String&quot;, # The user&#x27;s primary email address, for example, &quot;jsmith@example.com&quot;.
        # Will always be set for Google managed users and not set for EMM managed
        # users.
    &quot;displayName&quot;: &quot;A String&quot;, # The name that will appear in user interfaces. Setting this property is
        # optional when creating EMM-managed users. If you do set this property,
        # use something generic about the organization (such as &quot;Example, Inc.&quot;) or
        # your name (as EMM).
        # Not used for Google-managed user accounts.
        # @mutable androidenterprise.users.update
    &quot;accountIdentifier&quot;: &quot;A String&quot;, # A unique identifier you create for this user, such as &quot;user342&quot; or
        # &quot;asset#44418&quot;. Do not use personally identifiable information (PII) for
        # this property. Must always be set for EMM-managed users.
        # Not set for Google-managed users.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(enterpriseId, email, x__xgafv=None)</code>
  <pre>Looks up a user by primary email address.
This is only supported for Google-managed users.  Lookup of the id is not
needed for EMM-managed users because the id is already returned in the
result of the Users.insert call.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  email: string, Required. The exact primary email address of the user 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;user&quot;: [ # A user of an enterprise.
      { # A Users resource represents an account associated with an enterprise. The
          # account may be specific to a device or to an individual user (who can then
          # use the account across multiple devices). The account may provide access to
          # managed Google Play only, or to other Google services, depending on the
          # identity model:
          # &lt;ul&gt;&lt;li&gt;The Google managed domain identity model requires synchronization to
          # Google account sources (via &lt;code&gt;primaryEmail&lt;/code&gt;).&lt;/li&gt;
          # &lt;li&gt;The managed Google Play Accounts identity model provides a dynamic means
          # for enterprises to create user or device accounts as needed. These accounts
          # provide access to managed Google Play.&lt;/li&gt;
          # &lt;/ul&gt;
        &quot;accountType&quot;: &quot;A String&quot;, # The type of account that this user represents. A &lt;code&gt;userAccount&lt;/code&gt;
            # can be installed on multiple devices, but a &lt;code&gt;deviceAccount&lt;/code&gt; is
            # specific to a single device. An EMM-managed user (&lt;code&gt;emmManaged&lt;/code&gt;)
            # can be either type (&lt;code&gt;userAccount&lt;/code&gt;, &lt;code&gt;deviceAccount&lt;/code&gt;),
            # but a Google-managed user (&lt;code&gt;googleManaged&lt;/code&gt;) is always a
            # &lt;code&gt;userAccount&lt;/code&gt;.
        &quot;managementType&quot;: &quot;A String&quot;, # The entity that manages the user.  With &lt;code&gt;googleManaged&lt;/code&gt; users,
            # the source of truth is Google so EMMs have to make sure a Google Account
            # exists for the user.  With &lt;code&gt;emmManaged&lt;/code&gt; users, the
            # EMM is in charge.
        &quot;id&quot;: &quot;A String&quot;, # The unique ID for the user.
        &quot;primaryEmail&quot;: &quot;A String&quot;, # The user&#x27;s primary email address, for example, &quot;jsmith@example.com&quot;.
            # Will always be set for Google managed users and not set for EMM managed
            # users.
        &quot;displayName&quot;: &quot;A String&quot;, # The name that will appear in user interfaces. Setting this property is
            # optional when creating EMM-managed users. If you do set this property,
            # use something generic about the organization (such as &quot;Example, Inc.&quot;) or
            # your name (as EMM).
            # Not used for Google-managed user accounts.
            # @mutable androidenterprise.users.update
        &quot;accountIdentifier&quot;: &quot;A String&quot;, # A unique identifier you create for this user, such as &quot;user342&quot; or
            # &quot;asset#44418&quot;. Do not use personally identifiable information (PII) for
            # this property. Must always be set for EMM-managed users.
            # Not set for Google-managed users.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="revokeDeviceAccess">revokeDeviceAccess(enterpriseId, userId, x__xgafv=None)</code>
  <pre>Revokes access to all devices currently provisioned to the user. The user
will no longer be able to use the managed Play store on any of their
managed devices.

This call only works with EMM-managed accounts.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  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="setAvailableProductSet">setAvailableProductSet(enterpriseId, userId, body=None, x__xgafv=None)</code>
  <pre>Modifies the set of products that a user is entitled to access (referred to
as &lt;em&gt;whitelisted&lt;/em&gt; products). Only products that are
&lt;a href=&quot;/android/work/play/emm-api/v1/products/approve&quot;&gt;approved&lt;/a&gt;
or products that were previously approved (products with revoked approval)
can be whitelisted.

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

{ # A set of products.
    &quot;productId&quot;: [ # The list of product IDs making up the set of products.
      &quot;A String&quot;,
    ],
    &quot;productVisibility&quot;: [ # Additional list of product IDs making up the product set.
        # Unlike the productID array, in this list It&#x27;s possible to specify
        # which tracks (alpha, beta, production) of a product are visible to the
        # user. See ProductVisibility and its fields for more information. Specifying
        # the same product ID both here and in the productId array is not allowed and
        # it will result in an error.
      { # A product to be made visible to a user.
        &quot;trackIds&quot;: [ # Grants the user visibility to the specified product track(s), identified by
            # &lt;code&gt;trackIds&lt;/code&gt;.
          &quot;A String&quot;,
        ],
        &quot;productId&quot;: &quot;A String&quot;, # The product ID to make visible to the user.
            # Required for each item in the productVisibility list.
        &quot;tracks&quot;: [ # Deprecated. Use &lt;code&gt;trackIds&lt;/code&gt; instead.
          &quot;A String&quot;,
        ],
      },
    ],
    &quot;productSetBehavior&quot;: &quot;A String&quot;, # The interpretation of this product set. &quot;unknown&quot; should never be sent and
        # is ignored if received. &quot;whitelist&quot; means that the user is entitled to
        # access the product set. &quot;includeAll&quot; means that all products are
        # accessible, including products that are approved, products with revoked
        # approval, and products that have never been approved. &quot;allApproved&quot; means
        # that the user is entitled to access all products that are approved for the
        # enterprise. If the value is &quot;allApproved&quot; or &quot;includeAll&quot;, the productId
        # field is ignored. If no value is provided, it is interpreted as
        # &quot;whitelist&quot; for backwards compatibility.
        # Further &quot;allApproved&quot; or &quot;includeAll&quot; does not enable automatic
        # visibility of &quot;alpha&quot; or &quot;beta&quot; tracks for Android app. Use
        # ProductVisibility to enable &quot;alpha&quot; or &quot;beta&quot; tracks per user.
  }

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

Returns:
  An object of the form:

    { # A set of products.
      &quot;productId&quot;: [ # The list of product IDs making up the set of products.
        &quot;A String&quot;,
      ],
      &quot;productVisibility&quot;: [ # Additional list of product IDs making up the product set.
          # Unlike the productID array, in this list It&#x27;s possible to specify
          # which tracks (alpha, beta, production) of a product are visible to the
          # user. See ProductVisibility and its fields for more information. Specifying
          # the same product ID both here and in the productId array is not allowed and
          # it will result in an error.
        { # A product to be made visible to a user.
          &quot;trackIds&quot;: [ # Grants the user visibility to the specified product track(s), identified by
              # &lt;code&gt;trackIds&lt;/code&gt;.
            &quot;A String&quot;,
          ],
          &quot;productId&quot;: &quot;A String&quot;, # The product ID to make visible to the user.
              # Required for each item in the productVisibility list.
          &quot;tracks&quot;: [ # Deprecated. Use &lt;code&gt;trackIds&lt;/code&gt; instead.
            &quot;A String&quot;,
          ],
        },
      ],
      &quot;productSetBehavior&quot;: &quot;A String&quot;, # The interpretation of this product set. &quot;unknown&quot; should never be sent and
          # is ignored if received. &quot;whitelist&quot; means that the user is entitled to
          # access the product set. &quot;includeAll&quot; means that all products are
          # accessible, including products that are approved, products with revoked
          # approval, and products that have never been approved. &quot;allApproved&quot; means
          # that the user is entitled to access all products that are approved for the
          # enterprise. If the value is &quot;allApproved&quot; or &quot;includeAll&quot;, the productId
          # field is ignored. If no value is provided, it is interpreted as
          # &quot;whitelist&quot; for backwards compatibility.
          # Further &quot;allApproved&quot; or &quot;includeAll&quot; does not enable automatic
          # visibility of &quot;alpha&quot; or &quot;beta&quot; tracks for Android app. Use
          # ProductVisibility to enable &quot;alpha&quot; or &quot;beta&quot; tracks per user.
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(enterpriseId, userId, body=None, x__xgafv=None)</code>
  <pre>Updates the details of an EMM-managed user.

Can be used with EMM-managed users only (not Google managed users).
Pass the new details in the
&lt;a href=&quot;/android/work/play/emm-api/v1/users.html&quot;&gt;Users&lt;/a&gt;
resource in the request body. Only the &lt;code&gt;displayName&lt;/code&gt; field
can be changed. Other fields must either be unset or have the
currently active value.

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

{ # A Users resource represents an account associated with an enterprise. The
    # account may be specific to a device or to an individual user (who can then
    # use the account across multiple devices). The account may provide access to
    # managed Google Play only, or to other Google services, depending on the
    # identity model:
    # &lt;ul&gt;&lt;li&gt;The Google managed domain identity model requires synchronization to
    # Google account sources (via &lt;code&gt;primaryEmail&lt;/code&gt;).&lt;/li&gt;
    # &lt;li&gt;The managed Google Play Accounts identity model provides a dynamic means
    # for enterprises to create user or device accounts as needed. These accounts
    # provide access to managed Google Play.&lt;/li&gt;
    # &lt;/ul&gt;
  &quot;accountType&quot;: &quot;A String&quot;, # The type of account that this user represents. A &lt;code&gt;userAccount&lt;/code&gt;
      # can be installed on multiple devices, but a &lt;code&gt;deviceAccount&lt;/code&gt; is
      # specific to a single device. An EMM-managed user (&lt;code&gt;emmManaged&lt;/code&gt;)
      # can be either type (&lt;code&gt;userAccount&lt;/code&gt;, &lt;code&gt;deviceAccount&lt;/code&gt;),
      # but a Google-managed user (&lt;code&gt;googleManaged&lt;/code&gt;) is always a
      # &lt;code&gt;userAccount&lt;/code&gt;.
  &quot;managementType&quot;: &quot;A String&quot;, # The entity that manages the user.  With &lt;code&gt;googleManaged&lt;/code&gt; users,
      # the source of truth is Google so EMMs have to make sure a Google Account
      # exists for the user.  With &lt;code&gt;emmManaged&lt;/code&gt; users, the
      # EMM is in charge.
  &quot;id&quot;: &quot;A String&quot;, # The unique ID for the user.
  &quot;primaryEmail&quot;: &quot;A String&quot;, # The user&#x27;s primary email address, for example, &quot;jsmith@example.com&quot;.
      # Will always be set for Google managed users and not set for EMM managed
      # users.
  &quot;displayName&quot;: &quot;A String&quot;, # The name that will appear in user interfaces. Setting this property is
      # optional when creating EMM-managed users. If you do set this property,
      # use something generic about the organization (such as &quot;Example, Inc.&quot;) or
      # your name (as EMM).
      # Not used for Google-managed user accounts.
      # @mutable androidenterprise.users.update
  &quot;accountIdentifier&quot;: &quot;A String&quot;, # A unique identifier you create for this user, such as &quot;user342&quot; or
      # &quot;asset#44418&quot;. Do not use personally identifiable information (PII) for
      # this property. Must always be set for EMM-managed users.
      # Not set for Google-managed users.
}

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

Returns:
  An object of the form:

    { # A Users resource represents an account associated with an enterprise. The
      # account may be specific to a device or to an individual user (who can then
      # use the account across multiple devices). The account may provide access to
      # managed Google Play only, or to other Google services, depending on the
      # identity model:
      # &lt;ul&gt;&lt;li&gt;The Google managed domain identity model requires synchronization to
      # Google account sources (via &lt;code&gt;primaryEmail&lt;/code&gt;).&lt;/li&gt;
      # &lt;li&gt;The managed Google Play Accounts identity model provides a dynamic means
      # for enterprises to create user or device accounts as needed. These accounts
      # provide access to managed Google Play.&lt;/li&gt;
      # &lt;/ul&gt;
    &quot;accountType&quot;: &quot;A String&quot;, # The type of account that this user represents. A &lt;code&gt;userAccount&lt;/code&gt;
        # can be installed on multiple devices, but a &lt;code&gt;deviceAccount&lt;/code&gt; is
        # specific to a single device. An EMM-managed user (&lt;code&gt;emmManaged&lt;/code&gt;)
        # can be either type (&lt;code&gt;userAccount&lt;/code&gt;, &lt;code&gt;deviceAccount&lt;/code&gt;),
        # but a Google-managed user (&lt;code&gt;googleManaged&lt;/code&gt;) is always a
        # &lt;code&gt;userAccount&lt;/code&gt;.
    &quot;managementType&quot;: &quot;A String&quot;, # The entity that manages the user.  With &lt;code&gt;googleManaged&lt;/code&gt; users,
        # the source of truth is Google so EMMs have to make sure a Google Account
        # exists for the user.  With &lt;code&gt;emmManaged&lt;/code&gt; users, the
        # EMM is in charge.
    &quot;id&quot;: &quot;A String&quot;, # The unique ID for the user.
    &quot;primaryEmail&quot;: &quot;A String&quot;, # The user&#x27;s primary email address, for example, &quot;jsmith@example.com&quot;.
        # Will always be set for Google managed users and not set for EMM managed
        # users.
    &quot;displayName&quot;: &quot;A String&quot;, # The name that will appear in user interfaces. Setting this property is
        # optional when creating EMM-managed users. If you do set this property,
        # use something generic about the organization (such as &quot;Example, Inc.&quot;) or
        # your name (as EMM).
        # Not used for Google-managed user accounts.
        # @mutable androidenterprise.users.update
    &quot;accountIdentifier&quot;: &quot;A String&quot;, # A unique identifier you create for this user, such as &quot;user342&quot; or
        # &quot;asset#44418&quot;. Do not use personally identifiable information (PII) for
        # this property. Must always be set for EMM-managed users.
        # Not set for Google-managed users.
  }</pre>
</div>

</body></html>