curl https://api.kallglot.com/v1/recordings/rec_01HABC987654321 \
-H "Authorization: Bearer sk_live_your_api_key"
require 'net/http'
require 'json'
recording_id = 'rec_01HABC987654321'
uri = URI("https://api.kallglot.com/v1/recordings/#{recording_id}")
request = Net::HTTP::Get.new(uri)
request['Authorization'] = "Bearer #{ENV['KALLGLOT_API_KEY']}"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
recording = JSON.parse(response.body)
puts "Recording ready: #{recording['download_url']}"
package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
recordingID := "rec_01HABC987654321"
req, _ := http.NewRequest("GET", "https://api.kallglot.com/v1/recordings/"+recordingID, nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KALLGLOT_API_KEY"))
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var recording map[string]any
json.NewDecoder(resp.Body).Decode(&recording)
fmt.Printf("Recording ready: %s\n", recording["download_url"])
}
import requests
response = requests.get(
'https://api.kallglot.com/v1/recordings/rec_01HABC987654321',
headers={'Authorization': 'Bearer sk_live_your_api_key'}
)
recording = response.json()
print(f"Recording ready: {recording['download_url']}")
const response = await fetch('https://api.kallglot.com/v1/recordings/rec_01HABC987654321', {
headers: {
'Authorization': 'Bearer sk_live_your_api_key'
}
});
const recording = await response.json();
console.log(`Recording ready: ${recording.download_url}`);
{
"id": "rec_01HABC987654321",
"object": "recording",
"session_id": "sess_01HXYZ123456789",
"channel": "mixed",
"status": "ready",
"duration": 245.3,
"format": "mp3",
"size": 2943600,
"sample_rate": 44100,
"bit_depth": 16,
"download_url": "/v1/recordings/rec_01HABC987654321/audio",
"created_at": "2026-03-26T11:04:20Z",
"expires_at": "2026-04-26T11:04:20Z"
}
{
"id": "rec_01HABC987654321",
"object": "recording",
"session_id": "sess_01HXYZ123456789",
"channel": "mixed",
"status": "processing",
"message": "Recording is being processed. Please retry in a few seconds.",
"created_at": "2026-03-26T11:04:20Z"
}
{
"error": {
"code": "recording_not_found",
"message": "No recording found with ID 'rec_01HABC987654321'.",
"type": "not_found_error"
}
}
Recordings
Retrieve Recording
Retrieve metadata for a recording
GET
/
v1
/
recordings
/
{id}
curl https://api.kallglot.com/v1/recordings/rec_01HABC987654321 \
-H "Authorization: Bearer sk_live_your_api_key"
require 'net/http'
require 'json'
recording_id = 'rec_01HABC987654321'
uri = URI("https://api.kallglot.com/v1/recordings/#{recording_id}")
request = Net::HTTP::Get.new(uri)
request['Authorization'] = "Bearer #{ENV['KALLGLOT_API_KEY']}"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
recording = JSON.parse(response.body)
puts "Recording ready: #{recording['download_url']}"
package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
recordingID := "rec_01HABC987654321"
req, _ := http.NewRequest("GET", "https://api.kallglot.com/v1/recordings/"+recordingID, nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KALLGLOT_API_KEY"))
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var recording map[string]any
json.NewDecoder(resp.Body).Decode(&recording)
fmt.Printf("Recording ready: %s\n", recording["download_url"])
}
import requests
response = requests.get(
'https://api.kallglot.com/v1/recordings/rec_01HABC987654321',
headers={'Authorization': 'Bearer sk_live_your_api_key'}
)
recording = response.json()
print(f"Recording ready: {recording['download_url']}")
const response = await fetch('https://api.kallglot.com/v1/recordings/rec_01HABC987654321', {
headers: {
'Authorization': 'Bearer sk_live_your_api_key'
}
});
const recording = await response.json();
console.log(`Recording ready: ${recording.download_url}`);
{
"id": "rec_01HABC987654321",
"object": "recording",
"session_id": "sess_01HXYZ123456789",
"channel": "mixed",
"status": "ready",
"duration": 245.3,
"format": "mp3",
"size": 2943600,
"sample_rate": 44100,
"bit_depth": 16,
"download_url": "/v1/recordings/rec_01HABC987654321/audio",
"created_at": "2026-03-26T11:04:20Z",
"expires_at": "2026-04-26T11:04:20Z"
}
{
"id": "rec_01HABC987654321",
"object": "recording",
"session_id": "sess_01HXYZ123456789",
"channel": "mixed",
"status": "processing",
"message": "Recording is being processed. Please retry in a few seconds.",
"created_at": "2026-03-26T11:04:20Z"
}
{
"error": {
"code": "recording_not_found",
"message": "No recording found with ID 'rec_01HABC987654321'.",
"type": "not_found_error"
}
}
Retrieve the metadata for a specific recording by its ID.
Path Parameters
string
required
The unique recording identifier (e.g.,
rec_01HABC987654321).Response
string
Unique recording identifier.
string
Always
recording.string
The session this recording belongs to.
string
Audio channel:
agent, customer, or mixed.string
Recording status:
processing- Recording is being processedready- Recording is available for downloadfailed- Recording generation failed
number
Recording duration in seconds.
string
Audio format (e.g.,
mp3, wav).number
File size in bytes.
number
Audio sample rate in Hz.
number
Audio bit depth.
string
When the file is ready, a relative path such as
/v1/recordings/{id}/audio. Call it on https://api.kallglot.com with your API key (no separate download token in the response contract).string
Creation timestamp (ISO 8601).
string
When the recording will be deleted based on retention policy (ISO 8601).
curl https://api.kallglot.com/v1/recordings/rec_01HABC987654321 \
-H "Authorization: Bearer sk_live_your_api_key"
require 'net/http'
require 'json'
recording_id = 'rec_01HABC987654321'
uri = URI("https://api.kallglot.com/v1/recordings/#{recording_id}")
request = Net::HTTP::Get.new(uri)
request['Authorization'] = "Bearer #{ENV['KALLGLOT_API_KEY']}"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
recording = JSON.parse(response.body)
puts "Recording ready: #{recording['download_url']}"
package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
recordingID := "rec_01HABC987654321"
req, _ := http.NewRequest("GET", "https://api.kallglot.com/v1/recordings/"+recordingID, nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KALLGLOT_API_KEY"))
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var recording map[string]any
json.NewDecoder(resp.Body).Decode(&recording)
fmt.Printf("Recording ready: %s\n", recording["download_url"])
}
import requests
response = requests.get(
'https://api.kallglot.com/v1/recordings/rec_01HABC987654321',
headers={'Authorization': 'Bearer sk_live_your_api_key'}
)
recording = response.json()
print(f"Recording ready: {recording['download_url']}")
const response = await fetch('https://api.kallglot.com/v1/recordings/rec_01HABC987654321', {
headers: {
'Authorization': 'Bearer sk_live_your_api_key'
}
});
const recording = await response.json();
console.log(`Recording ready: ${recording.download_url}`);
{
"id": "rec_01HABC987654321",
"object": "recording",
"session_id": "sess_01HXYZ123456789",
"channel": "mixed",
"status": "ready",
"duration": 245.3,
"format": "mp3",
"size": 2943600,
"sample_rate": 44100,
"bit_depth": 16,
"download_url": "/v1/recordings/rec_01HABC987654321/audio",
"created_at": "2026-03-26T11:04:20Z",
"expires_at": "2026-04-26T11:04:20Z"
}
{
"id": "rec_01HABC987654321",
"object": "recording",
"session_id": "sess_01HXYZ123456789",
"channel": "mixed",
"status": "processing",
"message": "Recording is being processed. Please retry in a few seconds.",
"created_at": "2026-03-26T11:04:20Z"
}
{
"error": {
"code": "recording_not_found",
"message": "No recording found with ID 'rec_01HABC987654321'.",
"type": "not_found_error"
}
}
Notes
When
download_url is present it points at the /v1/recordings/{id}/audio path on https://api.kallglot.com. Use your normal API key—there is no separate download token in the REST contract.Recordings are automatically deleted based on your retention policy. After the
expires_at date, the recording will no longer be available.⌘I