<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</a> . <a href="youtube_v3.captions.html">captions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(id, onBehalfOf=None, onBehalfOfContentOwner=None)</a></code></p>
<p class="firstline">Deletes a specified caption track.</p>
<p class="toc_element">
  <code><a href="#download">download(id, onBehalfOf=None, tlang=None, onBehalfOfContentOwner=None, tfmt=None)</a></code></p>
<p class="firstline">Downloads a caption track. The caption track is returned in its original format unless the request specifies a value for the tfmt parameter and in its original language unless the request specifies a value for the tlang parameter.</p>
<p class="toc_element">
  <code><a href="#download_media">download_media(id, onBehalfOf=None, tlang=None, onBehalfOfContentOwner=None, tfmt=None)</a></code></p>
<p class="firstline">Downloads a caption track. The caption track is returned in its original format unless the request specifies a value for the tfmt parameter and in its original language unless the request specifies a value for the tlang parameter.</p>
<p class="toc_element">
  <code><a href="#insert">insert(part, body=None, media_body=None, onBehalfOf=None, sync=None, onBehalfOfContentOwner=None)</a></code></p>
<p class="firstline">Uploads a caption track.</p>
<p class="toc_element">
  <code><a href="#list">list(part, videoId, onBehalfOf=None, onBehalfOfContentOwner=None, id=None)</a></code></p>
<p class="firstline">Returns a list of caption tracks that are associated with a specified video. Note that the API response does not contain the actual captions and that the captions.download method provides the ability to retrieve a caption track.</p>
<p class="toc_element">
  <code><a href="#update">update(part, body=None, media_body=None, onBehalfOf=None, sync=None, onBehalfOfContentOwner=None)</a></code></p>
<p class="firstline">Updates a caption track. When updating a caption track, you can change the track's draft status, upload a new caption file for the track, or both.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(id, onBehalfOf=None, onBehalfOfContentOwner=None)</code>
  <pre>Deletes a specified caption track.

Args:
  id: string, The id parameter identifies the caption track that is being deleted. The value is a caption track ID as identified by the id property in a caption resource. (required)
  onBehalfOf: string, ID of the Google+ Page for the channel that the request is be on behalf of
  onBehalfOfContentOwner: string, Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwner parameter indicates that the request'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 actual CMS account that the user authenticates with must be linked to the specified YouTube content owner.
</pre>
</div>

<div class="method">
    <code class="details" id="download">download(id, onBehalfOf=None, tlang=None, onBehalfOfContentOwner=None, tfmt=None)</code>
  <pre>Downloads a caption track. The caption track is returned in its original format unless the request specifies a value for the tfmt parameter and in its original language unless the request specifies a value for the tlang parameter.

Args:
  id: string, The id parameter identifies the caption track that is being retrieved. The value is a caption track ID as identified by the id property in a caption resource. (required)
  onBehalfOf: string, ID of the Google+ Page for the channel that the request is be on behalf of
  tlang: string, The tlang parameter specifies that the API response should return a translation of the specified caption track. The parameter value is an ISO 639-1 two-letter language code that identifies the desired caption language. The translation is generated by using machine translation, such as Google Translate.
  onBehalfOfContentOwner: string, Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwner parameter indicates that the request'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 actual CMS account that the user authenticates with must be linked to the specified YouTube content owner.
  tfmt: string, The tfmt parameter specifies that the caption track should be returned in a specific format. If the parameter is not included in the request, the track is returned in its original format.
    Allowed values
      sbv - SubViewer subtitle.
      scc - Scenarist Closed Caption format.
      srt - SubRip subtitle.
      ttml - Timed Text Markup Language caption.
      vtt - Web Video Text Tracks caption.
</pre>
</div>

<div class="method">
    <code class="details" id="download_media">download_media(id, onBehalfOf=None, tlang=None, onBehalfOfContentOwner=None, tfmt=None)</code>
  <pre>Downloads a caption track. The caption track is returned in its original format unless the request specifies a value for the tfmt parameter and in its original language unless the request specifies a value for the tlang parameter.

Args:
  id: string, The id parameter identifies the caption track that is being retrieved. The value is a caption track ID as identified by the id property in a caption resource. (required)
  onBehalfOf: string, ID of the Google+ Page for the channel that the request is be on behalf of
  tlang: string, The tlang parameter specifies that the API response should return a translation of the specified caption track. The parameter value is an ISO 639-1 two-letter language code that identifies the desired caption language. The translation is generated by using machine translation, such as Google Translate.
  onBehalfOfContentOwner: string, Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwner parameter indicates that the request'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 actual CMS account that the user authenticates with must be linked to the specified YouTube content owner.
  tfmt: string, The tfmt parameter specifies that the caption track should be returned in a specific format. If the parameter is not included in the request, the track is returned in its original format.
    Allowed values
      sbv - SubViewer subtitle.
      scc - Scenarist Closed Caption format.
      srt - SubRip subtitle.
      ttml - Timed Text Markup Language caption.
      vtt - Web Video Text Tracks caption.
