<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="displayvideo_v1.html">Display & Video 360 API</a> . <a href="displayvideo_v1.users.html">users</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#bulkEditAssignedUserRoles">bulkEditAssignedUserRoles(userId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Bulk edits user roles for a user. The operation will delete the assigned user roles provided in BulkEditAssignedUserRolesRequest.deletedAssignedUserRoles and then assign the user roles provided in BulkEditAssignedUserRolesRequest.createdAssignedUserRoles. This method has unique authentication requirements. Read the prerequisites in our [Managing Users guide](/display-video/api/guides/users/overview#prerequisites) before using this method. The "Try this method" feature does not work for this method.</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="#create">create(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new user. Returns the newly created user if successful. This method has unique authentication requirements. Read the prerequisites in our [Managing Users guide](/display-video/api/guides/users/overview#prerequisites) before using this method. The "Try this method" feature does not work for this method.</p>
<p class="toc_element">
  <code><a href="#delete">delete(userId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a user. This method has unique authentication requirements. Read the prerequisites in our [Managing Users guide](/display-video/api/guides/users/overview#prerequisites) before using this method. The "Try this method" feature does not work for this method.</p>
<p class="toc_element">
  <code><a href="#get">get(userId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a user. This method has unique authentication requirements. Read the prerequisites in our [Managing Users guide](/display-video/api/guides/users/overview#prerequisites) before using this method. The "Try this method" feature does not work for this method.</p>
<p class="toc_element">
  <code><a href="#list">list(filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists users that are accessible to the current user. If two users have user roles on the same partner or advertiser, they can access each other. This method has unique authentication requirements. Read the prerequisites in our [Managing Users guide](/display-video/api/guides/users/overview#prerequisites) before using this method. The "Try this method" feature does not work for this method.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(userId, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing user. Returns the updated user if successful. This method has unique authentication requirements. Read the prerequisites in our [Managing Users guide](/display-video/api/guides/users/overview#prerequisites) before using this method. The "Try this method" feature does not work for this method.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="bulkEditAssignedUserRoles">bulkEditAssignedUserRoles(userId, body=None, x__xgafv=None)</code>
  <pre>Bulk edits user roles for a user. The operation will delete the assigned user roles provided in BulkEditAssignedUserRolesRequest.deletedAssignedUserRoles and then assign the user roles provided in BulkEditAssignedUserRolesRequest.createdAssignedUserRoles. This method has unique authentication requirements. Read the prerequisites in our [Managing Users guide](/display-video/api/guides/users/overview#prerequisites) before using this method. The &quot;Try this method&quot; feature does not work for this method.

Args:
  userId: string, Required. The ID of the user to which the assigned user roles belong. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for BulkEditAssignedUserRoles.
  &quot;createdAssignedUserRoles&quot;: [ # The assigned user roles to create in batch, specified as a list of AssignedUserRoles.
    { # A single assigned user role, which defines a user&#x27;s authorized interaction with a specified partner or advertiser.
      &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
      &quot;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
      &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
      &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
    },
  ],
  &quot;deletedAssignedUserRoles&quot;: [ # The assigned user roles to delete in batch, specified as a list of assigned_user_role_ids. The format of assigned_user_role_id is `entityType-entityid`, for example `partner-123`.
    &quot;A String&quot;,
  ],
}

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

Returns:
  An object of the form:

    {
  &quot;createdAssignedUserRoles&quot;: [ # The list of assigned user roles that have been successfully created. This list will be absent if empty.
    { # A single assigned user role, which defines a user&#x27;s authorized interaction with a specified partner or advertiser.
      &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
      &quot;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
      &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
      &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
    },
  ],
}</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="create">create(body=None, x__xgafv=None)</code>
  <pre>Creates a new user. Returns the newly created user if successful. This method has unique authentication requirements. Read the prerequisites in our [Managing Users guide](/display-video/api/guides/users/overview#prerequisites) before using this method. The &quot;Try this method&quot; feature does not work for this method.

Args:
  body: object, The request body.
    The object takes the form of:

{ # A single user in Display &amp; Video 360.
  &quot;assignedUserRoles&quot;: [ # The assigned user roles. Required in CreateUser. Output only in UpdateUser. Can only be updated through BulkEditAssignedUserRoles.
    { # A single assigned user role, which defines a user&#x27;s authorized interaction with a specified partner or advertiser.
      &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
      &quot;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
      &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
      &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
    },
  ],
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the user. Must be UTF-8 encoded with a maximum size of 240 bytes.
  &quot;email&quot;: &quot;A String&quot;, # Required. Immutable. The email address used to identify the user.
  &quot;lastLoginTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the user last logged in DV360 UI.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the user.
  &quot;userId&quot;: &quot;A String&quot;, # Output only. The unique ID of the user. Assigned by the system.
}

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

Returns:
  An object of the form:

    { # A single user in Display &amp; Video 360.
  &quot;assignedUserRoles&quot;: [ # The assigned user roles. Required in CreateUser. Output only in UpdateUser. Can only be updated through BulkEditAssignedUserRoles.
    { # A single assigned user role, which defines a user&#x27;s authorized interaction with a specified partner or advertiser.
      &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
      &quot;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
      &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
      &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
    },
  ],
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the user. Must be UTF-8 encoded with a maximum size of 240 bytes.
  &quot;email&quot;: &quot;A String&quot;, # Required. Immutable. The email address used to identify the user.
  &quot;lastLoginTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the user last logged in DV360 UI.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the user.
  &quot;userId&quot;: &quot;A String&quot;, # Output only. The unique ID of the user. Assigned by the system.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(userId, x__xgafv=None)</code>
  <pre>Deletes a user. This method has unique authentication requirements. Read the prerequisites in our [Managing Users guide](/display-video/api/guides/users/overview#prerequisites) before using this method. The &quot;Try this method&quot; feature does not work for this method.

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

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(userId, x__xgafv=None)</code>
  <pre>Gets a user. This method has unique authentication requirements. Read the prerequisites in our [Managing Users guide](/display-video/api/guides/users/overview#prerequisites) before using this method. The &quot;Try this method&quot; feature does not work for this method.

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

Returns:
  An object of the form:

    { # A single user in Display &amp; Video 360.
  &quot;assignedUserRoles&quot;: [ # The assigned user roles. Required in CreateUser. Output only in UpdateUser. Can only be updated through BulkEditAssignedUserRoles.
    { # A single assigned user role, which defines a user&#x27;s authorized interaction with a specified partner or advertiser.
      &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
      &quot;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
      &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
      &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
    },
  ],
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the user. Must be UTF-8 encoded with a maximum size of 240 bytes.
  &quot;email&quot;: &quot;A String&quot;, # Required. Immutable. The email address used to identify the user.
  &quot;lastLoginTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the user last logged in DV360 UI.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the user.
  &quot;userId&quot;: &quot;A String&quot;, # Output only. The unique ID of the user. Assigned by the system.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists users that are accessible to the current user. If two users have user roles on the same partner or advertiser, they can access each other. This method has unique authentication requirements. Read the prerequisites in our [Managing Users guide](/display-video/api/guides/users/overview#prerequisites) before using this method. The &quot;Try this method&quot; feature does not work for this method.

Args:
  filter: string, Allows filtering by user fields. Supported syntax: * Filter expressions are made up of one or more restrictions. * Restrictions can be combined by the logical operator `AND`. * A restriction has the form of `{field} {operator} {value}`. * The `budget.budget_segments.date_range.end_date` field must use the `LESS THAN (&lt;)` operator. * The `displayName and `email` field must use the `HAS (:)` operator. * All other fields must use the `EQUALS (=)` operator. Supported fields: * `assignedUserRole.advertiserId` * `assignedUserRole.entityType` * This is synthetic field of `AssignedUserRole` used for filtering. Identifies the type of entity to which the user role is assigned. Valid values are `Partner` and `Advertiser`. * `assignedUserRole.parentPartnerId` * This is a synthetic field of `AssignedUserRole` used for filtering. Identifies the parent partner of the entity to which the user role is assigned. * `assignedUserRole.partnerId` * `assignedUserRole.userRole` * `displayName` * `email` Examples: * The user with `displayName` containing &quot;foo&quot;: `displayName:&quot;foo&quot;` * The user with `email` containing &quot;bar&quot;: `email:&quot;bar&quot;` * All users with standard user roles: `assignedUserRole.userRole=&quot;STANDARD&quot;` * All users with user roles for partner 123: `assignedUserRole.partnerId=&quot;123&quot;` * All users with user roles for advertiser 123: `assignedUserRole.advertiserId=&quot;123&quot;` * All users with partner level user roles: `entityType=&quot;PARTNER&quot;` * All users with user roles for partner 123 and advertisers under partner 123: `parentPartnerId=&quot;123&quot;` The length of this field should be no more than 500 characters. Reference our [filter `LIST` requests](/display-video/api/guides/how-tos/filters) guide for more information.
  orderBy: string, Field by which to sort the list. Acceptable values are: * `displayName` (default) The default sorting order is ascending. To specify descending order for a field, a suffix &quot;desc&quot; should be added to the field name. For example, `displayName desc`.
  pageSize: integer, Requested page size. Must be between `1` and `200`. If unspecified will default to `100`.
  pageToken: string, A token identifying a page of results the server should return. Typically, this is the value of next_page_token returned from the previous call to `ListUsers` method. If not specified, the first page of results will be returned.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results. Pass this value in the page_token field in the subsequent call to `ListUsers` method to retrieve the next page of results. This token will be absent if there are no more results to return.
  &quot;users&quot;: [ # The list of users. This list will be absent if empty.
    { # A single user in Display &amp; Video 360.
      &quot;assignedUserRoles&quot;: [ # The assigned user roles. Required in CreateUser. Output only in UpdateUser. Can only be updated through BulkEditAssignedUserRoles.
        { # A single assigned user role, which defines a user&#x27;s authorized interaction with a specified partner or advertiser.
          &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
          &quot;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
          &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
          &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
        },
      ],
      &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the user. Must be UTF-8 encoded with a maximum size of 240 bytes.
      &quot;email&quot;: &quot;A String&quot;, # Required. Immutable. The email address used to identify the user.
      &quot;lastLoginTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the user last logged in DV360 UI.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the user.
      &quot;userId&quot;: &quot;A String&quot;, # Output only. The unique ID of the user. Assigned by the system.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next()</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="patch">patch(userId, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates an existing user. Returns the updated user if successful. This method has unique authentication requirements. Read the prerequisites in our [Managing Users guide](/display-video/api/guides/users/overview#prerequisites) before using this method. The &quot;Try this method&quot; feature does not work for this method.

Args:
  userId: string, Output only. The unique ID of the user. Assigned by the system. (required)
  body: object, The request body.
    The object takes the form of:

{ # A single user in Display &amp; Video 360.
  &quot;assignedUserRoles&quot;: [ # The assigned user roles. Required in CreateUser. Output only in UpdateUser. Can only be updated through BulkEditAssignedUserRoles.
    { # A single assigned user role, which defines a user&#x27;s authorized interaction with a specified partner or advertiser.
      &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
      &quot;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
      &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
      &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
    },
  ],
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the user. Must be UTF-8 encoded with a maximum size of 240 bytes.
  &quot;email&quot;: &quot;A String&quot;, # Required. Immutable. The email address used to identify the user.
  &quot;lastLoginTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the user last logged in DV360 UI.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the user.
  &quot;userId&quot;: &quot;A String&quot;, # Output only. The unique ID of the user. Assigned by the system.
}

  updateMask: string, Required. The mask to control which fields to update.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A single user in Display &amp; Video 360.
  &quot;assignedUserRoles&quot;: [ # The assigned user roles. Required in CreateUser. Output only in UpdateUser. Can only be updated through BulkEditAssignedUserRoles.
    { # A single assigned user role, which defines a user&#x27;s authorized interaction with a specified partner or advertiser.
      &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
      &quot;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
      &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
      &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
    },
  ],
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the user. Must be UTF-8 encoded with a maximum size of 240 bytes.
  &quot;email&quot;: &quot;A String&quot;, # Required. Immutable. The email address used to identify the user.
  &quot;lastLoginTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the user last logged in DV360 UI.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the user.
  &quot;userId&quot;: &quot;A String&quot;, # Output only. The unique ID of the user. Assigned by the system.
}</pre>
</div>

</body></html>