<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, 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, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new matter with the given name and description. The initial state</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, x__xgafv=None, view=None)</a></code></p>
<p class="firstline">Gets the specified matter.</p>
<p class="toc_element">
  <code><a href="#list">list(pageSize=None, state=None, pageToken=None, x__xgafv=None, view=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, 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, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified matter.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="addPermissions">addPermissions(matterId, body, x__xgafv=None)</code>
  <pre>Adds an account as a matter collaborator.

Args:
  matterId: string, The matter ID. (required)
  body: object, The request body. (required)
    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.
    "ccMe": True or False, # Only relevant if send_emails is true.
        # True to CC requestor in the email message.
        # False to not CC requestor.
    "sendEmails": True or False, # True to send notification email to the added account.
        # False to not send notification email.
    "matterPermission": { # Currently each matter only has one owner, and all others are collaborators. # The MatterPermission to add.
        # When an account is purged, its corresponding MatterPermission resources
        # cease to exist.
      "role": "A String", # The user's role in this matter.
      "accountId": "A String", # The account id, as provided by <a
          # href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
    },
  }

  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.
    "role": "A String", # The user's role in this matter.
    "accountId": "A String", # The account id, as provided by <a
        # href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
  }</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.
    "matter": { # Represents a matter. # The updated matter, with state CLOSED.
      "matterPermissions": [ # 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.
          "role": "A String", # The user's role in this matter.
          "accountId": "A String", # The account id, as provided by <a
              # href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
        },
      ],
      "matterId": "A String", # The matter ID which is generated by the server.
          # Should be blank when creating a new matter.
      "state": "A String", # The state of the matter.
      "name": "A String", # The name of the matter.
      "description": "A String", # The description of the matter.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="create">create(body, 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. (required)
    The object takes the form of:

{ # Represents a matter.
  "matterPermissions": [ # 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.
      "role": "A String", # The user's role in this matter.
      "accountId": "A String", # The account id, as provided by <a
          # href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
    },
  ],
  "matterId": "A String", # The matter ID which is generated by the server.
      # Should be blank when creating a new matter.
  "state": "A String", # The state of the matter.
  "name": "A String", # The name of the matter.
  "description": "A String", # The description 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.
    "matterPermissions": [ # 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.
        "role": "A String", # The user's role in this matter.
        "accountId": "A String", # The account id, as provided by <a
            # href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
      },
    ],
    "matterId": "A String", # The matter ID which is generated by the server.
        # Should be blank when creating a new matter.
    "state": "A String", # The state of the matter.
    "name": "A String", # The name of the matter.
    "description": "A String", # The description 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.
    "matterPermissions": [ # 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.
        "role": "A String", # The user's role in this matter.
        "accountId": "A String", # The account id, as provided by <a
            # href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
      },
    ],
    "matterId": "A String", # The matter ID which is generated by the server.
        # Should be blank when creating a new matter.
    "state": "A String", # The state of the matter.
    "name": "A String", # The name of the matter.
    "description": "A String", # The description of the matter.
  }</pre>
</div>

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

Args:
  matterId: string, The matter 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 Matter to return in the response.

Returns:
  An object of the form:

    { # Represents a matter.
    "matterPermissions": [ # 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.
        "role": "A String", # The user's role in this matter.
        "accountId": "A String", # The account id, as provided by <a
            # href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
      },
    ],
    "matterId": "A String", # The matter ID which is generated by the server.
        # Should be blank when creating a new matter.
    "state": "A String", # The state of the matter.
    "name": "A String", # The name of the matter.
    "description": "A String", # The description of the matter.
  }</pre>
</div>

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

Args:
  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.
  pageToken: string, The pagination token as returned in the response.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  view: string, Specifies which parts of the matter to return in response.

Returns:
  An object of the form:

    { # Provides the list of matters.
    "nextPageToken": "A String", # Page token to retrieve the next page of results in the list.
    "matters": [ # List of matters.
      { # Represents a matter.
        "matterPermissions": [ # 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.
            "role": "A String", # The user's role in this matter.
            "accountId": "A String", # The account id, as provided by <a
                # href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
          },
        ],
        "matterId": "A String", # The matter ID which is generated by the server.
            # Should be blank when creating a new matter.
        "state": "A String", # The state of the matter.
        "name": "A String", # The name of the matter.
        "description": "A String", # The description 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 '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="removePermissions">removePermissions(matterId, body, x__xgafv=None)</code>
  <pre>Removes an account as a matter collaborator.

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

{ # Remove an account as a matter collaborator.
    "accountId": "A String", # 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.
    "matter": { # Represents a matter. # The updated matter, with state OPEN.
      "matterPermissions": [ # 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.
          "role": "A String", # The user's role in this matter.
          "accountId": "A String", # The account id, as provided by <a
              # href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
        },
      ],
      "matterId": "A String", # The matter ID which is generated by the server.
          # Should be blank when creating a new matter.
      "state": "A String", # The state of the matter.
      "name": "A String", # The name of the matter.
      "description": "A String", # The description 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.
    "matterPermissions": [ # 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.
        "role": "A String", # The user's role in this matter.
        "accountId": "A String", # The account id, as provided by <a
            # href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
      },
    ],
    "matterId": "A String", # The matter ID which is generated by the server.
        # Should be blank when creating a new matter.
    "state": "A String", # The state of the matter.
    "name": "A String", # The name of the matter.
    "description": "A String", # The description of the matter.
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(matterId, body, 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. (required)
    The object takes the form of:

{ # Represents a matter.
  "matterPermissions": [ # 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.
      "role": "A String", # The user's role in this matter.
      "accountId": "A String", # The account id, as provided by <a
          # href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
    },
  ],
  "matterId": "A String", # The matter ID which is generated by the server.
      # Should be blank when creating a new matter.
  "state": "A String", # The state of the matter.
  "name": "A String", # The name of the matter.
  "description": "A String", # The description 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.
    "matterPermissions": [ # 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.
        "role": "A String", # The user's role in this matter.
        "accountId": "A String", # The account id, as provided by <a
            # href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
      },
    ],
    "matterId": "A String", # The matter ID which is generated by the server.
        # Should be blank when creating a new matter.
    "state": "A String", # The state of the matter.
    "name": "A String", # The name of the matter.
    "description": "A String", # The description of the matter.
  }</pre>
</div>

</body></html>