<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="cloudidentity_v1.html">Cloud Identity API</a> . <a href="cloudidentity_v1.groups.html">groups</a> . <a href="cloudidentity_v1.groups.memberships.html">memberships</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#checkTransitiveMembership">checkTransitiveMembership(parent, query=None, x__xgafv=None)</a></code></p>
<p class="firstline">Check a potential member for membership in a group. **Note:** This feature is only available to Google Workspace Enterprise Standard, Enterprise Plus, and Enterprise for Education; and Cloud Identity Premium accounts. If the account of the member is not one of these, a 403 (PERMISSION_DENIED) HTTP status code will be returned. A member has membership to a group as long as there is a single viewable transitive membership between the group and the member. The actor must have view permissions to at least one transitive membership between the member and group.</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(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a `Membership`.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a `Membership`.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves a `Membership`.</p>
<p class="toc_element">
  <code><a href="#getMembershipGraph">getMembershipGraph(parent, query=None, x__xgafv=None)</a></code></p>
<p class="firstline">Get a membership graph of just a member or both a member and a group. **Note:** This feature is only available to Google Workspace Enterprise Standard, Enterprise Plus, and Enterprise for Education; and Cloud Identity Premium accounts. If the account of the member is not one of these, a 403 (PERMISSION_DENIED) HTTP status code will be returned. Given a member, the response will contain all membership paths from the member. Given both a group and a member, the response will contain all membership paths between the group and the member.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the `Membership`s within a `Group`.</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="#lookup">lookup(parent, memberKey_id=None, memberKey_namespace=None, x__xgafv=None)</a></code></p>
<p class="firstline">Looks up the [resource name](https://cloud.google.com/apis/design/resource_names) of a `Membership` by its `EntityKey`.</p>
<p class="toc_element">
  <code><a href="#modifyMembershipRoles">modifyMembershipRoles(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Modifies the `MembershipRole`s of a `Membership`.</p>
<p class="toc_element">
  <code><a href="#searchTransitiveGroups">searchTransitiveGroups(parent, pageSize=None, pageToken=None, query=None, x__xgafv=None)</a></code></p>
<p class="firstline">Search transitive groups of a member. **Note:** This feature is only available to Google Workspace Enterprise Standard, Enterprise Plus, and Enterprise for Education; and Cloud Identity Premium accounts. If the account of the member is not one of these, a 403 (PERMISSION_DENIED) HTTP status code will be returned. A transitive group is any group that has a direct or indirect membership to the member. Actor must have view permissions all transitive groups.</p>
<p class="toc_element">
  <code><a href="#searchTransitiveGroups_next">searchTransitiveGroups_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="#searchTransitiveMemberships">searchTransitiveMemberships(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Search transitive memberships of a group. **Note:** This feature is only available to Google Workspace Enterprise Standard, Enterprise Plus, and Enterprise for Education; and Cloud Identity Premium accounts. If the account of the group is not one of these, a 403 (PERMISSION_DENIED) HTTP status code will be returned. A transitive membership is any direct or indirect membership of a group. Actor must have view permissions to all transitive memberships.</p>
<p class="toc_element">
  <code><a href="#searchTransitiveMemberships_next">searchTransitiveMemberships_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="checkTransitiveMembership">checkTransitiveMembership(parent, query=None, x__xgafv=None)</code>
  <pre>Check a potential member for membership in a group. **Note:** This feature is only available to Google Workspace Enterprise Standard, Enterprise Plus, and Enterprise for Education; and Cloud Identity Premium accounts. If the account of the member is not one of these, a 403 (PERMISSION_DENIED) HTTP status code will be returned. A member has membership to a group as long as there is a single viewable transitive membership between the group and the member. The actor must have view permissions to at least one transitive membership between the member and group.

Args:
  parent: string, [Resource name](https://cloud.google.com/apis/design/resource_names) of the group to check the transitive membership in. Format: `groups/{group}`, where `group` is the unique id assigned to the Group to which the Membership belongs to. (required)
  query: string, Required. A CEL expression that MUST include member specification. This is a `required` field. Certain groups are uniquely identified by both a &#x27;member_key_id&#x27; and a &#x27;member_key_namespace&#x27;, which requires an additional query input: &#x27;member_key_namespace&#x27;. Example query: `member_key_id == &#x27;member_key_id_value&#x27;`
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for MembershipsService.CheckTransitiveMembership.
  &quot;hasMembership&quot;: True or False, # Response does not include the possible roles of a member since the behavior of this rpc is not all-or-nothing unlike the other rpcs. So, it may not be possible to list all the roles definitively, due to possible lack of authorization in some of the paths.
}</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(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a `Membership`.

Args:
  parent: string, Required. The parent `Group` resource under which to create the `Membership`. Must be of the form `groups/{group}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A membership within the Cloud Identity Groups API. A `Membership` defines a relationship between a `Group` and an entity belonging to that `Group`, referred to as a &quot;member&quot;.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the `Membership` was created.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The [resource name](https://cloud.google.com/apis/design/resource_names) of the `Membership`. Shall be of the form `groups/{group}/memberships/{membership}`.
  &quot;preferredMemberKey&quot;: { # A unique identifier for an entity in the Cloud Identity Groups API. An entity can represent either a group with an optional `namespace` or a user without a `namespace`. The combination of `id` and `namespace` must be unique; however, the same `id` can be used with different `namespace`s. # Required. Immutable. The `EntityKey` of the member.
    &quot;id&quot;: &quot;A String&quot;, # The ID of the entity. For Google-managed entities, the `id` should be the email address of an existing group or user. For external-identity-mapped entities, the `id` must be a string conforming to the Identity Source&#x27;s requirements. Must be unique within a `namespace`.
    &quot;namespace&quot;: &quot;A String&quot;, # The namespace in which the entity exists. If not specified, the `EntityKey` represents a Google-managed entity such as a Google user or a Google Group. If specified, the `EntityKey` represents an external-identity-mapped group. The namespace must correspond to an identity source created in Admin Console and must be in the form of `identitysources/{identity_source}`.
  },
  &quot;roles&quot;: [ # The `MembershipRole`s that apply to the `Membership`. If unspecified, defaults to a single `MembershipRole` with `name` `MEMBER`. Must not contain duplicate `MembershipRole`s with the same `name`.
    { # A membership role within the Cloud Identity Groups API. A `MembershipRole` defines the privileges granted to a `Membership`.
      &quot;expiryDetail&quot;: { # The `MembershipRole` expiry details. # The expiry details of the `MembershipRole`. Expiry details are only supported for `MEMBER` `MembershipRoles`. May be set if `name` is `MEMBER`. Must not be set if `name` is any other value.
        &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the `MembershipRole` will expire.
      },
      &quot;name&quot;: &quot;A String&quot;, # The name of the `MembershipRole`. Must be one of `OWNER`, `MANAGER`, `MEMBER`.
    },
  ],
  &quot;type&quot;: &quot;A String&quot;, # Output only. The type of the membership.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time when the `Membership` was last updated.
}

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a `Membership`.

Args:
  name: string, Required. The [resource name](https://cloud.google.com/apis/design/resource_names) of the `Membership` to delete. Must be of the form `groups/{group}/memberships/{membership}` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Retrieves a `Membership`.

Args:
  name: string, Required. The [resource name](https://cloud.google.com/apis/design/resource_names) of the `Membership` to retrieve. Must be of the form `groups/{group}/memberships/{membership}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A membership within the Cloud Identity Groups API. A `Membership` defines a relationship between a `Group` and an entity belonging to that `Group`, referred to as a &quot;member&quot;.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the `Membership` was created.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The [resource name](https://cloud.google.com/apis/design/resource_names) of the `Membership`. Shall be of the form `groups/{group}/memberships/{membership}`.
  &quot;preferredMemberKey&quot;: { # A unique identifier for an entity in the Cloud Identity Groups API. An entity can represent either a group with an optional `namespace` or a user without a `namespace`. The combination of `id` and `namespace` must be unique; however, the same `id` can be used with different `namespace`s. # Required. Immutable. The `EntityKey` of the member.
    &quot;id&quot;: &quot;A String&quot;, # The ID of the entity. For Google-managed entities, the `id` should be the email address of an existing group or user. For external-identity-mapped entities, the `id` must be a string conforming to the Identity Source&#x27;s requirements. Must be unique within a `namespace`.
    &quot;namespace&quot;: &quot;A String&quot;, # The namespace in which the entity exists. If not specified, the `EntityKey` represents a Google-managed entity such as a Google user or a Google Group. If specified, the `EntityKey` represents an external-identity-mapped group. The namespace must correspond to an identity source created in Admin Console and must be in the form of `identitysources/{identity_source}`.
  },
  &quot;roles&quot;: [ # The `MembershipRole`s that apply to the `Membership`. If unspecified, defaults to a single `MembershipRole` with `name` `MEMBER`. Must not contain duplicate `MembershipRole`s with the same `name`.
    { # A membership role within the Cloud Identity Groups API. A `MembershipRole` defines the privileges granted to a `Membership`.
      &quot;expiryDetail&quot;: { # The `MembershipRole` expiry details. # The expiry details of the `MembershipRole`. Expiry details are only supported for `MEMBER` `MembershipRoles`. May be set if `name` is `MEMBER`. Must not be set if `name` is any other value.
        &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the `MembershipRole` will expire.
      },
      &quot;name&quot;: &quot;A String&quot;, # The name of the `MembershipRole`. Must be one of `OWNER`, `MANAGER`, `MEMBER`.
    },
  ],
  &quot;type&quot;: &quot;A String&quot;, # Output only. The type of the membership.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time when the `Membership` was last updated.
}</pre>
</div>

<div class="method">
    <code class="details" id="getMembershipGraph">getMembershipGraph(parent, query=None, x__xgafv=None)</code>
  <pre>Get a membership graph of just a member or both a member and a group. **Note:** This feature is only available to Google Workspace Enterprise Standard, Enterprise Plus, and Enterprise for Education; and Cloud Identity Premium accounts. If the account of the member is not one of these, a 403 (PERMISSION_DENIED) HTTP status code will be returned. Given a member, the response will contain all membership paths from the member. Given both a group and a member, the response will contain all membership paths between the group and the member.

Args:
  parent: string, Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the group to search transitive memberships in. Format: `groups/{group}`, where `group` is the unique ID assigned to the Group to which the Membership belongs to. group can be a wildcard collection id &quot;-&quot;. When a group is specified, the membership graph will be constrained to paths between the member (defined in the query) and the parent. If a wildcard collection is provided, all membership paths connected to the member will be returned. (required)
  query: string, Required. A CEL expression that MUST include member specification AND label(s). Certain groups are uniquely identified by both a &#x27;member_key_id&#x27; and a &#x27;member_key_namespace&#x27;, which requires an additional query input: &#x27;member_key_namespace&#x27;. Example query: `member_key_id == &#x27;member_key_id_value&#x27; &amp;&amp; in labels`
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, view=None, x__xgafv=None)</code>
  <pre>Lists the `Membership`s within a `Group`.

Args:
  parent: string, Required. The parent `Group` resource under which to lookup the `Membership` name. Must be of the form `groups/{group}`. (required)
  pageSize: integer, The maximum number of results to return. Note that the number of results returned may be less than this value even if there are more available results. To fetch all results, clients must continue calling this method repeatedly until the response no longer contains a `next_page_token`. If unspecified, defaults to 200 for `GroupView.BASIC` and to 50 for `GroupView.FULL`. Must not be greater than 1000 for `GroupView.BASIC` or 500 for `GroupView.FULL`.
  pageToken: string, The `next_page_token` value returned from a previous search request, if any.
  view: string, The level of detail to be returned. If unspecified, defaults to `View.BASIC`.
    Allowed values
      VIEW_UNSPECIFIED - Default. Should not be used.
      BASIC - Only basic resource information is returned.
      FULL - All resource information is returned.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for MembershipsService.ListMemberships.
  &quot;memberships&quot;: [ # The `Membership`s under the specified `parent`.
    { # A membership within the Cloud Identity Groups API. A `Membership` defines a relationship between a `Group` and an entity belonging to that `Group`, referred to as a &quot;member&quot;.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the `Membership` was created.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The [resource name](https://cloud.google.com/apis/design/resource_names) of the `Membership`. Shall be of the form `groups/{group}/memberships/{membership}`.
      &quot;preferredMemberKey&quot;: { # A unique identifier for an entity in the Cloud Identity Groups API. An entity can represent either a group with an optional `namespace` or a user without a `namespace`. The combination of `id` and `namespace` must be unique; however, the same `id` can be used with different `namespace`s. # Required. Immutable. The `EntityKey` of the member.
        &quot;id&quot;: &quot;A String&quot;, # The ID of the entity. For Google-managed entities, the `id` should be the email address of an existing group or user. For external-identity-mapped entities, the `id` must be a string conforming to the Identity Source&#x27;s requirements. Must be unique within a `namespace`.
        &quot;namespace&quot;: &quot;A String&quot;, # The namespace in which the entity exists. If not specified, the `EntityKey` represents a Google-managed entity such as a Google user or a Google Group. If specified, the `EntityKey` represents an external-identity-mapped group. The namespace must correspond to an identity source created in Admin Console and must be in the form of `identitysources/{identity_source}`.
      },
      &quot;roles&quot;: [ # The `MembershipRole`s that apply to the `Membership`. If unspecified, defaults to a single `MembershipRole` with `name` `MEMBER`. Must not contain duplicate `MembershipRole`s with the same `name`.
        { # A membership role within the Cloud Identity Groups API. A `MembershipRole` defines the privileges granted to a `Membership`.
          &quot;expiryDetail&quot;: { # The `MembershipRole` expiry details. # The expiry details of the `MembershipRole`. Expiry details are only supported for `MEMBER` `MembershipRoles`. May be set if `name` is `MEMBER`. Must not be set if `name` is any other value.
            &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the `MembershipRole` will expire.
          },
          &quot;name&quot;: &quot;A String&quot;, # The name of the `MembershipRole`. Must be one of `OWNER`, `MANAGER`, `MEMBER`.
        },
      ],
      &quot;type&quot;: &quot;A String&quot;, # Output only. The type of the membership.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time when the `Membership` was last updated.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A continuation token to retrieve the next page of results, or empty if there are no more results available.
}</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="lookup">lookup(parent, memberKey_id=None, memberKey_namespace=None, x__xgafv=None)</code>
  <pre>Looks up the [resource name](https://cloud.google.com/apis/design/resource_names) of a `Membership` by its `EntityKey`.

Args:
  parent: string, Required. The parent `Group` resource under which to lookup the `Membership` name. Must be of the form `groups/{group}`. (required)
  memberKey_id: string, The ID of the entity. For Google-managed entities, the `id` should be the email address of an existing group or user. For external-identity-mapped entities, the `id` must be a string conforming to the Identity Source&#x27;s requirements. Must be unique within a `namespace`.
  memberKey_namespace: string, The namespace in which the entity exists. If not specified, the `EntityKey` represents a Google-managed entity such as a Google user or a Google Group. If specified, the `EntityKey` represents an external-identity-mapped group. The namespace must correspond to an identity source created in Admin Console and must be in the form of `identitysources/{identity_source}`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for MembershipsService.LookupMembershipName.
  &quot;name&quot;: &quot;A String&quot;, # The [resource name](https://cloud.google.com/apis/design/resource_names) of the looked-up `Membership`. Must be of the form `groups/{group}/memberships/{membership}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="modifyMembershipRoles">modifyMembershipRoles(name, body=None, x__xgafv=None)</code>
  <pre>Modifies the `MembershipRole`s of a `Membership`.

Args:
  name: string, Required. The [resource name](https://cloud.google.com/apis/design/resource_names) of the `Membership` whose roles are to be modified. Must be of the form `groups/{group}/memberships/{membership}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for MembershipsService.ModifyMembershipRoles.
  &quot;addRoles&quot;: [ # The `MembershipRole`s to be added. Adding or removing roles in the same request as updating roles is not supported. Must not be set if `update_roles_params` is set.
    { # A membership role within the Cloud Identity Groups API. A `MembershipRole` defines the privileges granted to a `Membership`.
      &quot;expiryDetail&quot;: { # The `MembershipRole` expiry details. # The expiry details of the `MembershipRole`. Expiry details are only supported for `MEMBER` `MembershipRoles`. May be set if `name` is `MEMBER`. Must not be set if `name` is any other value.
        &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the `MembershipRole` will expire.
      },
      &quot;name&quot;: &quot;A String&quot;, # The name of the `MembershipRole`. Must be one of `OWNER`, `MANAGER`, `MEMBER`.
    },
  ],
  &quot;removeRoles&quot;: [ # The `name`s of the `MembershipRole`s to be removed. Adding or removing roles in the same request as updating roles is not supported. It is not possible to remove the `MEMBER` `MembershipRole`. If you wish to delete a `Membership`, call MembershipsService.DeleteMembership instead. Must not contain `MEMBER`. Must not be set if `update_roles_params` is set.
    &quot;A String&quot;,
  ],
  &quot;updateRolesParams&quot;: [ # The `MembershipRole`s to be updated. Updating roles in the same request as adding or removing roles is not supported. Must not be set if either `add_roles` or `remove_roles` is set.
    { # The details of an update to a `MembershipRole`.
      &quot;fieldMask&quot;: &quot;A String&quot;, # The fully-qualified names of fields to update. May only contain the field `expiry_detail.expire_time`.
      &quot;membershipRole&quot;: { # A membership role within the Cloud Identity Groups API. A `MembershipRole` defines the privileges granted to a `Membership`. # The `MembershipRole`s to be updated. Only `MEMBER` `MembershipRole` can currently be updated.
        &quot;expiryDetail&quot;: { # The `MembershipRole` expiry details. # The expiry details of the `MembershipRole`. Expiry details are only supported for `MEMBER` `MembershipRoles`. May be set if `name` is `MEMBER`. Must not be set if `name` is any other value.
          &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the `MembershipRole` will expire.
        },
        &quot;name&quot;: &quot;A String&quot;, # The name of the `MembershipRole`. Must be one of `OWNER`, `MANAGER`, `MEMBER`.
      },
    },
  ],
}

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

Returns:
  An object of the form:

    { # The response message for MembershipsService.ModifyMembershipRoles.
  &quot;membership&quot;: { # A membership within the Cloud Identity Groups API. A `Membership` defines a relationship between a `Group` and an entity belonging to that `Group`, referred to as a &quot;member&quot;. # The `Membership` resource after modifying its `MembershipRole`s.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the `Membership` was created.
    &quot;name&quot;: &quot;A String&quot;, # Output only. The [resource name](https://cloud.google.com/apis/design/resource_names) of the `Membership`. Shall be of the form `groups/{group}/memberships/{membership}`.
    &quot;preferredMemberKey&quot;: { # A unique identifier for an entity in the Cloud Identity Groups API. An entity can represent either a group with an optional `namespace` or a user without a `namespace`. The combination of `id` and `namespace` must be unique; however, the same `id` can be used with different `namespace`s. # Required. Immutable. The `EntityKey` of the member.
      &quot;id&quot;: &quot;A String&quot;, # The ID of the entity. For Google-managed entities, the `id` should be the email address of an existing group or user. For external-identity-mapped entities, the `id` must be a string conforming to the Identity Source&#x27;s requirements. Must be unique within a `namespace`.
      &quot;namespace&quot;: &quot;A String&quot;, # The namespace in which the entity exists. If not specified, the `EntityKey` represents a Google-managed entity such as a Google user or a Google Group. If specified, the `EntityKey` represents an external-identity-mapped group. The namespace must correspond to an identity source created in Admin Console and must be in the form of `identitysources/{identity_source}`.
    },
    &quot;roles&quot;: [ # The `MembershipRole`s that apply to the `Membership`. If unspecified, defaults to a single `MembershipRole` with `name` `MEMBER`. Must not contain duplicate `MembershipRole`s with the same `name`.
      { # A membership role within the Cloud Identity Groups API. A `MembershipRole` defines the privileges granted to a `Membership`.
        &quot;expiryDetail&quot;: { # The `MembershipRole` expiry details. # The expiry details of the `MembershipRole`. Expiry details are only supported for `MEMBER` `MembershipRoles`. May be set if `name` is `MEMBER`. Must not be set if `name` is any other value.
          &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the `MembershipRole` will expire.
        },
        &quot;name&quot;: &quot;A String&quot;, # The name of the `MembershipRole`. Must be one of `OWNER`, `MANAGER`, `MEMBER`.
      },
    ],
    &quot;type&quot;: &quot;A String&quot;, # Output only. The type of the membership.
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time when the `Membership` was last updated.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="searchTransitiveGroups">searchTransitiveGroups(parent, pageSize=None, pageToken=None, query=None, x__xgafv=None)</code>
  <pre>Search transitive groups of a member. **Note:** This feature is only available to Google Workspace Enterprise Standard, Enterprise Plus, and Enterprise for Education; and Cloud Identity Premium accounts. If the account of the member is not one of these, a 403 (PERMISSION_DENIED) HTTP status code will be returned. A transitive group is any group that has a direct or indirect membership to the member. Actor must have view permissions all transitive groups.

Args:
  parent: string, [Resource name](https://cloud.google.com/apis/design/resource_names) of the group to search transitive memberships in. Format: `groups/{group}`, where `group` is always &#x27;-&#x27; as this API will search across all groups for a given member. (required)
  pageSize: integer, The default page size is 200 (max 1000).
  pageToken: string, The next_page_token value returned from a previous list request, if any.
  query: string, Required. A CEL expression that MUST include member specification AND label(s). This is a `required` field. Users can search on label attributes of groups. CONTAINS match (&#x27;in&#x27;) is supported on labels. Identity-mapped groups are uniquely identified by both a `member_key_id` and a `member_key_namespace`, which requires an additional query input: `member_key_namespace`. Example query: `member_key_id == &#x27;member_key_id_value&#x27; &amp;&amp; in labels`
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for MembershipsService.SearchTransitiveGroups.
  &quot;memberships&quot;: [ # List of transitive groups satisfying the query.
    { # Message representing a transitive group of a user or a group.
      &quot;displayName&quot;: &quot;A String&quot;, # Display name for this group.
      &quot;group&quot;: &quot;A String&quot;, # Resource name for this group.
      &quot;groupKey&quot;: { # A unique identifier for an entity in the Cloud Identity Groups API. An entity can represent either a group with an optional `namespace` or a user without a `namespace`. The combination of `id` and `namespace` must be unique; however, the same `id` can be used with different `namespace`s. # Entity key has an id and a namespace. In case of discussion forums, the id will be an email address without a namespace.
        &quot;id&quot;: &quot;A String&quot;, # The ID of the entity. For Google-managed entities, the `id` should be the email address of an existing group or user. For external-identity-mapped entities, the `id` must be a string conforming to the Identity Source&#x27;s requirements. Must be unique within a `namespace`.
        &quot;namespace&quot;: &quot;A String&quot;, # The namespace in which the entity exists. If not specified, the `EntityKey` represents a Google-managed entity such as a Google user or a Google Group. If specified, the `EntityKey` represents an external-identity-mapped group. The namespace must correspond to an identity source created in Admin Console and must be in the form of `identitysources/{identity_source}`.
      },
      &quot;labels&quot;: { # Labels for Group resource.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;relationType&quot;: &quot;A String&quot;, # The relation between the member and the transitive group.
      &quot;roles&quot;: [ # Membership roles of the member for the group.
        { # Message representing the role of a TransitiveMembership.
          &quot;role&quot;: &quot;A String&quot;, # TransitiveMembershipRole in string format. Currently supported TransitiveMembershipRoles: `&quot;MEMBER&quot;`, `&quot;OWNER&quot;`, and `&quot;MANAGER&quot;`.
        },
      ],
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results available for listing.
}</pre>
</div>

<div class="method">
    <code class="details" id="searchTransitiveGroups_next">searchTransitiveGroups_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="searchTransitiveMemberships">searchTransitiveMemberships(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Search transitive memberships of a group. **Note:** This feature is only available to Google Workspace Enterprise Standard, Enterprise Plus, and Enterprise for Education; and Cloud Identity Premium accounts. If the account of the group is not one of these, a 403 (PERMISSION_DENIED) HTTP status code will be returned. A transitive membership is any direct or indirect membership of a group. Actor must have view permissions to all transitive memberships.

Args:
  parent: string, [Resource name](https://cloud.google.com/apis/design/resource_names) of the group to search transitive memberships in. Format: `groups/{group}`, where `group` is the unique ID assigned to the Group. (required)
  pageSize: integer, The default page size is 200 (max 1000).
  pageToken: string, The next_page_token value returned from a previous list request, if any.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for MembershipsService.SearchTransitiveMemberships.
  &quot;memberships&quot;: [ # List of transitive members satisfying the query.
    { # Message representing a transitive membership of a group.
      &quot;member&quot;: &quot;A String&quot;, # Resource name for this member.
      &quot;preferredMemberKey&quot;: [ # Entity key has an id and a namespace. In case of discussion forums, the id will be an email address without a namespace.
        { # A unique identifier for an entity in the Cloud Identity Groups API. An entity can represent either a group with an optional `namespace` or a user without a `namespace`. The combination of `id` and `namespace` must be unique; however, the same `id` can be used with different `namespace`s.
          &quot;id&quot;: &quot;A String&quot;, # The ID of the entity. For Google-managed entities, the `id` should be the email address of an existing group or user. For external-identity-mapped entities, the `id` must be a string conforming to the Identity Source&#x27;s requirements. Must be unique within a `namespace`.
          &quot;namespace&quot;: &quot;A String&quot;, # The namespace in which the entity exists. If not specified, the `EntityKey` represents a Google-managed entity such as a Google user or a Google Group. If specified, the `EntityKey` represents an external-identity-mapped group. The namespace must correspond to an identity source created in Admin Console and must be in the form of `identitysources/{identity_source}`.
        },
      ],
      &quot;relationType&quot;: &quot;A String&quot;, # The relation between the group and the transitive member.
      &quot;roles&quot;: [ # The membership role details (i.e name of role and expiry time).
        { # Message representing the role of a TransitiveMembership.
          &quot;role&quot;: &quot;A String&quot;, # TransitiveMembershipRole in string format. Currently supported TransitiveMembershipRoles: `&quot;MEMBER&quot;`, `&quot;OWNER&quot;`, and `&quot;MANAGER&quot;`.
        },
      ],
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results.
}</pre>
</div>

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

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

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

</body></html>