curl --request PATCH \
--url https://api.tella.com/v1/videos/{id}/clips/{clipId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"cuts": [
{
"durationMs": 750,
"startTimeMs": 1500
}
],
"name": "Updated intro",
"order": 2,
"studioSound": false
}
'import requests
url = "https://api.tella.com/v1/videos/{id}/clips/{clipId}"
payload = {
"cuts": [
{
"durationMs": 750,
"startTimeMs": 1500
}
],
"name": "Updated intro",
"order": 2,
"studioSound": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
cuts: [{durationMs: 750, startTimeMs: 1500}],
name: 'Updated intro',
order: 2,
studioSound: false
})
};
fetch('https://api.tella.com/v1/videos/{id}/clips/{clipId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tella.com/v1/videos/{id}/clips/{clipId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'cuts' => [
[
'durationMs' => 750,
'startTimeMs' => 1500
]
],
'name' => 'Updated intro',
'order' => 2,
'studioSound' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tella.com/v1/videos/{id}/clips/{clipId}"
payload := strings.NewReader("{\n \"cuts\": [\n {\n \"durationMs\": 750,\n \"startTimeMs\": 1500\n }\n ],\n \"name\": \"Updated intro\",\n \"order\": 2,\n \"studioSound\": false\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.tella.com/v1/videos/{id}/clips/{clipId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"cuts\": [\n {\n \"durationMs\": 750,\n \"startTimeMs\": 1500\n }\n ],\n \"name\": \"Updated intro\",\n \"order\": 2,\n \"studioSound\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tella.com/v1/videos/{id}/clips/{clipId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"cuts\": [\n {\n \"durationMs\": 750,\n \"startTimeMs\": 1500\n }\n ],\n \"name\": \"Updated intro\",\n \"order\": 2,\n \"studioSound\": false\n}"
response = http.request(request)
puts response.read_body{
"clip": {
"background": {
"type": "solid",
"color": "#000000ff",
"gradientAngle": 45,
"gradientColor1": "#ff0080ff",
"gradientColor2": "#7928caff",
"imageUrl": "https://cdn.example.com/bg.png",
"sourceId": "su_abc123",
"videoDurationSeconds": 12.4,
"videoUrl": "https://cdn.example.com/bg.mp4"
},
"createdAt": "2026-01-15T10:30:00.000Z",
"cuts": [
{
"durationMs": 750,
"startTimeMs": 1500
}
],
"durationSeconds": 12.5,
"id": "cl_xyz789ghi012",
"layoutSceneType": "combi",
"maxDurationSeconds": 14.2,
"name": "Intro",
"order": 0,
"studioSound": false,
"updatedAt": "2026-01-15T14:45:00.000Z",
"videoId": "vid_abc123def456"
}
}{
"error": {
"code": "bad_request",
"doc_url": "https://tella.tv/docs/api-reference/errors#bad-request",
"message": "The request was malformed or contained invalid parameters."
}
}{
"error": {
"code": "unauthorized",
"doc_url": "https://tella.tv/docs/api-reference/errors#unauthorized",
"message": "Authentication is required. Provide a valid API key."
}
}{
"error": {
"code": "forbidden",
"doc_url": "https://tella.tv/docs/api-reference/errors#forbidden",
"message": "You don't have permission to access this resource."
}
}{
"error": {
"code": "not_found",
"doc_url": "https://tella.tv/docs/api-reference/errors#not-found",
"message": "The requested resource was not found."
}
}{
"error": {
"code": "unprocessable_entity",
"doc_url": "https://tella.tv/docs/api-reference/errors#unprocessable-entity",
"message": "The request was well-formed but contained semantic errors."
}
}{
"error": {
"code": "rate_limit_exceeded",
"doc_url": "https://tella.tv/docs/api-reference/errors#rate-limit-exceeded",
"message": "You have exceeded the rate limit. Please slow down."
}
}{
"error": {
"code": "internal_server_error",
"doc_url": "https://tella.tv/docs/api-reference/errors#internal-server-error",
"message": "An unexpected error occurred on the server."
}
}Update a clip
Update a clip’s name, ordering, cuts, background, or transition. At least one field must be provided.
curl --request PATCH \
--url https://api.tella.com/v1/videos/{id}/clips/{clipId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"cuts": [
{
"durationMs": 750,
"startTimeMs": 1500
}
],
"name": "Updated intro",
"order": 2,
"studioSound": false
}
'import requests
url = "https://api.tella.com/v1/videos/{id}/clips/{clipId}"
payload = {
"cuts": [
{
"durationMs": 750,
"startTimeMs": 1500
}
],
"name": "Updated intro",
"order": 2,
"studioSound": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
cuts: [{durationMs: 750, startTimeMs: 1500}],
name: 'Updated intro',
order: 2,
studioSound: false
})
};
fetch('https://api.tella.com/v1/videos/{id}/clips/{clipId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tella.com/v1/videos/{id}/clips/{clipId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'cuts' => [
[
'durationMs' => 750,
'startTimeMs' => 1500
]
],
'name' => 'Updated intro',
'order' => 2,
'studioSound' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tella.com/v1/videos/{id}/clips/{clipId}"
payload := strings.NewReader("{\n \"cuts\": [\n {\n \"durationMs\": 750,\n \"startTimeMs\": 1500\n }\n ],\n \"name\": \"Updated intro\",\n \"order\": 2,\n \"studioSound\": false\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.tella.com/v1/videos/{id}/clips/{clipId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"cuts\": [\n {\n \"durationMs\": 750,\n \"startTimeMs\": 1500\n }\n ],\n \"name\": \"Updated intro\",\n \"order\": 2,\n \"studioSound\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tella.com/v1/videos/{id}/clips/{clipId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"cuts\": [\n {\n \"durationMs\": 750,\n \"startTimeMs\": 1500\n }\n ],\n \"name\": \"Updated intro\",\n \"order\": 2,\n \"studioSound\": false\n}"
response = http.request(request)
puts response.read_body{
"clip": {
"background": {
"type": "solid",
"color": "#000000ff",
"gradientAngle": 45,
"gradientColor1": "#ff0080ff",
"gradientColor2": "#7928caff",
"imageUrl": "https://cdn.example.com/bg.png",
"sourceId": "su_abc123",
"videoDurationSeconds": 12.4,
"videoUrl": "https://cdn.example.com/bg.mp4"
},
"createdAt": "2026-01-15T10:30:00.000Z",
"cuts": [
{
"durationMs": 750,
"startTimeMs": 1500
}
],
"durationSeconds": 12.5,
"id": "cl_xyz789ghi012",
"layoutSceneType": "combi",
"maxDurationSeconds": 14.2,
"name": "Intro",
"order": 0,
"studioSound": false,
"updatedAt": "2026-01-15T14:45:00.000Z",
"videoId": "vid_abc123def456"
}
}{
"error": {
"code": "bad_request",
"doc_url": "https://tella.tv/docs/api-reference/errors#bad-request",
"message": "The request was malformed or contained invalid parameters."
}
}{
"error": {
"code": "unauthorized",
"doc_url": "https://tella.tv/docs/api-reference/errors#unauthorized",
"message": "Authentication is required. Provide a valid API key."
}
}{
"error": {
"code": "forbidden",
"doc_url": "https://tella.tv/docs/api-reference/errors#forbidden",
"message": "You don't have permission to access this resource."
}
}{
"error": {
"code": "not_found",
"doc_url": "https://tella.tv/docs/api-reference/errors#not-found",
"message": "The requested resource was not found."
}
}{
"error": {
"code": "unprocessable_entity",
"doc_url": "https://tella.tv/docs/api-reference/errors#unprocessable-entity",
"message": "The request was well-formed but contained semantic errors."
}
}{
"error": {
"code": "rate_limit_exceeded",
"doc_url": "https://tella.tv/docs/api-reference/errors#rate-limit-exceeded",
"message": "You have exceeded the rate limit. Please slow down."
}
}{
"error": {
"code": "internal_server_error",
"doc_url": "https://tella.tv/docs/api-reference/errors#internal-server-error",
"message": "An unexpected error occurred on the server."
}
}Authorizations
API key obtained from your Tella account settings
Path Parameters
Video identifier
"vid_abc123def456"
Clip identifier
"cl_xyz789ghi012"
Body
Request body for updating a clip. At least one field must be provided.
Clip background. Use type = 'solid' with color, type = 'image' or 'video' with sourceId (from POST /v1/sources), or type = 'gradient' with gradientColor1, gradientColor2, gradientAngle.
Show child attributes
Show child attributes
Replaces the clip's cuts. Total cut duration must be less than maxDurationSeconds.
Show child attributes
Show child attributes
New clip name
1 - 255"Updated intro"
New position of the clip within the video
0 <= x <= 90071992547409912
Per-clip Studio Sound opt-out. false disables enhanced audio for this clip while the video-level switch (see PATCH /v1/videos/{id} studioSound) stays on; true re-enables it.
false
Response
OK
Response shape for a single clip
A section of a video
Show child attributes
Show child attributes
Was this page helpful?