<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.liveStreams.html">liveStreams</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(id, onBehalfOfContentOwnerChannel=None, onBehalfOfContentOwner=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an existing stream for the authenticated user.</p>
<p class="toc_element">
  <code><a href="#insert">insert(part, body=None, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None, x__xgafv=None)</a></code></p>
<p class="firstline">Inserts a new stream for the authenticated user.</p>
<p class="toc_element">
  <code><a href="#list">list(part, onBehalfOfContentOwner=None, id=None, mine=None, maxResults=None, onBehalfOfContentOwnerChannel=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieve the list of streams associated with the given channel. --</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, onBehalfOfContentOwnerChannel=None, onBehalfOfContentOwner=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing stream for the authenticated user.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(id, onBehalfOfContentOwnerChannel=None, onBehalfOfContentOwner=None, x__xgafv=None)</code>
  <pre>Deletes an existing stream for the authenticated user.

Args:
  id: string, A parameter (required)
  onBehalfOfContentOwnerChannel: string, This parameter can only be used in a properly &lt;a
href=&quot;/youtube/v3/guides/authentication&quot;&gt;authorized request&lt;/a&gt;.
&lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwnerChannel&lt;/strong&gt;&lt;/code&gt; parameter
specifies the YouTube channel ID of the channel to which a video is being
added. This parameter is required when a request specifies a value for the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter, and it can only be used in
conjunction with that parameter. In addition, the request must be
authorized using a CMS account that is linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies. Finally, the
channel that the &lt;code&gt;onBehalfOfContentOwnerChannel&lt;/code&gt; parameter value
specifies must be linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies.&lt;br&gt;&lt;br&gt;This
parameter is intended for YouTube content partners that own and manage many
different YouTube channels. It allows content owners to authenticate once
and perform actions on behalf of the channel specified in the parameter
value, without having to provide authentication credentials for each
separate channel.
  onBehalfOfContentOwner: string, &lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwner&lt;/strong&gt;&lt;/code&gt; parameter indicates
that the
request&#x27;s authorization credentials identify a YouTube CMS user who is
acting on behalf of the content owner specified in the parameter value.
This parameter is intended for YouTube content partners that own and manage
many different YouTube channels. It allows content owners to authenticate
once and get access to all their video and channel data, without having to
provide authentication credentials for each individual channel. The CMS
account that the user authenticates with must be linked to the specified
YouTube content owner.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(part, body=None, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None, x__xgafv=None)</code>
  <pre>Inserts a new stream for the authenticated user.

Args:
  part: string, The &lt;code&gt;&lt;strong&gt;part&lt;/strong&gt;&lt;/code&gt; parameter serves two purposes in
this operation. It identifies the properties that the write operation will
set as well as the properties that the API response will
include.&lt;br&gt;&lt;br&gt;The &lt;code&gt;part&lt;/code&gt; properties that you can include in
the parameter value are &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;snippet&lt;/code&gt;,
&lt;code&gt;cdn&lt;/code&gt;, and &lt;code&gt;status&lt;/code&gt;. (required) (repeated)
  body: object, The request body.
    The object takes the form of:

{ # A live stream describes a live ingestion point.
  &quot;cdn&quot;: { # Brief description of the live stream cdn settings. # The &lt;code&gt;cdn&lt;/code&gt; object defines the live stream&#x27;s content delivery
      # network (CDN) settings. These settings provide details about the manner
      # in which you stream your content to YouTube.
    &quot;ingestionInfo&quot;: { # Describes information necessary for ingesting an RTMP or an HTTP stream. # The &lt;code&gt;ingestionInfo&lt;/code&gt; object contains information that YouTube
        # provides that you need to transmit your RTMP or HTTP stream to YouTube.
      &quot;rtmpsBackupIngestionAddress&quot;: &quot;A String&quot;, # This ingestion url may be used instead of
          # &lt;code&gt;backupIngestionAddress&lt;/code&gt; in order to stream via RTMPS. Not
          # applicable to non-RTMP streams.
      &quot;streamName&quot;: &quot;A String&quot;, # The HTTP or RTMP stream name that YouTube assigns to the video stream.
      &quot;backupIngestionAddress&quot;: &quot;A String&quot;, # The backup ingestion URL that you should use to stream video to
          # YouTube. You have the option of simultaneously streaming the content
          # that you are sending to the &lt;code&gt;ingestionAddress&lt;/code&gt; to this URL.
      &quot;ingestionAddress&quot;: &quot;A String&quot;, # The primary ingestion URL that you should use to stream video to
          # YouTube. You must stream video to this URL.&lt;br&gt;&lt;br&gt;
          # Depending on which application or tool you use to encode
          # your video stream, you may need to enter the stream URL and stream
          # name separately or you may need to concatenate them in the following
          # format:&lt;br&gt;&lt;pre&gt;&lt;strong&gt;STREAM_URL/STREAM_NAME&lt;/strong&gt;&lt;/pre&gt;
      &quot;rtmpsIngestionAddress&quot;: &quot;A String&quot;, # This ingestion url may be used instead of
          # &lt;code&gt;ingestionAddress&lt;/code&gt; in order to stream via RTMPS. Not applicable
          # to non-RTMP streams.
    },
    &quot;format&quot;: &quot;A String&quot;, # The format of the video stream that you are sending to Youtube. &lt;br&gt;&lt;br&gt;
    &quot;frameRate&quot;: &quot;A String&quot;, # The frame rate of the inbound video data.
    &quot;resolution&quot;: &quot;A String&quot;, # The resolution of the inbound video data.
    &quot;ingestionType&quot;: &quot;A String&quot;, #  The method or protocol used to transmit the video stream.
  },
  &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
  &quot;contentDetails&quot;: { # Detailed settings of a stream. # The &lt;code&gt;content_details&lt;/code&gt; object contains information about the
      # stream, including the closed captions ingestion URL.
    &quot;isReusable&quot;: True or False, # Indicates whether the stream is reusable, which means that it
        # can be bound to multiple broadcasts. It is common for
        # broadcasters to reuse the same stream for many different
        # broadcasts if those broadcasts occur at different times.&lt;br&gt;&lt;br&gt;
        # If you set this value to &lt;code&gt;false&lt;/code&gt;, then the stream
        # will not be reusable, which means that it can only be bound to
        # one broadcast. Non-reusable streams differ from reusable streams in the
        # following ways:
        # &lt;ul&gt;
        #   &lt;li&gt;A non-reusable stream can only be bound to one broadcast.&lt;/li&gt;
        #   &lt;li&gt;A non-reusable stream might be deleted by an automated process
        #     after the broadcast ends.&lt;/li&gt;
        #   &lt;li&gt;The &lt;code&gt;&lt;a href=&quot;/youtube/v3/live/docs/liveStreams/list&quot;&gt;
        #     liveStreams.list&lt;/a&gt;&lt;/code&gt; method does not list non-reusable streams
        #     if you call the method and set the &lt;code&gt;mine&lt;/code&gt; parameter to
        #     &lt;code&gt;true&lt;/code&gt;. The only way to use that method to retrieve the
        #     resource for a non-reusable stream is to use the &lt;code&gt;id&lt;/code&gt;
        #     parameter to identify the stream.&lt;/li&gt;
        # &lt;/ul&gt;
    &quot;closedCaptionsIngestionUrl&quot;: &quot;A String&quot;, # The ingestion URL where the closed captions of this stream are sent.
  },
  &quot;status&quot;: { # Brief description of the live stream status. # The &lt;code&gt;status&lt;/code&gt; object contains information about
      # live stream&#x27;s status.
    &quot;healthStatus&quot;: { # The health status of the stream.
      &quot;lastUpdateTimeSeconds&quot;: &quot;A String&quot;, # The last time this status was updated (in seconds)
      &quot;status&quot;: &quot;A String&quot;, # The status code of this stream
      &quot;configurationIssues&quot;: [ # The configurations issues on this stream
        {
          &quot;type&quot;: &quot;A String&quot;, # The kind of error happening.
          &quot;description&quot;: &quot;A String&quot;, # The long-form description of the issue and how to resolve it.
          &quot;reason&quot;: &quot;A String&quot;, # The short-form reason for this issue.
          &quot;severity&quot;: &quot;A String&quot;, # How severe this issue is to the stream.
        },
      ],
    },
    &quot;streamStatus&quot;: &quot;A String&quot;,
  },
  &quot;kind&quot;: &quot;youtube#liveStream&quot;, # Identifies what kind of resource this is. Value: the fixed string
      # &lt;code&gt;&quot;youtube#liveStream&quot;&lt;/code&gt;.
  &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube assigns to uniquely identify the stream.
  &quot;snippet&quot;: { # The &lt;code&gt;snippet&lt;/code&gt; object contains basic details about the
      # stream, including its channel, title, and description.
    &quot;channelId&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the channel that
        # is transmitting the stream.
    &quot;description&quot;: &quot;A String&quot;, # The stream&#x27;s description. The value cannot be longer than 10000
        # characters.
    &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time that the stream was created. The value is specified in
        # &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
        # format.
    &quot;isDefaultStream&quot;: True or False,
    &quot;title&quot;: &quot;A String&quot;, # The stream&#x27;s title. The value must be between 1 and 128 characters long.
  },
}

  onBehalfOfContentOwner: string, &lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwner&lt;/strong&gt;&lt;/code&gt; parameter indicates
that the
request&#x27;s authorization credentials identify a YouTube CMS user who is
acting on behalf of the content owner specified in the parameter value.
This parameter is intended for YouTube content partners that own and manage
many different YouTube channels. It allows content owners to authenticate
once and get access to all their video and channel data, without having to
provide authentication credentials for each individual channel. The CMS
account that the user authenticates with must be linked to the specified
YouTube content owner.
  onBehalfOfContentOwnerChannel: string, This parameter can only be used in a properly &lt;a
href=&quot;/youtube/v3/guides/authentication&quot;&gt;authorized request&lt;/a&gt;.
&lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwnerChannel&lt;/strong&gt;&lt;/code&gt; parameter
specifies the YouTube channel ID of the channel to which a video is being
added. This parameter is required when a request specifies a value for the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter, and it can only be used in
conjunction with that parameter. In addition, the request must be
authorized using a CMS account that is linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies. Finally, the
channel that the &lt;code&gt;onBehalfOfContentOwnerChannel&lt;/code&gt; parameter value
specifies must be linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies.&lt;br&gt;&lt;br&gt;This
parameter is intended for YouTube content partners that own and manage many
different YouTube channels. It allows content owners to authenticate once
and perform actions on behalf of the channel specified in the parameter
value, without having to provide authentication credentials for each
separate channel.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A live stream describes a live ingestion point.
    &quot;cdn&quot;: { # Brief description of the live stream cdn settings. # The &lt;code&gt;cdn&lt;/code&gt; object defines the live stream&#x27;s content delivery
        # network (CDN) settings. These settings provide details about the manner
        # in which you stream your content to YouTube.
      &quot;ingestionInfo&quot;: { # Describes information necessary for ingesting an RTMP or an HTTP stream. # The &lt;code&gt;ingestionInfo&lt;/code&gt; object contains information that YouTube
          # provides that you need to transmit your RTMP or HTTP stream to YouTube.
        &quot;rtmpsBackupIngestionAddress&quot;: &quot;A String&quot;, # This ingestion url may be used instead of
            # &lt;code&gt;backupIngestionAddress&lt;/code&gt; in order to stream via RTMPS. Not
            # applicable to non-RTMP streams.
        &quot;streamName&quot;: &quot;A String&quot;, # The HTTP or RTMP stream name that YouTube assigns to the video stream.
        &quot;backupIngestionAddress&quot;: &quot;A String&quot;, # The backup ingestion URL that you should use to stream video to
            # YouTube. You have the option of simultaneously streaming the content
            # that you are sending to the &lt;code&gt;ingestionAddress&lt;/code&gt; to this URL.
        &quot;ingestionAddress&quot;: &quot;A String&quot;, # The primary ingestion URL that you should use to stream video to
            # YouTube. You must stream video to this URL.&lt;br&gt;&lt;br&gt;
            # Depending on which application or tool you use to encode
            # your video stream, you may need to enter the stream URL and stream
            # name separately or you may need to concatenate them in the following
            # format:&lt;br&gt;&lt;pre&gt;&lt;strong&gt;STREAM_URL/STREAM_NAME&lt;/strong&gt;&lt;/pre&gt;
        &quot;rtmpsIngestionAddress&quot;: &quot;A String&quot;, # This ingestion url may be used instead of
            # &lt;code&gt;ingestionAddress&lt;/code&gt; in order to stream via RTMPS. Not applicable
            # to non-RTMP streams.
      },
      &quot;format&quot;: &quot;A String&quot;, # The format of the video stream that you are sending to Youtube. &lt;br&gt;&lt;br&gt;
      &quot;frameRate&quot;: &quot;A String&quot;, # The frame rate of the inbound video data.
      &quot;resolution&quot;: &quot;A String&quot;, # The resolution of the inbound video data.
      &quot;ingestionType&quot;: &quot;A String&quot;, #  The method or protocol used to transmit the video stream.
    },
    &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
    &quot;contentDetails&quot;: { # Detailed settings of a stream. # The &lt;code&gt;content_details&lt;/code&gt; object contains information about the
        # stream, including the closed captions ingestion URL.
      &quot;isReusable&quot;: True or False, # Indicates whether the stream is reusable, which means that it
          # can be bound to multiple broadcasts. It is common for
          # broadcasters to reuse the same stream for many different
          # broadcasts if those broadcasts occur at different times.&lt;br&gt;&lt;br&gt;
          # If you set this value to &lt;code&gt;false&lt;/code&gt;, then the stream
          # will not be reusable, which means that it can only be bound to
          # one broadcast. Non-reusable streams differ from reusable streams in the
          # following ways:
          # &lt;ul&gt;
          #   &lt;li&gt;A non-reusable stream can only be bound to one broadcast.&lt;/li&gt;
          #   &lt;li&gt;A non-reusable stream might be deleted by an automated process
          #     after the broadcast ends.&lt;/li&gt;
          #   &lt;li&gt;The &lt;code&gt;&lt;a href=&quot;/youtube/v3/live/docs/liveStreams/list&quot;&gt;
          #     liveStreams.list&lt;/a&gt;&lt;/code&gt; method does not list non-reusable streams
          #     if you call the method and set the &lt;code&gt;mine&lt;/code&gt; parameter to
          #     &lt;code&gt;true&lt;/code&gt;. The only way to use that method to retrieve the
          #     resource for a non-reusable stream is to use the &lt;code&gt;id&lt;/code&gt;
          #     parameter to identify the stream.&lt;/li&gt;
          # &lt;/ul&gt;
      &quot;closedCaptionsIngestionUrl&quot;: &quot;A String&quot;, # The ingestion URL where the closed captions of this stream are sent.
    },
    &quot;status&quot;: { # Brief description of the live stream status. # The &lt;code&gt;status&lt;/code&gt; object contains information about
        # live stream&#x27;s status.
      &quot;healthStatus&quot;: { # The health status of the stream.
        &quot;lastUpdateTimeSeconds&quot;: &quot;A String&quot;, # The last time this status was updated (in seconds)
        &quot;status&quot;: &quot;A String&quot;, # The status code of this stream
        &quot;configurationIssues&quot;: [ # The configurations issues on this stream
          {
            &quot;type&quot;: &quot;A String&quot;, # The kind of error happening.
            &quot;description&quot;: &quot;A String&quot;, # The long-form description of the issue and how to resolve it.
            &quot;reason&quot;: &quot;A String&quot;, # The short-form reason for this issue.
            &quot;severity&quot;: &quot;A String&quot;, # How severe this issue is to the stream.
          },
        ],
      },
      &quot;streamStatus&quot;: &quot;A String&quot;,
    },
    &quot;kind&quot;: &quot;youtube#liveStream&quot;, # Identifies what kind of resource this is. Value: the fixed string
        # &lt;code&gt;&quot;youtube#liveStream&quot;&lt;/code&gt;.
    &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube assigns to uniquely identify the stream.
    &quot;snippet&quot;: { # The &lt;code&gt;snippet&lt;/code&gt; object contains basic details about the
        # stream, including its channel, title, and description.
      &quot;channelId&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the channel that
          # is transmitting the stream.
      &quot;description&quot;: &quot;A String&quot;, # The stream&#x27;s description. The value cannot be longer than 10000
          # characters.
      &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time that the stream was created. The value is specified in
          # &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;isDefaultStream&quot;: True or False,
      &quot;title&quot;: &quot;A String&quot;, # The stream&#x27;s title. The value must be between 1 and 128 characters long.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(part, onBehalfOfContentOwner=None, id=None, mine=None, maxResults=None, onBehalfOfContentOwnerChannel=None, pageToken=None, x__xgafv=None)</code>
  <pre>Retrieve the list of streams associated with the given channel. --

Args:
  part: string, The &lt;code&gt;&lt;strong&gt;part&lt;/strong&gt;&lt;/code&gt; parameter specifies a
comma-separated list of one or more &lt;code&gt;liveStream&lt;/code&gt; resource
properties that the API response will include. The &lt;code&gt;part&lt;/code&gt; names
that you can include in the parameter value are &lt;code&gt;id&lt;/code&gt;,
&lt;code&gt;snippet&lt;/code&gt;, &lt;code&gt;cdn&lt;/code&gt;, and &lt;code&gt;status&lt;/code&gt;. (required) (repeated)
  onBehalfOfContentOwner: string, &lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwner&lt;/strong&gt;&lt;/code&gt; parameter indicates
that the
request&#x27;s authorization credentials identify a YouTube CMS user who is
acting on behalf of the content owner specified in the parameter value.
This parameter is intended for YouTube content partners that own and manage
many different YouTube channels. It allows content owners to authenticate
once and get access to all their video and channel data, without having to
provide authentication credentials for each individual channel. The CMS
account that the user authenticates with must be linked to the specified
YouTube content owner.
  id: string, Return LiveStreams with the given ids from Stubby or Apiary. (repeated)
  mine: boolean, A parameter
  maxResults: integer, The &lt;code&gt;&lt;strong&gt;maxResults&lt;/strong&gt;&lt;/code&gt; parameter specifies the
maximum number of items that should be returned in the result set.
  onBehalfOfContentOwnerChannel: string, This parameter can only be used in a properly &lt;a
href=&quot;/youtube/v3/guides/authentication&quot;&gt;authorized request&lt;/a&gt;.
&lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwnerChannel&lt;/strong&gt;&lt;/code&gt; parameter
specifies the YouTube channel ID of the channel to which a video is being
added. This parameter is required when a request specifies a value for the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter, and it can only be used in
conjunction with that parameter. In addition, the request must be
authorized using a CMS account that is linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies. Finally, the
channel that the &lt;code&gt;onBehalfOfContentOwnerChannel&lt;/code&gt; parameter value
specifies must be linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies.&lt;br&gt;&lt;br&gt;This
parameter is intended for YouTube content partners that own and manage many
different YouTube channels. It allows content owners to authenticate once
and perform actions on behalf of the channel specified in the parameter
value, without having to provide authentication credentials for each
separate channel.
  pageToken: string, The &lt;code&gt;&lt;strong&gt;pageToken&lt;/strong&gt;&lt;/code&gt; parameter identifies a specific
page in the result set that should be returned. In an API response, the
&lt;code&gt;nextPageToken&lt;/code&gt; and &lt;code&gt;prevPageToken&lt;/code&gt; properties
identify other pages that could be retrieved.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;eventId&quot;: &quot;A String&quot;, # Serialized EventId of the request which produced this response.
    &quot;visitorId&quot;: &quot;A String&quot;, # The &lt;code&gt;visitorId&lt;/code&gt; identifies the visitor.
    &quot;items&quot;: [ # A list of live streams that match the request criteria.
      { # A live stream describes a live ingestion point.
        &quot;cdn&quot;: { # Brief description of the live stream cdn settings. # The &lt;code&gt;cdn&lt;/code&gt; object defines the live stream&#x27;s content delivery
            # network (CDN) settings. These settings provide details about the manner
            # in which you stream your content to YouTube.
          &quot;ingestionInfo&quot;: { # Describes information necessary for ingesting an RTMP or an HTTP stream. # The &lt;code&gt;ingestionInfo&lt;/code&gt; object contains information that YouTube
              # provides that you need to transmit your RTMP or HTTP stream to YouTube.
            &quot;rtmpsBackupIngestionAddress&quot;: &quot;A String&quot;, # This ingestion url may be used instead of
                # &lt;code&gt;backupIngestionAddress&lt;/code&gt; in order to stream via RTMPS. Not
                # applicable to non-RTMP streams.
            &quot;streamName&quot;: &quot;A String&quot;, # The HTTP or RTMP stream name that YouTube assigns to the video stream.
            &quot;backupIngestionAddress&quot;: &quot;A String&quot;, # The backup ingestion URL that you should use to stream video to
                # YouTube. You have the option of simultaneously streaming the content
                # that you are sending to the &lt;code&gt;ingestionAddress&lt;/code&gt; to this URL.
            &quot;ingestionAddress&quot;: &quot;A String&quot;, # The primary ingestion URL that you should use to stream video to
                # YouTube. You must stream video to this URL.&lt;br&gt;&lt;br&gt;
                # Depending on which application or tool you use to encode
                # your video stream, you may need to enter the stream URL and stream
                # name separately or you may need to concatenate them in the following
                # format:&lt;br&gt;&lt;pre&gt;&lt;strong&gt;STREAM_URL/STREAM_NAME&lt;/strong&gt;&lt;/pre&gt;
            &quot;rtmpsIngestionAddress&quot;: &quot;A String&quot;, # This ingestion url may be used instead of
                # &lt;code&gt;ingestionAddress&lt;/code&gt; in order to stream via RTMPS. Not applicable
                # to non-RTMP streams.
          },
          &quot;format&quot;: &quot;A String&quot;, # The format of the video stream that you are sending to Youtube. &lt;br&gt;&lt;br&gt;
          &quot;frameRate&quot;: &quot;A String&quot;, # The frame rate of the inbound video data.
          &quot;resolution&quot;: &quot;A String&quot;, # The resolution of the inbound video data.
          &quot;ingestionType&quot;: &quot;A String&quot;, #  The method or protocol used to transmit the video stream.
        },
        &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
        &quot;contentDetails&quot;: { # Detailed settings of a stream. # The &lt;code&gt;content_details&lt;/code&gt; object contains information about the
            # stream, including the closed captions ingestion URL.
          &quot;isReusable&quot;: True or False, # Indicates whether the stream is reusable, which means that it
              # can be bound to multiple broadcasts. It is common for
              # broadcasters to reuse the same stream for many different
              # broadcasts if those broadcasts occur at different times.&lt;br&gt;&lt;br&gt;
              # If you set this value to &lt;code&gt;false&lt;/code&gt;, then the stream
              # will not be reusable, which means that it can only be bound to
              # one broadcast. Non-reusable streams differ from reusable streams in the
              # following ways:
              # &lt;ul&gt;
              #   &lt;li&gt;A non-reusable stream can only be bound to one broadcast.&lt;/li&gt;
              #   &lt;li&gt;A non-reusable stream might be deleted by an automated process
              #     after the broadcast ends.&lt;/li&gt;
              #   &lt;li&gt;The &lt;code&gt;&lt;a href=&quot;/youtube/v3/live/docs/liveStreams/list&quot;&gt;
              #     liveStreams.list&lt;/a&gt;&lt;/code&gt; method does not list non-reusable streams
              #     if you call the method and set the &lt;code&gt;mine&lt;/code&gt; parameter to
              #     &lt;code&gt;true&lt;/code&gt;. The only way to use that method to retrieve the
              #     resource for a non-reusable stream is to use the &lt;code&gt;id&lt;/code&gt;
              #     parameter to identify the stream.&lt;/li&gt;
              # &lt;/ul&gt;
          &quot;closedCaptionsIngestionUrl&quot;: &quot;A String&quot;, # The ingestion URL where the closed captions of this stream are sent.
        },
        &quot;status&quot;: { # Brief description of the live stream status. # The &lt;code&gt;status&lt;/code&gt; object contains information about
            # live stream&#x27;s status.
          &quot;healthStatus&quot;: { # The health status of the stream.
            &quot;lastUpdateTimeSeconds&quot;: &quot;A String&quot;, # The last time this status was updated (in seconds)
            &quot;status&quot;: &quot;A String&quot;, # The status code of this stream
            &quot;configurationIssues&quot;: [ # The configurations issues on this stream
              {
                &quot;type&quot;: &quot;A String&quot;, # The kind of error happening.
                &quot;description&quot;: &quot;A String&quot;, # The long-form description of the issue and how to resolve it.
                &quot;reason&quot;: &quot;A String&quot;, # The short-form reason for this issue.
                &quot;severity&quot;: &quot;A String&quot;, # How severe this issue is to the stream.
              },
            ],
          },
          &quot;streamStatus&quot;: &quot;A String&quot;,
        },
        &quot;kind&quot;: &quot;youtube#liveStream&quot;, # Identifies what kind of resource this is. Value: the fixed string
            # &lt;code&gt;&quot;youtube#liveStream&quot;&lt;/code&gt;.
        &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube assigns to uniquely identify the stream.
        &quot;snippet&quot;: { # The &lt;code&gt;snippet&lt;/code&gt; object contains basic details about the
            # stream, including its channel, title, and description.
          &quot;channelId&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the channel that
              # is transmitting the stream.
          &quot;description&quot;: &quot;A String&quot;, # The stream&#x27;s description. The value cannot be longer than 10000
              # characters.
          &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time that the stream was created. The value is specified in
              # &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
              # format.
          &quot;isDefaultStream&quot;: True or False,
          &quot;title&quot;: &quot;A String&quot;, # The stream&#x27;s title. The value must be between 1 and 128 characters long.
        },
      },
    ],
    &quot;prevPageToken&quot;: &quot;A String&quot;, # The token that can be used as the value of the &lt;code&gt;pageToken&lt;/code&gt;
        # parameter to retrieve the previous page in the result set.
    &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
    &quot;tokenPagination&quot;: { # Stub token pagination template to suppress results.
    },
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The token that can be used as the value of the &lt;code&gt;pageToken&lt;/code&gt;
        # parameter to retrieve the next page in the result set.
    &quot;kind&quot;: &quot;youtube#liveStreamListResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string
        # &lt;code&gt;&quot;youtube#liveStreamListResponse&quot;&lt;/code&gt;.
    &quot;pageInfo&quot;: { # Paging details for lists of resources, including total number of items
        # available and number of resources returned in a single page.
      &quot;resultsPerPage&quot;: 42, # The number of results included in the API response.
      &quot;totalResults&quot;: 42, # The total number of results in the result set.
    },
  }</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, onBehalfOfContentOwnerChannel=None, onBehalfOfContentOwner=None, x__xgafv=None)</code>
  <pre>Updates an existing stream for the authenticated user.

