Skip to main content
POST
/
v1
/
videos
/
{id}
/
clips
/
{clipId}
/
blurs
Add a blur to a clip
curl --request POST \
  --url https://api.tella.com/v1/videos/{id}/clips/{clipId}/blurs \
  --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}/blurs"

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}/blurs', 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}/blurs",
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}/blurs"

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}/blurs")
.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}/blurs")

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

Authorization
string
header
required

API key obtained from your Tella account settings

Path Parameters

id
string
required

Video identifier

Example:

"vid_abc123def456"

clipId
string
required

Clip identifier

Example:

"cl_xyz789ghi012"

Body

application/json

Add a blur or highlight mask. Always targets the subject screen layer. Times are in ms on the clip's playback timeline (cuts applied).

dimensions
object
required

Size of the masked rectangle (percentages)

durationMs
integer
required
Required range: x <= 9007199254740991
Example:

2000

point
object
required

Top-left corner of the masked rectangle (percentages)

startTimeMs
integer
required

Start time in ms on the clip's playback timeline (cuts applied)

Required range: 0 <= x <= 9007199254740991
Example:

1000

Response

OK

A mask on a clip

mask
object
required

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.