curl --request PATCH \
--url https://api.tella.com/v1/videos/{id}/clips/{clipId}/zooms/{zoomId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"durationMs": 4503599627370495,
"scale": 2,
"startTimeMs": 4503599627370495,
"type": "manualZoom"
}
'import requests
url = "https://api.tella.com/v1/videos/{id}/clips/{clipId}/zooms/{zoomId}"
payload = {
"durationMs": 4503599627370495,
"scale": 2,
"startTimeMs": 4503599627370495,
"type": "manualZoom"
}
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({
durationMs: 4503599627370495,
scale: 2,
startTimeMs: 4503599627370495,
type: 'manualZoom'
})
};
fetch('https://api.tella.com/v1/videos/{id}/clips/{clipId}/zooms/{zoomId}', 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}/zooms/{zoomId}",
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([
'durationMs' => 4503599627370495,
'scale' => 2,
'startTimeMs' => 4503599627370495,
'type' => 'manualZoom'
]),
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}/zooms/{zoomId}"
payload := strings.NewReader("{\n \"durationMs\": 4503599627370495,\n \"scale\": 2,\n \"startTimeMs\": 4503599627370495,\n \"type\": \"manualZoom\"\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}/zooms/{zoomId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"durationMs\": 4503599627370495,\n \"scale\": 2,\n \"startTimeMs\": 4503599627370495,\n \"type\": \"manualZoom\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tella.com/v1/videos/{id}/clips/{clipId}/zooms/{zoomId}")
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 \"durationMs\": 4503599627370495,\n \"scale\": 2,\n \"startTimeMs\": 4503599627370495,\n \"type\": \"manualZoom\"\n}"
response = http.request(request)
puts response.read_body{
"zoom": {
"durationMs": 2000,
"id": "ef_abc123",
"startTimeMs": 1000,
"type": "manualZoom",
"focusPoint": {
"xPct": 50,
"yPct": 50
},
"scale": 2
}
}{
"docsUrl": "https://docs.tella.com/",
"error": "bad_request",
"message": "The request was malformed or contained invalid parameters."
}{
"docsUrl": "https://docs.tella.com/",
"error": "unauthorized",
"message": "Authentication is required. Provide a valid API key."
}{
"docsUrl": "https://docs.tella.com/",
"error": "forbidden",
"message": "You don't have permission to access this resource."
}{
"docsUrl": "https://docs.tella.com/",
"error": "not_found",
"message": "The requested resource was not found."
}{
"docsUrl": "https://docs.tella.com/",
"error": "conflict",
"message": "The request conflicts with the resource's current state, e.g. an Idempotency-Key whose first request is still in progress. Retry once it settles."
}{
"docsUrl": "https://docs.tella.com/",
"error": "rate_limited",
"message": "You have exceeded the rate limit. Please slow down."
}{
"docsUrl": "https://docs.tella.com/",
"error": "server_error",
"message": "An unexpected error occurred"
}{
"docsUrl": "https://docs.tella.com/",
"error": "not_implemented",
"message": "The requested operation is not implemented."
}{
"docsUrl": "https://docs.tella.com/",
"error": "unavailable",
"message": "A dependency was unavailable and the request was not executed. Safe to resend unchanged after the Retry-After delay."
}Update a zoom
Update a zoom’s type, timing, focus point, or scale. Only the fields you send are changed.
curl --request PATCH \
--url https://api.tella.com/v1/videos/{id}/clips/{clipId}/zooms/{zoomId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"durationMs": 4503599627370495,
"scale": 2,
"startTimeMs": 4503599627370495,
"type": "manualZoom"
}
'import requests
url = "https://api.tella.com/v1/videos/{id}/clips/{clipId}/zooms/{zoomId}"
payload = {
"durationMs": 4503599627370495,
"scale": 2,
"startTimeMs": 4503599627370495,
"type": "manualZoom"
}
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({
durationMs: 4503599627370495,
scale: 2,
startTimeMs: 4503599627370495,
type: 'manualZoom'
})
};
fetch('https://api.tella.com/v1/videos/{id}/clips/{clipId}/zooms/{zoomId}', 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}/zooms/{zoomId}",
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([
'durationMs' => 4503599627370495,
'scale' => 2,
'startTimeMs' => 4503599627370495,
'type' => 'manualZoom'
]),
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}/zooms/{zoomId}"
payload := strings.NewReader("{\n \"durationMs\": 4503599627370495,\n \"scale\": 2,\n \"startTimeMs\": 4503599627370495,\n \"type\": \"manualZoom\"\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}/zooms/{zoomId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"durationMs\": 4503599627370495,\n \"scale\": 2,\n \"startTimeMs\": 4503599627370495,\n \"type\": \"manualZoom\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tella.com/v1/videos/{id}/clips/{clipId}/zooms/{zoomId}")
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 \"durationMs\": 4503599627370495,\n \"scale\": 2,\n \"startTimeMs\": 4503599627370495,\n \"type\": \"manualZoom\"\n}"
response = http.request(request)
puts response.read_body{
"zoom": {
"durationMs": 2000,
"id": "ef_abc123",
"startTimeMs": 1000,
"type": "manualZoom",
"focusPoint": {
"xPct": 50,
"yPct": 50
},
"scale": 2
}
}{
"docsUrl": "https://docs.tella.com/",
"error": "bad_request",
"message": "The request was malformed or contained invalid parameters."
}{
"docsUrl": "https://docs.tella.com/",
"error": "unauthorized",
"message": "Authentication is required. Provide a valid API key."
}{
"docsUrl": "https://docs.tella.com/",
"error": "forbidden",
"message": "You don't have permission to access this resource."
}{
"docsUrl": "https://docs.tella.com/",
"error": "not_found",
"message": "The requested resource was not found."
}{
"docsUrl": "https://docs.tella.com/",
"error": "conflict",
"message": "The request conflicts with the resource's current state, e.g. an Idempotency-Key whose first request is still in progress. Retry once it settles."
}{
"docsUrl": "https://docs.tella.com/",
"error": "rate_limited",
"message": "You have exceeded the rate limit. Please slow down."
}{
"docsUrl": "https://docs.tella.com/",
"error": "server_error",
"message": "An unexpected error occurred"
}{
"docsUrl": "https://docs.tella.com/",
"error": "not_implemented",
"message": "The requested operation is not implemented."
}{
"docsUrl": "https://docs.tella.com/",
"error": "unavailable",
"message": "A dependency was unavailable and the request was not executed. Safe to resend unchanged after the Retry-After delay."
}Authorizations
API key obtained from your Tella account settings
Body
Update an existing zoom
0 < x <= 9007199254740991Point on the zoomed footage to zoom into, expressed as percentages of its dimensions. Required for manualZoom; ignored for trackingZoom.
Magnification factor (1 = no zoom, 3.5 = max).
1 <= x <= 3.52
Start time in ms on the clip's playback timeline (cuts applied)
0 <= x <= 9007199254740991manualZoom zooms into a fixed focusPoint on the screen. trackingZoom automatically follows the cursor in the screen recording.
manualZoom, trackingZoom "manualZoom"
Response
OK
A zoom on a clip
A zoom effect applied to the footage in the clip's Screen slot — the screen recording, or b-roll media a layout puts there (the camera is unaffected). Use manualZoom with a focusPoint, or trackingZoom to follow the cursor automatically. Times are in ms on the clip's playback timeline (cuts applied). Internally the zoom stays anchored to the footage, so it doesn't drift when cuts change later.
Hide child attributes
Hide child attributes
Duration in ms of playback. 0 when the zoom's footage is entirely cut out.
x >= 02000
Zoom ID
"ef_abc123"
Start time in ms on the clip's playback timeline (cuts applied)
x >= 01000
manualZoom zooms into a fixed focusPoint on the screen. trackingZoom automatically follows the cursor in the screen recording.
manualZoom, trackingZoom "manualZoom"
Point on the zoomed footage to zoom into, expressed as percentages of its dimensions. Required for manualZoom; ignored for trackingZoom.
Magnification factor (1 = no zoom, 3.5 = max).
1 <= x <= 3.52
Was this page helpful?