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

<p class="toc_element">
  <code><a href="vault_v1.matters.holds.html">holds()</a></code>
</p>
<p class="firstline">Returns the holds Resource.</p>

<p class="toc_element">
  <code><a href="vault_v1.matters.savedQueries.html">savedQueries()</a></code>
</p>
<p class="firstline">Returns the savedQueries Resource.</p>

<p class="toc_element">
  <code><a href="#addPermissions">addPermissions(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Adds an account as a matter collaborator.</p>
<p class="toc_element">
  <code><a href="#close">close(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Closes the specified matter. Returns the matter with updated state.</p>
<p class="toc_element">
  <code><a href="#count">count(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Counts the accounts processed by the specified query.</p>
<p class="toc_element">
  <code><a href="#create">create(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a matter with the given name and description. The initial state is open, and the owner is the method caller. Returns the created matter with default view.</p>
<p class="toc_element">
  <code><a href="#delete">delete(matterId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified matter. Returns the matter with updated state.</p>
<p class="toc_element">
  <code><a href="#get">get(matterId, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the specified matter.</p>
<p class="toc_element">
  <code><a href="#list">list(pageSize=None, pageToken=None, state=None, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists matters the requestor has access to.</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="#removePermissions">removePermissions(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Removes an account as a matter collaborator.</p>
<p class="toc_element">
  <code><a href="#reopen">reopen(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Reopens the specified matter. Returns the matter with updated state.</p>
<p class="toc_element">
  <code><a href="#undelete">undelete(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Undeletes the specified matter. Returns the matter with updated state.</p>
<p class="toc_element">
  <code><a href="#update">update(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified matter. This updates only the name and description of the matter, identified by matter ID. Changes to any other fields are ignored. Returns the default view of the matter.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="addPermissions">addPermissions(matterId, body=None, x__xgafv=None)</code>
  <pre>Adds an account as a matter collaborator.

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

{ # Add an account with the permission specified. The role cannot be owner. If an account already has a role in the matter, the existing role is overwritten.
  &quot;ccMe&quot;: True or False, # Only relevant if **sendEmails** is **true**. To CC the requestor in the email message, set to **true**. To not CC requestor, set to **false**.
  &quot;matterPermission&quot;: { # Users can be matter owners or collaborators. Each matter has only one owner. All others users who can access the matter are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist. # The account and its role to add.
    &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by the [Admin SDK](https://developers.google.com/admin-sdk/).
    &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role for the matter.
  },
  &quot;sendEmails&quot;: True or False, # To send a notification email to the added account, set to **true**. To not send a notification email, set to **false**.
}

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

Returns:
  An object of the form:

    { # Users can be matter owners or collaborators. Each matter has only one owner. All others users who can access the matter are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
  &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by the [Admin SDK](https://developers.google.com/admin-sdk/).
  &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role for the matter.
}</pre>
</div>

<div class="method">
    <code class="details" id="close">close(matterId, body=None, x__xgafv=None)</code>
  <pre>Closes the specified matter. Returns the matter with updated state.

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

{ # Close a matter by ID.
}

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

Returns:
  An object of the form:

    { # Response to a CloseMatterRequest.
  &quot;matter&quot;: { # Represents a matter. To work with Vault resources, the account must have the [required Vault privileges] (https://support.google.com/vault/answer/2799699) and access to the matter. To access a matter, the account must have created the matter, have the matter shared with them, or have the **View All Matters** privilege. # The updated matter, with state **CLOSED**.
    &quot;description&quot;: &quot;A String&quot;, # An optional description for the matter.
    &quot;matterId&quot;: &quot;A String&quot;, # The matter ID, which is generated by the server. Leave blank when creating a matter.
    &quot;matterPermissions&quot;: [ # Lists the users and their permission for the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
      { # Users can be matter owners or collaborators. Each matter has only one owner. All others users who can access the matter are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
        &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by the [Admin SDK](https://developers.google.com/admin-sdk/).
        &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role for the matter.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
    &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="count">count(matterId, body=None, x__xgafv=None)</code>
  <pre>Counts the accounts processed by the specified query.

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

{ # Count artifacts request.
  &quot;query&quot;: { # The query definition used for search and export. # The search query.
    &quot;accountInfo&quot;: { # The accounts to search # Required when **SearchMethod** is **ACCOUNT**.
      &quot;emails&quot;: [ # A set of accounts to search.
        &quot;A String&quot;,
      ],
    },
    &quot;corpus&quot;: &quot;A String&quot;, # The Google Workspace service to search.
    &quot;dataScope&quot;: &quot;A String&quot;, # The data source to search.
    &quot;driveOptions&quot;: { # Additional options for Drive search # Set Drive search-specific options.
      &quot;includeSharedDrives&quot;: True or False, # Set to **true** to include shared drives.
      &quot;includeTeamDrives&quot;: True or False, # Set to true to include Team Drive.
      &quot;versionDate&quot;: &quot;A String&quot;, # Search the current version of the Drive file, but export the contents of the last version saved before 12:00 AM UTC on the specified date. Enter the date in UTC.
    },
    &quot;endTime&quot;: &quot;A String&quot;, # The end time for the search query. Specify in GMT. The value is rounded to 12 AM on the specified date.
    &quot;hangoutsChatInfo&quot;: { # The Chat spaces to search # Required when **SearchMethod** is **ROOM**. (read-only)
      &quot;roomId&quot;: [ # A list of Chat spaces IDs, as provided by the [Chat API](https://developers.google.com/hangouts/chat).
        &quot;A String&quot;,
      ],
    },
    &quot;hangoutsChatOptions&quot;: { # Additional options for Google Chat search # Set Chat search-specific options. (read-only)
      &quot;includeRooms&quot;: True or False, # For searches by account or organizational unit, set to **true** to include rooms.
    },
    &quot;mailOptions&quot;: { # Additional options for Gmail search # Set Gmail search-specific options.
      &quot;excludeDrafts&quot;: True or False, # Set to **true** to exclude drafts.
    },
    &quot;method&quot;: &quot;A String&quot;, # The entity to search. This field replaces **searchMethod** to support shared drives. When **searchMethod** is **TEAM_DRIVE**, the response of this field is **SHARED_DRIVE**.
    &quot;orgUnitInfo&quot;: { # The organizational unit to search # Required when **SearchMethod** is **ORG_UNIT**.
      &quot;orgUnitId&quot;: &quot;A String&quot;, # The name of the organizational unit to search, as provided by the [Admin SDK Directory API](https://developers.google.com/admin-sdk/directory/).
    },
    &quot;searchMethod&quot;: &quot;A String&quot;, # The search method to use.
    &quot;sharedDriveInfo&quot;: { # The shared drives to search # Required when **SearchMethod** is **SHARED_DRIVE**.
      &quot;sharedDriveIds&quot;: [ # A list of shared drive IDs, as provided by the [Drive API](https://developers.google.com/drive).
        &quot;A String&quot;,
      ],
    },
    &quot;startTime&quot;: &quot;A String&quot;, # The start time for the search query. Specify in GMT. The value is rounded to 12 AM on the specified date.
    &quot;teamDriveInfo&quot;: { # Team Drives to search # Required when **SearchMethod** is **TEAM_DRIVE**.
      &quot;teamDriveIds&quot;: [ # List of Team Drive IDs, as provided by the [Drive API](https://developers.google.com/drive).
        &quot;A String&quot;,
      ],
    },
    &quot;terms&quot;: &quot;A String&quot;, # Service-specific [search operators](https://support.google.com/vault/answer/2474474) to filter search results.
    &quot;timeZone&quot;: &quot;A String&quot;, # The time zone name. It should be an IANA TZ name, such as &quot;America/Los_Angeles&quot;. For a list of time zone names, see [Time Zone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). For more information about how Vault uses time zones, see [the Vault help center](https://support.google.com/vault/answer/6092995#time).
    &quot;voiceOptions&quot;: { # Additional options for Voice search # Set Voice search-specific options.
      &quot;coveredData&quot;: [ # Datatypes to search
        &quot;A String&quot;,
      ],
    },
  },
  &quot;view&quot;: &quot;A String&quot;, # Sets the granularity of the count results.
}

  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="create">create(body=None, x__xgafv=None)</code>
  <pre>Creates a matter with the given name and description. The initial state is open, and the owner is the method caller. Returns the created matter with default view.

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

{ # Represents a matter. To work with Vault resources, the account must have the [required Vault privileges] (https://support.google.com/vault/answer/2799699) and access to the matter. To access a matter, the account must have created the matter, have the matter shared with them, or have the **View All Matters** privilege.
  &quot;description&quot;: &quot;A String&quot;, # An optional description for the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID, which is generated by the server. Leave blank when creating a matter.
  &quot;matterPermissions&quot;: [ # Lists the users and their permission for the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Users can be matter owners or collaborators. Each matter has only one owner. All others users who can access the matter are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by the [Admin SDK](https://developers.google.com/admin-sdk/).
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role for the matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}

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

Returns:
  An object of the form:

    { # Represents a matter. To work with Vault resources, the account must have the [required Vault privileges] (https://support.google.com/vault/answer/2799699) and access to the matter. To access a matter, the account must have created the matter, have the matter shared with them, or have the **View All Matters** privilege.
  &quot;description&quot;: &quot;A String&quot;, # An optional description for the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID, which is generated by the server. Leave blank when creating a matter.
  &quot;matterPermissions&quot;: [ # Lists the users and their permission for the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Users can be matter owners or collaborators. Each matter has only one owner. All others users who can access the matter are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by the [Admin SDK](https://developers.google.com/admin-sdk/).
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role for the matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(matterId, x__xgafv=None)</code>
  <pre>Deletes the specified matter. Returns the matter with updated state.

Args:
  matterId: string, The matter ID (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a matter. To work with Vault resources, the account must have the [required Vault privileges] (https://support.google.com/vault/answer/2799699) and access to the matter. To access a matter, the account must have created the matter, have the matter shared with them, or have the **View All Matters** privilege.
  &quot;description&quot;: &quot;A String&quot;, # An optional description for the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID, which is generated by the server. Leave blank when creating a matter.
  &quot;matterPermissions&quot;: [ # Lists the users and their permission for the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Users can be matter owners or collaborators. Each matter has only one owner. All others users who can access the matter are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by the [Admin SDK](https://developers.google.com/admin-sdk/).
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role for the matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(matterId, view=None, x__xgafv=None)</code>
  <pre>Gets the specified matter.

Args:
  matterId: string, The matter ID. (required)
  view: string, Specifies how much information about the matter to return in the response.
    Allowed values
      VIEW_UNSPECIFIED - The amount of detail is unspecified. Same as **BASIC**.
      BASIC - Returns the matter ID, name, description, and state. Default choice.
      FULL - Returns the basic details and a list of matter owners and collaborators (see [MatterPermissions](https://developers.google.com/vault/reference/rest/v1/matters#matterpermission)).
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a matter. To work with Vault resources, the account must have the [required Vault privileges] (https://support.google.com/vault/answer/2799699) and access to the matter. To access a matter, the account must have created the matter, have the matter shared with them, or have the **View All Matters** privilege.
  &quot;description&quot;: &quot;A String&quot;, # An optional description for the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID, which is generated by the server. Leave blank when creating a matter.
  &quot;matterPermissions&quot;: [ # Lists the users and their permission for the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Users can be matter owners or collaborators. Each matter has only one owner. All others users who can access the matter are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by the [Admin SDK](https://developers.google.com/admin-sdk/).
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role for the matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(pageSize=None, pageToken=None, state=None, view=None, x__xgafv=None)</code>
  <pre>Lists matters the requestor has access to.

Args:
  pageSize: integer, The number of matters to return in the response. Default and maximum are 100.
  pageToken: string, The pagination token as returned in the response.
  state: string, If set, lists only matters with the specified state. The default lists matters of all states.
    Allowed values
      STATE_UNSPECIFIED - The matter has no specified state.
      OPEN - The matter is open.
      CLOSED - The matter is closed.
      DELETED - The matter is deleted.
  view: string, Specifies how much information about the matter to return in response.
    Allowed values
      VIEW_UNSPECIFIED - The amount of detail is unspecified. Same as **BASIC**.
      BASIC - Returns the matter ID, name, description, and state. Default choice.
      FULL - Returns the basic details and a list of matter owners and collaborators (see [MatterPermissions](https://developers.google.com/vault/reference/rest/v1/matters#matterpermission)).
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Provides the list of matters.
  &quot;matters&quot;: [ # List of matters.
    { # Represents a matter. To work with Vault resources, the account must have the [required Vault privileges] (https://support.google.com/vault/answer/2799699) and access to the matter. To access a matter, the account must have created the matter, have the matter shared with them, or have the **View All Matters** privilege.
      &quot;description&quot;: &quot;A String&quot;, # An optional description for the matter.
      &quot;matterId&quot;: &quot;A String&quot;, # The matter ID, which is generated by the server. Leave blank when creating a matter.
      &quot;matterPermissions&quot;: [ # Lists the users and their permission for the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
        { # Users can be matter owners or collaborators. Each matter has only one owner. All others users who can access the matter are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
          &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by the [Admin SDK](https://developers.google.com/admin-sdk/).
          &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role for the matter.
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
      &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Page token to retrieve the next page of results in the 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="removePermissions">removePermissions(matterId, body=None, x__xgafv=None)</code>
  <pre>Removes an account as a matter collaborator.

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

{ # Remove an account as a matter collaborator.
  &quot;accountId&quot;: &quot;A String&quot;, # The account ID.
}

  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="reopen">reopen(matterId, body=None, x__xgafv=None)</code>
  <pre>Reopens the specified matter. Returns the matter with updated state.

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

{ # Reopen a matter by ID.
}

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

Returns:
  An object of the form:

    { # Response to a ReopenMatterRequest.
  &quot;matter&quot;: { # Represents a matter. To work with Vault resources, the account must have the [required Vault privileges] (https://support.google.com/vault/answer/2799699) and access to the matter. To access a matter, the account must have created the matter, have the matter shared with them, or have the **View All Matters** privilege. # The updated matter, with state **OPEN**.
    &quot;description&quot;: &quot;A String&quot;, # An optional description for the matter.
    &quot;matterId&quot;: &quot;A String&quot;, # The matter ID, which is generated by the server. Leave blank when creating a matter.
    &quot;matterPermissions&quot;: [ # Lists the users and their permission for the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
      { # Users can be matter owners or collaborators. Each matter has only one owner. All others users who can access the matter are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
        &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by the [Admin SDK](https://developers.google.com/admin-sdk/).
        &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role for the matter.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
    &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="undelete">undelete(matterId, body=None, x__xgafv=None)</code>
  <pre>Undeletes the specified matter. Returns the matter with updated state.

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

{ # Undelete a matter by ID.
}

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

Returns:
  An object of the form:

    { # Represents a matter. To work with Vault resources, the account must have the [required Vault privileges] (https://support.google.com/vault/answer/2799699) and access to the matter. To access a matter, the account must have created the matter, have the matter shared with them, or have the **View All Matters** privilege.
  &quot;description&quot;: &quot;A String&quot;, # An optional description for the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID, which is generated by the server. Leave blank when creating a matter.
  &quot;matterPermissions&quot;: [ # Lists the users and their permission for the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Users can be matter owners or collaborators. Each matter has only one owner. All others users who can access the matter are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by the [Admin SDK](https://developers.google.com/admin-sdk/).
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role for the matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(matterId, body=None, x__xgafv=None)</code>
  <pre>Updates the specified matter. This updates only the name and description of the matter, identified by matter ID. Changes to any other fields are ignored. Returns the default view of the matter.

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

{ # Represents a matter. To work with Vault resources, the account must have the [required Vault privileges] (https://support.google.com/vault/answer/2799699) and access to the matter. To access a matter, the account must have created the matter, have the matter shared with them, or have the **View All Matters** privilege.
  &quot;description&quot;: &quot;A String&quot;, # An optional description for the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID, which is generated by the server. Leave blank when creating a matter.
  &quot;matterPermissions&quot;: [ # Lists the users and their permission for the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Users can be matter owners or collaborators. Each matter has only one owner. All others users who can access the matter are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by the [Admin SDK](https://developers.google.com/admin-sdk/).
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role for the matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}

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

Returns:
  An object of the form:

    { # Represents a matter. To work with Vault resources, the account must have the [required Vault privileges] (https://support.google.com/vault/answer/2799699) and access to the matter. To access a matter, the account must have created the matter, have the matter shared with them, or have the **View All Matters** privilege.
  &quot;description&quot;: &quot;A String&quot;, # An optional description for the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID, which is generated by the server. Leave blank when creating a matter.
  &quot;matterPermissions&quot;: [ # Lists the users and their permission for the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Users can be matter owners or collaborators. Each matter has only one owner. All others users who can access the matter are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by the [Admin SDK](https://developers.google.com/admin-sdk/).
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role for the matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}</pre>
</div>

</body></html>