curl --request POST \
--url https://api.tella.com/v1/videos/{id}/exports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fps": "30",
"granularity": "video",
"resolution": "1080p",
"speed": "1",
"subtitles": false
}
'import requests
url = "https://api.tella.com/v1/videos/{id}/exports"
payload = {
"fps": "30",
"granularity": "video",
"resolution": "1080p",
"speed": "1",
"subtitles": False
}
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({
fps: '30',
granularity: 'video',
resolution: '1080p',
speed: '1',
subtitles: false
})
};
fetch('https://api.tella.com/v1/videos/{id}/exports', 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}/exports",
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([
'fps' => '30',
'granularity' => 'video',
'resolution' => '1080p',
'speed' => '1',
'subtitles' => 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}/exports"
payload := strings.NewReader("{\n \"fps\": \"30\",\n \"granularity\": \"video\",\n \"resolution\": \"1080p\",\n \"speed\": \"1\",\n \"subtitles\": false\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}/exports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fps\": \"30\",\n \"granularity\": \"video\",\n \"resolution\": \"1080p\",\n \"speed\": \"1\",\n \"subtitles\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tella.com/v1/videos/{id}/exports")
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 \"fps\": \"30\",\n \"granularity\": \"video\",\n \"resolution\": \"1080p\",\n \"speed\": \"1\",\n \"subtitles\": false\n}"
response = http.request(request)
puts response.read_body{
"export": {
"downloadUrl": "https://cdn.tella.tv/exports/vid_abc123/video.mp4",
"exportId": "Export-Story-vid_abc123def456/2026-01-15T10:00:00Z/Story/1920x1080/30FPS",
"progress": 100,
"status": "completed",
"updatedAt": "2024-01-15T15:00:00.000Z"
}
}{
"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."
}
}Start a video export
Starts an export of the specified video. Export processing is asynchronous: poll GET /v1/videos//exports/ for status and a download URL, or listen for the export.ready webhook. Requires edit access to the video. Viewers can only start an export if the video’s download settings allow it: video and clips granularity require downloads to be enabled, raw granularity requires raw downloads to be enabled.
curl --request POST \
--url https://api.tella.com/v1/videos/{id}/exports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fps": "30",
"granularity": "video",
"resolution": "1080p",
"speed": "1",
"subtitles": false
}
'import requests
url = "https://api.tella.com/v1/videos/{id}/exports"
payload = {
"fps": "30",
"granularity": "video",
"resolution": "1080p",
"speed": "1",
"subtitles": False
}
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({
fps: '30',
granularity: 'video',
resolution: '1080p',
speed: '1',
subtitles: false
})
};
fetch('https://api.tella.com/v1/videos/{id}/exports', 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}/exports",
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([
'fps' => '30',
'granularity' => 'video',
'resolution' => '1080p',
'speed' => '1',
'subtitles' => 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}/exports"
payload := strings.NewReader("{\n \"fps\": \"30\",\n \"granularity\": \"video\",\n \"resolution\": \"1080p\",\n \"speed\": \"1\",\n \"subtitles\": false\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}/exports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fps\": \"30\",\n \"granularity\": \"video\",\n \"resolution\": \"1080p\",\n \"speed\": \"1\",\n \"subtitles\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tella.com/v1/videos/{id}/exports")
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 \"fps\": \"30\",\n \"granularity\": \"video\",\n \"resolution\": \"1080p\",\n \"speed\": \"1\",\n \"subtitles\": false\n}"
response = http.request(request)
puts response.read_body{
"export": {
"downloadUrl": "https://cdn.tella.tv/exports/vid_abc123/video.mp4",
"exportId": "Export-Story-vid_abc123def456/2026-01-15T10:00:00Z/Story/1920x1080/30FPS",
"progress": 100,
"status": "completed",
"updatedAt": "2024-01-15T15:00:00.000Z"
}
}{
"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
Unique video identifier
"vid_abc123def456"
Body
Request body for exporting a video
Frames per second. 60fps may require paid plan.
30, 60 "30"
Export granularity: video (full video), clips (one file per clip), raw (original uploads)
video, clips, raw "video"
Export resolution. Default is 1080p.
1080p, 4k "1080p"
Playback speed multiplier
1, 2, 0.5, 0.75, 1.25, 1.5, 1.75 "1"
Burn subtitles into the video
false
Response
OK
Response containing export status
Status of a video export job
Show child attributes
Show child attributes
Was this page helpful?