YouTube Live Streaming API - Revision History

This page lists YouTube Live Streaming API changes and documentation updates. Subscribe to this changelog. Subscribe

April 5, 2018

The description of the superChatEvents.list method has been updated to reflect the fact that the API response no longer contains fanFundingEvents, which were deprecated in early 2017.

April 3, 2017

New Java code samples have been added that show how to list, insert, and delete live chat messages. The samples call the following methods:

February 13, 2017

This update contains the following changes:

  • Updates to existing resources and methods

    • The liveCuepoints.insert method has been updated to reflect the fact that the onBehalfOfContentOwner parameter is currently required. In addition, the method's description has been updated to note that calls to that method must be authorized by an account associated with a YouTube Content Owner.

February 9, 2017

This update contains the following changes:

  • Updates to existing resources and methods

    • The superChatEvents.list method's new hl parameter lets you specify that the snippet.displayString property value should be formatted according to the conventions of a particular language. That property's definition has also been updated accordingly.

      The parameter value must be a language code included in the list returned by the i18nLanguages.list method. The default value is en, which means that the default behavior is to format display strings as they would be used in English. For example, by default, a string is formatted as $1.00 rather than $1,00.

February 1, 2017

This update contains the following changes:

  • New resources and methods

    • The new superChatEvent resource represents a Super Chat message purchased by a fan during a YouTube live stream. In the YouTube live chat stream, Super Chats stand out from other messages in two ways:

      • Super Chats are highlighted with a color.
      • Super Chats stay pinned in the ticker for a set period of time.

      The color of the Super Chat, the period of time it stays pinned in the ticker, and the maximum message length are all determined by the purchase amount. The YouTube Help Center has more information about Super Chats.

      The API supports a method to list Super Chat events for a channel's live streams in the previous 30 days. That method also returns data about Fan Funding events (fanFundingEvents) from the channel's last live stream.

  • Updates to existing resources and methods

    • The snippet.type property now supports the superChatEvent value, which indicates that the resource describes a Super Chat.

      In addition, the liveChatMessage resource's new snippet.superChatDetails property and its children contain information about the Super Chat event.

    • The liveStream resource's cdn.resolution property now supports the value 2160p.

  • New and updated errors

    • The API supports the following new errors:

      Error details
      liveBroadcasts.insert, liveBroadcasts.update The liveBroadcasts.insert and liveBroadcasts.update methods return 400 (Bad Request) errors to indicate that the liveBroadcast resource being inserted or updated contains an invalid value for either the contentDetails.enableEmbed property or the contentDetails.projection property. The error reasons for the two new errors are invalidEmbedSetting and invalidProjection, respectively.

January 12, 2017

Note: This is a deprecation announcement.

In conjunction with the release of the new Super Chat feature, YouTube has deprecated the Fan Funding feature, and the Fan Funding API will be turned off on February 28, 2017. As of that date:

August 11, 2016

This update contains the following changes:

  • The newly published YouTube API Services Terms of Service ("the Updated Terms"), discussed in detail on the YouTube Engineering and Developers Blog, provides a rich set of updates to the current Terms of Service. In addition to the Updated Terms, which will go into effect as of February 10, 2017, this update includes several supporting documents to help explain the policies that developers must follow.

    The full set of new documents is described in the revision history for the Updated Terms. In addition, future changes to the Updated Terms or to those supporting documents will also be explained in that revision history. You can subscribe to an RSS feed listing changes in that revision history from a link in that document.

May 20, 2016

YouTube now supports DASH ingestion. Accordingly, the liveStream resource's ingestionType property supports the new value dash to identify streams ingested to YouTube using DASH.

The new Delivering Live YouTube Content via DASH guide provides guidelines for using the DASH Delivery format to stream live data on YouTube from an encoder. It is intended to help encoder vendors add DASH delivery support to their products.

April 18, 2016

