<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, x__xgafv=None)</a></code></p>
<p class="firstline">Adds HeldAccounts to a hold. Returns a list of accounts that have been</p>
<p class="toc_element">
  <code><a href="#create">create(matterId, body, 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, x__xgafv=None, view=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, x__xgafv=None, view=None)</a></code></p>
<p class="firstline">Lists holds within a matter. An empty page token in ListHoldsResponse</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, x__xgafv=None)</a></code></p>
<p class="firstline">Removes HeldAccounts from a hold. Returns a list of statuses in the same</p>
<p class="toc_element">
  <code><a href="#update">update(matterId, holdId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the OU and/or query parameters of a hold. You cannot add accounts</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="addHeldAccounts">addHeldAccounts(matterId, holdId, body, 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. (required)
    The object takes the form of:

{ # Add a list of accounts to a hold.
    "accountIds": [ # Account ids to identify which accounts to add. Only account_ids or only
        # emails should be specified, but not both.
      "A String",
    ],
    "emails": [ # Emails to identify which accounts to add. Only emails or only account_ids
        # should be specified, but not both.
      "A String",
    ],
  }

  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.
    "responses": [ # 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.
        "status": { # The `Status` type defines a logical error model that is suitable for # This represents the success status. If failed, check message.
            # different programming environments, including REST APIs and RPC APIs. It is
            # used by [gRPC](https://github.com/grpc). The error model is designed to be:
            #
            # - Simple to use and understand for most users
            # - Flexible enough to meet unexpected needs
            #
            # # Overview
            #
            # The `Status` message contains three pieces of data: error code, error
            # message, and error details. The error code should be an enum value of
            # google.rpc.Code, but it may accept additional error codes if needed.  The
            # error message should be a developer-facing English message that helps
            # developers *understand* and *resolve* the error. If a localized user-facing
            # error message is needed, put the localized message in the error details or
            # localize it in the client. The optional error details may contain arbitrary
            # information about the error. There is a predefined set of error detail types
            # in the package `google.rpc` that can be used for common error conditions.
            #
            # # Language mapping
            #
            # The `Status` message is the logical representation of the error model, but it
            # is not necessarily the actual wire format. When the `Status` message is
            # exposed in different client libraries and different wire protocols, it can be
            # mapped differently. For example, it will likely be mapped to some exceptions
            # in Java, but more likely mapped to some error codes in C.
            #
            # # Other uses
            #
            # The error model and the `Status` message can be used in a variety of
            # environments, either with or without APIs, to provide a
            # consistent developer experience across different environments.
            #
            # Example uses of this error model include:
            #
            # - Partial errors. If a service needs to return partial errors to the client,
            #     it may embed the `Status` in the normal response to indicate the partial
            #     errors.
            #
            # - Workflow errors. A typical workflow has multiple steps. Each step may
            #     have a `Status` message for error reporting.
            #
            # - Batch operations. If a client uses batch request and batch response, the
            #     `Status` message should be used directly inside batch response, one for
            #     each error sub-response.
            #
            # - Asynchronous operations. If an API call embeds asynchronous operation
            #     results in its response, the status of those operations should be
            #     represented directly using the `Status` message.
            #
            # - Logging. If some API errors are stored in logs, the message `Status` could
            #     be used directly after any stripping needed for security/privacy reasons.
          "message": "A String", # 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.
          "code": 42, # The status code, which should be an enum value of google.rpc.Code.
          "details": [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              "a_key": "", # Properties of the object. Contains field @type with type URL.
            },
          ],
        },
        "account": { # An account being held in a particular hold. This structure is immutable. # If present, this account was successfully created.
            # This can be either a single user or a google group, depending on the corpus.
          "lastName": "A String", # Output only. The last name of the account holder.
          "holdTime": "A String", # Output only. When the account was put on hold.
          "email": "A String", # The primary email address of the account. If used as an input, this takes
              # precedence over account ID.
          "firstName": "A String", # Output only. The first name of the account holder.
          "accountId": "A String", # The account's ID as provided by the
              # <a href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
        },
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="create">create(matterId, body, x__xgafv=None)</code>
  <pre>Creates a hold in the given matter.

Args:
  matterId: string, The matter ID. (required)
  body: object, The request body. (required)
    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.
  "updateTime": "A String", # The last time this hold was modified.
  "name": "A String", # The name of the hold.
  "orgUnit": { # A organizational unit being held in a particular hold. # 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.
      # This structure is immutable.
    "holdTime": "A String", # When the org unit was put on hold. This property is immutable.
    "orgUnitId": "A String", # The org unit's immutable ID as provided by the Admin SDK.
  },
  "accounts": [ # 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.
      "lastName": "A String", # Output only. The last name of the account holder.
      "holdTime": "A String", # Output only. When the account was put on hold.
      "email": "A String", # The primary email address of the account. If used as an input, this takes
          # precedence over account ID.
      "firstName": "A String", # Output only. The first name of the account holder.
      "accountId": "A String", # The account's ID as provided by the
          # <a href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
    },
  ],
  "query": { # Corpus specific queries. # The corpus-specific query. If set, the corpusQuery must match corpus
      # type.
    "hangoutsChatQuery": { # Query options for hangouts chat holds. # Details pertaining to Hangouts Chat holds. If set, corpus must be
        # Hangouts Chat.
      "includeRooms": True or False, # If true, include rooms the user has participated in.
    },
    "driveQuery": { # Query options for Drive holds. # Details pertaining to Drive holds. If set, corpus must be Drive.
      "includeSharedDriveFiles": True or False, # If true, include files in shared drives in the hold.
      "includeTeamDriveFiles": True or False, # If true, include files in Team Drives in the hold.
    },
    "mailQuery": { # Query options for mail holds. # Details pertaining to mail holds. If set, corpus must be mail.
      "endTime": "A String", # The end time range for the search query. These timestamps are in GMT and
          # rounded down to the start of the given date.
      "terms": "A String", # The search terms for the hold.
      "startTime": "A String", # The start time range for the search query. These timestamps are in GMT and
          # rounded down to the start of the given date.
    },
    "groupsQuery": { # Query options for group holds. # Details pertaining to Groups holds. If set, corpus must be Groups.
      "endTime": "A String", # The end time range for the search query. These timestamps are in GMT and
          # rounded down to the start of the given date.
      "terms": "A String", # The search terms for the hold.
      "startTime": "A String", # The start time range for the search query. These timestamps are in GMT and
          # rounded down to the start of the given date.
    },
  },
  "corpus": "A String", # The corpus to be searched.
  "holdId": "A String", # The unique immutable ID of the hold. Assigned during creation.
}

  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.
    "updateTime": "A String", # The last time this hold was modified.
    "name": "A String", # The name of the hold.
    "orgUnit": { # A organizational unit being held in a particular hold. # 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.
        # This structure is immutable.
      "holdTime": "A String", # When the org unit was put on hold. This property is immutable.
      "orgUnitId": "A String", # The org unit's immutable ID as provided by the Admin SDK.
    },
    "accounts": [ # 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.
        "lastName": "A String", # Output only. The last name of the account holder.
        "holdTime": "A String", # Output only. When the account was put on hold.
        "email": "A String", # The primary email address of the account. If used as an input, this takes
            # precedence over account ID.
        "firstName": "A String", # Output only. The first name of the account holder.
        "accountId": "A String", # The account's ID as provided by the
            # <a href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
      },
    ],
    "query": { # Corpus specific queries. # The corpus-specific query. If set, the corpusQuery must match corpus
        # type.
      "hangoutsChatQuery": { # Query options for hangouts chat holds. # Details pertaining to Hangouts Chat holds. If set, corpus must be
          # Hangouts Chat.
        "includeRooms": True or False, # If true, include rooms the user has participated in.
      },
      "driveQuery": { # Query options for Drive holds. # Details pertaining to Drive holds. If set, corpus must be Drive.
        "includeSharedDriveFiles": True or False, # If true, include files in shared drives in the hold.
        "includeTeamDriveFiles": True or False, # If true, include files in Team Drives in the hold.
      },
      "mailQuery": { # Query options for mail holds. # Details pertaining to mail holds. If set, corpus must be mail.
        "endTime": "A String", # The end time range for the search query. These timestamps are in GMT and
            # rounded down to the start of the given date.
        "terms": "A String", # The search terms for the hold.
        "startTime": "A String", # The start time range for the search query. These timestamps are in GMT and
            # rounded down to the start of the given date.
      },
      "groupsQuery": { # Query options for group holds. # Details pertaining to Groups holds. If set, corpus must be Groups.
        "endTime": "A String", # The end time range for the search query. These timestamps are in GMT and
            # rounded down to the start of the given date.
        "terms": "A String", # The search terms for the hold.
        "startTime": "A String", # The start time range for the search query. These timestamps are in GMT and
            # rounded down to the start of the given date.
      },
    },
    "corpus": "A String", # The corpus to be searched.
    "holdId": "A String", # The unique immutable ID of the hold. Assigned during creation.
  }</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, x__xgafv=None, view=None)</code>
  <pre>Gets a hold by ID.

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
  view: string, Specifies which parts of the Hold to return.

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.
    "updateTime": "A String", # The last time this hold was modified.
    "name": "A String", # The name of the hold.
    "orgUnit": { # A organizational unit being held in a particular hold. # 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.
        # This structure is immutable.
      "holdTime": "A String", # When the org unit was put on hold. This property is immutable.
      "orgUnitId": "A String", # The org unit's immutable ID as provided by the Admin SDK.
    },
    "accounts": [ # 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.
        "lastName": "A String", # Output only. The last name of the account holder.
        "holdTime": "A String", # Output only. When the account was put on hold.
        "email": "A String", # The primary email address of the account. If used as an input, this takes
            # precedence over account ID.
        "firstName": "A String", # Output only. The first name of the account holder.
        "accountId": "A String", # The account's ID as provided by the
            # <a href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
      },
    ],
    "query": { # Corpus specific queries. # The corpus-specific query. If set, the corpusQuery must match corpus
        # type.
      "hangoutsChatQuery": { # Query options for hangouts chat holds. # Details pertaining to Hangouts Chat holds. If set, corpus must be
          # Hangouts Chat.
        "includeRooms": True or False, # If true, include rooms the user has participated in.
      },
      "driveQuery": { # Query options for Drive holds. # Details pertaining to Drive holds. If set, corpus must be Drive.
        "includeSharedDriveFiles": True or False, # If true, include files in shared drives in the hold.
        "includeTeamDriveFiles": True or False, # If true, include files in Team Drives in the hold.
      },
      "mailQuery": { # Query options for mail holds. # Details pertaining to mail holds. If set, corpus must be mail.
        "endTime": "A String", # The end time range for the search query. These timestamps are in GMT and
            # rounded down to the start of the given date.
        "terms": "A String", # The search terms for the hold.
        "startTime": "A String", # The start time range for the search query. These timestamps are in GMT and
            # rounded down to the start of the given date.
      },
      "groupsQuery": { # Query options for group holds. # Details pertaining to Groups holds. If set, corpus must be Groups.
        "endTime": "A String", # The end time range for the search query. These timestamps are in GMT and
            # rounded down to the start of the given date.
        "terms": "A String", # The search terms for the hold.
        "startTime": "A String", # The start time range for the search query. These timestamps are in GMT and
            # rounded down to the start of the given date.
      },
    },
    "corpus": "A String", # The corpus to be searched.
    "holdId": "A String", # The unique immutable ID of the hold. Assigned during creation.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(matterId, pageSize=None, pageToken=None, x__xgafv=None, view=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.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  view: string, Specifies which parts of the Hold to return.

