Returns the full call object for one call in your workspace. Poll it after a call ends to read the transcript, post-call analysis and cost, or use webhooks to have it pushed to you. The guide Call object explains each field in context.
Request#
Path parameters#
| Parameter | Type | Required | Description |
|---|---|---|---|
call_id |
string | Yes | The call ID, for example call_8d1e0f2a3b4c5d6e7f8a9b0c. |
Example request#
curl "https://api.tried.com.au/v2/get-call/call_8d1e0f2a3b4c5d6e7f8a9b0c" \
-H "Authorization: Bearer $TRIED_API_KEY"const res = await fetch("https://api.tried.com.au/v2/get-call/call_8d1e0f2a3b4c5d6e7f8a9b0c", {
headers: { Authorization: `Bearer ${process.env.TRIED_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://api.tried.com.au/v2/get-call/call_8d1e0f2a3b4c5d6e7f8a9b0c",
headers={"Authorization": f"Bearer {os.environ['TRIED_API_KEY']}"},
)
data = res.json()Response#
200 OK
{
"call_id": "call_8d1e0f2a3b4c5d6e7f8a9b0c",
"call_type": "phone_call",
"agent_id": "agent_3f9a1c0b2d4e5f6a7b8c9d0e",
"agent_version": 4,
"agent_name": "Appointment reminders",
"call_status": "ended",
"direction": "outbound",
"from_number": "+61291234567",
"to_number": "+61412345678",
"metadata": { "crm_id": "A-1042" },
"retell_llm_dynamic_variables": { "customer_name": "Sam" },
"collected_dynamic_variables": { "confirmed": "yes" },
"start_timestamp": 1792310400000,
"end_timestamp": 1792310465000,
"duration_ms": 65000,
"transcript": "Agent: Hi Sam, this is Bright Dental.\nUser: Hi, yes I can still make it.",
"transcript_object": [
{ "role": "agent", "content": "Hi Sam, this is Bright Dental.", "words": [{ "word": "Hi", "start": 0.12, "end": 0.3 }] },
{ "role": "user", "content": "Hi, yes I can still make it.", "words": [] }
],
"transcript_with_tool_calls": [
{ "role": "agent", "content": "Hi Sam, this is Bright Dental.", "ts": 1792310401200 },
{ "role": "user", "content": "Hi, yes I can still make it.", "ts": 1792310405800 },
{ "role": "tool_call_invocation", "tool_call_id": "tc_1", "name": "confirm_booking", "arguments": "{\"booking_id\":\"B-77\"}", "ts": 1792310406500 },
{ "role": "tool_call_result", "tool_call_id": "tc_1", "content": "{\"ok\":true}", "ts": 1792310407100 }
],
"recording_url": "https://api.tried.com.au/recordings/call_8d1e0f2a3b4c5d6e7f8a9b0c.wav?exp=1792396865000&sig=...",
"recording_multi_channel_url": null,
"public_log_url": "https://api.tried.com.au/public/calls/call_8d1e0f2a3b4c5d6e7f8a9b0c/log?exp=1792915265000&sig=...",
"knowledge_base_retrieved_contents_url": "https://api.tried.com.au/public/calls/call_8d1e0f2a3b4c5d6e7f8a9b0c/kb-retrievals?exp=1792915265000&sig=...",
"transfer_destination": null,
"llm_token_usage": { "values": [1820, 1904], "average": 1862, "num_requests": 2 },
"disconnection_reason": "agent_hangup",
"call_analysis": {
"call_summary": "Sam confirmed the Thursday 2:30 pm appointment.",
"in_voicemail": false,
"user_sentiment": "Positive",
"call_successful": true,
"custom_analysis_data": { "confirmed": true }
},
"latency": {
"e2e": { "p50": 720, "p90": 940, "p95": 940, "p99": 940, "max": 940, "min": 610, "num": 4, "values": [610, 720, 800, 940] }
},
"call_cost": {
"product_costs": [
{ "product": "voice_infra", "unit_price": 0.08, "cost": 0.086667 },
{ "product": "gpt-5.6-terra", "unit_price": 0.1, "cost": 0.108333 },
{ "product": "voice_standard", "unit_price": 0.06, "cost": 0.065 }
],
"total_duration_seconds": 65,
"combined_cost": 0.26
},
"batch_call_id": null,
"contact_id": "contact_5a6b7c8d9e0f1a2b3c4d5e6f"
}Unit prices come from the PRICE_PER_MIN table in packages/shared (AUD per minute) and cost is charged per second.
Call object fields#
| Field | Type | Description |
|---|---|---|
call_id |
string | Unique ID, call_ plus 24 hex characters. |
call_type |
string | phone_call or web_call. |
agent_id |
string | Agent that handled the call. |
agent_version |
integer | Agent version that ran. |
agent_name |
string | Name of the agent's latest version. Present on get, list and create responses. |
call_status |
string | registered (created, not connected yet), ongoing, ended, error or not_connected (never answered: busy, no answer, invalid number, timeout and similar). |
direction |
string or null | inbound or outbound for phone calls, null for web calls. |
from_number |
string or null | Caller number (E.164). |
to_number |
string or null | Called number (E.164). |
metadata |
object | The metadata you set. Live take-over adds taken_over_by and taken_over_at; environment tags add environment_tag. |
retell_llm_dynamic_variables |
object | Variables passed in at creation or by updates. All values are strings. |
collected_dynamic_variables |
object | Variables collected during the call (extract tools, flow nodes, SMS replies). |
start_timestamp |
integer or null | When the call connected, epoch ms. |
end_timestamp |
integer or null | When the call ended, epoch ms. |
duration_ms |
integer or null | Connected duration. 0 for calls that never started. |
transcript |
string | Plain text transcript, one Agent: ... or User: ... line per utterance. |
transcript_object |
array | Utterances: role (agent or user), content, and words (word, start, end in seconds) when the STT provider returned word timing. |
transcript_with_tool_calls |
array | Utterances plus events, each with ts (epoch ms). See Transcript items. |
recording_url |
string or null | Signed URL of the mixed recording: a presigned S3 URL when recordings are in S3, or an API /recordings/ link with exp and sig for local storage. |
recording_multi_channel_url |
string or null | Signed URL of the multi-channel recording, when one exists. |
public_log_url |
string or null | Signed link (valid 7 days from the response) to the call's runtime event log. null while registered. |
knowledge_base_retrieved_contents_url |
string or null | Signed link (valid 7 days) to the knowledge base chunks retrieved on each turn. null while registered. |
transfer_destination |
string or null | Destination of the last transfer that started. |
custom_sip_headers |
object | Present when the call was created with custom SIP headers. |
concurrency_burst |
boolean | Present and true when the call was admitted above the base concurrency limit. |
stir_shaken_attestation |
string | A, B or C. Present when the carrier provided it. |
caller_cnam |
string | Caller name. Present when the carrier provided it. |
llm_token_usage |
object or null | values (total tokens per LLM request), average and num_requests. |
disconnection_reason |
string or null | Why the call ended. See Disconnection reasons. |
call_analysis |
object or null | Post-call analysis, filled after the call ends. See call_analysis. |
latency |
object | Percentile stats per stage. Keys appear only when measured: e2e, asr, llm, tts, knowledge_base, llm_websocket_network_rtt, s2s. Each has p50, p90, p95, p99, max, min, num and values, in ms. |
call_cost |
object or null | Set when the call ends. See call_cost. |
batch_call_id |
string or null | Batch the call belongs to. |
contact_id |
string or null | Built-in contact linked to the call (phone calls). |
Transcript items#
Every item in transcript_with_tool_calls has a role and an optional ts:
role |
Other fields |
|---|---|
agent, user |
content |
tool_call_invocation |
tool_call_id, name, arguments (JSON string) |
tool_call_result |
tool_call_id, content |
node_transition |
former_node_id, new_node_id, transition_type (normal, global, global_go_back, interrupt_go_back) |
dtmf |
digit |
transfer |
event (transfer_started, transfer_bridged, transfer_cancelled, transfer_ended), destination, reason |
agent_swap |
former_agent_id, new_agent_id |
sms |
content, to_number |
injected |
content (context added with Update live call) |
call_analysis#
| Field | Type | Description |
|---|---|---|
call_summary |
string | Summary of the call. |
in_voicemail |
boolean | Whether the call reached voicemail. |
user_sentiment |
string | Positive, Negative, Neutral or Unknown. |
call_successful |
boolean | Whether the agent completed the task. |
custom_analysis_data |
object | Values for the agent's post_call_analysis_data fields, keyed by field name. |
call_cost#
| Field | Type | Description |
|---|---|---|
product_costs |
array | One line per product: product, unit_price (AUD per minute), and cost (AUD). Products are voice_infra, the LLM model ID, voice_premium or voice_standard, and knowledge_base (agents with a knowledge base). |
total_duration_seconds |
integer | Billed seconds (duration rounded up). |
combined_cost |
number | Sum of product_costs, AUD. |
Disconnection reasons#
user_hangup, agent_hangup, call_transfer, voicemail_reached, inactivity, max_duration_reached, concurrency_limit_reached, dial_busy, dial_failed, dial_no_answer, invalid_destination, manual_stopped, error_llm, error_asr, error_tts, error_no_audio_received, error_unknown, user_requested_dnc, user_requested_callback, ivr_reached, no_concurrency_fallback, no_valid_payment, credit_exhausted, budget_reached, scam_detected, telephony_provider_permission_denied, telephony_provider_unavailable, sip_routing_error, marked_as_spam, network_blocked, user_declined, error_llm_websocket_open, error_llm_websocket_lost_connection, error_llm_websocket_runtime, error_llm_websocket_corrupt_payload, error_retell, error_user_not_joined, registered_call_timeout, transfer_bridged, transfer_cancelled, call_take_over, guardrail_triggered.
Errors#
| Status | When |
|---|---|
401 |
Missing or invalid API key. |
403 |
The key's IP allowlist or scopes reject the request. This route needs the calls scope. |
404 |
No call with this ID in the workspace. |
429 |
Rate limit exceeded. See Rate limits. |
See Errors for the body format.
Compatibility notes#
GET /get-call/{call_id} is an alias.