<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="vault_v1.html">G Suite Vault API</a> . <a href="vault_v1.matters.html">matters</a> . <a href="vault_v1.matters.holds.html">holds</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="vault_v1.matters.holds.accounts.html">accounts()</a></code>
</p>
<p class="firstline">Returns the accounts Resource.</p>

<p class="toc_element">
  <code><a href="#addHeldAccounts">addHeldAccounts(matterId, holdId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Adds HeldAccounts to a hold. Returns a list of accounts that have been successfully added. Accounts can only be added to an existing account-based hold.</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(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a hold in the given matter.</p>
<p class="toc_element">
  <code><a href="#delete">delete(matterId, holdId, x__xgafv=None)</a></code></p>
<p class="firstline">Removes a hold by ID. This will release any HeldAccounts on this Hold.</p>
<p class="toc_element">
  <code><a href="#get">get(matterId, holdId, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a hold by ID.</p>
<p class="toc_element">
  <code><a href="#list">list(matterId, pageSize=None, pageToken=None, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists holds within a matter. An empty page token in ListHoldsResponse denotes no more holds to list.</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="#removeHeldAccounts">removeHeldAccounts(matterId, holdId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Removes HeldAccounts from a hold. Returns a list of statuses in the same order as the request. If this request leaves the hold with no held accounts, the hold will not apply to any accounts.</p>
<p class="toc_element">
  <code><a href="#update">update(matterId, holdId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the OU and/or query parameters of a hold. You cannot add accounts to a hold that covers an OU, nor can you add OUs to a hold that covers individual accounts. Accounts listed in the hold will be ignored.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="addHeldAccounts">addHeldAccounts(matterId, holdId, body=None, x__xgafv=None)</code>
  <pre>Adds HeldAccounts to a hold. Returns a list of accounts that have been successfully added. Accounts can only be added to an existing account-based hold.

Args:
  matterId: string, The matter ID. (required)
  holdId: string, The hold ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # Add a list of accounts to a hold.
  &quot;accountIds&quot;: [ # Account IDs to identify which accounts to add. Only account_ids or only emails should be specified, but not both.
    &quot;A String&quot;,
  ],
  &quot;emails&quot;: [ # Emails to identify which accounts to add. Only emails or only account_ids should be specified, but not both.
    &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:

    { # Response for batch create held accounts.
  &quot;responses&quot;: [ # The list of responses, in the same order as the batch request.
    { # A status detailing the status of each account creation, and the HeldAccount, if successful.
      &quot;account&quot;: { # An account being held in a particular hold. This structure is immutable. This can be either a single user or a google group, depending on the corpus. # If present, this account was successfully created.
        &quot;accountId&quot;: &quot;A String&quot;, # The account&#x27;s ID as provided by the Admin SDK.
        &quot;email&quot;: &quot;A String&quot;, # The primary email address of the account. If used as an input, this takes precedence over account ID.
        &quot;firstName&quot;: &quot;A String&quot;, # Output only. The first name of the account holder.
        &quot;holdTime&quot;: &quot;A String&quot;, # Output only. When the account was put on hold.
        &quot;lastName&quot;: &quot;A String&quot;, # Output only. The last name of the account holder.
      },
      &quot;status&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). # This represents the success status. If failed, check message.
        &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.
      },
    },
  ],
}</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(matterId, body=None, x__xgafv=None)</code>
  <pre>Creates a hold in the given matter.

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

{ # Represents a hold within Vault. A hold restricts purging of artifacts based on the combination of the query and accounts restrictions. A hold can be configured to either apply to an explicitly configured set of accounts, or can be applied to all members of an organizational unit.
  &quot;accounts&quot;: [ # If set, the hold applies to the enumerated accounts and org_unit must be empty.
    { # An account being held in a particular hold. This structure is immutable. This can be either a single user or a google group, depending on the corpus.
      &quot;accountId&quot;: &quot;A String&quot;, # The account&#x27;s ID as provided by the Admin SDK.
      &quot;email&quot;: &quot;A String&quot;, # The primary email address of the account. If used as an input, this takes precedence over account ID.
      &quot;firstName&quot;: &quot;A String&quot;, # Output only. The first name of the account holder.
      &quot;holdTime&quot;: &quot;A String&quot;, # Output only. When the account was put on hold.
      &quot;lastName&quot;: &quot;A String&quot;, # Output only. The last name of the account holder.
    },
  ],
  &quot;corpus&quot;: &quot;A String&quot;, # The corpus to be searched.
  &quot;holdId&quot;: &quot;A String&quot;, # The unique immutable ID of the hold. Assigned during creation.
  &quot;name&quot;: &quot;A String&quot;, # The name of the hold.
  &quot;orgUnit&quot;: { # A organizational unit being held in a particular hold. This structure is immutable. # If set, the hold applies to all members of the organizational unit and accounts must be empty. This property is mutable. For groups holds, set the accounts field.
    &quot;holdTime&quot;: &quot;A String&quot;, # When the org unit was put on hold. This property is immutable.
    &quot;orgUnitId&quot;: &quot;A String&quot;, # The org unit&#x27;s immutable ID as provided by the Admin SDK.
  },
  &quot;query&quot;: { # Corpus specific queries. # The corpus-specific query. If set, the corpusQuery must match corpus type.
    &quot;driveQuery&quot;: { # Query options for Drive holds. # Details pertaining to Drive holds. If set, corpus must be Drive.
      &quot;includeSharedDriveFiles&quot;: True or False, # If true, include files in shared drives in the hold.
      &quot;includeTeamDriveFiles&quot;: True or False, # If true, include files in Team Drives in the hold.
    },
    &quot;groupsQuery&quot;: { # Query options for group holds. # Details pertaining to Groups holds. If set, corpus must be Groups.
      &quot;endTime&quot;: &quot;A String&quot;, # The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;startTime&quot;: &quot;A String&quot;, # The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;terms&quot;: &quot;A String&quot;, # The search terms for the hold.
    },
    &quot;hangoutsChatQuery&quot;: { # Query options for hangouts chat holds. # Details pertaining to Hangouts Chat holds. If set, corpus must be Hangouts Chat.
      &quot;includeRooms&quot;: True or False, # If true, include rooms the user has participated in.
    },
    &quot;mailQuery&quot;: { # Query options for mail holds. # Details pertaining to mail holds. If set, corpus must be mail.
      &quot;endTime&quot;: &quot;A String&quot;, # The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;startTime&quot;: &quot;A String&quot;, # The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;terms&quot;: &quot;A String&quot;, # The search terms for the hold.
    },
    &quot;voiceQuery&quot;: { # Query options for Voice holds. # Details pertaining to Voice holds. If set, corpus must be Voice.
      &quot;coveredData&quot;: [ # Data covered by this rule. Should be non-empty. Order does not matter and duplicates will be ignored.
        &quot;A String&quot;,
      ],
    },
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # The last time this hold was modified.
}

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

Returns:
  An object of the form:

    { # Represents a hold within Vault. A hold restricts purging of artifacts based on the combination of the query and accounts restrictions. A hold can be configured to either apply to an explicitly configured set of accounts, or can be applied to all members of an organizational unit.
  &quot;accounts&quot;: [ # If set, the hold applies to the enumerated accounts and org_unit must be empty.
    { # An account being held in a particular hold. This structure is immutable. This can be either a single user or a google group, depending on the corpus.
      &quot;accountId&quot;: &quot;A String&quot;, # The account&#x27;s ID as provided by the Admin SDK.
      &quot;email&quot;: &quot;A String&quot;, # The primary email address of the account. If used as an input, this takes precedence over account ID.
      &quot;firstName&quot;: &quot;A String&quot;, # Output only. The first name of the account holder.
      &quot;holdTime&quot;: &quot;A String&quot;, # Output only. When the account was put on hold.
      &quot;lastName&quot;: &quot;A String&quot;, # Output only. The last name of the account holder.
    },
  ],
  &quot;corpus&quot;: &quot;A String&quot;, # The corpus to be searched.
  &quot;holdId&quot;: &quot;A String&quot;, # The unique immutable ID of the hold. Assigned during creation.
  &quot;name&quot;: &quot;A String&quot;, # The name of the hold.
  &quot;orgUnit&quot;: { # A organizational unit being held in a particular hold. This structure is immutable. # If set, the hold applies to all members of the organizational unit and accounts must be empty. This property is mutable. For groups holds, set the accounts field.
    &quot;holdTime&quot;: &quot;A String&quot;, # When the org unit was put on hold. This property is immutable.
    &quot;orgUnitId&quot;: &quot;A String&quot;, # The org unit&#x27;s immutable ID as provided by the Admin SDK.
  },
  &quot;query&quot;: { # Corpus specific queries. # The corpus-specific query. If set, the corpusQuery must match corpus type.
    &quot;driveQuery&quot;: { # Query options for Drive holds. # Details pertaining to Drive holds. If set, corpus must be Drive.
      &quot;includeSharedDriveFiles&quot;: True or False, # If true, include files in shared drives in the hold.
      &quot;includeTeamDriveFiles&quot;: True or False, # If true, include files in Team Drives in the hold.
    },
    &quot;groupsQuery&quot;: { # Query options for group holds. # Details pertaining to Groups holds. If set, corpus must be Groups.
      &quot;endTime&quot;: &quot;A String&quot;, # The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;startTime&quot;: &quot;A String&quot;, # The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;terms&quot;: &quot;A String&quot;, # The search terms for the hold.
    },
    &quot;hangoutsChatQuery&quot;: { # Query options for hangouts chat holds. # Details pertaining to Hangouts Chat holds. If set, corpus must be Hangouts Chat.
      &quot;includeRooms&quot;: True or False, # If true, include rooms the user has participated in.
    },
    &quot;mailQuery&quot;: { # Query options for mail holds. # Details pertaining to mail holds. If set, corpus must be mail.
      &quot;endTime&quot;: &quot;A String&quot;, # The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;startTime&quot;: &quot;A String&quot;, # The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;terms&quot;: &quot;A String&quot;, # The search terms for the hold.
    },
    &quot;voiceQuery&quot;: { # Query options for Voice holds. # Details pertaining to Voice holds. If set, corpus must be Voice.
      &quot;coveredData&quot;: [ # Data covered by this rule. Should be non-empty. Order does not matter and duplicates will be ignored.
        &quot;A String&quot;,
      ],
    },
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # The last time this hold was modified.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(matterId, holdId, x__xgafv=None)</code>
  <pre>Removes a hold by ID. This will release any HeldAccounts on this Hold.

Args:
  matterId: string, The matter ID. (required)
  holdId: string, The hold ID. (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(matterId, holdId, view=None, x__xgafv=None)</code>
  <pre>Gets a hold by ID.

Args:
  matterId: string, The matter ID. (required)
  holdId: string, The hold ID. (required)
  view: string, Specifies which parts of the Hold to return.
    Allowed values
      HOLD_VIEW_UNSPECIFIED - There is no specified view. Defaults to FULL_HOLD.
      BASIC_HOLD - Response includes the id, name, update time, corpus, and query.
      FULL_HOLD - Full representation of a Hold. Response includes all fields of &#x27;BASIC&#x27; and the entities the Hold applies to, such as accounts, or OU.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a hold within Vault. A hold restricts purging of artifacts based on the combination of the query and accounts restrictions. A hold can be configured to either apply to an explicitly configured set of accounts, or can be applied to all members of an organizational unit.
  &quot;accounts&quot;: [ # If set, the hold applies to the enumerated accounts and org_unit must be empty.
    { # An account being held in a particular hold. This structure is immutable. This can be either a single user or a google group, depending on the corpus.
      &quot;accountId&quot;: &quot;A String&quot;, # The account&#x27;s ID as provided by the Admin SDK.
      &quot;email&quot;: &quot;A String&quot;, # The primary email address of the account. If used as an input, this takes precedence over account ID.
      &quot;firstName&quot;: &quot;A String&quot;, # Output only. The first name of the account holder.
      &quot;holdTime&quot;: &quot;A String&quot;, # Output only. When the account was put on hold.
      &quot;lastName&quot;: &quot;A String&quot;, # Output only. The last name of the account holder.
    },
  ],
  &quot;corpus&quot;: &quot;A String&quot;, # The corpus to be searched.
  &quot;holdId&quot;: &quot;A String&quot;, # The unique immutable ID of the hold. Assigned during creation.
  &quot;name&quot;: &quot;A String&quot;, # The name of the hold.
  &quot;orgUnit&quot;: { # A organizational unit being held in a particular hold. This structure is immutable. # If set, the hold applies to all members of the organizational unit and accounts must be empty. This property is mutable. For groups holds, set the accounts field.
    &quot;holdTime&quot;: &quot;A String&quot;, # When the org unit was put on hold. This property is immutable.
    &quot;orgUnitId&quot;: &quot;A String&quot;, # The org unit&#x27;s immutable ID as provided by the Admin SDK.
  },
  &quot;query&quot;: { # Corpus specific queries. # The corpus-specific query. If set, the corpusQuery must match corpus type.
    &quot;driveQuery&quot;: { # Query options for Drive holds. # Details pertaining to Drive holds. If set, corpus must be Drive.
      &quot;includeSharedDriveFiles&quot;: True or False, # If true, include files in shared drives in the hold.
      &quot;includeTeamDriveFiles&quot;: True or False, # If true, include files in Team Drives in the hold.
    },
    &quot;groupsQuery&quot;: { # Query options for group holds. # Details pertaining to Groups holds. If set, corpus must be Groups.
      &quot;endTime&quot;: &quot;A String&quot;, # The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;startTime&quot;: &quot;A String&quot;, # The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;terms&quot;: &quot;A String&quot;, # The search terms for the hold.
    },
    &quot;hangoutsChatQuery&quot;: { # Query options for hangouts chat holds. # Details pertaining to Hangouts Chat holds. If set, corpus must be Hangouts Chat.
      &quot;includeRooms&quot;: True or False, # If true, include rooms the user has participated in.
    },
    &quot;mailQuery&quot;: { # Query options for mail holds. # Details pertaining to mail holds. If set, corpus must be mail.
      &quot;endTime&quot;: &quot;A String&quot;, # The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;startTime&quot;: &quot;A String&quot;, # The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;terms&quot;: &quot;A String&quot;, # The search terms for the hold.
    },
    &quot;voiceQuery&quot;: { # Query options for Voice holds. # Details pertaining to Voice holds. If set, corpus must be Voice.
      &quot;coveredData&quot;: [ # Data covered by this rule. Should be non-empty. Order does not matter and duplicates will be ignored.
        &quot;A String&quot;,
      ],
    },
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # The last time this hold was modified.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(matterId, pageSize=None, pageToken=None, view=None, x__xgafv=None)</code>
  <pre>Lists holds within a matter. An empty page token in ListHoldsResponse denotes no more holds to list.

Args:
  matterId: string, The matter ID. (required)
  pageSize: integer, The number of holds to return in the response, between 0 and 100 inclusive. Leaving this empty, or as 0, is the same as page_size = 100.
  pageToken: string, The pagination token as returned in the response. An empty token means start from the beginning.
  view: string, Specifies which parts of the Hold to return.
    Allowed values
      HOLD_VIEW_UNSPECIFIED - There is no specified view. Defaults to FULL_HOLD.
      BASIC_HOLD - Response includes the id, name, update time, corpus, and query.
      FULL_HOLD - Full representation of a Hold. Response includes all fields of &#x27;BASIC&#x27; and the entities the Hold applies to, such as accounts, or OU.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The holds for a matter.
  &quot;holds&quot;: [ # The list of holds.
    { # Represents a hold within Vault. A hold restricts purging of artifacts based on the combination of the query and accounts restrictions. A hold can be configured to either apply to an explicitly configured set of accounts, or can be applied to all members of an organizational unit.
      &quot;accounts&quot;: [ # If set, the hold applies to the enumerated accounts and org_unit must be empty.
        { # An account being held in a particular hold. This structure is immutable. This can be either a single user or a google group, depending on the corpus.
          &quot;accountId&quot;: &quot;A String&quot;, # The account&#x27;s ID as provided by the Admin SDK.
          &quot;email&quot;: &quot;A String&quot;, # The primary email address of the account. If used as an input, this takes precedence over account ID.
          &quot;firstName&quot;: &quot;A String&quot;, # Output only. The first name of the account holder.
          &quot;holdTime&quot;: &quot;A String&quot;, # Output only. When the account was put on hold.
          &quot;lastName&quot;: &quot;A String&quot;, # Output only. The last name of the account holder.
        },
      ],
      &quot;corpus&quot;: &quot;A String&quot;, # The corpus to be searched.
      &quot;holdId&quot;: &quot;A String&quot;, # The unique immutable ID of the hold. Assigned during creation.
      &quot;name&quot;: &quot;A String&quot;, # The name of the hold.
      &quot;orgUnit&quot;: { # A organizational unit being held in a particular hold. This structure is immutable. # If set, the hold applies to all members of the organizational unit and accounts must be empty. This property is mutable. For groups holds, set the accounts field.
        &quot;holdTime&quot;: &quot;A String&quot;, # When the org unit was put on hold. This property is immutable.
        &quot;orgUnitId&quot;: &quot;A String&quot;, # The org unit&#x27;s immutable ID as provided by the Admin SDK.
      },
      &quot;query&quot;: { # Corpus specific queries. # The corpus-specific query. If set, the corpusQuery must match corpus type.
        &quot;driveQuery&quot;: { # Query options for Drive holds. # Details pertaining to Drive holds. If set, corpus must be Drive.
          &quot;includeSharedDriveFiles&quot;: True or False, # If true, include files in shared drives in the hold.
          &quot;includeTeamDriveFiles&quot;: True or False, # If true, include files in Team Drives in the hold.
        },
        &quot;groupsQuery&quot;: { # Query options for group holds. # Details pertaining to Groups holds. If set, corpus must be Groups.
          &quot;endTime&quot;: &quot;A String&quot;, # The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
          &quot;startTime&quot;: &quot;A String&quot;, # The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
          &quot;terms&quot;: &quot;A String&quot;, # The search terms for the hold.
        },
        &quot;hangoutsChatQuery&quot;: { # Query options for hangouts chat holds. # Details pertaining to Hangouts Chat holds. If set, corpus must be Hangouts Chat.
          &quot;includeRooms&quot;: True or False, # If true, include rooms the user has participated in.
        },
        &quot;mailQuery&quot;: { # Query options for mail holds. # Details pertaining to mail holds. If set, corpus must be mail.
          &quot;endTime&quot;: &quot;A String&quot;, # The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
          &quot;startTime&quot;: &quot;A String&quot;, # The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
          &quot;terms&quot;: &quot;A String&quot;, # The search terms for the hold.
        },
        &quot;voiceQuery&quot;: { # Query options for Voice holds. # Details pertaining to Voice holds. If set, corpus must be Voice.
          &quot;coveredData&quot;: [ # Data covered by this rule. Should be non-empty. Order does not matter and duplicates will be ignored.
            &quot;A String&quot;,
          ],
        },
      },
      &quot;updateTime&quot;: &quot;A String&quot;, # The last time this hold was modified.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Page token to retrieve the next page of results in the list. If this is empty, then there are no more holds to list.
}</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="removeHeldAccounts">removeHeldAccounts(matterId, holdId, body=None, x__xgafv=None)</code>
  <pre>Removes HeldAccounts from a hold. Returns a list of statuses in the same order as the request. If this request leaves the hold with no held accounts, the hold will not apply to any accounts.

Args:
  matterId: string, The matter ID. (required)
  holdId: string, The hold ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # Remove a list of accounts from a hold.
  &quot;accountIds&quot;: [ # Account IDs to identify HeldAccounts to remove.
    &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:

    { # Response for batch delete held accounts.
  &quot;statuses&quot;: [ # A list of statuses for deleted accounts. Results have the same order as the request.
    { # 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).
      &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.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(matterId, holdId, body=None, x__xgafv=None)</code>
  <pre>Updates the OU and/or query parameters of a hold. You cannot add accounts to a hold that covers an OU, nor can you add OUs to a hold that covers individual accounts. Accounts listed in the hold will be ignored.

Args:
  matterId: string, The matter ID. (required)
  holdId: string, The ID of the hold. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a hold within Vault. A hold restricts purging of artifacts based on the combination of the query and accounts restrictions. A hold can be configured to either apply to an explicitly configured set of accounts, or can be applied to all members of an organizational unit.
  &quot;accounts&quot;: [ # If set, the hold applies to the enumerated accounts and org_unit must be empty.
    { # An account being held in a particular hold. This structure is immutable. This can be either a single user or a google group, depending on the corpus.
      &quot;accountId&quot;: &quot;A String&quot;, # The account&#x27;s ID as provided by the Admin SDK.
      &quot;email&quot;: &quot;A String&quot;, # The primary email address of the account. If used as an input, this takes precedence over account ID.
      &quot;firstName&quot;: &quot;A String&quot;, # Output only. The first name of the account holder.
      &quot;holdTime&quot;: &quot;A String&quot;, # Output only. When the account was put on hold.
      &quot;lastName&quot;: &quot;A String&quot;, # Output only. The last name of the account holder.
    },
  ],
  &quot;corpus&quot;: &quot;A String&quot;, # The corpus to be searched.
  &quot;holdId&quot;: &quot;A String&quot;, # The unique immutable ID of the hold. Assigned during creation.
  &quot;name&quot;: &quot;A String&quot;, # The name of the hold.
  &quot;orgUnit&quot;: { # A organizational unit being held in a particular hold. This structure is immutable. # If set, the hold applies to all members of the organizational unit and accounts must be empty. This property is mutable. For groups holds, set the accounts field.
    &quot;holdTime&quot;: &quot;A String&quot;, # When the org unit was put on hold. This property is immutable.
    &quot;orgUnitId&quot;: &quot;A String&quot;, # The org unit&#x27;s immutable ID as provided by the Admin SDK.
  },
  &quot;query&quot;: { # Corpus specific queries. # The corpus-specific query. If set, the corpusQuery must match corpus type.
    &quot;driveQuery&quot;: { # Query options for Drive holds. # Details pertaining to Drive holds. If set, corpus must be Drive.
      &quot;includeSharedDriveFiles&quot;: True or False, # If true, include files in shared drives in the hold.
      &quot;includeTeamDriveFiles&quot;: True or False, # If true, include files in Team Drives in the hold.
    },
    &quot;groupsQuery&quot;: { # Query options for group holds. # Details pertaining to Groups holds. If set, corpus must be Groups.
      &quot;endTime&quot;: &quot;A String&quot;, # The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;startTime&quot;: &quot;A String&quot;, # The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;terms&quot;: &quot;A String&quot;, # The search terms for the hold.
    },
    &quot;hangoutsChatQuery&quot;: { # Query options for hangouts chat holds. # Details pertaining to Hangouts Chat holds. If set, corpus must be Hangouts Chat.
      &quot;includeRooms&quot;: True or False, # If true, include rooms the user has participated in.
    },
    &quot;mailQuery&quot;: { # Query options for mail holds. # Details pertaining to mail holds. If set, corpus must be mail.
      &quot;endTime&quot;: &quot;A String&quot;, # The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;startTime&quot;: &quot;A String&quot;, # The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;terms&quot;: &quot;A String&quot;, # The search terms for the hold.
    },
    &quot;voiceQuery&quot;: { # Query options for Voice holds. # Details pertaining to Voice holds. If set, corpus must be Voice.
      &quot;coveredData&quot;: [ # Data covered by this rule. Should be non-empty. Order does not matter and duplicates will be ignored.
        &quot;A String&quot;,
      ],
    },
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # The last time this hold was modified.
}

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

Returns:
  An object of the form:

    { # Represents a hold within Vault. A hold restricts purging of artifacts based on the combination of the query and accounts restrictions. A hold can be configured to either apply to an explicitly configured set of accounts, or can be applied to all members of an organizational unit.
  &quot;accounts&quot;: [ # If set, the hold applies to the enumerated accounts and org_unit must be empty.
    { # An account being held in a particular hold. This structure is immutable. This can be either a single user or a google group, depending on the corpus.
      &quot;accountId&quot;: &quot;A String&quot;, # The account&#x27;s ID as provided by the Admin SDK.
      &quot;email&quot;: &quot;A String&quot;, # The primary email address of the account. If used as an input, this takes precedence over account ID.
      &quot;firstName&quot;: &quot;A String&quot;, # Output only. The first name of the account holder.
      &quot;holdTime&quot;: &quot;A String&quot;, # Output only. When the account was put on hold.
      &quot;lastName&quot;: &quot;A String&quot;, # Output only. The last name of the account holder.
    },
  ],
  &quot;corpus&quot;: &quot;A String&quot;, # The corpus to be searched.
  &quot;holdId&quot;: &quot;A String&quot;, # The unique immutable ID of the hold. Assigned during creation.
  &quot;name&quot;: &quot;A String&quot;, # The name of the hold.
  &quot;orgUnit&quot;: { # A organizational unit being held in a particular hold. This structure is immutable. # If set, the hold applies to all members of the organizational unit and accounts must be empty. This property is mutable. For groups holds, set the accounts field.
    &quot;holdTime&quot;: &quot;A String&quot;, # When the org unit was put on hold. This property is immutable.
    &quot;orgUnitId&quot;: &quot;A String&quot;, # The org unit&#x27;s immutable ID as provided by the Admin SDK.
  },
  &quot;query&quot;: { # Corpus specific queries. # The corpus-specific query. If set, the corpusQuery must match corpus type.
    &quot;driveQuery&quot;: { # Query options for Drive holds. # Details pertaining to Drive holds. If set, corpus must be Drive.
      &quot;includeSharedDriveFiles&quot;: True or False, # If true, include files in shared drives in the hold.
      &quot;includeTeamDriveFiles&quot;: True or False, # If true, include files in Team Drives in the hold.
    },
    &quot;groupsQuery&quot;: { # Query options for group holds. # Details pertaining to Groups holds. If set, corpus must be Groups.
      &quot;endTime&quot;: &quot;A String&quot;, # The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;startTime&quot;: &quot;A String&quot;, # The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;terms&quot;: &quot;A String&quot;, # The search terms for the hold.
    },
    &quot;hangoutsChatQuery&quot;: { # Query options for hangouts chat holds. # Details pertaining to Hangouts Chat holds. If set, corpus must be Hangouts Chat.
      &quot;includeRooms&quot;: True or False, # If true, include rooms the user has participated in.
    },
    &quot;mailQuery&quot;: { # Query options for mail holds. # Details pertaining to mail holds. If set, corpus must be mail.
      &quot;endTime&quot;: &quot;A String&quot;, # The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;startTime&quot;: &quot;A String&quot;, # The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
      &quot;terms&quot;: &quot;A String&quot;, # The search terms for the hold.
    },
    &quot;voiceQuery&quot;: { # Query options for Voice holds. # Details pertaining to Voice holds. If set, corpus must be Voice.
      &quot;coveredData&quot;: [ # Data covered by this rule. Should be non-empty. Order does not matter and duplicates will be ignored.
        &quot;A String&quot;,
      ],
    },
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # The last time this hold was modified.
}</pre>
</div>

</body></html>