Returns:
  An object of the form:

    { # The holds for a matter.
    "nextPageToken": "A String", # Page token to retrieve the next page of results in the list.
        # If this is empty, then there are no more holds to list.
    "holds": [ # 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.
        "updateTime": "A String", # The last time this hold was modified.
        "name": "A String", # The name of the hold.
        "orgUnit": { # A organizational unit being held in a particular hold. # 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.
            # This structure is immutable.
          "holdTime": "A String", # When the org unit was put on hold. This property is immutable.
          "orgUnitId": "A String", # The org unit's immutable ID as provided by the Admin SDK.
        },
        "accounts": [ # 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.
            "lastName": "A String", # Output only. The last name of the account holder.
            "holdTime": "A String", # Output only. When the account was put on hold.
            "email": "A String", # The primary email address of the account. If used as an input, this takes
                # precedence over account ID.
            "firstName": "A String", # Output only. The first name of the account holder.
            "accountId": "A String", # The account's ID as provided by the
                # <a href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
          },
        ],
        "query": { # Corpus specific queries. # The corpus-specific query. If set, the corpusQuery must match corpus
            # type.
          "hangoutsChatQuery": { # Query options for hangouts chat holds. # Details pertaining to Hangouts Chat holds. If set, corpus must be
              # Hangouts Chat.
            "includeRooms": True or False, # If true, include rooms the user has participated in.
          },
          "driveQuery": { # Query options for Drive holds. # Details pertaining to Drive holds. If set, corpus must be Drive.
            "includeSharedDriveFiles": True or False, # If true, include files in shared drives in the hold.
            "includeTeamDriveFiles": True or False, # If true, include files in Team Drives in the hold.
          },
          "mailQuery": { # Query options for mail holds. # Details pertaining to mail holds. If set, corpus must be mail.
            "endTime": "A String", # The end time range for the search query. These timestamps are in GMT and
                # rounded down to the start of the given date.
            "terms": "A String", # The search terms for the hold.
            "startTime": "A String", # The start time range for the search query. These timestamps are in GMT and
                # rounded down to the start of the given date.
          },
          "groupsQuery": { # Query options for group holds. # Details pertaining to Groups holds. If set, corpus must be Groups.
            "endTime": "A String", # The end time range for the search query. These timestamps are in GMT and
                # rounded down to the start of the given date.
            "terms": "A String", # The search terms for the hold.
            "startTime": "A String", # The start time range for the search query. These timestamps are in GMT and
                # rounded down to the start of the given date.
          },
        },
        "corpus": "A String", # The corpus to be searched.
        "holdId": "A String", # The unique immutable ID of the hold. Assigned during creation.
      },
    ],
  }</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 'execute()' 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, 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. (required)
    The object takes the form of:

