Search Transcripts
curl --request GET \
--url https://api.example.com/v1/recordings/searchimport requests
url = "https://api.example.com/v1/recordings/search"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/recordings/search', 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.example.com/v1/recordings/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.example.com/v1/recordings/search"
req, _ := http.NewRequest("GET", url, nil)
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.example.com/v1/recordings/search")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/recordings/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"query": "<string>",
"data": [
{
"recording": {},
"matches": [
{
"text": "<string>",
"timestamp": 123,
"speaker": "<string>"
}
],
"matchCount": 123
}
],
"pagination": {}
}Recordings
Search Transcripts
Full-text search across all your transcripts
GET
/
v1
/
recordings
/
search
Search Transcripts
curl --request GET \
--url https://api.example.com/v1/recordings/searchimport requests
url = "https://api.example.com/v1/recordings/search"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/recordings/search', 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.example.com/v1/recordings/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.example.com/v1/recordings/search"
req, _ := http.NewRequest("GET", url, nil)
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.example.com/v1/recordings/search")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/recordings/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"query": "<string>",
"data": [
{
"recording": {},
"matches": [
{
"text": "<string>",
"timestamp": 123,
"speaker": "<string>"
}
],
"matchCount": 123
}
],
"pagination": {}
}Search through all your completed transcripts to find specific words or phrases. Returns matching recordings with context snippets and timestamps.
Query Parameters
string
required
Search query (minimum 2 characters). Also accepts
query as alias.integer
default:"1"
Page number (1-indexed)
integer
default:"20"
Results per page (max 50)
Request
curl -X GET "https://app.transcord.app/api/v1/recordings/search?q=contract" \
-H "Authorization: Bearer tr_live_your_api_key"
const query = encodeURIComponent('contract negotiation');
const response = await fetch(`https://app.transcord.app/api/v1/recordings/search?q=${query}`, {
headers: {
'Authorization': 'Bearer tr_live_your_api_key'
}
});
const results = await response.json();
import requests
response = requests.get(
'https://app.transcord.app/api/v1/recordings/search',
headers={'Authorization': 'Bearer tr_live_your_api_key'},
params={'q': 'contract negotiation'}
)
results = response.json()
Response
string
The search query that was executed
array
Array of search results
Show result object
Show result object
object
Recording metadata (id, callSid, toNumber, fromNumber, duration, status, direction, createdAt)
array
number
Number of matches in this recording
object
Pagination info (page, limit, total, totalPages, hasMore)
Response
{
"query": "contract",
"data": [
{
"recording": {
"id": "clx1234567890",
"callSid": "CA1234567890abcdef",
"toNumber": "+14155551234",
"fromNumber": "+14155555678",
"duration": 342,
"status": "ready",
"direction": "outbound",
"createdAt": "2026-01-15T10:30:00.000Z"
},
"matches": [
{
"text": "...about the contract terms we discussed...",
"timestamp": 45.2,
"speaker": "them"
},
{
"text": "...I'll send the contract over by Friday...",
"timestamp": 128.5,
"speaker": "you"
}
],
"matchCount": 2
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 3,
"totalPages": 1,
"hasMore": false
}
}
Errors
| Status | Description |
|---|---|
400 | Search query too short (minimum 2 characters) |
401 | Invalid or missing API key |
⌘I