# Get call logs for an agent
curl "https://api.telzino.com/v1/agents/123e4567-e89b-12d3-a456-426614174000/call-logs?page=1&limit=50" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
const agentId = '123e4567-e89b-12d3-a456-426614174000';
const response = await fetch(
`https://api.telzino.com/v1/agents/${agentId}/call-logs?page=1&limit=50`,
{ headers: { 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' } }
);
const { data, pagination } = await response.json();
// Access transcript data
data.forEach(log => {
console.log(`Call on ${log.call_started_at}: ${log.entry_count} messages, ${log.call_duration}s`);
console.log(log.transcript_text);
});
import requests
agent_id = '123e4567-e89b-12d3-a456-426614174000'
response = requests.get(
f'https://api.telzino.com/v1/agents/{agent_id}/call-logs',
params={'page': 1, 'limit': 50},
headers={'Authorization': 'Bearer YOUR_ACCESS_TOKEN'}
)
data = response.json()
# Access transcript data
for log in data['data']:
print(f"Call: {log['call_started_at']} - Duration: {log['call_duration']}s")
print(log['transcript_text'])
{
"data": [
{
"id": "log-123e4567-e89b-12d3-a456-426614174000",
"agent_id": "123e4567-e89b-12d3-a456-426614174000",
"room_name": "sipRoom-_123e4567-e89b-12d3-a456-426614174000_1704067800",
"transcript_text": "[1704067800.50s] agent: Hello! How can I help you today?\n[1704067803.20s] user: I have a question about my order.\n[1704067805.10s] agent: I'd be happy to help with your order. What's your order number?",
"transcript_json": [
{
"text": "Hello! How can I help you today?",
"speaker": "agent",
"timestamp": 1704067800.5,
"is_partial": false,
"created_at": 1704067800.5,
"speech_started_at": 1704067798.9,
"speech_ended_at": 1704067800.5,
"latency": { "tts_first_audio_ms": 210 }
},
{
"text": "I have a question about my order.",
"speaker": "user",
"timestamp": 1704067803.2,
"is_partial": false,
"created_at": 1704067803.2,
"speech_started_at": 1704067801.1,
"speech_ended_at": 1704067802.4,
"transcript_final_at": 1704067802.58
},
{
"text": "I'd be happy to help with your order. What's your order number?",
"speaker": "agent",
"timestamp": 1704067805.1,
"is_partial": false,
"created_at": 1704067805.1,
"speech_started_at": 1704067803.9,
"speech_ended_at": 1704067805.1,
"latency": {
"total_ms": 1500,
"end_of_turn_ms": 600,
"transcription_ms": 180,
"llm_first_token_ms": 520,
"llm_ms": 780,
"llm_calls": 1,
"tts_first_audio_ms": 190,
"spans": [
{ "stage": "transcription", "start_ms": 0, "end_ms": 180 },
{ "stage": "end_of_turn", "start_ms": 0, "end_ms": 600 },
{ "stage": "llm", "start_ms": 640, "end_ms": 1420, "first_token_ms": 1160 },
{ "stage": "speech_synthesis", "start_ms": 1310, "end_ms": 1500 }
],
"slowest_stage": "llm"
}
}
],
"entry_count": 15,
"call_duration": 180,
"call_started_at": "2024-01-01T00:09:58.000Z",
"call_ended_at": "2024-01-01T00:12:58.000Z",
"session_data": {
"room_name": "sipRoom-_123e4567...",
"agent_id": "123e4567-e89b-12d3-a456-426614174000",
"total_entries": 15,
"final_entries": 15,
"caller_id": "+14155551234",
"direction": "inbound",
"latency": {
"version": 1,
"turns": 4,
"p50_ms": 1700,
"p95_ms": 2900,
"max_ms": 2900
}
},
"summary_text": "Order Status Inquiry\n\nCustomer called to check on order #12345. Agent confirmed the order was shipped and provided tracking number.\n\n**Action Items:**\n- ✓ Provided tracking number to customer\n- None pending\n\n**Sentiment:** Positive",
"recording_url": "https://telzino-recordings.s3.amazonaws.com/calls/123e4567.ogg",
"created_at": "2024-01-01T00:13:03.000Z",
"updated_at": "2024-01-01T00:13:08.000Z"
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 245,
"totalPages": 5,
"hasNext": true,
"hasPrev": false
}
}
{
"error": "invalid_token",
"error_description": "Missing or invalid authorization token"
}
{
"error": "forbidden",
"error_description": "No access to this agent"
}
{
"error": "not_found",
"error_description": "Agent not found"
}
Call Logs
List Call Logs
Returns a paginated list of call transcripts and logs for a specific agent
GET
/
v1
/
agents
/
{agentId}
/
call-logs
# Get call logs for an agent
curl "https://api.telzino.com/v1/agents/123e4567-e89b-12d3-a456-426614174000/call-logs?page=1&limit=50" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
const agentId = '123e4567-e89b-12d3-a456-426614174000';
const response = await fetch(
`https://api.telzino.com/v1/agents/${agentId}/call-logs?page=1&limit=50`,
{ headers: { 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' } }
);
const { data, pagination } = await response.json();
// Access transcript data
data.forEach(log => {
console.log(`Call on ${log.call_started_at}: ${log.entry_count} messages, ${log.call_duration}s`);
console.log(log.transcript_text);
});
import requests
agent_id = '123e4567-e89b-12d3-a456-426614174000'
response = requests.get(
f'https://api.telzino.com/v1/agents/{agent_id}/call-logs',
params={'page': 1, 'limit': 50},
headers={'Authorization': 'Bearer YOUR_ACCESS_TOKEN'}
)
data = response.json()
# Access transcript data
for log in data['data']:
print(f"Call: {log['call_started_at']} - Duration: {log['call_duration']}s")
print(log['transcript_text'])
{
"data": [
{
"id": "log-123e4567-e89b-12d3-a456-426614174000",
"agent_id": "123e4567-e89b-12d3-a456-426614174000",
"room_name": "sipRoom-_123e4567-e89b-12d3-a456-426614174000_1704067800",
"transcript_text": "[1704067800.50s] agent: Hello! How can I help you today?\n[1704067803.20s] user: I have a question about my order.\n[1704067805.10s] agent: I'd be happy to help with your order. What's your order number?",
"transcript_json": [
{
"text": "Hello! How can I help you today?",
"speaker": "agent",
"timestamp": 1704067800.5,
"is_partial": false,
"created_at": 1704067800.5,
"speech_started_at": 1704067798.9,
"speech_ended_at": 1704067800.5,
"latency": { "tts_first_audio_ms": 210 }
},
{
"text": "I have a question about my order.",
"speaker": "user",
"timestamp": 1704067803.2,
"is_partial": false,
"created_at": 1704067803.2,
"speech_started_at": 1704067801.1,
"speech_ended_at": 1704067802.4,
"transcript_final_at": 1704067802.58
},
{
"text": "I'd be happy to help with your order. What's your order number?",
"speaker": "agent",
"timestamp": 1704067805.1,
"is_partial": false,
"created_at": 1704067805.1,
"speech_started_at": 1704067803.9,
"speech_ended_at": 1704067805.1,
"latency": {
"total_ms": 1500,
"end_of_turn_ms": 600,
"transcription_ms": 180,
"llm_first_token_ms": 520,
"llm_ms": 780,
"llm_calls": 1,
"tts_first_audio_ms": 190,
"spans": [
{ "stage": "transcription", "start_ms": 0, "end_ms": 180 },
{ "stage": "end_of_turn", "start_ms": 0, "end_ms": 600 },
{ "stage": "llm", "start_ms": 640, "end_ms": 1420, "first_token_ms": 1160 },
{ "stage": "speech_synthesis", "start_ms": 1310, "end_ms": 1500 }
],
"slowest_stage": "llm"
}
}
],
"entry_count": 15,
"call_duration": 180,
"call_started_at": "2024-01-01T00:09:58.000Z",
"call_ended_at": "2024-01-01T00:12:58.000Z",
"session_data": {
"room_name": "sipRoom-_123e4567...",
"agent_id": "123e4567-e89b-12d3-a456-426614174000",
"total_entries": 15,
"final_entries": 15,
"caller_id": "+14155551234",
"direction": "inbound",
"latency": {
"version": 1,
"turns": 4,
"p50_ms": 1700,
"p95_ms": 2900,
"max_ms": 2900
}
},
"summary_text": "Order Status Inquiry\n\nCustomer called to check on order #12345. Agent confirmed the order was shipped and provided tracking number.\n\n**Action Items:**\n- ✓ Provided tracking number to customer\n- None pending\n\n**Sentiment:** Positive",
"recording_url": "https://telzino-recordings.s3.amazonaws.com/calls/123e4567.ogg",
"created_at": "2024-01-01T00:13:03.000Z",
"updated_at": "2024-01-01T00:13:08.000Z"
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 245,
"totalPages": 5,
"hasNext": true,
"hasPrev": false
}
}
{
"error": "invalid_token",
"error_description": "Missing or invalid authorization token"
}
{
"error": "forbidden",
"error_description": "No access to this agent"
}
{
"error": "not_found",
"error_description": "Agent not found"
}
Path Parameters
string
required
The agent ID to retrieve call logs for (UUID format)
Query Parameters
integer
default:"1"
Page number for pagination (1-indexed)
integer
default:"50"
Number of items per page (max 100)
# Get call logs for an agent
curl "https://api.telzino.com/v1/agents/123e4567-e89b-12d3-a456-426614174000/call-logs?page=1&limit=50" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
const agentId = '123e4567-e89b-12d3-a456-426614174000';
const response = await fetch(
`https://api.telzino.com/v1/agents/${agentId}/call-logs?page=1&limit=50`,
{ headers: { 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' } }
);
const { data, pagination } = await response.json();
// Access transcript data
data.forEach(log => {
console.log(`Call on ${log.call_started_at}: ${log.entry_count} messages, ${log.call_duration}s`);
console.log(log.transcript_text);
});
import requests
agent_id = '123e4567-e89b-12d3-a456-426614174000'
response = requests.get(
f'https://api.telzino.com/v1/agents/{agent_id}/call-logs',
params={'page': 1, 'limit': 50},
headers={'Authorization': 'Bearer YOUR_ACCESS_TOKEN'}
)
data = response.json()
# Access transcript data
for log in data['data']:
print(f"Call: {log['call_started_at']} - Duration: {log['call_duration']}s")
print(log['transcript_text'])
{
"data": [
{
"id": "log-123e4567-e89b-12d3-a456-426614174000",
"agent_id": "123e4567-e89b-12d3-a456-426614174000",
"room_name": "sipRoom-_123e4567-e89b-12d3-a456-426614174000_1704067800",
"transcript_text": "[1704067800.50s] agent: Hello! How can I help you today?\n[1704067803.20s] user: I have a question about my order.\n[1704067805.10s] agent: I'd be happy to help with your order. What's your order number?",
"transcript_json": [
{
"text": "Hello! How can I help you today?",
"speaker": "agent",
"timestamp": 1704067800.5,
"is_partial": false,
"created_at": 1704067800.5,
"speech_started_at": 1704067798.9,
"speech_ended_at": 1704067800.5,
"latency": { "tts_first_audio_ms": 210 }
},
{
"text": "I have a question about my order.",
"speaker": "user",
"timestamp": 1704067803.2,
"is_partial": false,
"created_at": 1704067803.2,
"speech_started_at": 1704067801.1,
"speech_ended_at": 1704067802.4,
"transcript_final_at": 1704067802.58
},
{
"text": "I'd be happy to help with your order. What's your order number?",
"speaker": "agent",
"timestamp": 1704067805.1,
"is_partial": false,
"created_at": 1704067805.1,
"speech_started_at": 1704067803.9,
"speech_ended_at": 1704067805.1,
"latency": {
"total_ms": 1500,
"end_of_turn_ms": 600,
"transcription_ms": 180,
"llm_first_token_ms": 520,
"llm_ms": 780,
"llm_calls": 1,
"tts_first_audio_ms": 190,
"spans": [
{ "stage": "transcription", "start_ms": 0, "end_ms": 180 },
{ "stage": "end_of_turn", "start_ms": 0, "end_ms": 600 },
{ "stage": "llm", "start_ms": 640, "end_ms": 1420, "first_token_ms": 1160 },
{ "stage": "speech_synthesis", "start_ms": 1310, "end_ms": 1500 }
],
"slowest_stage": "llm"
}
}
],
"entry_count": 15,
"call_duration": 180,
"call_started_at": "2024-01-01T00:09:58.000Z",
"call_ended_at": "2024-01-01T00:12:58.000Z",
"session_data": {
"room_name": "sipRoom-_123e4567...",
"agent_id": "123e4567-e89b-12d3-a456-426614174000",
"total_entries": 15,
"final_entries": 15,
"caller_id": "+14155551234",
"direction": "inbound",
"latency": {
"version": 1,
"turns": 4,
"p50_ms": 1700,
"p95_ms": 2900,
"max_ms": 2900
}
},
"summary_text": "Order Status Inquiry\n\nCustomer called to check on order #12345. Agent confirmed the order was shipped and provided tracking number.\n\n**Action Items:**\n- ✓ Provided tracking number to customer\n- None pending\n\n**Sentiment:** Positive",
"recording_url": "https://telzino-recordings.s3.amazonaws.com/calls/123e4567.ogg",
"created_at": "2024-01-01T00:13:03.000Z",
"updated_at": "2024-01-01T00:13:08.000Z"
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 245,
"totalPages": 5,
"hasNext": true,
"hasPrev": false
}
}
{
"error": "invalid_token",
"error_description": "Missing or invalid authorization token"
}
{
"error": "forbidden",
"error_description": "No access to this agent"
}
{
"error": "not_found",
"error_description": "Agent not found"
}
Call Log Object
Core Fields
| Field | Type | Description |
|---|---|---|
id | string | Unique call log identifier (UUID) |
agent_id | string | Agent that handled the call |
room_name | string | Room identifier for the call |
Transcript Data
| Field | Type | Description |
|---|---|---|
transcript_text | string | Plain text version. Each entry starts with its timestamp in Unix seconds (e.g. [1704067800.50s] agent: Hello!); tool and webhook entries add indented Arguments:/Result: lines under it |
transcript_json | array | Structured transcript entries (see below) |
entry_count | integer | Total number of transcript entries |
summary_text | string | AI-generated summary of the call (Markdown format) |
{
"text": "Message content",
"speaker": "agent" | "user" | "system",
"timestamp": 1704067800.5,
"is_partial": false,
"created_at": 1704067800.5,
"speech_started_at": 1704067798.9,
"speech_ended_at": 1704067800.5,
"transcript_final_at": 1704067800.68,
"latency": { }
}
System entries are logged for events like call transfers, webhook executions, and call end reasons.
What the timestamps mean
All times are Unix epoch seconds (UTC).| Field | Meaning |
|---|---|
timestamp, created_at | When the line was added to the conversation. For a caller line that is when the platform started working on the reply — after end-of-turn detection, transcription and per-turn setup, and after any agent line still playing — not when the caller began or finished speaking. For an agent line it is when the agent finished speaking. Do not subtract these from each other to measure delays |
speech_started_at | When this person started talking |
speech_ended_at | When this person stopped talking |
transcript_final_at | Caller lines only — when the final transcript was ready. transcript_final_at − speech_ended_at is the speech-to-text time |
speech_started_at, speech_ended_at, transcript_final_at and latency are present on calls
made after the reply-timing release, and only where the platform could measure them.Reply timing
Agent lines carry alatency object with that reply’s timing, in milliseconds. Every field is
optional — a value is only present when the platform measured it.
| Field | Description |
|---|---|
total_ms | The caller’s wait: from the moment the caller stopped talking to the moment the agent’s audio started. Missing for replies the platform does not measure this way — the greeting, messages a tool speaks itself (such as the transfer announcement), and replies interrupted before any audio |
end_of_turn_ms | Deciding the caller had finished |
transcription_ms | Turning the caller’s speech into text |
turn_hook_ms | Per-turn setup before the AI model (includes the knowledge-base search for agents that search on every turn) |
retrieval_ms | Knowledge-base tool lookups in this turn |
llm_first_token_ms | Until the AI model’s first word |
llm_ms, llm_calls | Total AI model time this turn, and how many model calls |
tools_ms, tools | Total tool time, and [{ name, ms }] per tool |
tts_first_audio_ms | Until the voice engine produced its first audio |
spans | Step-by-step timeline, oldest first: [{ stage, start_ms, end_ms, first_token_ms?, name? }], where every offset — including first_token_ms — is measured from the moment the caller stopped talking. stage is one of end_of_turn, transcription, turn_hook, retrieval, llm, tool, speech_synthesis |
slowest_stage | The stage that took longest in spans |
interrupted | true when the caller interrupted this reply |
end_of_turn_ms, transcription_ms, turn_hook_ms) stay with the turn
until an agent line carries the caller’s wait, so a message a tool speaks for itself does not take
them from the reply. Tool time is always its own step, never part of the AI time, and a tool that
did not run (an unknown tool name, or a rejected call) reports no duration.
Agents that use a single speech-to-speech model — rather than separate speech-to-text, AI model and
voice — report no caller wait (
total_ms) and none of the model or voice steps, so they never
appear in turnLatency. Their lines still carry speech times, interrupted, and any tool times.Call Timing
| Field | Type | Description |
|---|---|---|
call_duration | integer | Call duration in seconds |
call_started_at | datetime | When the call started (ISO 8601) |
call_ended_at | datetime | When the call ended (ISO 8601) |
Session Metadata
| Field | Type | Description |
|---|---|---|
session_data | object | Additional session information |
session_data.caller_id | string | Caller’s phone number (e.g., +14155551234) |
session_data.direction | string | inbound or outbound |
session_data.sip_call_id | string | The SIP Call-ID header for this call — use it to line the call up with carrier logs |
session_data.total_entries | integer | Total transcript entries (including partials) |
session_data.final_entries | integer | Final (non-partial) transcript entries |
session_data.latency | object | This call’s caller waits: { version, turns, p50_ms, p95_ms, max_ms } — the median, 95th-percentile and longest wait, and how many replies were measured. Absent when no reply was measured |
Tool-call entries carry
tool_call.duration_ms: how long that tool ran, in milliseconds.Recording
| Field | Type | Description |
|---|---|---|
recording_url | string | URL to call recording (if enable_recording was true) |
Recording URLs are pre-signed S3 URLs. They may expire after a period of time. Store recordings in your own storage if you need permanent access.
Sharing
To give someone outside Telzino a link to a call’s transcript, use Share Call Transcript with the log’sid.
Timestamps
| Field | Type | Description |
|---|---|---|
created_at | datetime | When the log was created |
updated_at | datetime | When the log was last updated |
AI Summary Format
Thesummary_text field contains an AI-generated summary in Markdown format:
Topic in 3-5 words
1-2 sentence summary of the call.
**Action Items:**
- ✓ Completed action
- Pending follow-up
**Sentiment:** Positive | Neutral | Negative
