<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 matter with updated state.</p>
<p class="toc_element">
  <code><a href="#create">create(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new 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 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(view=None, pageToken=None, pageSize=None, state=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists matters the user 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 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 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, it will be overwritten.
    &quot;matterPermission&quot;: { # Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist. # The MatterPermission to add.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by Admin SDK.
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
    },
    &quot;sendEmails&quot;: True or False, # True to send notification email to the added account. False to not send notification email.
    &quot;ccMe&quot;: True or False, # Only relevant if send_emails is true. True to CC requestor in the email message. False to not CC requestor.
  }

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

Returns:
  An object of the form:

    { # Currently each matter only has one owner, and all others 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 Admin SDK.
    &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this 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 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. # The updated matter, with state CLOSED.
      &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
      &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
        { # Currently each matter only has one owner, and all others 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 Admin SDK.
          &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
      &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
      &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="create">create(body=None, x__xgafv=None)</code>
  <pre>Creates a new 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.
  &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
  &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Currently each matter only has one owner, and all others 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 Admin SDK.
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new 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.
    &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
    &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
      { # Currently each matter only has one owner, and all others 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 Admin SDK.
        &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
    &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new 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 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.
    &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
    &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
      { # Currently each matter only has one owner, and all others 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 Admin SDK.
        &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
    &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new 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 which parts of the Matter to return in the response.
    Allowed values
      VIEW_UNSPECIFIED - There is no specified view.
      BASIC - Response includes the matter_id, name, description, and state. Default choice.
      FULL - Full representation of matter is returned. Everything above and including MatterPermissions list.
  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.
    &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
    &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
      { # Currently each matter only has one owner, and all others 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 Admin SDK.
        &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
    &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
    &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
  }</pre>
</div>

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

Args:
  view: string, Specifies which parts of the matter to return in response.
    Allowed values
      VIEW_UNSPECIFIED - There is no specified view.
      BASIC - Response includes the matter_id, name, description, and state. Default choice.
      FULL - Full representation of matter is returned. Everything above and including MatterPermissions list.
  pageToken: string, The pagination token as returned in the response.
  pageSize: integer, The number of matters to return in the response. Default and maximum are 100.
  state: string, If set, list only matters with that specific state. The default is listing matters of all states.
    Allowed values
      STATE_UNSPECIFIED - The matter has no specified state.
      OPEN - This matter is open.
      CLOSED - This matter is closed.
      DELETED - This matter is deleted.
  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;nextPageToken&quot;: &quot;A String&quot;, # Page token to retrieve the next page of results in the list.
    &quot;matters&quot;: [ # List of matters.
      { # Represents a matter.
        &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
        &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
          { # Currently each matter only has one owner, and all others 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 Admin SDK.
            &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
        &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
        &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
      },
    ],
  }</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 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. # The updated matter, with state OPEN.
      &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
      &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
        { # Currently each matter only has one owner, and all others 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 Admin SDK.
          &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
      &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new 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 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.
    &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
    &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
      { # Currently each matter only has one owner, and all others 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 Admin SDK.
        &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
    &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new 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.
  &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
  &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Currently each matter only has one owner, and all others 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 Admin SDK.
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new 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.
    &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
    &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
      { # Currently each matter only has one owner, and all others 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 Admin SDK.
        &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
    &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
    &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
  }</pre>
</div>

</body></html>