</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(part, body=None, media_body=None, onBehalfOf=None, sync=None, onBehalfOfContentOwner=None)</code>
  <pre>Uploads a caption track.

Args:
  part: string, The part parameter specifies the caption resource parts that the API response will include. Set the parameter value to snippet. (required)
  body: object, The request body.
    The object takes the form of:

{ # A caption resource represents a YouTube caption track. A caption track is associated with exactly one YouTube video.
    "snippet": { # Basic details about a caption track, such as its language and name. # The snippet object contains basic details about the caption.
      "status": "A String", # The caption track's status.
      "audioTrackType": "A String", # The type of audio track associated with the caption track.
      "language": "A String", # The language of the caption track. The property value is a BCP-47 language tag.
      "name": "A String", # The name of the caption track. The name is intended to be visible to the user as an option during playback.
      "videoId": "A String", # The ID that YouTube uses to uniquely identify the video associated with the caption track.
      "isDraft": True or False, # Indicates whether the caption track is a draft. If the value is true, then the track is not publicly visible. The default value is false.
      "isAutoSynced": True or False, # Indicates whether YouTube synchronized the caption track to the audio track in the video. The value will be true if a sync was explicitly requested when the caption track was uploaded. For example, when calling the captions.insert or captions.update methods, you can set the sync parameter to true to instruct YouTube to sync the uploaded track to the video. If the value is false, YouTube uses the time codes in the uploaded caption track to determine when to display captions.
      "trackKind": "A String", # The caption track's type.
      "lastUpdated": "A String", # The date and time when the caption track was last updated. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
      "isCC": True or False, # Indicates whether the track contains closed captions for the deaf and hard of hearing. The default value is false.
      "isEasyReader": True or False, # Indicates whether caption track is formatted for "easy reader," meaning it is at a third-grade level for language learners. The default value is false.
      "isLarge": True or False, # Indicates whether the caption track uses large text for the vision-impaired. The default value is false.
      "failureReason": "A String", # The reason that YouTube failed to process the caption track. This property is only present if the state property's value is failed.
    },
    "kind": "youtube#caption", # Identifies what kind of resource this is. Value: the fixed string "youtube#caption".
    "etag": "A String", # Etag of this resource.
    "id": "A String", # The ID that YouTube uses to uniquely identify the caption track.
  }

  media_body: string, The filename of the media request body, or an instance of a MediaUpload object.
  onBehalfOf: string, ID of the Google+ Page for the channel that the request is be on behalf of
  sync: boolean, The sync parameter indicates whether YouTube should automatically synchronize the caption file with the audio track of the video. If you set the value to true, YouTube will disregard any time codes that are in the uploaded caption file and generate new time codes for the captions.

You should set the sync parameter to true if you are uploading a transcript, which has no time codes, or if you suspect the time codes in your file are incorrect and want YouTube to try to fix them.
  onBehalfOfContentOwner: string, Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwner parameter indicates that the request'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 actual CMS account that the user authenticates with must be linked to the specified YouTube content owner.

