API reference

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}/transcriptRetrieve a transcript
GET/v1/transcriptsSearch transcripts
GET/v1/calls/{id}/summaryRetrieve a summary
GET/v1/calls/{id}/tonalityRetrieve tonality

The transcript object

FieldTypeDescription
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

GET/v1/calls/{id}/transcript
curl https://api.liveleg.dev/v1/calls/cal_8Jq2mT4x/transcript \
  -H "Authorization: Bearer $LIVELEG_API_KEY"
Response
{
  "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"
}

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 parametersTypeDescription
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.
GET/v1/transcripts
curl "https://api.liveleg.dev/v1/transcripts?query=%22roof+inspection%22&speaker=prospect&outcome=interested" \
  -H "Authorization: Bearer $LIVELEG_API_KEY"
Response
{
  "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

GET/v1/calls/{id}/summary
curl https://api.liveleg.dev/v1/calls/cal_8Jq2mT4x/summary \
  -H "Authorization: Bearer $LIVELEG_API_KEY"
Response
{
  "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

GET/v1/calls/{id}/tonality
curl https://api.liveleg.dev/v1/calls/cal_8Jq2mT4x/tonality \
  -H "Authorization: Bearer $LIVELEG_API_KEY"
Response
{
  "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"
}