<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.</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.</p>
<p class="toc_element">
  <code><a href="#delete">delete(userId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a user.</p>
<p class="toc_element">
  <code><a href="#get">get(userId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a user.</p>
<p class="toc_element">
  <code><a href="#list">list(filter=None, orderBy=None, pageToken=None, pageSize=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.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#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.</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.

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;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;,
    ],
    &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;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
        &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
        &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
        &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
      },
    ],
  }

  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;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
        &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
        &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
        &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
      },
    ],
  }</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.

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

{ # A single user in Display &amp; Video 360.
  &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;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;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
      &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
      &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
      &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the user.
  &quot;email&quot;: &quot;A String&quot;, # Required. Immutable. The email address used to identify 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;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;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;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
        &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
        &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
        &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the user.
    &quot;email&quot;: &quot;A String&quot;, # Required. Immutable. The email address used to identify 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.

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); } The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(userId, x__xgafv=None)</code>
  <pre>Gets a user.

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;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;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;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
        &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
        &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
        &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the user.
    &quot;email&quot;: &quot;A String&quot;, # Required. Immutable. The email address used to identify 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, pageToken=None, pageSize=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.

Args:
  filter: string, Allows filtering by user properties. 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 operator must be `CONTAINS (:)` or `EQUALS (=)`. * The operator must be `CONTAINS (:)` for the following fields: - `displayName` - `email` * The operator must be `EQUALS (=)` for the following fields: - `assignedUserRole.userRole` - `assignedUserRole.partnerId` - `assignedUserRole.advertiserId` - `assignedUserRole.entityType`: A 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`: A synthetic field of AssignedUserRole used for filtering. Identifies the parent partner of the entity to which the user role is assigned.&quot; Examples: * The user with displayName containing `foo`: `displayName:&quot;foo&quot;` * The user with email containing `bar`: `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.
  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`.
  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.
  pageSize: integer, Requested page size. Must be between `1` and `100`. If unspecified will default to `100`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;users&quot;: [ # The list of users. This list will be absent if empty.
      { # A single user in Display &amp; Video 360.
        &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;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;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
            &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
            &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
            &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the user.
        &quot;email&quot;: &quot;A String&quot;, # Required. Immutable. The email address used to identify the user.
        &quot;userId&quot;: &quot;A String&quot;, # Output only. The unique ID of the user. Assigned by the system.
      },
    ],
    &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.
  }</pre>
</div>

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

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

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

<div class="method">
    <code class="details" id="patch">patch(userId, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates an existing user. Returns the updated user if successful.

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;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;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;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
      &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
      &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
      &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the user.
  &quot;email&quot;: &quot;A String&quot;, # Required. Immutable. The email address used to identify 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;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;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;assignedUserRoleId&quot;: &quot;A String&quot;, # Output only. The ID of the assigned user role.
        &quot;userRole&quot;: &quot;A String&quot;, # Required. The user role to assign to a user for the entity.
        &quot;advertiserId&quot;: &quot;A String&quot;, # The ID of the advertiser that the assigend user role applies to.
        &quot;partnerId&quot;: &quot;A String&quot;, # The ID of the partner that the assigned user role applies to.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the user.
    &quot;email&quot;: &quot;A String&quot;, # Required. Immutable. The email address used to identify 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>