<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="drive_v2.html">Drive API</a> . <a href="drive_v2.replies.html">replies</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#delete">delete(fileId, commentId, replyId)</a></code></p>
<p class="firstline">Deletes a reply.</p>
<p class="toc_element">
  <code><a href="#get">get(fileId, commentId, replyId, includeDeleted=None)</a></code></p>
<p class="firstline">Gets a reply.</p>
<p class="toc_element">
  <code><a href="#insert">insert(fileId, commentId, body=None)</a></code></p>
<p class="firstline">Creates a new reply to the given comment.</p>
<p class="toc_element">
  <code><a href="#list">list(fileId, commentId, includeDeleted=None, maxResults=None, pageToken=None)</a></code></p>
<p class="firstline">Lists all of the replies to a comment.</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="#patch">patch(fileId, commentId, replyId, body=None)</a></code></p>
<p class="firstline">Updates an existing reply.</p>
<p class="toc_element">
  <code><a href="#update">update(fileId, commentId, replyId, body=None)</a></code></p>
<p class="firstline">Updates an existing reply.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(fileId, commentId, replyId)</code>
  <pre>Deletes a reply.

Args:
  fileId: string, The ID of the file. (required)
  commentId: string, The ID of the comment. (required)
  replyId: string, The ID of the reply. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(fileId, commentId, replyId, includeDeleted=None)</code>
  <pre>Gets a reply.

Args:
  fileId: string, The ID of the file. (required)
  commentId: string, The ID of the comment. (required)
  replyId: string, The ID of the reply. (required)
  includeDeleted: boolean, If set, this will succeed when retrieving a deleted reply.

Returns:
  An object of the form:

    { # A comment on a file in Google Drive.
  &quot;author&quot;: { # Information about a Drive user. # The author of the reply. The author&#x27;s email address and permission ID will not be populated.
    &quot;displayName&quot;: &quot;A String&quot;, # A plain text displayable name for this user.
    &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user.
    &quot;isAuthenticatedUser&quot;: True or False, # Whether this user is the same as the authenticated user for whom the request was made.
    &quot;kind&quot;: &quot;drive#user&quot;, # This is always drive#user.
    &quot;permissionId&quot;: &quot;A String&quot;, # The user&#x27;s ID as visible in the permissions collection.
    &quot;picture&quot;: { # The user&#x27;s profile picture.
      &quot;url&quot;: &quot;A String&quot;, # A URL that points to a profile picture of this user.
    },
  },
  &quot;content&quot;: &quot;A String&quot;, # The plain text content used to create this reply. This is not HTML safe and should only be used as a starting point to make edits to a reply&#x27;s content. This field is required on inserts if no verb is specified (resolve/reopen).
  &quot;createdDate&quot;: &quot;A String&quot;, # The date when this reply was first created.
  &quot;deleted&quot;: True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
  &quot;htmlContent&quot;: &quot;A String&quot;, # HTML formatted content for this reply.
  &quot;kind&quot;: &quot;drive#commentReply&quot;, # This is always drive#commentReply.
  &quot;modifiedDate&quot;: &quot;A String&quot;, # The date when this reply was last modified.
  &quot;replyId&quot;: &quot;A String&quot;, # The ID of the reply.
  &quot;verb&quot;: &quot;A String&quot;, # The action this reply performed to the parent comment. When creating a new reply this is the action to be perform to the parent comment. Possible values are:
      # - &quot;resolve&quot; - To resolve a comment.
      # - &quot;reopen&quot; - To reopen (un-resolve) a comment.
}</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(fileId, commentId, body=None)</code>
  <pre>Creates a new reply to the given comment.

Args:
  fileId: string, The ID of the file. (required)
  commentId: string, The ID of the comment. (required)
  body: object, The request body.
    The object takes the form of:

