Get Call Recordings Endpoint
curl --request GET \
--url https://app.tuco.ai/api/voice/recordings \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.tuco.ai/api/voice/recordings"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.tuco.ai/api/voice/recordings', 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://app.tuco.ai/api/voice/recordings",
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://app.tuco.ai/api/voice/recordings"
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://app.tuco.ai/api/voice/recordings")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.tuco.ai/api/voice/recordings")
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{
"number": "<string>",
"count": 123,
"calls": [
{
"callId": "<string>",
"from": "<string>",
"to": "<string>",
"agent": "<string>",
"status": "<string>",
"requestedAt": "<string>",
"answeredAt": "<string>",
"endedAt": "<string>",
"durationSec": 123,
"billedSec": 123,
"hangupCause": "<string>",
"recordingUrl": "<string>"
}
]
}Voice / Calling
Get Call Recordings Endpoint
Fetch a lead’s calls with timing details and the recording download URL, by phone number, using your API key.
GET
/
api
/
voice
/
recordings
Get Call Recordings Endpoint
curl --request GET \
--url https://app.tuco.ai/api/voice/recordings \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.tuco.ai/api/voice/recordings"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.tuco.ai/api/voice/recordings', 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://app.tuco.ai/api/voice/recordings",
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://app.tuco.ai/api/voice/recordings"
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://app.tuco.ai/api/voice/recordings")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.tuco.ai/api/voice/recordings")
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{
"number": "<string>",
"count": 123,
"calls": [
{
"callId": "<string>",
"from": "<string>",
"to": "<string>",
"agent": "<string>",
"status": "<string>",
"requestedAt": "<string>",
"answeredAt": "<string>",
"endedAt": "<string>",
"durationSec": 123,
"billedSec": 123,
"hangupCause": "<string>",
"recordingUrl": "<string>"
}
]
}This endpoint is in beta. The interface is stable enough to build on; we may add fields as it matures.
Overview
Pull the calls placed to a given number in your workspace, newest first, each with its timing details and a recording download URL. Use it to fetch all recordings for a lead or just the latest one, straight into your own system.Making a request
- Method:
GET - URL:
https://app.tuco.ai/api/voice/recordings - Headers:
Authorization: Bearer tuco_...
curl "https://app.tuco.ai/api/voice/recordings?number=+13025550123&latest=true" \
-H "Authorization: Bearer tuco_your_key"
Query parameters
string
required
The lead’s phone number, E.164 (e.g.
+13025550123). to is accepted as an alias.boolean
Return only the most recent call to that number.
boolean
Return only calls that have a recording URL.
number
Max calls to return. Default
20, max 100. Ignored when latest=true.Response
Calls are returned newest first. Each entry includes timing details and the recording download URL (recordings resolve after a call ends).{
"number": "+13025550123",
"count": 2,
"calls": [
{
"callId": "6a4ed2d5dec1b2d01a6f7656",
"from": "+13025550999",
"to": "+13025550123",
"agent": "+13025550456",
"surface": "api",
"status": "billed",
"requestedAt": "2026-07-09T00:12:03.000Z",
"answeredAt": "2026-07-09T00:12:19.000Z",
"endedAt": "2026-07-09T00:13:01.000Z",
"durationSec": 42,
"billedSec": 42,
"billedCents": 1,
"hangupCause": "normal_clearing",
"recordingUrl": "https://.../recordings/6a4ed2d5....mp3"
}
]
}
string
The number you queried.
number
Number of calls returned.
array
The calls, newest first.
Show call fields
Show call fields
string
Call record ID.
string
Caller ID the lead saw (your Tuco number).
string
The number called.
string
Your rep’s number (API calls only).
string
requested · ringing · answered · billed · failed.string
When the call was created.
string
When it connected.
string
When it ended.
number
Talk time in seconds.
number
Billed seconds.
string
Why the call ended.
string
Download URL for the recording (
null until the call ends and the recording is stored).You only ever see calls in your own workspace. Recordings resolve a few seconds after
a call ends; a
null recordingUrl on a live or very recent call is expected.Errors
| HTTP | code | Meaning |
|---|---|---|
| 401 | UNAUTHORIZED | Missing or invalid API key |
| 400 | MISSING_NUMBER | number (the lead phone number) not provided |
| 500 | INTERNAL_ERROR | Unexpected server error |