Skip to main content
PUT
/
libraries
/
{libraryId}
/
videos
/
{videoId}
/
subtitles
/
{subtitleId}
Update Subtitle
curl --request PUT \
  --url https://api.tenbyte.io/v1/vidinfra/libraries/{libraryId}/videos/{videoId}/subtitles/{subtitleId} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: multipart/form-data' \
  --form title=English \
  --form language=en \
  --form file='@example-file'
import requests

url = "https://api.tenbyte.io/v1/vidinfra/libraries/{libraryId}/videos/{videoId}/subtitles/{subtitleId}"

files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"title": "English",
"language": "en"
}
headers = {"Authorization": "Bearer <token>"}

response = requests.put(url, data=payload, files=files, headers=headers)

print(response.text)
const form = new FormData();
form.append('title', 'English');
form.append('language', 'en');
form.append('file', 'file:///home/rob/Downloads/avatar.(2009).bur.1cd.(10182616)/english.srt');

const options = {method: 'PUT', headers: {Authorization: 'Bearer <token>'}};

options.body = form;

fetch('https://api.tenbyte.io/v1/vidinfra/libraries/{libraryId}/videos/{videoId}/subtitles/{subtitleId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.tenbyte.io/v1/vidinfra/libraries/{libraryId}/videos/{videoId}/subtitles/{subtitleId}"

payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\nEnglish\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nfile:///home/rob/Downloads/avatar.(2009).bur.1cd.(10182616)/english.srt\r\n-----011000010111000001101001--")

req, _ := http.NewRequest("PUT", url, payload)

req.Header.Add("Authorization", "Bearer <token>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
require 'uri'
require 'net/http'

url = URI("https://api.tenbyte.io/v1/vidinfra/libraries/{libraryId}/videos/{videoId}/subtitles/{subtitleId}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\nEnglish\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nfile:///home/rob/Downloads/avatar.(2009).bur.1cd.(10182616)/english.srt\r\n-----011000010111000001101001--"

response = http.request(request)
puts response.read_body
HttpResponse<String> response = Unirest.put("https://api.tenbyte.io/v1/vidinfra/libraries/{libraryId}/videos/{videoId}/subtitles/{subtitleId}")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\nEnglish\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nfile:///home/rob/Downloads/avatar.(2009).bur.1cd.(10182616)/english.srt\r\n-----011000010111000001101001--")
.asString();
using RestSharp;


var options = new RestClientOptions("https://api.tenbyte.io/v1/vidinfra/libraries/{libraryId}/videos/{videoId}/subtitles/{subtitleId}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AlwaysMultipartFormData = true;
request.AddHeader("Authorization", "Bearer <token>");
request.FormBoundary = "---011000010111000001101001";
request.AddParameter("title", "English");
request.AddParameter("language", "en");
request.AddFile("file", "example-file");
var response = await client.PutAsync(request);

Console.WriteLine("{0}", response.Content);
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tenbyte.io/v1/vidinfra/libraries/{libraryId}/videos/{videoId}/subtitles/{subtitleId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\nEnglish\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nfile:///home/rob/Downloads/avatar.(2009).bur.1cd.(10182616)/english.srt\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
{
  "id": "5c24d2b3-8c17-4d58-b96e-18b7cb9e2a41",
  "video_id": "c36f981d-9b53-4f45-9b4f-3d03a94e2a63",
  "title": "English Subtitle",
  "language": "en",
  "path": "en.vtt",
  "created_at": "2025-11-10T12:40:00Z",
  "updated_at": "2025-11-10T12:45:00Z",
  "deleted_at": null
}
{
"message": "Invalid Request",
"success": false
}
{
"code": "auth_type_not_found",
"message": "Could not determine authentication type from request. Please provide a valid Authorization header or X-API-Key header.",
"success": false
}
{
"message": "Resource not found",
"success": false
}
{
"message": "Invalid Request",
"errors": [
{
"field": "field_name",
"code": "validation_required",
"message": "This field is required"
}
],
"success": false
}
{
"message": "Internal server error",
"success": false
}

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

libraryId
string
required

Unique identifier of the library.

videoId
string
required

Unique identifier of the targeted video resource.

subtitleId
string
required

Unique identifier of the subtitle.

Body

multipart/form-data
title
string

The display name of the subtitle file (e.g., English).

Example:

"English"

language
string

Language code of the subtitle (e.g., en, es, fr).

Example:

"en"

file
file

The actual subtitle file to upload, usually in .srt or .vtt format.

Response

id
string
required
video_id
string
required
title
string
required
language
string
required
path
string
required
created_at
string
required
updated_at
string
required
deleted_at
string
required