{ # Remove a list of accounts from a hold.
    "accountIds": [ # Account ids to identify HeldAccounts to remove.
      "A String",
    ],
  }

  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.
    "statuses": [ # 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). The error model is designed to be:
          #
          # - Simple to use and understand for most users
          # - Flexible enough to meet unexpected needs
          #
          # # Overview
          #
          # The `Status` message contains three pieces of data: error code, error
          # message, and error details. The error code should be an enum value of
          # google.rpc.Code, but it may accept additional error codes if needed.  The
          # error message should be a developer-facing English message that helps
          # developers *understand* and *resolve* the error. If a localized user-facing
          # error message is needed, put the localized message in the error details or
          # localize it in the client. The optional error details may contain arbitrary
          # information about the error. There is a predefined set of error detail types
          # in the package `google.rpc` that can be used for common error conditions.
          #
          # # Language mapping
          #
          # The `Status` message is the logical representation of the error model, but it
          # is not necessarily the actual wire format. When the `Status` message is
          # exposed in different client libraries and different wire protocols, it can be
          # mapped differently. For example, it will likely be mapped to some exceptions
          # in Java, but more likely mapped to some error codes in C.
          #
          # # Other uses
          #
          # The error model and the `Status` message can be used in a variety of
          # environments, either with or without APIs, to provide a
          # consistent developer experience across different environments.
          #
          # Example uses of this error model include:
          #
          # - Partial errors. If a service needs to return partial errors to the client,
          #     it may embed the `Status` in the normal response to indicate the partial
          #     errors.
          #
          # - Workflow errors. A typical workflow has multiple steps. Each step may
          #     have a `Status` message for error reporting.
          #
          # - Batch operations. If a client uses batch request and batch response, the
          #     `Status` message should be used directly inside batch response, one for
          #     each error sub-response.
          #
          # - Asynchronous operations. If an API call embeds asynchronous operation
          #     results in its response, the status of those operations should be
          #     represented directly using the `Status` message.
          #
          # - Logging. If some API errors are stored in logs, the message `Status` could
          #     be used directly after any stripping needed for security/privacy reasons.
        "message": "A String", # 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.
        "code": 42, # The status code, which should be an enum value of google.rpc.Code.
        "details": [ # A list of messages that carry the error details.  There is a common set of
            # message types for APIs to use.
          {
            "a_key": "", # Properties of the object. Contains field @type with type URL.
          },
        ],
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(matterId, holdId, body, 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. (required)
    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.
  "updateTime": "A String", # The last time this hold was modified.
  "name": "A String", # The name of the hold.
  "orgUnit": { # A organizational unit being held in a particular hold. # 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.
      # This structure is immutable.
    "holdTime": "A String", # When the org unit was put on hold. This property is immutable.
    "orgUnitId": "A String", # The org unit's immutable ID as provided by the Admin SDK.
  },
  "accounts": [ # 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.
      "lastName": "A String", # Output only. The last name of the account holder.
      "holdTime": "A String", # Output only. When the account was put on hold.
      "email": "A String", # The primary email address of the account. If used as an input, this takes
          # precedence over account ID.
      "firstName": "A String", # Output only. The first name of the account holder.
      "accountId": "A String", # The account's ID as provided by the
          # <a href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
    },
  ],
  "query": { # Corpus specific queries. # The corpus-specific query. If set, the corpusQuery must match corpus
      # type.
    "hangoutsChatQuery": { # Query options for hangouts chat holds. # Details pertaining to Hangouts Chat holds. If set, corpus must be
        # Hangouts Chat.
      "includeRooms": True or False, # If true, include rooms the user has participated in.
    },
    "driveQuery": { # Query options for Drive holds. # Details pertaining to Drive holds. If set, corpus must be Drive.
      "includeSharedDriveFiles": True or False, # If true, include files in shared drives in the hold.
      "includeTeamDriveFiles": True or False, # If true, include files in Team Drives in the hold.
    },
    "mailQuery": { # Query options for mail holds. # Details pertaining to mail holds. If set, corpus must be mail.
      "endTime": "A String", # The end time range for the search query. These timestamps are in GMT and
          # rounded down to the start of the given date.
      "terms": "A String", # The search terms for the hold.
      "startTime": "A String", # The start time range for the search query. These timestamps are in GMT and
          # rounded down to the start of the given date.
    },
    "groupsQuery": { # Query options for group holds. # Details pertaining to Groups holds. If set, corpus must be Groups.
      "endTime": "A String", # The end time range for the search query. These timestamps are in GMT and
          # rounded down to the start of the given date.
      "terms": "A String", # The search terms for the hold.
      "startTime": "A String", # The start time range for the search query. These timestamps are in GMT and
          # rounded down to the start of the given date.
    },
  },
  "corpus": "A String", # The corpus to be searched.
  "holdId": "A String", # The unique immutable ID of the hold. Assigned during creation.
}

  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.
    "updateTime": "A String", # The last time this hold was modified.
    "name": "A String", # The name of the hold.
    "orgUnit": { # A organizational unit being held in a particular hold. # 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.
        # This structure is immutable.
      "holdTime": "A String", # When the org unit was put on hold. This property is immutable.
      "orgUnitId": "A String", # The org unit's immutable ID as provided by the Admin SDK.
    },
    "accounts": [ # 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.
        "lastName": "A String", # Output only. The last name of the account holder.
        "holdTime": "A String", # Output only. When the account was put on hold.
        "email": "A String", # The primary email address of the account. If used as an input, this takes
            # precedence over account ID.
        "firstName": "A String", # Output only. The first name of the account holder.
        "accountId": "A String", # The account's ID as provided by the
            # <a href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
      },
    ],
    "query": { # Corpus specific queries. # The corpus-specific query. If set, the corpusQuery must match corpus
        # type.
      "hangoutsChatQuery": { # Query options for hangouts chat holds. # Details pertaining to Hangouts Chat holds. If set, corpus must be
          # Hangouts Chat.
        "includeRooms": True or False, # If true, include rooms the user has participated in.
      },
      "driveQuery": { # Query options for Drive holds. # Details pertaining to Drive holds. If set, corpus must be Drive.
        "includeSharedDriveFiles": True or False, # If true, include files in shared drives in the hold.
        "includeTeamDriveFiles": True or False, # If true, include files in Team Drives in the hold.
      },
      "mailQuery": { # Query options for mail holds. # Details pertaining to mail holds. If set, corpus must be mail.
        "endTime": "A String", # The end time range for the search query. These timestamps are in GMT and
            # rounded down to the start of the given date.
        "terms": "A String", # The search terms for the hold.
        "startTime": "A String", # The start time range for the search query. These timestamps are in GMT and
            # rounded down to the start of the given date.
      },
      "groupsQuery": { # Query options for group holds. # Details pertaining to Groups holds. If set, corpus must be Groups.
        "endTime": "A String", # The end time range for the search query. These timestamps are in GMT and
            # rounded down to the start of the given date.
        "terms": "A String", # The search terms for the hold.
        "startTime": "A String", # The start time range for the search query. These timestamps are in GMT and
            # rounded down to the start of the given date.
      },
    },
    "corpus": "A String", # The corpus to be searched.
    "holdId": "A String", # The unique immutable ID of the hold. Assigned during creation.
  }</pre>
</div>

</body></html>