Returns:
  An object of the form:

    { # A caption resource represents a YouTube caption track. A caption track is associated with exactly one YouTube video.
      "snippet": { # Basic details about a caption track, such as its language and name. # The snippet object contains basic details about the caption.
        "status": "A String", # The caption track's status.
        "audioTrackType": "A String", # The type of audio track associated with the caption track.
        "language": "A String", # The language of the caption track. The property value is a BCP-47 language tag.
        "name": "A String", # The name of the caption track. The name is intended to be visible to the user as an option during playback.
        "videoId": "A String", # The ID that YouTube uses to uniquely identify the video associated with the caption track.
        "isDraft": True or False, # Indicates whether the caption track is a draft. If the value is true, then the track is not publicly visible. The default value is false.
        "isAutoSynced": True or False, # Indicates whether YouTube synchronized the caption track to the audio track in the video. The value will be true if a sync was explicitly requested when the caption track was uploaded. For example, when calling the captions.insert or captions.update methods, you can set the sync parameter to true to instruct YouTube to sync the uploaded track to the video. If the value is false, YouTube uses the time codes in the uploaded caption track to determine when to display captions.
        "trackKind": "A String", # The caption track's type.
        "lastUpdated": "A String", # The date and time when the caption track was last updated. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
        "isCC": True or False, # Indicates whether the track contains closed captions for the deaf and hard of hearing. The default value is false.
        "isEasyReader": True or False, # Indicates whether caption track is formatted for "easy reader," meaning it is at a third-grade level for language learners. The default value is false.
        "isLarge": True or False, # Indicates whether the caption track uses large text for the vision-impaired. The default value is false.
        "failureReason": "A String", # The reason that YouTube failed to process the caption track. This property is only present if the state property's value is failed.
      },
      "kind": "youtube#caption", # Identifies what kind of resource this is. Value: the fixed string "youtube#caption".
      "etag": "A String", # Etag of this resource.
      "id": "A String", # The ID that YouTube uses to uniquely identify the caption track.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(part, videoId, onBehalfOf=None, onBehalfOfContentOwner=None, id=None)</code>
  <pre>Returns a list of caption tracks that are associated with a specified video. Note that the API response does not contain the actual captions and that the captions.download method provides the ability to retrieve a caption track.

Args:
  part: string, The part parameter specifies a comma-separated list of one or more caption resource parts that the API response will include. The part names that you can include in the parameter value are id and snippet. (required)
  videoId: string, The videoId parameter specifies the YouTube video ID of the video for which the API should return caption tracks. (required)
  onBehalfOf: string, ID of the Google+ Page for the channel that the request is on behalf of.
  onBehalfOfContentOwner: string, Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwner parameter indicates that the request'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 actual CMS account that the user authenticates with must be linked to the specified YouTube content owner.
  id: string, The id parameter specifies a comma-separated list of IDs that identify the caption resources that should be retrieved. Each ID must identify a caption track associated with the specified video.

Returns:
  An object of the form:

    {
    "eventId": "A String", # Serialized EventId of the request which produced this response.
    "items": [ # A list of captions that match the request criteria.
      { # A caption resource represents a YouTube caption track. A caption track is associated with exactly one YouTube video.
          "snippet": { # Basic details about a caption track, such as its language and name. # The snippet object contains basic details about the caption.
            "status": "A String", # The caption track's status.
            "audioTrackType": "A String", # The type of audio track associated with the caption track.
            "language": "A String", # The language of the caption track. The property value is a BCP-47 language tag.
            "name": "A String", # The name of the caption track. The name is intended to be visible to the user as an option during playback.
            "videoId": "A String", # The ID that YouTube uses to uniquely identify the video associated with the caption track.
            "isDraft": True or False, # Indicates whether the caption track is a draft. If the value is true, then the track is not publicly visible. The default value is false.
            "isAutoSynced": True or False, # Indicates whether YouTube synchronized the caption track to the audio track in the video. The value will be true if a sync was explicitly requested when the caption track was uploaded. For example, when calling the captions.insert or captions.update methods, you can set the sync parameter to true to instruct YouTube to sync the uploaded track to the video. If the value is false, YouTube uses the time codes in the uploaded caption track to determine when to display captions.
            "trackKind": "A String", # The caption track's type.
            "lastUpdated": "A String", # The date and time when the caption track was last updated. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
            "isCC": True or False, # Indicates whether the track contains closed captions for the deaf and hard of hearing. The default value is false.
            "isEasyReader": True or False, # Indicates whether caption track is formatted for "easy reader," meaning it is at a third-grade level for language learners. The default value is false.
            "isLarge": True or False, # Indicates whether the caption track uses large text for the vision-impaired. The default value is false.
            "failureReason": "A String", # The reason that YouTube failed to process the caption track. This property is only present if the state property's value is failed.
          },
          "kind": "youtube#caption", # Identifies what kind of resource this is. Value: the fixed string "youtube#caption".
          "etag": "A String", # Etag of this resource.
          "id": "A String", # The ID that YouTube uses to uniquely identify the caption track.
        },
    ],
    "kind": "youtube#captionListResponse", # Identifies what kind of resource this is. Value: the fixed string "youtube#captionListResponse".
    "etag": "A String", # Etag of this resource.
    "visitorId": "A String", # The visitorId identifies the visitor.
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(part, body=None, media_body=None, onBehalfOf=None, sync=None, onBehalfOfContentOwner=None)</code>
  <pre>Updates a caption track. When updating a caption track, you can change the track's draft status, upload a new caption file for the track, or both.

Args:
  part: string, The part 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. Set the property value to snippet if you are updating the track's draft status. Otherwise, set the property value to id. (required)
  body: object, The request body.
    The object takes the form of:

{ # A caption resource represents a YouTube caption track. A caption track is associated with exactly one YouTube video.
    "snippet": { # Basic details about a caption track, such as its language and name. # The snippet object contains basic details about the caption.
      "status": "A String", # The caption track's status.
      "audioTrackType": "A String", # The type of audio track associated with the caption track.
      "language": "A String", # The language of the caption track. The property value is a BCP-47 language tag.
      "name": "A String", # The name of the caption track. The name is intended to be visible to the user as an option during playback.
      "videoId": "A String", # The ID that YouTube uses to uniquely identify the video associated with the caption track.
      "isDraft": True or False, # Indicates whether the caption track is a draft. If the value is true, then the track is not publicly visible. The default value is false.
      "isAutoSynced": True or False, # Indicates whether YouTube synchronized the caption track to the audio track in the video. The value will be true if a sync was explicitly requested when the caption track was uploaded. For example, when calling the captions.insert or captions.update methods, you can set the sync parameter to true to instruct YouTube to sync the uploaded track to the video. If the value is false, YouTube uses the time codes in the uploaded caption track to determine when to display captions.
      "trackKind": "A String", # The caption track's type.
      "lastUpdated": "A String", # The date and time when the caption track was last updated. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
      "isCC": True or False, # Indicates whether the track contains closed captions for the deaf and hard of hearing. The default value is false.
      "isEasyReader": True or False, # Indicates whether caption track is formatted for "easy reader," meaning it is at a third-grade level for language learners. The default value is false.
      "isLarge": True or False, # Indicates whether the caption track uses large text for the vision-impaired. The default value is false.
      "failureReason": "A String", # The reason that YouTube failed to process the caption track. This property is only present if the state property's value is failed.
    },
    "kind": "youtube#caption", # Identifies what kind of resource this is. Value: the fixed string "youtube#caption".
    "etag": "A String", # Etag of this resource.
    "id": "A String", # The ID that YouTube uses to uniquely identify the caption track.
  }

  media_body: string, The filename of the media request body, or an instance of a MediaUpload object.
  onBehalfOf: string, ID of the Google+ Page for the channel that the request is be on behalf of
  sync: boolean, Note: The API server only processes the parameter value if the request contains an updated caption file.

The sync parameter indicates whether YouTube should automatically synchronize the caption file with the audio track of the video. If you set the value to true, YouTube will automatically synchronize the caption track with the audio track.
  onBehalfOfContentOwner: string, Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwner parameter indicates that the request'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 actual CMS account that the user authenticates with must be linked to the specified YouTube content owner.

Returns:
  An object of the form:

    { # A caption resource represents a YouTube caption track. A caption track is associated with exactly one YouTube video.
      "snippet": { # Basic details about a caption track, such as its language and name. # The snippet object contains basic details about the caption.
        "status": "A String", # The caption track's status.
        "audioTrackType": "A String", # The type of audio track associated with the caption track.
        "language": "A String", # The language of the caption track. The property value is a BCP-47 language tag.
        "name": "A String", # The name of the caption track. The name is intended to be visible to the user as an option during playback.
        "videoId": "A String", # The ID that YouTube uses to uniquely identify the video associated with the caption track.
        "isDraft": True or False, # Indicates whether the caption track is a draft. If the value is true, then the track is not publicly visible. The default value is false.
        "isAutoSynced": True or False, # Indicates whether YouTube synchronized the caption track to the audio track in the video. The value will be true if a sync was explicitly requested when the caption track was uploaded. For example, when calling the captions.insert or captions.update methods, you can set the sync parameter to true to instruct YouTube to sync the uploaded track to the video. If the value is false, YouTube uses the time codes in the uploaded caption track to determine when to display captions.
        "trackKind": "A String", # The caption track's type.
        "lastUpdated": "A String", # The date and time when the caption track was last updated. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
        "isCC": True or False, # Indicates whether the track contains closed captions for the deaf and hard of hearing. The default value is false.
        "isEasyReader": True or False, # Indicates whether caption track is formatted for "easy reader," meaning it is at a third-grade level for language learners. The default value is false.
        "isLarge": True or False, # Indicates whether the caption track uses large text for the vision-impaired. The default value is false.
        "failureReason": "A String", # The reason that YouTube failed to process the caption track. This property is only present if the state property's value is failed.
      },
      "kind": "youtube#caption", # Identifies what kind of resource this is. Value: the fixed string "youtube#caption".
      "etag": "A String", # Etag of this resource.
      "id": "A String", # The ID that YouTube uses to uniquely identify the caption track.
    }</pre>
</div>

</body></html>