Transcripts
Transcripts cover the recorded audio of a call. Each turn is labeled agent, prospect or gatekeeper, with start and end times. After-call transcripts come with a summary and outcome fields, and tonality analysis when it is on. Turn transcription on in recording settings or per dial session. The live transcript streams over POST /v1/calls/{id}/streams with content=transcript, listed under Calls.
Guide: Transcription.
Endpoints
| GET | /v1/calls/{id}/transcript | Retrieve a transcript |
| GET | /v1/transcripts | Search transcripts |
| GET | /v1/calls/{id}/summary | Retrieve a summary |
| GET | /v1/calls/{id}/tonality | Retrieve tonality |
The transcript object
| Field | Type | Description |
|---|---|---|
id | string | Unique ID, starts with trn_. |
call_id | string | The call that was transcribed. |
recording_id | string | The recording the transcript was made from. |
type | string | post_call, or live when the call had transcription=live. |
status | string | processing or ready. transcript.ready is sent when it is ready. |
language | string | Language code, such as en-US or es-US. |
duration_seconds | integer | Length of the transcribed audio. |
turns | object[] | speaker (agent, prospect or gatekeeper), start_ms, end_ms and text for each turn. |
redactions | integer | Spoken card numbers removed from the text. |
created_at | string | When the transcript was ready, ISO 8601. |
Retrieve a transcript
Returns the transcript of a call. Only the recorded audio is transcribed, so on an all-party call the lead's turns start after consent.
GET/v1/calls/{id}/transcript
curl https://api.liveleg.dev/v1/calls/cal_8Jq2mT4x/transcript \
-H "Authorization: Bearer $LIVELEG_API_KEY"const res = await fetch('https://api.liveleg.dev/v1/calls/cal_8Jq2mT4x/transcript', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.LIVELEG_API_KEY}`,
},
});
const data = await res.json();import os, requests
data = requests.get(
"https://api.liveleg.dev/v1/calls/cal_8Jq2mT4x/transcript",
headers={"Authorization": f"Bearer {os.environ['LIVELEG_API_KEY']}"},
).json() {
"id": "trn_5Vb20Qe",
"object": "transcript",
"call_id": "cal_8Jq2mT4x",
"recording_id": "rec_0Hy3k",
"type": "post_call",
"status": "ready",
"language": "en-US",
"duration_seconds": 262,
"turns": [
{
"speaker": "agent",
"start_ms": 0,
"end_ms": 4210,
"text": "Hi, this is Sam with Ridgeline Roofing. Is this the owner?"
},
{
"speaker": "prospect",
"start_ms": 4630,
"end_ms": 6020,
"text": "Yes, this is Dana."
},
{
"speaker": "agent",
"start_ms": 6400,
"end_ms": 11870,
"text": "We did a few roofs on your street after the hail last week. Can I set up a free inspection?"
},
{
"speaker": "prospect",
"start_ms": 12310,
"end_ms": 16050,
"text": "I am on a job right now. Call me Thursday after 2."
}
],
"redactions": 1,
"created_at": "2026-11-03T15:46:58Z"
} Search transcripts
Finds calls whose transcripts contain the words or phrase you send. Each result lists the matching turns with their times. Results are newest first.
GET/v1/transcripts
| Query parameters | Type | Description |
|---|---|---|
queryrequired | string | Words or a phrase in quotes. |
speaker | string | Only turns by agent, prospect or gatekeeper. |
agent_id | string | Only calls taken by this agent. |
outcome | string | Only calls with this outcome. |
created_after | string | ISO 8601. |
created_before | string | ISO 8601. |
limit | integer | 1 to 100. Default 20. |
starting_after | string | The last ID from the previous page. |
curl "https://api.liveleg.dev/v1/transcripts?query=%22roof+inspection%22&speaker=prospect&outcome=interested" \
-H "Authorization: Bearer $LIVELEG_API_KEY"const res = await fetch('https://api.liveleg.dev/v1/transcripts?query=%22roof+inspection%22&speaker=prospect&outcome=interested', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.LIVELEG_API_KEY}`,
},
});
const data = await res.json();import os, requests
data = requests.get(
"https://api.liveleg.dev/v1/transcripts",
headers={"Authorization": f"Bearer {os.environ['LIVELEG_API_KEY']}"},
params={
"query": "\"roof inspection\"",
"speaker": "prospect",
"outcome": "interested",
},
).json() {
"object": "list",
"data": [
{
"call_id": "cal_7Hd1aP2c",
"agent_id": "agt_114",
"lead_id": "led_9Pq1",
"outcome": "interested",
"matches": [
{
"speaker": "prospect",
"start_ms": 48210,
"text": "We could do the roof inspection next week."
}
]
}
],
"has_more": false
} Retrieve a summary
Returns the summary and outcome fields of an after-call transcript. summary.ready is sent when they are ready. outcome is interested, callback_requested, not_interested, do_not_call, wrong_number, gatekeeper or no_conversation. When the lead asks not to be called again, the number goes on your do-not-call list, outcome is do_not_call and opt_out_requested is true. callback_at does not schedule a call. Send it as a disposition to schedule one.
GET/v1/calls/{id}/summary
curl https://api.liveleg.dev/v1/calls/cal_8Jq2mT4x/summary \
-H "Authorization: Bearer $LIVELEG_API_KEY"const res = await fetch('https://api.liveleg.dev/v1/calls/cal_8Jq2mT4x/summary', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.LIVELEG_API_KEY}`,
},
});
const data = await res.json();import os, requests
data = requests.get(
"https://api.liveleg.dev/v1/calls/cal_8Jq2mT4x/summary",
headers={"Authorization": f"Bearer {os.environ['LIVELEG_API_KEY']}"},
).json() {
"object": "call_summary",
"call_id": "cal_8Jq2mT4x",
"transcript_id": "trn_5Vb20Qe",
"summary": "Owner answered. Busy on a job, asked for a call Thursday after 2 pm.",
"outcome": "callback_requested",
"callback_at": "2026-11-06T14:00:00-06:00",
"opt_out_requested": false,
"created_at": "2026-11-03T15:47:02Z"
} Retrieve tonality
Returns tone, energy, sentiment and talk/listen ratio for each speaker. Runs on transcribed calls when tonality is true in recording settings. tonality.ready is sent when it is ready. tone is friendly, neutral, tense or flat, for most of the call. energy is 0 to 1, from voice volume and pace. sentiment is -1 to 1, from words and voice. talk_ratio is the share of the call's talk time spoken by the speaker.
GET/v1/calls/{id}/tonality
curl https://api.liveleg.dev/v1/calls/cal_8Jq2mT4x/tonality \
-H "Authorization: Bearer $LIVELEG_API_KEY"const res = await fetch('https://api.liveleg.dev/v1/calls/cal_8Jq2mT4x/tonality', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.LIVELEG_API_KEY}`,
},
});
const data = await res.json();import os, requests
data = requests.get(
"https://api.liveleg.dev/v1/calls/cal_8Jq2mT4x/tonality",
headers={"Authorization": f"Bearer {os.environ['LIVELEG_API_KEY']}"},
).json() {
"object": "tonality",
"call_id": "cal_8Jq2mT4x",
"transcript_id": "trn_5Vb20Qe",
"speakers": [
{
"speaker": "agent",
"tone": "friendly",
"energy": 0.68,
"sentiment": 0.42,
"talk_ratio": 0.57
},
{
"speaker": "prospect",
"tone": "neutral",
"energy": 0.51,
"sentiment": 0.18,
"talk_ratio": 0.43
}
],
"created_at": "2026-11-03T15:47:09Z"
}