curl --request GET \
--url https://api.tella.com/v1/library \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.tella.com/v1/library"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tella.com/v1/library', 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/library",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tella.com/v1/library"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tella.com/v1/library")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tella.com/v1/library")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "media_abc123def456",
"name": "Intro camera take",
"scope": "private",
"type": "video",
"category": "Everyday",
"createdAt": "<string>",
"dimensions": {
"height": 0,
"width": 0
},
"durationMs": 4200,
"presetId": "cha-ching",
"sourceId": "su_abc123def456",
"updatedAt": "<string>",
"url": "<string>"
}
],
"cursor": "<string>"
}{
"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."
}List library items
Returns a page of reusable media saved to the library — images, videos, screenshots, sound effects, music and LUTs — for one scope. Items added through the API include a sourceId you can pass anywhere a source is accepted, including images. Editor-added images, screenshots, music and LUTs expose a hosted url instead. URL captures from POST /v1/library/screenshots are placeable image or video items. Media still being generated in the editor is omitted. scope=default returns Tella’s curated sound effect and background music catalogs instead of stored media: those items carry a presetId to place them with (sound-effect items via POST /v1/videos/{id}/clips/{clipId}/sound-effects, music items via PUT /v1/videos/{id}/background-music), a category, and a publicly fetchable url for previewing, and arrive as a single page; filter with type=sound-effect or type=music, or omit type for both. Tella’s default backgrounds are not part of this catalog — they are placed as a background rather than as a source, and are listed by GET /v1/backgrounds.
curl --request GET \
--url https://api.tella.com/v1/library \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.tella.com/v1/library"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tella.com/v1/library', 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/library",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tella.com/v1/library"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tella.com/v1/library")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tella.com/v1/library")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "media_abc123def456",
"name": "Intro camera take",
"scope": "private",
"type": "video",
"category": "Everyday",
"createdAt": "<string>",
"dimensions": {
"height": 0,
"width": 0
},
"durationMs": 4200,
"presetId": "cha-ching",
"sourceId": "su_abc123def456",
"updatedAt": "<string>",
"url": "<string>"
}
],
"cursor": "<string>"
}{
"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
Query Parameters
Which set of media to read: private (only visible to their creator), workspace (shared with everyone in the workspace), or default (Tella's curated sound effect and background music catalogs, which hold no other media type)
private, workspace, default "private"
Only return items of this type. With scope=default only sound-effect and music are valid, since the curated catalog holds no other media type; omitting it returns both.
image, video, sound-effect, music, lut, screenshot "video"
Pagination cursor from a previous response. Keep paging while cursor is present. scope=default is a fixed catalog returned as a single page, so it never sets one.
Items per page (1-60, default 24). Treat it as a target rather than an exact count: pages are read from storage before unlistable items are filtered out, and cursors address whole storage pages, so a response may contain somewhat more than limit. Returning the extra items is deliberate — trimming them would drop them, because the cursor has already moved past.
1 <= x <= 6024
Response
OK
A page of library items
Hide child attributes
Hide child attributes
Unique library item identifier
"media_abc123def456"
Display name shown in the library
"Intro camera take"
Which set of media to read: private (only visible to their creator), workspace (shared with everyone in the workspace), or default (Tella's curated sound effect and background music catalogs, which hold no other media type)
private, workspace, default "private"
The kind of media the item holds
image, video, sound-effect, music, lut, screenshot "video"
Catalog grouping, for default items only — the same grouping the editor's sound effects and background music panels show
"Everyday"
ISO-8601 creation timestamp. Absent for default catalog items, which are served from Tella's catalog rather than stored as rows.
Duration in milliseconds, for time-based media
4200
Preset ID, for default catalog items only. A preset has no source, so pass this instead of sourceId: a sound-effect preset goes to POST /v1/videos/{id}/clips/{clipId}/sound-effects (placing it copies the effect into a source owned by your workspace), a music preset to PUT /v1/videos/{id}/background-music.
"cha-ching"
Source ID. Pass it anywhere a sourceId is accepted — clips, layouts, overlays, sound effects. Present for every item added through this API, including images. Absent for items added in the editor, which have no source, for music and LUT items, and for default catalog items, which use presetId instead.
"su_abc123def456"
ISO-8601 update timestamp. Absent for default catalog items.
Hosted media URL, for image, screenshot, music and lut items, and for default catalog items, where it is a publicly fetchable preview of the audio (for music presets it is also the track the video will play). API-created images expose this alongside sourceId; use sourceId to place the image on a clip, since overlays and layout media do not accept URLs. Editor-created screenshot items have a URL but no sourceId; use POST /v1/library/screenshots to capture a new placeable image or video.
Cursor for the next page. Absent when there are no more items.
Was this page helpful?