Args:
  part: string, The &lt;code&gt;&lt;strong&gt;part&lt;/strong&gt;&lt;/code&gt; parameter serves two purposes in
this operation. It identifies the properties that the write operation will
set as well as the properties that the API response will
include.&lt;br&gt;&lt;br&gt;The &lt;code&gt;part&lt;/code&gt; properties that you can include in
the parameter value are &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;snippet&lt;/code&gt;,
&lt;code&gt;cdn&lt;/code&gt;, and &lt;code&gt;status&lt;/code&gt;.&lt;br&gt;&lt;br&gt;Note that this method
will override the existing values for all of the mutable properties that
are contained in any parts that the parameter value specifies. If the
request body does not specify a value for a mutable property, the existing
value for that property will be removed. (required) (repeated)
  body: object, The request body.
    The object takes the form of:

{ # A live stream describes a live ingestion point.
  &quot;cdn&quot;: { # Brief description of the live stream cdn settings. # The &lt;code&gt;cdn&lt;/code&gt; object defines the live stream&#x27;s content delivery
      # network (CDN) settings. These settings provide details about the manner
      # in which you stream your content to YouTube.
    &quot;ingestionInfo&quot;: { # Describes information necessary for ingesting an RTMP or an HTTP stream. # The &lt;code&gt;ingestionInfo&lt;/code&gt; object contains information that YouTube
        # provides that you need to transmit your RTMP or HTTP stream to YouTube.
      &quot;rtmpsBackupIngestionAddress&quot;: &quot;A String&quot;, # This ingestion url may be used instead of
          # &lt;code&gt;backupIngestionAddress&lt;/code&gt; in order to stream via RTMPS. Not
          # applicable to non-RTMP streams.
      &quot;streamName&quot;: &quot;A String&quot;, # The HTTP or RTMP stream name that YouTube assigns to the video stream.
      &quot;backupIngestionAddress&quot;: &quot;A String&quot;, # The backup ingestion URL that you should use to stream video to
          # YouTube. You have the option of simultaneously streaming the content
          # that you are sending to the &lt;code&gt;ingestionAddress&lt;/code&gt; to this URL.
      &quot;ingestionAddress&quot;: &quot;A String&quot;, # The primary ingestion URL that you should use to stream video to
          # YouTube. You must stream video to this URL.&lt;br&gt;&lt;br&gt;
          # Depending on which application or tool you use to encode
          # your video stream, you may need to enter the stream URL and stream
          # name separately or you may need to concatenate them in the following
          # format:&lt;br&gt;&lt;pre&gt;&lt;strong&gt;STREAM_URL/STREAM_NAME&lt;/strong&gt;&lt;/pre&gt;
      &quot;rtmpsIngestionAddress&quot;: &quot;A String&quot;, # This ingestion url may be used instead of
          # &lt;code&gt;ingestionAddress&lt;/code&gt; in order to stream via RTMPS. Not applicable
          # to non-RTMP streams.
    },
    &quot;format&quot;: &quot;A String&quot;, # The format of the video stream that you are sending to Youtube. &lt;br&gt;&lt;br&gt;
    &quot;frameRate&quot;: &quot;A String&quot;, # The frame rate of the inbound video data.
    &quot;resolution&quot;: &quot;A String&quot;, # The resolution of the inbound video data.
    &quot;ingestionType&quot;: &quot;A String&quot;, #  The method or protocol used to transmit the video stream.
  },
  &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
  &quot;contentDetails&quot;: { # Detailed settings of a stream. # The &lt;code&gt;content_details&lt;/code&gt; object contains information about the
      # stream, including the closed captions ingestion URL.
    &quot;isReusable&quot;: True or False, # Indicates whether the stream is reusable, which means that it
        # can be bound to multiple broadcasts. It is common for
        # broadcasters to reuse the same stream for many different
        # broadcasts if those broadcasts occur at different times.&lt;br&gt;&lt;br&gt;
        # If you set this value to &lt;code&gt;false&lt;/code&gt;, then the stream
        # will not be reusable, which means that it can only be bound to
        # one broadcast. Non-reusable streams differ from reusable streams in the
        # following ways:
        # &lt;ul&gt;
        #   &lt;li&gt;A non-reusable stream can only be bound to one broadcast.&lt;/li&gt;
        #   &lt;li&gt;A non-reusable stream might be deleted by an automated process
        #     after the broadcast ends.&lt;/li&gt;
        #   &lt;li&gt;The &lt;code&gt;&lt;a href=&quot;/youtube/v3/live/docs/liveStreams/list&quot;&gt;
        #     liveStreams.list&lt;/a&gt;&lt;/code&gt; method does not list non-reusable streams
        #     if you call the method and set the &lt;code&gt;mine&lt;/code&gt; parameter to
        #     &lt;code&gt;true&lt;/code&gt;. The only way to use that method to retrieve the
        #     resource for a non-reusable stream is to use the &lt;code&gt;id&lt;/code&gt;
        #     parameter to identify the stream.&lt;/li&gt;
        # &lt;/ul&gt;
    &quot;closedCaptionsIngestionUrl&quot;: &quot;A String&quot;, # The ingestion URL where the closed captions of this stream are sent.
  },
  &quot;status&quot;: { # Brief description of the live stream status. # The &lt;code&gt;status&lt;/code&gt; object contains information about
      # live stream&#x27;s status.
    &quot;healthStatus&quot;: { # The health status of the stream.
      &quot;lastUpdateTimeSeconds&quot;: &quot;A String&quot;, # The last time this status was updated (in seconds)
      &quot;status&quot;: &quot;A String&quot;, # The status code of this stream
      &quot;configurationIssues&quot;: [ # The configurations issues on this stream
        {
          &quot;type&quot;: &quot;A String&quot;, # The kind of error happening.
          &quot;description&quot;: &quot;A String&quot;, # The long-form description of the issue and how to resolve it.
          &quot;reason&quot;: &quot;A String&quot;, # The short-form reason for this issue.
          &quot;severity&quot;: &quot;A String&quot;, # How severe this issue is to the stream.
        },
      ],
    },
    &quot;streamStatus&quot;: &quot;A String&quot;,
  },
  &quot;kind&quot;: &quot;youtube#liveStream&quot;, # Identifies what kind of resource this is. Value: the fixed string
      # &lt;code&gt;&quot;youtube#liveStream&quot;&lt;/code&gt;.
  &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube assigns to uniquely identify the stream.
  &quot;snippet&quot;: { # The &lt;code&gt;snippet&lt;/code&gt; object contains basic details about the
      # stream, including its channel, title, and description.
    &quot;channelId&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the channel that
        # is transmitting the stream.
    &quot;description&quot;: &quot;A String&quot;, # The stream&#x27;s description. The value cannot be longer than 10000
        # characters.
    &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time that the stream was created. The value is specified in
        # &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
        # format.
    &quot;isDefaultStream&quot;: True or False,
    &quot;title&quot;: &quot;A String&quot;, # The stream&#x27;s title. The value must be between 1 and 128 characters long.
  },
}

  onBehalfOfContentOwnerChannel: string, This parameter can only be used in a properly &lt;a