{ # A comment on a file in Google Drive.
  &quot;author&quot;: { # Information about a Drive user. # The author of the reply. The author&#x27;s email address and permission ID will not be populated.
    &quot;displayName&quot;: &quot;A String&quot;, # A plain text displayable name for this user.
    &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user.
    &quot;isAuthenticatedUser&quot;: True or False, # Whether this user is the same as the authenticated user for whom the request was made.
    &quot;kind&quot;: &quot;drive#user&quot;, # This is always drive#user.
    &quot;permissionId&quot;: &quot;A String&quot;, # The user&#x27;s ID as visible in the permissions collection.
    &quot;picture&quot;: { # The user&#x27;s profile picture.
      &quot;url&quot;: &quot;A String&quot;, # A URL that points to a profile picture of this user.
    },
  },
  &quot;content&quot;: &quot;A String&quot;, # The plain text content used to create this reply. This is not HTML safe and should only be used as a starting point to make edits to a reply&#x27;s content. This field is required on inserts if no verb is specified (resolve/reopen).
  &quot;createdDate&quot;: &quot;A String&quot;, # The date when this reply was first created.
  &quot;deleted&quot;: True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
  &quot;htmlContent&quot;: &quot;A String&quot;, # HTML formatted content for this reply.
  &quot;kind&quot;: &quot;drive#commentReply&quot;, # This is always drive#commentReply.
  &quot;modifiedDate&quot;: &quot;A String&quot;, # The date when this reply was last modified.
  &quot;replyId&quot;: &quot;A String&quot;, # The ID of the reply.
  &quot;verb&quot;: &quot;A String&quot;, # The action this reply performed to the parent comment. When creating a new reply this is the action to be perform to the parent comment. Possible values are:
      # - &quot;resolve&quot; - To resolve a comment.
      # - &quot;reopen&quot; - To reopen (un-resolve) a comment.
}


