<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></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>