This update contains the following changes:

  • Updates to existing resources and methods

    • liveStream resource updates
      • YouTube now supports streams with 1440p resolution at either 30 or 60 frames per second.

        In addition, the liveStream resource contains new properties for specifying the frame rate and resolution of the inbound video data:

        Properties
        cdn.frameRate The frame rate of the inbound video data. Valid values are 30fps and 60fps.
        cdn.resolution The resolution of the inbound video data. Valid property values are: 1440p, 1080p, 720p, 480p, 360p, and 240p.
      • In accordance with the introduction of the liveStream resource's cdn.frameRate and cdn.resolution properties, the resource's cdn.format is now deprecated. The cdn.format property specifies resolution and frame rate in a single value.

        We encourage you to transition to the newly supported fields. In the meantime, cdn.format continues to work. In addition, requests to insert live streams currently succeed as long as you specify values for either the cdn.format property or the cdn.frameRate and cdn.resolution properties. If you provide values for all three properties, the API might return an error if the values are not in agreement.

        Note that even though the cdn.format property is deprecated, it does now support two new values, 1440p and 1440p_hfr, to reflect the API's support for 1440p streams at either 30 or 60 frames per second.

    • liveBroadcast resource updates
      • The liveBroadcast resource contains the following new properties:

        Properties
        contentDetails.boundStreamLastUpdateTimeMs The date and time that the live stream referenced by the broadcast's contentDetails.boundStreamId property was last updated.
        contentDetails.projection The broadcast's projection format. The property's default value is rectangular. Valid values for the property are 360 and rectangular.
      • The definition of the liveBroadcast resource's statistics.totalChatCount property has been updated to note that the property value only shows up if the broadcast has at least one chat message.

    • liveChatMessage resource updates
      • The snippet.type property supports two new values – messageDeletedEvent and userBannedEvent – that correspond to the new properties described in the following bullet point. The definition of the snippet.authorChannelId property has also been updated to explain what the property value identifies for these new message types.

      • The liveChatMessage resource contains the following new properties:

        Properties
        snippet.messageDeletedDetails This object contains information about a message that was deleted by a chat moderator. The object is only present if the snippet.type property value is messageDeletedEvent.
        snippet.userBannedDetails This object contains information about a user who has been banned from participating in the chat. The object also contains information about the ban itself, namely whether the ban is permanent or temporary. If the ban is temporary, one of the object's properties specifies the duration of the ban.

        This object is only present if the snippet.type property value is userBannedEvent.
  • New and updated errors

    • The API supports the following new errors:

      Error details
      liveBroadcasts.bind The liveBroadcasts.bind method returns a 403 (Forbidden) error to indicate that the user has sent too many requests within a given timeframe. The error reason is userRequestsExceedRateLimit.

      The liveBroadcasts.insert and liveBroadcasts.update methods already support the same error.
      liveStreams.insert The liveStreams.insert method supports four new 400 (Bad Request) errors that identify an invalid property value in the liveStream resource that the request tried to insert. The following list identifies the error reasons and the properties with which they are associated:
      liveStreams.insert The liveStreams.insert method supports two new 400 (Bad Request) errors, each of which indicates that a required value is not present in the liveStream resource that the request tried to insert. The following list identifies the error reasons and the properties with which they are associated:
      More specifically, when you insert a liveStream resource, you must specify a value for either the cdn.format property or for the cdn.frameRate and cdn.resolution properties.
      • The API returns a formatRequired error if you do not specify a value for any of the three properties.
      • The API returns a frameRateRequired error if you specify a value for cdn.resolution but not cdn.frameRate.
      • The API returns a resolutionRequired error if you specify a value for cdn.frameRate but not cdn.resolution.
      liveStreams.update The liveStreams.update method returns a 403 (Forbidden) error if the request tries to modify the value of any of the following non-mutable properties: The reason in the error response is liveStreamModificationNotAllowed.

December 18, 2015

European Union (EU) laws require that certain disclosures must be given to and consents obtained from end users in the EU. Therefore, for end users in the European Union, you must comply with the EU User Consent Policy. We have added a notice of this requirement in our YouTube API Terms of Service.