Returns:
  An object of the form:

    { # A comment on a file in Google Drive.
  &quot;author&quot;: { # Information about a Drive user. # The author of the reply. The author&#x27;s email address and permission ID will not be populated.
    &quot;displayName&quot;: &quot;A String&quot;, # A plain text displayable name for this user.
    &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user.
    &quot;isAuthenticatedUser&quot;: True or False, # Whether this user is the same as the authenticated user for whom the request was made.
    &quot;kind&quot;: &quot;drive#user&quot;, # This is always drive#user.
    &quot;permissionId&quot;: &quot;A String&quot;, # The user&#x27;s ID as visible in the permissions collection.
    &quot;picture&quot;: { # The user&#x27;s profile picture.
      &quot;url&quot;: &quot;A String&quot;, # A URL that points to a profile picture of this user.
    },
  },
  &quot;content&quot;: &quot;A String&quot;, # The plain text content used to create this reply. This is not HTML safe and should only be used as a starting point to make edits to a reply&#x27;s content. This field is required on inserts if no verb is specified (resolve/reopen).
  &quot;createdDate&quot;: &quot;A String&quot;, # The date when this reply was first created.
  &quot;deleted&quot;: True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
  &quot;htmlContent&quot;: &quot;A String&quot;, # HTML formatted content for this reply.
  &quot;kind&quot;: &quot;drive#commentReply&quot;, # This is always drive#commentReply.
  &quot;modifiedDate&quot;: &quot;A String&quot;, # The date when this reply was last modified.
  &quot;replyId&quot;: &quot;A String&quot;, # The ID of the reply.
  &quot;verb&quot;: &quot;A String&quot;, # The action this reply performed to the parent comment. When creating a new reply this is the action to be perform to the parent comment. Possible values are:
      # - &quot;resolve&quot; - To resolve a comment.
      # - &quot;reopen&quot; - To reopen (un-resolve) a comment.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(fileId, commentId, includeDeleted=None, maxResults=None, pageToken=None)</code>
  <pre>Lists all of the replies to a comment.

Args:
  fileId: string, The ID of the file. (required)
  commentId: string, The ID of the comment. (required)
  includeDeleted: boolean, If set, all replies, including deleted replies (with content stripped) will be returned.
  maxResults: integer, The maximum number of replies to include in the response, used for paging.
  pageToken: string, The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of &quot;nextPageToken&quot; from the previous response.

Returns:
  An object of the form:

    { # A list of replies to a comment on a file in Google Drive.
  &quot;items&quot;: [ # The list of replies. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.
    { # A comment on a file in Google Drive.
      &quot;author&quot;: { # Information about a Drive user. # The author of the reply. The author&#x27;s email address and permission ID will not be populated.
        &quot;displayName&quot;: &quot;A String&quot;, # A plain text displayable name for this user.
        &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user.
        &quot;isAuthenticatedUser&quot;: True or False, # Whether this user is the same as the authenticated user for whom the request was made.
        &quot;kind&quot;: &quot;drive#user&quot;, # This is always drive#user.
        &quot;permissionId&quot;: &quot;A String&quot;, # The user&#x27;s ID as visible in the permissions collection.
        &quot;picture&quot;: { # The user&#x27;s profile picture.
          &quot;url&quot;: &quot;A String&quot;, # A URL that points to a profile picture of this user.
        },
      },
      &quot;content&quot;: &quot;A String&quot;, # The plain text content used to create this reply. This is not HTML safe and should only be used as a starting point to make edits to a reply&#x27;s content. This field is required on inserts if no verb is specified (resolve/reopen).
      &quot;createdDate&quot;: &quot;A String&quot;, # The date when this reply was first created.
      &quot;deleted&quot;: True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
      &quot;htmlContent&quot;: &quot;A String&quot;, # HTML formatted content for this reply.
      &quot;kind&quot;: &quot;drive#commentReply&quot;, # This is always drive#commentReply.
      &quot;modifiedDate&quot;: &quot;A String&quot;, # The date when this reply was last modified.
      &quot;replyId&quot;: &quot;A String&quot;, # The ID of the reply.
      &quot;verb&quot;: &quot;A String&quot;, # The action this reply performed to the parent comment. When creating a new reply this is the action to be perform to the parent comment. Possible values are:
          # - &quot;resolve&quot; - To resolve a comment.
          # - &quot;reopen&quot; - To reopen (un-resolve) a comment.
    },
  ],
  &quot;kind&quot;: &quot;drive#commentReplyList&quot;, # This is always drive#commentReplyList.
  &quot;nextLink&quot;: &quot;A String&quot;, # A link to the next page of replies.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The page token for the next page of replies. This will be absent if the end of the replies list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.
  &quot;selfLink&quot;: &quot;A String&quot;, # A link back to this 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="patch">patch(fileId, commentId, replyId, body=None)</code>
  <pre>Updates an existing reply.

Args:
  fileId: string, The ID of the file. (required)
  commentId: string, The ID of the comment. (required)
  replyId: string, The ID of the reply. (required)
  body: object, The request body.
    The object takes the form of:

{ # A comment on a file in Google Drive.
  &quot;author&quot;: { # Information about a Drive user. # The author of the reply. The author&#x27;s email address and permission ID will not be populated.
    &quot;displayName&quot;: &quot;A String&quot;, # A plain text displayable name for this user.
    &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user.
    &quot;isAuthenticatedUser&quot;: True or False, # Whether this user is the same as the authenticated user for whom the request was made.
    &quot;kind&quot;: &quot;drive#user&quot;, # This is always drive#user.
    &quot;permissionId&quot;: &quot;A String&quot;, # The user&#x27;s ID as visible in the permissions collection.
    &quot;picture&quot;: { # The user&#x27;s profile picture.
      &quot;url&quot;: &quot;A String&quot;, # A URL that points to a profile picture of this user.
    },
  },
  &quot;content&quot;: &quot;A String&quot;, # The plain text content used to create this reply. This is not HTML safe and should only be used as a starting point to make edits to a reply&#x27;s content. This field is required on inserts if no verb is specified (resolve/reopen).
  &quot;createdDate&quot;: &quot;A String&quot;, # The date when this reply was first created.
  &quot;deleted&quot;: True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
  &quot;htmlContent&quot;: &quot;A String&quot;, # HTML formatted content for this reply.
  &quot;kind&quot;: &quot;drive#commentReply&quot;, # This is always drive#commentReply.
  &quot;modifiedDate&quot;: &quot;A String&quot;, # The date when this reply was last modified.
  &quot;replyId&quot;: &quot;A String&quot;, # The ID of the reply.
  &quot;verb&quot;: &quot;A String&quot;, # The action this reply performed to the parent comment. When creating a new reply this is the action to be perform to the parent comment. Possible values are:
      # - &quot;resolve&quot; - To resolve a comment.
      # - &quot;reopen&quot; - To reopen (un-resolve) a comment.
}


Returns:
  An object of the form:

    { # A comment on a file in Google Drive.
  &quot;author&quot;: { # Information about a Drive user. # The author of the reply. The author&#x27;s email address and permission ID will not be populated.
    &quot;displayName&quot;: &quot;A String&quot;, # A plain text displayable name for this user.
    &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user.
    &quot;isAuthenticatedUser&quot;: True or False, # Whether this user is the same as the authenticated user for whom the request was made.
    &quot;kind&quot;: &quot;drive#user&quot;, # This is always drive#user.
    &quot;permissionId&quot;: &quot;A String&quot;, # The user&#x27;s ID as visible in the permissions collection.
    &quot;picture&quot;: { # The user&#x27;s profile picture.
      &quot;url&quot;: &quot;A String&quot;, # A URL that points to a profile picture of this user.
    },
  },
  &quot;content&quot;: &quot;A String&quot;, # The plain text content used to create this reply. This is not HTML safe and should only be used as a starting point to make edits to a reply&#x27;s content. This field is required on inserts if no verb is specified (resolve/reopen).
  &quot;createdDate&quot;: &quot;A String&quot;, # The date when this reply was first created.
  &quot;deleted&quot;: True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
  &quot;htmlContent&quot;: &quot;A String&quot;, # HTML formatted content for this reply.
  &quot;kind&quot;: &quot;drive#commentReply&quot;, # This is always drive#commentReply.
  &quot;modifiedDate&quot;: &quot;A String&quot;, # The date when this reply was last modified.
  &quot;replyId&quot;: &quot;A String&quot;, # The ID of the reply.
  &quot;verb&quot;: &quot;A String&quot;, # The action this reply performed to the parent comment. When creating a new reply this is the action to be perform to the parent comment. Possible values are:
      # - &quot;resolve&quot; - To resolve a comment.
      # - &quot;reopen&quot; - To reopen (un-resolve) a comment.
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(fileId, commentId, replyId, body=None)</code>
  <pre>Updates an existing reply.

Args:
  fileId: string, The ID of the file. (required)
  commentId: string, The ID of the comment. (required)
  replyId: string, The ID of the reply. (required)
  body: object, The request body.
    The object takes the form of:

{ # A comment on a file in Google Drive.
  &quot;author&quot;: { # Information about a Drive user. # The author of the reply. The author&#x27;s email address and permission ID will not be populated.
    &quot;displayName&quot;: &quot;A String&quot;, # A plain text displayable name for this user.
    &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user.
    &quot;isAuthenticatedUser&quot;: True or False, # Whether this user is the same as the authenticated user for whom the request was made.
    &quot;kind&quot;: &quot;drive#user&quot;, # This is always drive#user.
    &quot;permissionId&quot;: &quot;A String&quot;, # The user&#x27;s ID as visible in the permissions collection.
    &quot;picture&quot;: { # The user&#x27;s profile picture.
      &quot;url&quot;: &quot;A String&quot;, # A URL that points to a profile picture of this user.
    },
  },
  &quot;content&quot;: &quot;A String&quot;, # The plain text content used to create this reply. This is not HTML safe and should only be used as a starting point to make edits to a reply&#x27;s content. This field is required on inserts if no verb is specified (resolve/reopen).
  &quot;createdDate&quot;: &quot;A String&quot;, # The date when this reply was first created.
  &quot;deleted&quot;: True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
  &quot;htmlContent&quot;: &quot;A String&quot;, # HTML formatted content for this reply.
  &quot;kind&quot;: &quot;drive#commentReply&quot;, # This is always drive#commentReply.
  &quot;modifiedDate&quot;: &quot;A String&quot;, # The date when this reply was last modified.
  &quot;replyId&quot;: &quot;A String&quot;, # The ID of the reply.
  &quot;verb&quot;: &quot;A String&quot;, # The action this reply performed to the parent comment. When creating a new reply this is the action to be perform to the parent comment. Possible values are:
      # - &quot;resolve&quot; - To resolve a comment.
      # - &quot;reopen&quot; - To reopen (un-resolve) a comment.
}


Returns:
  An object of the form:

    { # A comment on a file in Google Drive.
  &quot;author&quot;: { # Information about a Drive user. # The author of the reply. The author&#x27;s email address and permission ID will not be populated.
    &quot;displayName&quot;: &quot;A String&quot;, # A plain text displayable name for this user.
    &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user.
    &quot;isAuthenticatedUser&quot;: True or False, # Whether this user is the same as the authenticated user for whom the request was made.
    &quot;kind&quot;: &quot;drive#user&quot;, # This is always drive#user.
    &quot;permissionId&quot;: &quot;A String&quot;, # The user&#x27;s ID as visible in the permissions collection.
    &quot;picture&quot;: { # The user&#x27;s profile picture.
      &quot;url&quot;: &quot;A String&quot;, # A URL that points to a profile picture of this user.
    },
  },
  &quot;content&quot;: &quot;A String&quot;, # The plain text content used to create this reply. This is not HTML safe and should only be used as a starting point to make edits to a reply&#x27;s content. This field is required on inserts if no verb is specified (resolve/reopen).
  &quot;createdDate&quot;: &quot;A String&quot;, # The date when this reply was first created.
  &quot;deleted&quot;: True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
  &quot;htmlContent&quot;: &quot;A String&quot;, # HTML formatted content for this reply.
  &quot;kind&quot;: &quot;drive#commentReply&quot;, # This is always drive#commentReply.
  &quot;modifiedDate&quot;: &quot;A String&quot;, # The date when this reply was last modified.
  &quot;replyId&quot;: &quot;A String&quot;, # The ID of the reply.
  &quot;verb&quot;: &quot;A String&quot;, # The action this reply performed to the parent comment. When creating a new reply this is the action to be perform to the parent comment. Possible values are:
      # - &quot;resolve&quot; - To resolve a comment.
      # - &quot;reopen&quot; - To reopen (un-resolve) a comment.
}</pre>
</div>

</body></html>