href=&quot;/youtube/v3/guides/authentication&quot;&gt;authorized request&lt;/a&gt;.
&lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwnerChannel&lt;/strong&gt;&lt;/code&gt; parameter
specifies the YouTube channel ID of the channel to which a video is being
added. This parameter is required when a request specifies a value for the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter, and it can only be used in
conjunction with that parameter. In addition, the request must be
authorized using a CMS account that is linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies. Finally, the
channel that the &lt;code&gt;onBehalfOfContentOwnerChannel&lt;/code&gt; parameter value
specifies must be linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies.&lt;br&gt;&lt;br&gt;This
parameter is intended for YouTube content partners that own and manage many
different YouTube channels. It allows content owners to authenticate once
and perform actions on behalf of the channel specified in the parameter
value, without having to provide authentication credentials for each
separate channel.
  onBehalfOfContentOwner: string, &lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwner&lt;/strong&gt;&lt;/code&gt; parameter indicates
that the
request&#x27;s authorization credentials identify a YouTube CMS user who is
acting on behalf of the content owner specified in the parameter value.
This parameter is intended for YouTube content partners that own and manage
many different YouTube channels. It allows content owners to authenticate
once and get access to all their video and channel data, without having to
provide authentication credentials for each individual channel. The CMS
account that the user authenticates with must be linked to the specified
YouTube content owner.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A live stream describes a live ingestion point.
    &quot;cdn&quot;: { # Brief description of the live stream cdn settings. # The &lt;code&gt;cdn&lt;/code&gt; object defines the live stream&#x27;s content delivery
        # network (CDN) settings. These settings provide details about the manner
        # in which you stream your content to YouTube.
      &quot;ingestionInfo&quot;: { # Describes information necessary for ingesting an RTMP or an HTTP stream. # The &lt;code&gt;ingestionInfo&lt;/code&gt; object contains information that YouTube
          # provides that you need to transmit your RTMP or HTTP stream to YouTube.
        &quot;rtmpsBackupIngestionAddress&quot;: &quot;A String&quot;, # This ingestion url may be used instead of
            # &lt;code&gt;backupIngestionAddress&lt;/code&gt; in order to stream via RTMPS. Not
            # applicable to non-RTMP streams.
        &quot;streamName&quot;: &quot;A String&quot;, # The HTTP or RTMP stream name that YouTube assigns to the video stream.
        &quot;backupIngestionAddress&quot;: &quot;A String&quot;, # The backup ingestion URL that you should use to stream video to
            # YouTube. You have the option of simultaneously streaming the content
            # that you are sending to the &lt;code&gt;ingestionAddress&lt;/code&gt; to this URL.
        &quot;ingestionAddress&quot;: &quot;A String&quot;, # The primary ingestion URL that you should use to stream video to
            # YouTube. You must stream video to this URL.&lt;br&gt;&lt;br&gt;
            # Depending on which application or tool you use to encode
            # your video stream, you may need to enter the stream URL and stream
            # name separately or you may need to concatenate them in the following
            # format:&lt;br&gt;&lt;pre&gt;&lt;strong&gt;STREAM_URL/STREAM_NAME&lt;/strong&gt;&lt;/pre&gt;
        &quot;rtmpsIngestionAddress&quot;: &quot;A String&quot;, # This ingestion url may be used instead of
            # &lt;code&gt;ingestionAddress&lt;/code&gt; in order to stream via RTMPS. Not applicable
            # to non-RTMP streams.
      },
      &quot;format&quot;: &quot;A String&quot;, # The format of the video stream that you are sending to Youtube. &lt;br&gt;&lt;br&gt;
      &quot;frameRate&quot;: &quot;A String&quot;, # The frame rate of the inbound video data.
      &quot;resolution&quot;: &quot;A String&quot;, # The resolution of the inbound video data.
      &quot;ingestionType&quot;: &quot;A String&quot;, #  The method or protocol used to transmit the video stream.
    },
    &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
    &quot;contentDetails&quot;: { # Detailed settings of a stream. # The &lt;code&gt;content_details&lt;/code&gt; object contains information about the
        # stream, including the closed captions ingestion URL.
      &quot;isReusable&quot;: True or False, # Indicates whether the stream is reusable, which means that it
          # can be bound to multiple broadcasts. It is common for
          # broadcasters to reuse the same stream for many different
          # broadcasts if those broadcasts occur at different times.&lt;br&gt;&lt;br&gt;
          # If you set this value to &lt;code&gt;false&lt;/code&gt;, then the stream
          # will not be reusable, which means that it can only be bound to
          # one broadcast. Non-reusable streams differ from reusable streams in the
          # following ways:
          # &lt;ul&gt;
          #   &lt;li&gt;A non-reusable stream can only be bound to one broadcast.&lt;/li&gt;
          #   &lt;li&gt;A non-reusable stream might be deleted by an automated process
          #     after the broadcast ends.&lt;/li&gt;
          #   &lt;li&gt;The &lt;code&gt;&lt;a href=&quot;/youtube/v3/live/docs/liveStreams/list&quot;&gt;
          #     liveStreams.list&lt;/a&gt;&lt;/code&gt; method does not list non-reusable streams
          #     if you call the method and set the &lt;code&gt;mine&lt;/code&gt; parameter to
          #     &lt;code&gt;true&lt;/code&gt;. The only way to use that method to retrieve the
          #     resource for a non-reusable stream is to use the &lt;code&gt;id&lt;/code&gt;
          #     parameter to identify the stream.&lt;/li&gt;
          # &lt;/ul&gt;
      &quot;closedCaptionsIngestionUrl&quot;: &quot;A String&quot;, # The ingestion URL where the closed captions of this stream are sent.
    },
    &quot;status&quot;: { # Brief description of the live stream status. # The &lt;code&gt;status&lt;/code&gt; object contains information about
        # live stream&#x27;s status.
      &quot;healthStatus&quot;: { # The health status of the stream.
        &quot;lastUpdateTimeSeconds&quot;: &quot;A String&quot;, # The last time this status was updated (in seconds)
        &quot;status&quot;: &quot;A String&quot;, # The status code of this stream
        &quot;configurationIssues&quot;: [ # The configurations issues on this stream
          {
            &quot;type&quot;: &quot;A String&quot;, # The kind of error happening.
            &quot;description&quot;: &quot;A String&quot;, # The long-form description of the issue and how to resolve it.
            &quot;reason&quot;: &quot;A String&quot;, # The short-form reason for this issue.
            &quot;severity&quot;: &quot;A String&quot;, # How severe this issue is to the stream.
          },
        ],
      },
      &quot;streamStatus&quot;: &quot;A String&quot;,
    },
    &quot;kind&quot;: &quot;youtube#liveStream&quot;, # Identifies what kind of resource this is. Value: the fixed string
        # &lt;code&gt;&quot;youtube#liveStream&quot;&lt;/code&gt;.
    &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube assigns to uniquely identify the stream.
    &quot;snippet&quot;: { # The &lt;code&gt;snippet&lt;/code&gt; object contains basic details about the
        # stream, including its channel, title, and description.
      &quot;channelId&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the channel that
          # is transmitting the stream.
      &quot;description&quot;: &quot;A String&quot;, # The stream&#x27;s description. The value cannot be longer than 10000
          # characters.
      &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time that the stream was created. The value is specified in
          # &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;isDefaultStream&quot;: True or False,
      &quot;title&quot;: &quot;A String&quot;, # The stream&#x27;s title. The value must be between 1 and 128 characters long.
    },
  }</pre>
</div>

</body></html>