December 17, 2015

This update contains the following changes:

  • New resources and methods

    • The API supports several new resources to support chat functionality for live broadcasts. YouTube supports live chat functionality during active live broadcasts, and these resources and their methods support retrieval of chat messages as well as administrative functions for the chat.

      Resources
      liveChatMessage This resource represents a message in a YouTube live chat. YouTube supports several types of messages, including text messages and Fan Funding events. Some message types identify a particular phase of the chat, such as the beginning of a sponsors-only period or the end of the chat. The API supports methods to list, insert, and delete live chat messages.
      liveChatModerators This resource identifies a chat moderator. Moderators can perform some administrative functions, such as banning users from the chat or removing messages. The API supports methods to list, insert, and delete live chat moderators.
      liveChatBans This resource identifies a user who is banned from posting messages to a particular live chat. Bans can be temporary or permanent. The API supports methods to insert and delete live chat bans.
      fanFundingEvents This resource represents a Fan Funding event on a YouTube channel. Fan Funding provides a way for viewers to voluntarily support YouTube Creators with one-time monetary support.

      The API's fanFundingEvents.list method lists a channel's Fan Funding events. Fan Funding events that are initiated through a live chat during a live broadcast owned by the channel also trigger a fanFundingEvent message to the broadcast's live chat.

      Learn more about Fan Funding in the YouTube Help Center.
      sponsors The sponsor resource identifies a sponsor of a YouTube channel. A sponsor pays a monthly fee to a channel. A badge shows up next to the sponsor's messages in the channel's live chats and sponsors can also participate in live chats exclusively for the channel's sponsors, if those occur.

      The API's sponsors.list method lists a channel's sponsors. When users sign up to sponsor a channel during a live broadcast owned by that channel, the API also adds a newSponsorEvent message to the broadcast's live chat.

      Learn more about sponsorships in the YouTube Help Center.

  • Updates to existing resources and methods

    • The liveBroadcast resource contains the following new properties:

      Properties
      snippet.liveChatId The ID for the broadcast's YouTube live chat. With this ID, you can use the liveChatMessage resource's methods to retrieve, insert, or delete chat messages. You can also add or remove chat moderators, ban users from participating in live chats, or remove existing bans.
      contentDetails.closedCaptionsType Note: This property replaces the contentDetails.enableClosedCaptions property.

      This property indicates whether closed captioning is enabled for your broadcast and, if so, what type of closed captions you are providing:
      • closedCaptionsDisabled: Closed captions are disabled for the live broadcast.
      • closedCaptionsHttpPost: You will send captions, via HTTP POST, to an ingestion URL associated with your live stream.
      • closedCaptionsEmbedded: Captions will be encoded in the video stream using EIA-608 and/or CEA-708 formats.
      contentDetails.enableClosedCaptions This property has been deprecated as of December 17, 2015. Use the contentDetails.closedCaptionsType property instead. For API clients that are already using this property:
      • Setting the property value to true is equivalent to setting the contentDetails.closedCaptionsType property to closedCaptionsHttpPost.
      • Setting the property value to false is equivalent to setting the contentDetails.closedCaptionsType property to closedCaptionsDisabled.
    • The liveBroadcasts.list method's new broadcastType parameter lets you filter an API response to include event broadcasts, persistent broadcasts, or all broadcasts.

      A persistent broadcast is one that always exists and is not tied to a particular event. Specifically, a channel's default broadcast is a persistent broadcast, and it is accessible via the Live Dashboard in the YouTube Creator Studio. The channel's other broadcasts are event broadcasts.

  • The liveStream resource's status.healthStatus.configurationIssues[].type field reports the following new health status errors:

    Errors
    audioTooManyChannels The audio has more than two channels, but only one (mono) or two (stereo) channels are supported. Please correct the number of audio channels.
    frameRateHigh The current framerate is too high. Please set the framerate to %(framerate)s fps or less.
  • The publication date of the previous documentation update was corrected.

  • New and updated errors

    • In addition to errors defined for the new resources listed above, the API supports the following new errors:

      Error details
      liveBroadcasts.update
      HTTP Response Codeforbidden (403)
      ReasonclosedCaptionsTypeModificationNotAllowed
      DescriptionThe contentDetails.closedCaptionsType value can only be modified when the broadcast is in the created or ready status.
      liveBroadcasts.update
      HTTP Response CodeinvalidValue (400)
      ReasoninvalidEnableClosedCaptions
      DescriptionIn the liveBroadcast resource, the value of the contentDetails.enableClosedCaptions property is incompatible with the value of the contentDetails.closedCaptionType setting. Modify the resource to only include one of the two properties, and then resubmit the request.

