Skip to content
Start here

Upload captions or subtitles

client.Stream.Captions.Language.Update(ctx, identifier, language, params) (*Caption, error)
PUT/accounts/{account_id}/stream/{identifier}/captions/{language}

Uploads the caption or subtitle file to the endpoint for a specific BCP47 language. One caption or subtitle file per language is allowed.

Security
API Token

The preferred authorization scheme for interacting with the Cloudflare API. Create a token.

Example:Authorization: Bearer Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY
API Email + API Key

The previous authorization scheme for interacting with the Cloudflare API, used in conjunction with a Global API key.

Example:X-Auth-Email: user@example.com

The previous authorization scheme for interacting with the Cloudflare API. When possible, use API tokens instead of Global API keys.

Example:X-Auth-Key: 144c9defac04969c7bfad8efaa8ea194
Accepted Permissions (at least one required)
Stream Write
ParametersExpand Collapse
identifier string

A Cloudflare-generated unique identifier for a media item.

maxLength32
language string

The language tag in BCP 47 format.

params CaptionLanguageUpdateParams
AccountID param.Field[string]

Path param: Identifier.

maxLength32
File param.Field[string]

Body param: The WebVTT file containing the caption or subtitle content.

ReturnsExpand Collapse
type Caption struct{…}
Generated booloptional

Whether the caption was generated via AI.

Label stringoptional

The language label displayed in the native language to users.

Language stringoptional

The language tag in BCP 47 format.

Status CaptionStatusoptional

The status of a generated caption.

One of the following:
const CaptionStatusReady CaptionStatus = "ready"
const CaptionStatusInprogress CaptionStatus = "inprogress"
const CaptionStatusError CaptionStatus = "error"

Upload captions or subtitles

package main

import (
  "context"
  "fmt"

  "github.com/cloudflare/cloudflare-go"
  "github.com/cloudflare/cloudflare-go/option"
  "github.com/cloudflare/cloudflare-go/stream"
)

func main() {
  client := cloudflare.NewClient(
    option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"),
  )
  caption, err := client.Stream.Captions.Language.Update(
    context.TODO(),
    "ea95132c15732412d22c1476fa83f27a",
    "tr",
    stream.CaptionLanguageUpdateParams{
      AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"),
      File: cloudflare.F("@/Users/kyle/Desktop/tr.vtt"),
    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", caption.Generated)
}
{
  "errors": [
    {
      "code": 1000,
      "message": "message",
      "documentation_url": "documentation_url",
      "source": {
        "pointer": "pointer"
      }
    }
  ],
  "messages": [
    {
      "code": 1000,
      "message": "message",
      "documentation_url": "documentation_url",
      "source": {
        "pointer": "pointer"
      }
    }
  ],
  "success": true,
  "result": {
    "generated": true,
    "label": "Türkçe",
    "language": "tr",
    "status": "ready"
  }
}
Returns Examples
{
  "errors": [
    {
      "code": 1000,
      "message": "message",
      "documentation_url": "documentation_url",
      "source": {
        "pointer": "pointer"
      }
    }
  ],
  "messages": [
    {
      "code": 1000,
      "message": "message",
      "documentation_url": "documentation_url",
      "source": {
        "pointer": "pointer"
      }
    }
  ],
  "success": true,
  "result": {
    "generated": true,
    "label": "Türkçe",
    "language": "tr",
    "status": "ready"
  }
}