curl --request POST \
--url https://api.tella.com/v1/videos/{id}/clips/{clipId}/highlights \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"dimensions": {
"heightPct": 50,
"widthPct": 50
},
"durationMs": 2000,
"point": {
"xPct": 25,
"yPct": 25
},
"startTimeMs": 1000
}
'import requests
url = "https://api.tella.com/v1/videos/{id}/clips/{clipId}/highlights"
payload = {
"dimensions": {
"heightPct": 50,
"widthPct": 50
},
"durationMs": 2000,
"point": {
"xPct": 25,
"yPct": 25
},
"startTimeMs": 1000
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
dimensions: {heightPct: 50, widthPct: 50},
durationMs: 2000,
point: {xPct: 25, yPct: 25},
startTimeMs: 1000
})
};
fetch('https://api.tella.com/v1/videos/{id}/clips/{clipId}/highlights', 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}/highlights",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'dimensions' => [
'heightPct' => 50,
'widthPct' => 50
],
'durationMs' => 2000,
'point' => [
'xPct' => 25,
'yPct' => 25
],
'startTimeMs' => 1000
]),
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}/highlights"
payload := strings.NewReader("{\n \"dimensions\": {\n \"heightPct\": 50,\n \"widthPct\": 50\n },\n \"durationMs\": 2000,\n \"point\": {\n \"xPct\": 25,\n \"yPct\": 25\n },\n \"startTimeMs\": 1000\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.tella.com/v1/videos/{id}/clips/{clipId}/highlights")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"dimensions\": {\n \"heightPct\": 50,\n \"widthPct\": 50\n },\n \"durationMs\": 2000,\n \"point\": {\n \"xPct\": 25,\n \"yPct\": 25\n },\n \"startTimeMs\": 1000\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tella.com/v1/videos/{id}/clips/{clipId}/highlights")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"dimensions\": {\n \"heightPct\": 50,\n \"widthPct\": 50\n },\n \"durationMs\": 2000,\n \"point\": {\n \"xPct\": 25,\n \"yPct\": 25\n },\n \"startTimeMs\": 1000\n}"
response = http.request(request)
puts response.read_body{
"mask": {
"dimensions": {
"heightPct": 50,
"widthPct": 50
},
"durationMs": 2000,
"id": "ly_abc123",
"point": {
"xPct": 25,
"yPct": 25
},
"startTimeMs": 1000,
"type": "blur"
}
}{
"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."
}
}Add a highlight to a clip
Adds a highlight mask to a clip. Always targets the subject screen layer (the only supported target).
curl --request POST \
--url https://api.tella.com/v1/videos/{id}/clips/{clipId}/highlights \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"dimensions": {
"heightPct": 50,
"widthPct": 50
},
"durationMs": 2000,
"point": {
"xPct": 25,
"yPct": 25
},
"startTimeMs": 1000
}
'import requests
url = "https://api.tella.com/v1/videos/{id}/clips/{clipId}/highlights"
payload = {
"dimensions": {
"heightPct": 50,
"widthPct": 50
},
"durationMs": 2000,
"point": {
"xPct": 25,
"yPct": 25
},
"startTimeMs": 1000
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
dimensions: {heightPct: 50, widthPct: 50},
durationMs: 2000,
point: {xPct: 25, yPct: 25},
startTimeMs: 1000
})
};
fetch('https://api.tella.com/v1/videos/{id}/clips/{clipId}/highlights', 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}/highlights",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'dimensions' => [
'heightPct' => 50,
'widthPct' => 50
],
'durationMs' => 2000,
'point' => [
'xPct' => 25,
'yPct' => 25
],
'startTimeMs' => 1000
]),
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}/highlights"
payload := strings.NewReader("{\n \"dimensions\": {\n \"heightPct\": 50,\n \"widthPct\": 50\n },\n \"durationMs\": 2000,\n \"point\": {\n \"xPct\": 25,\n \"yPct\": 25\n },\n \"startTimeMs\": 1000\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.tella.com/v1/videos/{id}/clips/{clipId}/highlights")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"dimensions\": {\n \"heightPct\": 50,\n \"widthPct\": 50\n },\n \"durationMs\": 2000,\n \"point\": {\n \"xPct\": 25,\n \"yPct\": 25\n },\n \"startTimeMs\": 1000\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tella.com/v1/videos/{id}/clips/{clipId}/highlights")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"dimensions\": {\n \"heightPct\": 50,\n \"widthPct\": 50\n },\n \"durationMs\": 2000,\n \"point\": {\n \"xPct\": 25,\n \"yPct\": 25\n },\n \"startTimeMs\": 1000\n}"
response = http.request(request)
puts response.read_body{
"mask": {
"dimensions": {
"heightPct": 50,
"widthPct": 50
},
"durationMs": 2000,
"id": "ly_abc123",
"point": {
"xPct": 25,
"yPct": 25
},
"startTimeMs": 1000,
"type": "blur"
}
}{
"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
Add a blur or highlight mask. Always targets the subject screen layer. Times are in ms on the clip's playback timeline (cuts applied).
Size of the masked rectangle (percentages)
Show child attributes
Show child attributes
x <= 90071992547409912000
Top-left corner of the masked rectangle (percentages)
Show child attributes
Show child attributes
Start time in ms on the clip's playback timeline (cuts applied)
0 <= x <= 90071992547409911000
Response
OK
A mask on a clip
A blur or highlight mask on a clip. Times are in ms on the clip's playback timeline (cuts applied). Internally the mask stays anchored to the footage, so it doesn't drift when cuts change later.
Show child attributes
Show child attributes
Was this page helpful?