August 19, 2015

This update contains the following changes:

  • New resources and methods

    • Note: Documentation for the liveChat resource and its methods is confidential and only visible to select YouTube partners.

      The new liveChat resource contains a comment posted during a live broadcast on YouTube. The API supports two methods for this resource:

      Methods
      liveChats.list List live chat messages for a broadcast.
      liveChats.insert Create a new chat message.

      Live chat messages can only be retrieved and posted while a broadcast is live.

  • Updates to existing resources and methods

    • The liveStream resource contains the following new properties:

      Properties
      snippet.isDefaultStream Indicates whether this stream is the default stream for the channel. A channel's default stream exists indefinitely, does not have a start or end time associated with it, and cannot be deleted. See the property's definition for more information about how default streams work.
      status.healthStatus This object contains information that could be used to identify, diagnose and resolve streaming problems. The object contains a number of child properties to help you evaluate the health of a live video stream.

      In particular, the status.healthStatus.configurationIssues[] object lists issues affecting a video stream. A new document, Configuration Issues for LiveStream Resources, lists all of the issues that the API reports.
      contentDetails.isReusable 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.
    • The liveBroadcast resource contains the following new properties:

      Properties
      snippet.isDefaultBroadcast Indicates whether this broadcast is the default broadcast for the channel. When a YouTube channel is enabled for live streaming, YouTube creates a default stream and a default broadcast for the channel. The stream defines how the channel owner sends live video to YouTube, and the broadcast is how viewers can see the default stream. See the property's definition for more information about how default broadcasts work.
      contentDetails.enableLowLatency Indicates whether this broadcast should be encoded for low-latency streaming. A low-latency stream can reduce the amount of time it takes for video to be visible to users watching a broadcast, though it can also impact the resolution for viewers of the stream.
      statistics.totalChatCount The total number of live chat messages associated with the broadcast. The property and its value are present if the broadcast is visible to the user and has the live chat feature enabled. Note that this property will not specify a value after the broadcast ends. So, this property would not identify the number of chat messages for an archived video of a completed live broadcast.
  • New and updated errors

    • In addition to errors defined for the new liveChat resource, the API supports the following new error:

      Error details
      liveStreams.update
      HTTP Response Codeforbidden (403)
      ReasonliveStreamModificationNotAllowed
      DescriptionThe API does not allow you to change a reusable stream to be non-reusable, or vice versa. For more information, see Understanding Broadcasts and Streams

May 21, 2015

This update contains the following changes:

  • YouTube now supports live video streaming at 60 frames per second (fps), which means smoother playback for gaming and other fast-action videos. When you start a live stream on YouTube at 60fps, YouTube also makes the stream available in 30fps on devices where high-frame-rate viewing is not yet available.

    The liveStream resource's cdn.format property supports two new values for this feature: 720p_hfr and 1080p_hfr.

    See the YouTube Creators Blog for more information about this feature.

August 21, 2014

This update contains the following changes:

  • The definition of the liveBroadcasts.control method's walltime parameter has been updated to note that the property value is specified in ISO 8601 format (YYYY-MM-DDThh:mm:ss.sssZ).

  • The API now supports the following errors:

    Error type Error detail Description
    insufficientPermissions liveStreamingNotEnabled All methods for the liveBroadcast and liveStream resources return this error if the user that authorized the API request has not been enabled to stream live video on YouTube. Details explaining why the user cannot stream live video may be available in the user's channel settings at https://www.youtube.com/features.
    rateLimitExceeded userRequestsExceedRateLimit The liveBroadcasts.insert and liveStreams.insert methods both return this error to indicate that the user has sent too many requests within a given timeframe.

