<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="youtube_v3.html">YouTube Data API v3</a> . <a href="youtube_v3.commentThreads.html">commentThreads</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="#insert">insert(part, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Inserts a new resource into this collection.</p>
<p class="toc_element">
  <code><a href="#list">list(part, pageToken=None, moderationStatus=None, id=None, order=None, maxResults=None, allThreadsRelatedToChannelId=None, channelId=None, searchTerms=None, textFormat=None, videoId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves a list of resources, possibly filtered.</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="#update">update(part, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing resource.</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="insert">insert(part, body=None, x__xgafv=None)</code>
  <pre>Inserts a new resource into this collection.

Args:
  part: string, The *part* parameter identifies the properties that the API response will include. Set the parameter value to snippet. The snippet part has a quota cost of 2 units. (required) (repeated)
  body: object, The request body.
    The object takes the form of:

{ # A *comment thread* represents information that applies to a top level comment and all its replies. It can also include the top level comment itself and some of the replies.
    &quot;snippet&quot;: { # Basic details about a comment thread. # The snippet object contains basic details about the comment thread and also the top level comment.
      &quot;totalReplyCount&quot;: 42, # The total number of replies (not including the top level comment).
      &quot;isPublic&quot;: True or False, # Whether the thread (and therefore all its comments) is visible to all YouTube users.
      &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comments refer to, if any. No video_id implies a channel discussion comment.
      &quot;channelId&quot;: &quot;A String&quot;, # The YouTube channel the comments in the thread refer to or the channel with the video the comments refer to. If video_id isn&#x27;t set the comments refer to the channel itself.
      &quot;canReply&quot;: True or False, # Whether the current viewer of the thread can reply to it. This is viewer specific - other viewers may see a different value for this field.
      &quot;topLevelComment&quot;: { # A *comment* represents a single YouTube comment. # The top level comment of this thread.
        &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment.
        &quot;kind&quot;: &quot;youtube#comment&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#comment&quot;.
        &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
        &quot;snippet&quot;: { # Basic details about a comment, such as its author and text. # The snippet object contains basic details about the comment.
          &quot;authorChannelUrl&quot;: &quot;A String&quot;, # Link to the author&#x27;s YouTube channel, if any.
          &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comment refers to, if any.
          &quot;updatedAt&quot;: &quot;A String&quot;, # The date and time when was last updated . The value is specified in ISO 8601 format.
          &quot;canRate&quot;: True or False, # Whether the current viewer can rate this comment.
          &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time when the comment was orignally published. The value is specified in ISO 8601 format.
          &quot;authorChannelId&quot;: { # The id of the author&#x27;s YouTube channel, if any.
            &quot;value&quot;: &quot;A String&quot;,
          },
          &quot;moderationStatus&quot;: &quot;A String&quot;, # The comment&#x27;s moderation status. Will not be set if the comments were requested through the id filter.
          &quot;authorProfileImageUrl&quot;: &quot;A String&quot;, # The URL for the avatar of the user who posted the comment.
          &quot;viewerRating&quot;: &quot;A String&quot;, # The rating the viewer has given to this comment. For the time being this will never return RATE_TYPE_DISLIKE and instead return RATE_TYPE_NONE. This may change in the future.
          &quot;parentId&quot;: &quot;A String&quot;, # The unique id of the parent comment, only set for replies.
          &quot;channelId&quot;: &quot;A String&quot;, # The id of the corresponding YouTube channel. In case of a channel comment this is the channel the comment refers to. In case of a video comment it&#x27;s the video&#x27;s channel.
          &quot;likeCount&quot;: 42, # The total number of likes this comment has received.
          &quot;authorDisplayName&quot;: &quot;A String&quot;, # The name of the user who posted the comment.
          &quot;textOriginal&quot;: &quot;A String&quot;, # The comment&#x27;s original raw text as initially posted or last updated. The original text will only be returned if it is accessible to the viewer, which is only guaranteed if the viewer is the comment&#x27;s author.
          &quot;textDisplay&quot;: &quot;A String&quot;, # The comment&#x27;s text. The format is either plain text or HTML dependent on what has been requested. Even the plain text representation may differ from the text originally posted in that it may replace video links with video titles etc.
        },
      },
    },
    &quot;kind&quot;: &quot;youtube#commentThread&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#commentThread&quot;.
    &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
    &quot;replies&quot;: { # Comments written in (direct or indirect) reply to the top level comment. # The replies object contains a limited number of replies (if any) to the top level comment found in the snippet.
      &quot;comments&quot;: [ # A limited number of replies. Unless the number of replies returned equals total_reply_count in the snippet the returned replies are only a subset of the total number of replies.
        { # A *comment* represents a single YouTube comment.
          &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment.
          &quot;kind&quot;: &quot;youtube#comment&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#comment&quot;.
          &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
          &quot;snippet&quot;: { # Basic details about a comment, such as its author and text. # The snippet object contains basic details about the comment.
            &quot;authorChannelUrl&quot;: &quot;A String&quot;, # Link to the author&#x27;s YouTube channel, if any.
            &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comment refers to, if any.
            &quot;updatedAt&quot;: &quot;A String&quot;, # The date and time when was last updated . The value is specified in ISO 8601 format.
            &quot;canRate&quot;: True or False, # Whether the current viewer can rate this comment.
            &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time when the comment was orignally published. The value is specified in ISO 8601 format.
            &quot;authorChannelId&quot;: { # The id of the author&#x27;s YouTube channel, if any.
              &quot;value&quot;: &quot;A String&quot;,
            },
            &quot;moderationStatus&quot;: &quot;A String&quot;, # The comment&#x27;s moderation status. Will not be set if the comments were requested through the id filter.
            &quot;authorProfileImageUrl&quot;: &quot;A String&quot;, # The URL for the avatar of the user who posted the comment.
            &quot;viewerRating&quot;: &quot;A String&quot;, # The rating the viewer has given to this comment. For the time being this will never return RATE_TYPE_DISLIKE and instead return RATE_TYPE_NONE. This may change in the future.
            &quot;parentId&quot;: &quot;A String&quot;, # The unique id of the parent comment, only set for replies.
            &quot;channelId&quot;: &quot;A String&quot;, # The id of the corresponding YouTube channel. In case of a channel comment this is the channel the comment refers to. In case of a video comment it&#x27;s the video&#x27;s channel.
            &quot;likeCount&quot;: 42, # The total number of likes this comment has received.
            &quot;authorDisplayName&quot;: &quot;A String&quot;, # The name of the user who posted the comment.
            &quot;textOriginal&quot;: &quot;A String&quot;, # The comment&#x27;s original raw text as initially posted or last updated. The original text will only be returned if it is accessible to the viewer, which is only guaranteed if the viewer is the comment&#x27;s author.
            &quot;textDisplay&quot;: &quot;A String&quot;, # The comment&#x27;s text. The format is either plain text or HTML dependent on what has been requested. Even the plain text representation may differ from the text originally posted in that it may replace video links with video titles etc.
          },
        },
      ],
    },
    &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment thread.
  }

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

Returns:
  An object of the form:

    { # A *comment thread* represents information that applies to a top level comment and all its replies. It can also include the top level comment itself and some of the replies.
      &quot;snippet&quot;: { # Basic details about a comment thread. # The snippet object contains basic details about the comment thread and also the top level comment.
        &quot;totalReplyCount&quot;: 42, # The total number of replies (not including the top level comment).
        &quot;isPublic&quot;: True or False, # Whether the thread (and therefore all its comments) is visible to all YouTube users.
        &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comments refer to, if any. No video_id implies a channel discussion comment.
        &quot;channelId&quot;: &quot;A String&quot;, # The YouTube channel the comments in the thread refer to or the channel with the video the comments refer to. If video_id isn&#x27;t set the comments refer to the channel itself.
        &quot;canReply&quot;: True or False, # Whether the current viewer of the thread can reply to it. This is viewer specific - other viewers may see a different value for this field.
        &quot;topLevelComment&quot;: { # A *comment* represents a single YouTube comment. # The top level comment of this thread.
          &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment.
          &quot;kind&quot;: &quot;youtube#comment&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#comment&quot;.
          &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
          &quot;snippet&quot;: { # Basic details about a comment, such as its author and text. # The snippet object contains basic details about the comment.
            &quot;authorChannelUrl&quot;: &quot;A String&quot;, # Link to the author&#x27;s YouTube channel, if any.
            &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comment refers to, if any.
            &quot;updatedAt&quot;: &quot;A String&quot;, # The date and time when was last updated . The value is specified in ISO 8601 format.
            &quot;canRate&quot;: True or False, # Whether the current viewer can rate this comment.
            &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time when the comment was orignally published. The value is specified in ISO 8601 format.
            &quot;authorChannelId&quot;: { # The id of the author&#x27;s YouTube channel, if any.
              &quot;value&quot;: &quot;A String&quot;,
            },
            &quot;moderationStatus&quot;: &quot;A String&quot;, # The comment&#x27;s moderation status. Will not be set if the comments were requested through the id filter.
            &quot;authorProfileImageUrl&quot;: &quot;A String&quot;, # The URL for the avatar of the user who posted the comment.
            &quot;viewerRating&quot;: &quot;A String&quot;, # The rating the viewer has given to this comment. For the time being this will never return RATE_TYPE_DISLIKE and instead return RATE_TYPE_NONE. This may change in the future.
            &quot;parentId&quot;: &quot;A String&quot;, # The unique id of the parent comment, only set for replies.
            &quot;channelId&quot;: &quot;A String&quot;, # The id of the corresponding YouTube channel. In case of a channel comment this is the channel the comment refers to. In case of a video comment it&#x27;s the video&#x27;s channel.
            &quot;likeCount&quot;: 42, # The total number of likes this comment has received.
            &quot;authorDisplayName&quot;: &quot;A String&quot;, # The name of the user who posted the comment.
            &quot;textOriginal&quot;: &quot;A String&quot;, # The comment&#x27;s original raw text as initially posted or last updated. The original text will only be returned if it is accessible to the viewer, which is only guaranteed if the viewer is the comment&#x27;s author.
            &quot;textDisplay&quot;: &quot;A String&quot;, # The comment&#x27;s text. The format is either plain text or HTML dependent on what has been requested. Even the plain text representation may differ from the text originally posted in that it may replace video links with video titles etc.
          },
        },
      },
      &quot;kind&quot;: &quot;youtube#commentThread&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#commentThread&quot;.
      &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
      &quot;replies&quot;: { # Comments written in (direct or indirect) reply to the top level comment. # The replies object contains a limited number of replies (if any) to the top level comment found in the snippet.
        &quot;comments&quot;: [ # A limited number of replies. Unless the number of replies returned equals total_reply_count in the snippet the returned replies are only a subset of the total number of replies.
          { # A *comment* represents a single YouTube comment.
            &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment.
            &quot;kind&quot;: &quot;youtube#comment&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#comment&quot;.
            &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
            &quot;snippet&quot;: { # Basic details about a comment, such as its author and text. # The snippet object contains basic details about the comment.
              &quot;authorChannelUrl&quot;: &quot;A String&quot;, # Link to the author&#x27;s YouTube channel, if any.
              &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comment refers to, if any.
              &quot;updatedAt&quot;: &quot;A String&quot;, # The date and time when was last updated . The value is specified in ISO 8601 format.
              &quot;canRate&quot;: True or False, # Whether the current viewer can rate this comment.
              &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time when the comment was orignally published. The value is specified in ISO 8601 format.
              &quot;authorChannelId&quot;: { # The id of the author&#x27;s YouTube channel, if any.
                &quot;value&quot;: &quot;A String&quot;,
              },
              &quot;moderationStatus&quot;: &quot;A String&quot;, # The comment&#x27;s moderation status. Will not be set if the comments were requested through the id filter.
              &quot;authorProfileImageUrl&quot;: &quot;A String&quot;, # The URL for the avatar of the user who posted the comment.
              &quot;viewerRating&quot;: &quot;A String&quot;, # The rating the viewer has given to this comment. For the time being this will never return RATE_TYPE_DISLIKE and instead return RATE_TYPE_NONE. This may change in the future.
              &quot;parentId&quot;: &quot;A String&quot;, # The unique id of the parent comment, only set for replies.
              &quot;channelId&quot;: &quot;A String&quot;, # The id of the corresponding YouTube channel. In case of a channel comment this is the channel the comment refers to. In case of a video comment it&#x27;s the video&#x27;s channel.
              &quot;likeCount&quot;: 42, # The total number of likes this comment has received.
              &quot;authorDisplayName&quot;: &quot;A String&quot;, # The name of the user who posted the comment.
              &quot;textOriginal&quot;: &quot;A String&quot;, # The comment&#x27;s original raw text as initially posted or last updated. The original text will only be returned if it is accessible to the viewer, which is only guaranteed if the viewer is the comment&#x27;s author.
              &quot;textDisplay&quot;: &quot;A String&quot;, # The comment&#x27;s text. The format is either plain text or HTML dependent on what has been requested. Even the plain text representation may differ from the text originally posted in that it may replace video links with video titles etc.
            },
          },
        ],
      },
      &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment thread.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(part, pageToken=None, moderationStatus=None, id=None, order=None, maxResults=None, allThreadsRelatedToChannelId=None, channelId=None, searchTerms=None, textFormat=None, videoId=None, x__xgafv=None)</code>
  <pre>Retrieves a list of resources, possibly filtered.

Args:
  part: string, The *part* parameter specifies a comma-separated list of one or more commentThread resource properties that the API response will include. (required) (repeated)
  pageToken: string, The *pageToken* parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.
  moderationStatus: string, Limits the returned comment threads to those with the specified moderation status. Not compatible with the &#x27;id&#x27; filter. Valid values: published, heldForReview, likelySpam.
    Allowed values
      published - The comment is available for public display.
      heldForReview - The comment is awaiting review by a moderator.
      likelySpam - 
      rejected - The comment is unfit for display.
  id: string, Returns the comment threads with the given IDs for Stubby or Apiary. (repeated)
  order: string, A parameter
    Allowed values
      orderUnspecified - 
      time - Order by time.
      relevance - Order by relevance.
  maxResults: integer, The *maxResults* parameter specifies the maximum number of items that should be returned in the result set.
  allThreadsRelatedToChannelId: string, Returns the comment threads of all videos of the channel and the channel comments as well.
  channelId: string, Returns the comment threads for all the channel comments (ie does not include comments left on videos).
  searchTerms: string, Limits the returned comment threads to those matching the specified key words. Not compatible with the &#x27;id&#x27; filter.
  textFormat: string, The requested text format for the returned comments.
    Allowed values
      textFormatUnspecified - 
      html - Returns the comments in HTML format. This is the default value.
      plainText - Returns the comments in plain text format.
  videoId: string, Returns the comment threads of the specified video.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;pageInfo&quot;: { # Paging details for lists of resources, including total number of items available and number of resources returned in a single page. # General pagination information.
      &quot;totalResults&quot;: 42, # The total number of results in the result set.
      &quot;resultsPerPage&quot;: 42, # The number of results included in the API response.
    },
    &quot;tokenPagination&quot;: { # Stub token pagination template to suppress results.
    },
    &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The token that can be used as the value of the pageToken parameter to retrieve the next page in the result set.
    &quot;visitorId&quot;: &quot;A String&quot;, # The visitorId identifies the visitor.
    &quot;kind&quot;: &quot;youtube#commentThreadListResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#commentThreadListResponse&quot;.
    &quot;items&quot;: [ # A list of comment threads that match the request criteria.
      { # A *comment thread* represents information that applies to a top level comment and all its replies. It can also include the top level comment itself and some of the replies.
          &quot;snippet&quot;: { # Basic details about a comment thread. # The snippet object contains basic details about the comment thread and also the top level comment.
            &quot;totalReplyCount&quot;: 42, # The total number of replies (not including the top level comment).
            &quot;isPublic&quot;: True or False, # Whether the thread (and therefore all its comments) is visible to all YouTube users.
            &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comments refer to, if any. No video_id implies a channel discussion comment.
            &quot;channelId&quot;: &quot;A String&quot;, # The YouTube channel the comments in the thread refer to or the channel with the video the comments refer to. If video_id isn&#x27;t set the comments refer to the channel itself.
            &quot;canReply&quot;: True or False, # Whether the current viewer of the thread can reply to it. This is viewer specific - other viewers may see a different value for this field.
            &quot;topLevelComment&quot;: { # A *comment* represents a single YouTube comment. # The top level comment of this thread.
              &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment.
              &quot;kind&quot;: &quot;youtube#comment&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#comment&quot;.
              &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
              &quot;snippet&quot;: { # Basic details about a comment, such as its author and text. # The snippet object contains basic details about the comment.
                &quot;authorChannelUrl&quot;: &quot;A String&quot;, # Link to the author&#x27;s YouTube channel, if any.
                &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comment refers to, if any.
                &quot;updatedAt&quot;: &quot;A String&quot;, # The date and time when was last updated . The value is specified in ISO 8601 format.
                &quot;canRate&quot;: True or False, # Whether the current viewer can rate this comment.
                &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time when the comment was orignally published. The value is specified in ISO 8601 format.
                &quot;authorChannelId&quot;: { # The id of the author&#x27;s YouTube channel, if any.
                  &quot;value&quot;: &quot;A String&quot;,
                },
                &quot;moderationStatus&quot;: &quot;A String&quot;, # The comment&#x27;s moderation status. Will not be set if the comments were requested through the id filter.
                &quot;authorProfileImageUrl&quot;: &quot;A String&quot;, # The URL for the avatar of the user who posted the comment.
                &quot;viewerRating&quot;: &quot;A String&quot;, # The rating the viewer has given to this comment. For the time being this will never return RATE_TYPE_DISLIKE and instead return RATE_TYPE_NONE. This may change in the future.
                &quot;parentId&quot;: &quot;A String&quot;, # The unique id of the parent comment, only set for replies.
                &quot;channelId&quot;: &quot;A String&quot;, # The id of the corresponding YouTube channel. In case of a channel comment this is the channel the comment refers to. In case of a video comment it&#x27;s the video&#x27;s channel.
                &quot;likeCount&quot;: 42, # The total number of likes this comment has received.
                &quot;authorDisplayName&quot;: &quot;A String&quot;, # The name of the user who posted the comment.
                &quot;textOriginal&quot;: &quot;A String&quot;, # The comment&#x27;s original raw text as initially posted or last updated. The original text will only be returned if it is accessible to the viewer, which is only guaranteed if the viewer is the comment&#x27;s author.
                &quot;textDisplay&quot;: &quot;A String&quot;, # The comment&#x27;s text. The format is either plain text or HTML dependent on what has been requested. Even the plain text representation may differ from the text originally posted in that it may replace video links with video titles etc.
              },
            },
          },
          &quot;kind&quot;: &quot;youtube#commentThread&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#commentThread&quot;.
          &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
          &quot;replies&quot;: { # Comments written in (direct or indirect) reply to the top level comment. # The replies object contains a limited number of replies (if any) to the top level comment found in the snippet.
            &quot;comments&quot;: [ # A limited number of replies. Unless the number of replies returned equals total_reply_count in the snippet the returned replies are only a subset of the total number of replies.
              { # A *comment* represents a single YouTube comment.
                &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment.
                &quot;kind&quot;: &quot;youtube#comment&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#comment&quot;.
                &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
                &quot;snippet&quot;: { # Basic details about a comment, such as its author and text. # The snippet object contains basic details about the comment.
                  &quot;authorChannelUrl&quot;: &quot;A String&quot;, # Link to the author&#x27;s YouTube channel, if any.
                  &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comment refers to, if any.
                  &quot;updatedAt&quot;: &quot;A String&quot;, # The date and time when was last updated . The value is specified in ISO 8601 format.
                  &quot;canRate&quot;: True or False, # Whether the current viewer can rate this comment.
                  &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time when the comment was orignally published. The value is specified in ISO 8601 format.
                  &quot;authorChannelId&quot;: { # The id of the author&#x27;s YouTube channel, if any.
                    &quot;value&quot;: &quot;A String&quot;,
                  },
                  &quot;moderationStatus&quot;: &quot;A String&quot;, # The comment&#x27;s moderation status. Will not be set if the comments were requested through the id filter.
                  &quot;authorProfileImageUrl&quot;: &quot;A String&quot;, # The URL for the avatar of the user who posted the comment.
                  &quot;viewerRating&quot;: &quot;A String&quot;, # The rating the viewer has given to this comment. For the time being this will never return RATE_TYPE_DISLIKE and instead return RATE_TYPE_NONE. This may change in the future.
                  &quot;parentId&quot;: &quot;A String&quot;, # The unique id of the parent comment, only set for replies.
                  &quot;channelId&quot;: &quot;A String&quot;, # The id of the corresponding YouTube channel. In case of a channel comment this is the channel the comment refers to. In case of a video comment it&#x27;s the video&#x27;s channel.
                  &quot;likeCount&quot;: 42, # The total number of likes this comment has received.
                  &quot;authorDisplayName&quot;: &quot;A String&quot;, # The name of the user who posted the comment.
                  &quot;textOriginal&quot;: &quot;A String&quot;, # The comment&#x27;s original raw text as initially posted or last updated. The original text will only be returned if it is accessible to the viewer, which is only guaranteed if the viewer is the comment&#x27;s author.
                  &quot;textDisplay&quot;: &quot;A String&quot;, # The comment&#x27;s text. The format is either plain text or HTML dependent on what has been requested. Even the plain text representation may differ from the text originally posted in that it may replace video links with video titles etc.
                },
              },
            ],
          },
          &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment thread.
        },
    ],
    &quot;eventId&quot;: &quot;A String&quot;, # Serialized EventId of the request which produced this response.
  }</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="update">update(part, body=None, x__xgafv=None)</code>
  <pre>Updates an existing resource.

Args:
  part: string, The *part* parameter specifies a comma-separated list of commentThread resource properties that the API response will include. You must at least include the snippet part in the parameter value since that part contains all of the properties that the API request can update. (required) (repeated)
  body: object, The request body.
    The object takes the form of:

{ # A *comment thread* represents information that applies to a top level comment and all its replies. It can also include the top level comment itself and some of the replies.
    &quot;snippet&quot;: { # Basic details about a comment thread. # The snippet object contains basic details about the comment thread and also the top level comment.
      &quot;totalReplyCount&quot;: 42, # The total number of replies (not including the top level comment).
      &quot;isPublic&quot;: True or False, # Whether the thread (and therefore all its comments) is visible to all YouTube users.
      &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comments refer to, if any. No video_id implies a channel discussion comment.
      &quot;channelId&quot;: &quot;A String&quot;, # The YouTube channel the comments in the thread refer to or the channel with the video the comments refer to. If video_id isn&#x27;t set the comments refer to the channel itself.
      &quot;canReply&quot;: True or False, # Whether the current viewer of the thread can reply to it. This is viewer specific - other viewers may see a different value for this field.
      &quot;topLevelComment&quot;: { # A *comment* represents a single YouTube comment. # The top level comment of this thread.
        &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment.
        &quot;kind&quot;: &quot;youtube#comment&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#comment&quot;.
        &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
        &quot;snippet&quot;: { # Basic details about a comment, such as its author and text. # The snippet object contains basic details about the comment.
          &quot;authorChannelUrl&quot;: &quot;A String&quot;, # Link to the author&#x27;s YouTube channel, if any.
          &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comment refers to, if any.
          &quot;updatedAt&quot;: &quot;A String&quot;, # The date and time when was last updated . The value is specified in ISO 8601 format.
          &quot;canRate&quot;: True or False, # Whether the current viewer can rate this comment.
          &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time when the comment was orignally published. The value is specified in ISO 8601 format.
          &quot;authorChannelId&quot;: { # The id of the author&#x27;s YouTube channel, if any.
            &quot;value&quot;: &quot;A String&quot;,
          },
          &quot;moderationStatus&quot;: &quot;A String&quot;, # The comment&#x27;s moderation status. Will not be set if the comments were requested through the id filter.
          &quot;authorProfileImageUrl&quot;: &quot;A String&quot;, # The URL for the avatar of the user who posted the comment.
          &quot;viewerRating&quot;: &quot;A String&quot;, # The rating the viewer has given to this comment. For the time being this will never return RATE_TYPE_DISLIKE and instead return RATE_TYPE_NONE. This may change in the future.
          &quot;parentId&quot;: &quot;A String&quot;, # The unique id of the parent comment, only set for replies.
          &quot;channelId&quot;: &quot;A String&quot;, # The id of the corresponding YouTube channel. In case of a channel comment this is the channel the comment refers to. In case of a video comment it&#x27;s the video&#x27;s channel.
          &quot;likeCount&quot;: 42, # The total number of likes this comment has received.
          &quot;authorDisplayName&quot;: &quot;A String&quot;, # The name of the user who posted the comment.
          &quot;textOriginal&quot;: &quot;A String&quot;, # The comment&#x27;s original raw text as initially posted or last updated. The original text will only be returned if it is accessible to the viewer, which is only guaranteed if the viewer is the comment&#x27;s author.
          &quot;textDisplay&quot;: &quot;A String&quot;, # The comment&#x27;s text. The format is either plain text or HTML dependent on what has been requested. Even the plain text representation may differ from the text originally posted in that it may replace video links with video titles etc.
        },
      },
    },
    &quot;kind&quot;: &quot;youtube#commentThread&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#commentThread&quot;.
    &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
    &quot;replies&quot;: { # Comments written in (direct or indirect) reply to the top level comment. # The replies object contains a limited number of replies (if any) to the top level comment found in the snippet.
      &quot;comments&quot;: [ # A limited number of replies. Unless the number of replies returned equals total_reply_count in the snippet the returned replies are only a subset of the total number of replies.
        { # A *comment* represents a single YouTube comment.
          &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment.
          &quot;kind&quot;: &quot;youtube#comment&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#comment&quot;.
          &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
          &quot;snippet&quot;: { # Basic details about a comment, such as its author and text. # The snippet object contains basic details about the comment.
            &quot;authorChannelUrl&quot;: &quot;A String&quot;, # Link to the author&#x27;s YouTube channel, if any.
            &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comment refers to, if any.
            &quot;updatedAt&quot;: &quot;A String&quot;, # The date and time when was last updated . The value is specified in ISO 8601 format.
            &quot;canRate&quot;: True or False, # Whether the current viewer can rate this comment.
            &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time when the comment was orignally published. The value is specified in ISO 8601 format.
            &quot;authorChannelId&quot;: { # The id of the author&#x27;s YouTube channel, if any.
              &quot;value&quot;: &quot;A String&quot;,
            },
            &quot;moderationStatus&quot;: &quot;A String&quot;, # The comment&#x27;s moderation status. Will not be set if the comments were requested through the id filter.
            &quot;authorProfileImageUrl&quot;: &quot;A String&quot;, # The URL for the avatar of the user who posted the comment.
            &quot;viewerRating&quot;: &quot;A String&quot;, # The rating the viewer has given to this comment. For the time being this will never return RATE_TYPE_DISLIKE and instead return RATE_TYPE_NONE. This may change in the future.
            &quot;parentId&quot;: &quot;A String&quot;, # The unique id of the parent comment, only set for replies.
            &quot;channelId&quot;: &quot;A String&quot;, # The id of the corresponding YouTube channel. In case of a channel comment this is the channel the comment refers to. In case of a video comment it&#x27;s the video&#x27;s channel.
            &quot;likeCount&quot;: 42, # The total number of likes this comment has received.
            &quot;authorDisplayName&quot;: &quot;A String&quot;, # The name of the user who posted the comment.
            &quot;textOriginal&quot;: &quot;A String&quot;, # The comment&#x27;s original raw text as initially posted or last updated. The original text will only be returned if it is accessible to the viewer, which is only guaranteed if the viewer is the comment&#x27;s author.
            &quot;textDisplay&quot;: &quot;A String&quot;, # The comment&#x27;s text. The format is either plain text or HTML dependent on what has been requested. Even the plain text representation may differ from the text originally posted in that it may replace video links with video titles etc.
          },
        },
      ],
    },
    &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment thread.
  }

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

Returns:
  An object of the form:

    { # A *comment thread* represents information that applies to a top level comment and all its replies. It can also include the top level comment itself and some of the replies.
      &quot;snippet&quot;: { # Basic details about a comment thread. # The snippet object contains basic details about the comment thread and also the top level comment.
        &quot;totalReplyCount&quot;: 42, # The total number of replies (not including the top level comment).
        &quot;isPublic&quot;: True or False, # Whether the thread (and therefore all its comments) is visible to all YouTube users.
        &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comments refer to, if any. No video_id implies a channel discussion comment.
        &quot;channelId&quot;: &quot;A String&quot;, # The YouTube channel the comments in the thread refer to or the channel with the video the comments refer to. If video_id isn&#x27;t set the comments refer to the channel itself.
        &quot;canReply&quot;: True or False, # Whether the current viewer of the thread can reply to it. This is viewer specific - other viewers may see a different value for this field.
        &quot;topLevelComment&quot;: { # A *comment* represents a single YouTube comment. # The top level comment of this thread.
          &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment.
          &quot;kind&quot;: &quot;youtube#comment&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#comment&quot;.
          &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
          &quot;snippet&quot;: { # Basic details about a comment, such as its author and text. # The snippet object contains basic details about the comment.
            &quot;authorChannelUrl&quot;: &quot;A String&quot;, # Link to the author&#x27;s YouTube channel, if any.
            &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comment refers to, if any.
            &quot;updatedAt&quot;: &quot;A String&quot;, # The date and time when was last updated . The value is specified in ISO 8601 format.
            &quot;canRate&quot;: True or False, # Whether the current viewer can rate this comment.
            &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time when the comment was orignally published. The value is specified in ISO 8601 format.
            &quot;authorChannelId&quot;: { # The id of the author&#x27;s YouTube channel, if any.
              &quot;value&quot;: &quot;A String&quot;,
            },
            &quot;moderationStatus&quot;: &quot;A String&quot;, # The comment&#x27;s moderation status. Will not be set if the comments were requested through the id filter.
            &quot;authorProfileImageUrl&quot;: &quot;A String&quot;, # The URL for the avatar of the user who posted the comment.
            &quot;viewerRating&quot;: &quot;A String&quot;, # The rating the viewer has given to this comment. For the time being this will never return RATE_TYPE_DISLIKE and instead return RATE_TYPE_NONE. This may change in the future.
            &quot;parentId&quot;: &quot;A String&quot;, # The unique id of the parent comment, only set for replies.
            &quot;channelId&quot;: &quot;A String&quot;, # The id of the corresponding YouTube channel. In case of a channel comment this is the channel the comment refers to. In case of a video comment it&#x27;s the video&#x27;s channel.
            &quot;likeCount&quot;: 42, # The total number of likes this comment has received.
            &quot;authorDisplayName&quot;: &quot;A String&quot;, # The name of the user who posted the comment.
            &quot;textOriginal&quot;: &quot;A String&quot;, # The comment&#x27;s original raw text as initially posted or last updated. The original text will only be returned if it is accessible to the viewer, which is only guaranteed if the viewer is the comment&#x27;s author.
            &quot;textDisplay&quot;: &quot;A String&quot;, # The comment&#x27;s text. The format is either plain text or HTML dependent on what has been requested. Even the plain text representation may differ from the text originally posted in that it may replace video links with video titles etc.
          },
        },
      },
      &quot;kind&quot;: &quot;youtube#commentThread&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#commentThread&quot;.
      &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
      &quot;replies&quot;: { # Comments written in (direct or indirect) reply to the top level comment. # The replies object contains a limited number of replies (if any) to the top level comment found in the snippet.
        &quot;comments&quot;: [ # A limited number of replies. Unless the number of replies returned equals total_reply_count in the snippet the returned replies are only a subset of the total number of replies.
          { # A *comment* represents a single YouTube comment.
            &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment.
            &quot;kind&quot;: &quot;youtube#comment&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;youtube#comment&quot;.
            &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
            &quot;snippet&quot;: { # Basic details about a comment, such as its author and text. # The snippet object contains basic details about the comment.
              &quot;authorChannelUrl&quot;: &quot;A String&quot;, # Link to the author&#x27;s YouTube channel, if any.
              &quot;videoId&quot;: &quot;A String&quot;, # The ID of the video the comment refers to, if any.
              &quot;updatedAt&quot;: &quot;A String&quot;, # The date and time when was last updated . The value is specified in ISO 8601 format.
              &quot;canRate&quot;: True or False, # Whether the current viewer can rate this comment.
              &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time when the comment was orignally published. The value is specified in ISO 8601 format.
              &quot;authorChannelId&quot;: { # The id of the author&#x27;s YouTube channel, if any.
                &quot;value&quot;: &quot;A String&quot;,
              },
              &quot;moderationStatus&quot;: &quot;A String&quot;, # The comment&#x27;s moderation status. Will not be set if the comments were requested through the id filter.
              &quot;authorProfileImageUrl&quot;: &quot;A String&quot;, # The URL for the avatar of the user who posted the comment.
              &quot;viewerRating&quot;: &quot;A String&quot;, # The rating the viewer has given to this comment. For the time being this will never return RATE_TYPE_DISLIKE and instead return RATE_TYPE_NONE. This may change in the future.
              &quot;parentId&quot;: &quot;A String&quot;, # The unique id of the parent comment, only set for replies.
              &quot;channelId&quot;: &quot;A String&quot;, # The id of the corresponding YouTube channel. In case of a channel comment this is the channel the comment refers to. In case of a video comment it&#x27;s the video&#x27;s channel.
              &quot;likeCount&quot;: 42, # The total number of likes this comment has received.
              &quot;authorDisplayName&quot;: &quot;A String&quot;, # The name of the user who posted the comment.
              &quot;textOriginal&quot;: &quot;A String&quot;, # The comment&#x27;s original raw text as initially posted or last updated. The original text will only be returned if it is accessible to the viewer, which is only guaranteed if the viewer is the comment&#x27;s author.
              &quot;textDisplay&quot;: &quot;A String&quot;, # The comment&#x27;s text. The format is either plain text or HTML dependent on what has been requested. Even the plain text representation may differ from the text originally posted in that it may replace video links with video titles etc.
            },
          },
        ],
      },
      &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the comment thread.
    }</pre>
</div>

</body></html>