curl --request GET \
--url https://api.tella.com/v1/sources/{sourceId}/transcript \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.tella.com/v1/sources/{sourceId}/transcript"
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/sources/{sourceId}/transcript', 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/sources/{sourceId}/transcript",
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/sources/{sourceId}/transcript"
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/sources/{sourceId}/transcript")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tella.com/v1/sources/{sourceId}/transcript")
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{
"words": [
{
"breakAfter": false,
"endTimeMs": 1800,
"hidden": false,
"index": 12,
"keepWithNext": false,
"startTimeMs": 1500,
"text": "Hello"
}
]
}{
"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."
}Get the transcript of a source on no clip
Returns the words spoken in a streaming upload source owned by the caller or their workspace, without a video or clip: for a source that isn’t on any clip yet, such as an imported video. Times are in ms of source time and no cuts apply. Answers 503 while the source is still being transcribed. Takes the same startTimeMs/endTimeMs window and view=sentences as the clip transcript.
curl --request GET \
--url https://api.tella.com/v1/sources/{sourceId}/transcript \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.tella.com/v1/sources/{sourceId}/transcript"
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/sources/{sourceId}/transcript', 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/sources/{sourceId}/transcript",
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/sources/{sourceId}/transcript"
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/sources/{sourceId}/transcript")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tella.com/v1/sources/{sourceId}/transcript")
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{
"words": [
{
"breakAfter": false,
"endTimeMs": 1800,
"hidden": false,
"index": 12,
"keepWithNext": false,
"startTimeMs": 1500,
"text": "Hello"
}
]
}{
"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
Path Parameters
Streaming upload source identifier
"su_abc123def456"
Query Parameters
Only return items at or after this time, in ms on the clip's playback timeline. Defaults to the clip's start.
0 <= x <= 900719925474099160000
Only return items before this time (exclusive), in ms on the clip's playback timeline. Must be greater than startTimeMs. Defaults to the clip's end. Page through a long clip with windows that meet end to start.
1 <= x <= 9007199254740991120000
words (default): every word with its index, times and flags. sentences: one row per sentence (first and last word index, start and end time, text), about a quarter of the size, for reading the gist of a long clip. A time window cuts sentences at its edges.
words, sentences "sentences"
true: also return the words that cuts removed, each marked cut, with every word's times in the clip's source recording (sourceStartTimeMs/sourceEndTimeMs). Use it to find footage the cuts took out, such as a retake, without undoing the cuts. Kept words still carry their playback startTimeMs/endTimeMs. startTimeMs/endTimeMs filter on the source times. Words view only.
true, false "true"
Response
OK
- Option 1
- Option 2
Clip transcript — what viewers hear.
Words on the playback timeline (cuts removed, times relative to the clip's playback start). Word indices are stable — they don't shift when cuts change; words inside cuts are simply absent.
Hide child attributes
Hide child attributes
Whether a subtitle break is forced after this word, so the next word always starts a new subtitle block
false
Word end time, in ms on the clip's playback timeline
x >= 01800
Whether the word is hidden by an edit
false
Stable index of the word in the source recording
0 <= x <= 900719925474099112
Whether this word's subtitle block is kept together with the next word across punctuation and pauses. The lines-per-block limit still applies and breakAfter wins.
false
Word start time, in ms on the clip's playback timeline
x >= 01500
Word text
"Hello"
Was this page helpful?