May 2, 2014

This update contains the following changes:

  • The descriptions of the liveStream resource and of the liveBroadcasts.bind method have been updated to note that a broadcast can only be bound to one video stream, but a video stream can be bound to more than one broadcast. This change is solely a correction to the documentation; the underlying API functionality has not changed.

  • The liveBroadcast resource's contentDetails.monitorStream.enableMonitorStream property has been updated to explain that if the property's value is true, then you must transition your broadcast to the testing state before you can transition it to the live state. (If the property's value is false, your broadcast cannot have a testing stage, so you can transition the broadcast directly to the live state.

  • The liveCuepoint resource's settings.offsetTimeMs property has been updated to note that you should not specify a value for the property if your broadcast does not have a monitor stream.

  • All of the methods for the liveBroadcast and liveStream resources now support the onBehalfOfContentOwner and onBehalfOfContentOwnerChannel parameters. These parameters allow you to use the same authorization credentials to complete API requests for different channels associated with the same content owner.

  • The liveCuepoints.insert method's documentation has been updated to note that you can set a value for the settings.walltime property when calling that method.

  • The error documentation now specifies the HTTP response code for each error type.

  • The API now supports the following error:

    Error type Error detail Description
    insufficientPermissions livePermissionBlocked The liveBroadcasts.insert, liveBroadcasts.transition, and liveStreams.insert methods return this error if the user that authorized the request is unable to stream live video on YouTube. Details explaining why the user cannot stream live video may be available in the user's channel settings at https://www.youtube.com/features.
  • The liveBroadcasts.insert method's invalidScheduledStartTime error has been updated to clarify that the scheduled start time must be close enough to the current date that a broadcast could be reliably scheduled at that time.

December 13, 2013

This update contains the following changes:

  • The liveBroadcast resource's new status.recordingStatus property identifies the broadcast's current status.

  • The liveBroadcast resource's new contentDetails.enableClosedCaptions property indicates whether closed captions can be ingested for the broadcast. The property value can be set when you insert or update a broadcast, but it cannot be updated once the broadcast is in the testing or live state. If you set this property to true, then the liveStream resource that is bound to the broadcast will specify the ingestion URL to use for the broadcast's closed captions.

  • The liveBroadcast resource's snippet.scheduledEndTime property now supports broadcasts that are scheduled to continue indefinitely. With this change, the property is no longer required in liveBroadcasts.insert and liveBroadcasts.update requests.

    If you retrieve a liveBroadcast resource that does not specify a value for this property, then the broadcast is scheduled to continue indefinitely. Similarly, if you call the liveBroadcasts.insert or liveBroadcasts.update method and do not specify a value for this property, the broadcast will be scheduled to continue indefinitely.

  • The liveBroadcast resource's contentDetails.recordFromStart property, which already had a default value of true, can now only be set to false if the broadcasting channel is allowed to disable recordings for live broadcasts.

    If your channel does not have permission to disable recordings, and you attempt to insert a broadcast with the recordFromStart property set to false, the API will return a Forbidden error. In addition, if your channel does not have that permission and you attempt to update a broadcast to set the recordFromStart property to false, the API will return a modificationNotAllowed error.

  • The liveBroadcast resource no longer contains an enableArchive property, which had been mentioned in the descriptions of the contentDetails.enableDvr and contentDetails.enableEmbed properties.

  • The list of valid values for the liveBroadcast resource's status.lifeCycleStatus property has been updated to include a description of each status.

  • The liveCuepoint resource's new settings.walltime property specifies the date and time at which the cuepoint should be inserted. The API returns an error if a request tries to insert a cuepoint that specifies a value for this property and for the settings.offsetTimeMs property.

  • The new contentDetails object in a liveStream resource contains information about the stream. Currently, the object's only property is contentDetails.closedCaptionsIngestionUrl, which specifies the ingestion URL for closed captions associated with the video stream.

  • The list of valid values for the liveStream resource's status.streamStatus property has been updated to include a description of each status.

  • The liveBroadcasts.control method's new walltime parameter lets you specify the date and time when a slate change will occur. The API returns an error if a request specifies a value for this parameter and for the offsetTimeMs parameter.

  • In the API response to a liveBroadcasts.list request, the value of the kind property has changed from youtube#liveBroadcastList to youtube#liveBroadcastListResponse.

  • In the API response to a liveStreams.list request, the value of the kind property has changed from youtube#liveStreamList to youtube#liveStreamListResponse.

  • The eventId property has been deprecated from both the liveBroadcastListResponse and the liveStreamListResponse.

  • The API supports the following new errors:

    Error type Error detail Description
    invalidValue conflictingTimeFields The liveBroadcasts.control method returns this error if your request specifies values for the offsetTimeMs and walltime parameters. A request can either omit both parameters or specify a value for one of the two parameters.
    invalidValue invalidWalltime The liveBroadcasts.control method returns this error if the walltime parameter's value is invalid.
    forbidden enableClosedCaptionsModificationNotAllowed The liveBroadcasts.update method returns this error if you attempt to update the contentDetails.enableClosedCaptions value and the broadcast's status is not created or ready.
    invalidValue conflictingTimeFields The liveCuepoints.insert method returns this error if your request specifies values for the settings.offsetTimeMs and settings.walltime properties. A request can either omit both properties or specify a value for one of the two properties.

    In addition, the liveStreams.update method no longer supports a cdnRequired error similar to the one that the liveStreams.insert method supports.

May 10, 2013

This update contains the following changes:

May 2, 2013

This update contains the following changes:

March 27, 2013

This update contains the following changes:

  • The following properties have changed in the liveBroadcast resource:

    • The startWithSlateCuepoint property has been renamed to startWithSlate.
    • The enableArchive property has been renamed to recordFromStart.
    • The slateSettings object has been deprecated and removed from the documentation. Error messages related to the slateSettings object or its properties have also been removed. Finally, the "Displaying Slates" section of the Getting started guide has been removed.

  • The API no longer supports the ability to insert in-stream slates using the liveCuepoints.insert method. The following documents have been updated to reflect this change:

    • The index page, Getting started guide, and Life of a broadcast tutorial no longer mention this functionality.

    • The liveCuepoint resource's settings.cueType property no longer supports slate as a property value. (The only supported value is ad.

    • The liveCuepoint resource's settings.eventState property has been deprecated and removed from the documentation.

March 18, 2013

This update contains the following changes:

  • All of the API's error messages have been updated to more clearly explain possible errors and, when possible, offer guidance about how to fix them.

  • The API may now return several new errors. The list below identifies the error and the API method that might return that error:

    • liveBroadcasts.insert – A broadcast's scheduled end time must be after its scheduled start time.
    • liveBroadcasts.insert – The broadcast specifies an invalid privacy status.
    • liveBroadcasts.update – The resource does not contain or does not set a value for the contentDetails.enableArchive property.
    • liveBroadcasts.update – The resource does not contain or does not set a value for the contentDetails.enableContentEncryption property.
    • liveBroadcasts.update – The resource does not contain or does not set a value for the contentDetails.enableDvr property.
    • liveStreams.insert – The snippet title must be between 1 and 128 characters long.
    • liveStreams.update – The resource does not contain or does not set a value for the snippet.title property.

  • The liveStream resource documentation has been updated to reflect that multicast and WebM are not supported ingestion methods as previously indicated. The list of formats for the cdn.format property has been updated accordingly, and the cdn.multicastIngestionInfo object and its child properties have been removed from the resource's documentation. In addition, http has been removed from the list of supported cdn.ingestionType values.