# AssemblyAI

> Turn recordings into text with AssemblyAI: calls, meetings, voicemails, interviews and podcasts, in 99 languages. Tell the speakers apart, get a summary, the sentiment and the topics, take personal details out as it goes, export captions for a video, and find where a word was said.

App · Voice AI · 9 actions. Web page: https://docs.lodol.com/docs/integrations/assemblyai

## Actions

### Delete a transcript

Permanently remove a transcript's words and analysis from AssemblyAI. Use it at the end of a workflow that has already saved what it needs, so nothing sensitive is left sitting on someone else's servers. This cannot be undone.

**Inputs**

- Transcript (`transcript_id`, text, required): The transcript to read, as handed back by 'Transcribe a recording'. Chain it from that step rather than typing it.

**Outputs**

- `deleted` (true/false): Always true once the deletion went through.
- `status` (text): The state it was in when it was deleted.
- `transcript_id` (text): The transcript that was deleted.

**Example output**

```json
{
  "deleted": true,
  "status": "completed",
  "transcript_id": "9ea68fd3-f953-42c1-9742-976c447fb463"
}
```

### Find recent transcripts

List the transcripts on your AssemblyAI account, newest first, optionally narrowed to one day or to the ones that are still running or that failed. AssemblyAI keeps the last 90 days.

**Inputs**

- Only show (`status`, text): Narrow the list to transcripts in one state. One of: `completed` (Finished), `processing` (Still being transcribed), `queued` (Waiting to start), `error` (Failed).
- Made on (`created_on`, date): Only transcripts started on this day. Leave it empty for all of the last 90 days.
- How many (`limit`, number): How many to bring back, newest first. From 1 to 200. Default: `20`.

**Outputs**

- `count` (number): How many came back.
- `transcripts` (list): The transcripts found, newest first.

**Example output**

```json
{
  "count": 1,
  "transcripts": [
    {
      "completed_at": "2026-09-15T10:04:47.918Z",
      "created_at": "2026-09-15T10:04:11.423Z",
      "error": null,
      "recording_url": "https://cdn.assemblyai.com/upload/4f2c1a90-support-call.m4a",
      "status": "completed",
      "transcript_id": "9ea68fd3-f953-42c1-9742-976c447fb463"
    }
  ]
}
```

### Find words in a recording

Check whether particular words or phrases were said, how often, and where in the recording. Use it to flag a competitor's name on a sales call, confirm a required disclosure was read out, or jump to the moment a product was mentioned.

**Inputs**

- Transcript (`transcript_id`, text, required): The transcript to read, as handed back by 'Transcribe a recording'. Chain it from that step rather than typing it.
- Words to find (`words`, list, required): The words or short phrases to look for. Phrases can be up to five words long.

**Outputs**

- `matches` (list): One entry per word or phrase searched for.
- `total_count` (number): How many times anything was heard in all.
- `transcript_id` (text): The transcript that was searched.

**Example output**

```json
{
  "matches": [
    {
      "count": 3,
      "heard_at": [
        {
          "end_seconds": 6.78,
          "start_seconds": 6.24
        },
        {
          "end_seconds": 41.62,
          "start_seconds": 41.1
        },
        {
          "end_seconds": 119.4,
          "start_seconds": 118.94
        }
      ],
      "text": "invoice"
    },
    {
      "count": 0,
      "heard_at": [],
      "text": "cancel"
    }
  ],
  "total_count": 3,
  "transcript_id": "9ea68fd3-f953-42c1-9742-976c447fb463"
}
```

### Get a transcript

Fetch a transcript AssemblyAI has already made, by its ID, with everything that was worked out alongside it. Use this to pick up a recording that was still processing when an earlier step ended, or to re-read one without paying to transcribe it again.

**Inputs**

- Transcript (`transcript_id`, text, required): The transcript to read, as handed back by 'Transcribe a recording'. Chain it from that step rather than typing it.

**Outputs**

- `chapters` (list): The recording split into chapters. Only when chapters were asked for.
- `confidence` (number): How sure AssemblyAI is of the words, from 0 to 1.
- `duration_seconds` (number): How long the recording is, in seconds.
- `entities` (list): The people, places, dates and amounts that were mentioned. Only when entities were asked for.
- `key_phrases` (list): The phrases that stood out, most important first. Only when key phrases were asked for.
- `language` (text): The language that was spoken, detected or set.
- `overall_sentiment` (text): 'positive', 'neutral' or 'negative' for the recording as a whole, from whether positive or negative sentences won out.
- `recording_url` (text): The recording AssemblyAI transcribed.
- `sensitive_content` (list): Each passage that was flagged, and what for.
- `sensitive_content_topics` (list): The kinds of sensitive content found anywhere in the recording, such as 'profanity'.
- `sentiment_counts` (object): How many sentences were positive, neutral and negative.
- `sentiment_segments` (list): Every sentence with its own sentiment, in order.
- `speaker_transcript` (text): The same words laid out as 'Speaker A: …' lines. Only when speakers were identified.
- `speakers` (list): The speakers it heard, in the order they first spoke. Only when speakers were identified.
- `status` (text): 'completed' when the words are ready. 'queued' or 'processing' means AssemblyAI is still working on it.
- `summary` (text): The summary. Only when a summary was asked for.
- `text` (text): Everything that was said, as one piece of text.
- `topics` (list): What the recording was about, most relevant first. Only when topics were asked for.
- `transcript_id` (text): AssemblyAI's ID for this transcript. Pass it to any of the other AssemblyAI steps.
- `utterances` (list): Each turn of the conversation, in order.
- `word_count` (number): How many words were said.

**Example output**

```json
{
  "chapters": [],
  "confidence": 0.9432,
  "duration_seconds": 281,
  "entities": [
    {
      "end_seconds": 3.2,
      "start_seconds": 2.8,
      "text": "Priya",
      "type": "person_name"
    },
    {
      "end_seconds": 2.6,
      "start_seconds": 1.4,
      "text": "Northwind Support",
      "type": "organization"
    }
  ],
  "key_phrases": [
    {
      "count": 2,
      "rank": 0.08,
      "text": "seat count"
    },
    {
      "count": 3,
      "rank": 0.07,
      "text": "invoice"
    }
  ],
  "language": "en_us",
  "overall_sentiment": "neutral",
  "recording_url": "https://cdn.assemblyai.com/upload/4f2c1a90-support-call.m4a",
  "sensitive_content": [],
  "sensitive_content_topics": [],
  "sentiment_counts": {
    "negative": 2,
    "neutral": 3,
    "positive": 2
  },
  "sentiment_segments": [
    {
      "confidence": 0.79,
      "end_seconds": 4.1,
      "sentiment": "positive",
      "speaker": "A",
      "start_seconds": 0.52,
      "text": "Thanks for calling Northwind Support, this is Priya."
    }
  ],
  "speaker_transcript": "A: Thanks for calling Northwind Support, this is Priya.\nB: Hi Priya, our invoice this month came in almost double what we expected and I want to understand what changed before I approve it.\nA: I can see the seat count went from twelve to twenty-one in May, which is what moved the bill. I can credit the difference for this cycle and set it so an admin approves any seat change first.",
  "speakers": [
    "A",
    "B"
  ],
  "status": "completed",
  "summary": "- The customer's invoice roughly doubled this month.\n- The increase came from the seat count rising from twelve to twenty-one in May.\n- Support offered a credit for this cycle and an admin approval step for future seat changes.",
  "text": "Thanks for calling Northwind Support, this is Priya. Hi Priya, our invoice this month came in almost double what we expected and I want to understand what changed before I approve it. I can see the seat count went from twelve to twenty-one in May, which is what moved the bill. I can credit the difference for this cycle and set it so an admin approves any seat change first.",
  "topics": [
    {
      "relevance": 0.91,
      "topic": "Business>BusinessSoftwareAndServices"
    },
    {
      "relevance": 0.42,
      "topic": "Business>Sales"
    }
  ],
  "transcript_id": "9ea68fd3-f953-42c1-9742-976c447fb463",
  "utterances": [
    {
      "confidence": 0.96,
      "end_seconds": 4.1,
      "speaker": "A",
      "start_seconds": 0.52,
      "text": "Thanks for calling Northwind Support, this is Priya."
    },
    {
      "confidence": 0.94,
      "end_seconds": 13.88,
      "speaker": "B",
      "start_seconds": 4.5,
      "text": "Hi Priya, our invoice this month came in almost double what we expected and I want to understand what changed before I approve it."
    }
  ],
  "word_count": 74
}
```

### Get captions for a video

Export the transcript as a subtitle file, saved and ready for a later step to upload beside a video, attach to an email or store. SRT suits YouTube and most editing software; VTT suits the web.

**Inputs**

- Transcript (`transcript_id`, text, required): The transcript to read, as handed back by 'Transcribe a recording'. Chain it from that step rather than typing it.
- Format (`caption_format`, text): Which subtitle file to produce. One of: `srt` (SRT (YouTube, video editors)), `vtt` (VTT (web video)). Default: `srt`.
- Characters per caption (`characters_per_caption`, number): How much text to fit on screen at once. Leave it empty to let AssemblyAI decide; around 32 keeps captions to a single line on a phone. From 10 to 200.

**Outputs**

- `caption_count` (number): How many captions are in it.
- `captions` (text): The subtitle file's contents as text, for a step that wants to read or paste them rather than attach the file.
- `content_type` (text): What kind of file it is.
- `document_ref` (text): The saved subtitle file. Pass this to a later step that sends, uploads or stores a file.
- `documents` (list): The saved subtitle file, as a one-item list.
- `filename` (text): What the file is called.
- `format` (text): 'srt' or 'vtt'.
- `size_bytes` (number): How big it is, in bytes.
- `transcript_id` (text): The transcript the captions came from.
- `url` (text): Where to download it from Lodol.

**Example output**

```json
{
  "caption_count": 2,
  "captions": "1\n00:00:00,520 --> 00:00:04,100\nThanks for calling Northwind Support, this is Priya.\n\n2\n00:00:04,500 --> 00:00:08,120\nHi Priya, our invoice this month came in almost double.\n",
  "content_type": "application/x-subrip",
  "document_ref": "doc_7c31f0ab92",
  "documents": [
    {
      "content_type": "application/x-subrip",
      "document_ref": "doc_7c31f0ab92",
      "filename": "9ea68fd3-f953-42c1-9742-976c447fb463.srt",
      "size_bytes": 1482,
      "url": "/actions/core/serve-document/doc_7c31f0ab92"
    }
  ],
  "filename": "9ea68fd3-f953-42c1-9742-976c447fb463.srt",
  "format": "srt",
  "size_bytes": 1482,
  "transcript_id": "9ea68fd3-f953-42c1-9742-976c447fb463",
  "url": "/actions/core/serve-document/doc_7c31f0ab92"
}
```

### Get the bleeped recording

Save the copy of the recording with the personal details beeped out, so the audio can be shared, kept or used for training without the private parts in it. Only exists when 'Transcribe a recording' was asked to bleep the audio, and AssemblyAI only keeps it for 24 hours, so fetch it in the same workflow rather than days later.

**Inputs**

- Transcript (`transcript_id`, text, required): The transcript to read, as handed back by 'Transcribe a recording'. Chain it from that step rather than typing it.

**Outputs**

- `content_type` (text): What kind of file it is.
- `document_ref` (text): The saved recording. Pass this to a later step that sends, uploads or stores a file.
- `documents` (list): The saved recording, as a one-item list.
- `filename` (text): What the file is called.
- `size_bytes` (number): How big it is, in bytes.
- `status` (text): 'redacted_audio_ready' once AssemblyAI has finished making it.
- `transcript_id` (text): The transcript it belongs to.
- `url` (text): Where to download it from Lodol.

**Example output**

```json
{
  "content_type": "audio/mpeg",
  "document_ref": "doc_2f80ba4c17",
  "documents": [
    {
      "content_type": "audio/mpeg",
      "document_ref": "doc_2f80ba4c17",
      "filename": "9ea68fd3-f953-42c1-9742-976c447fb463-bleeped.mp3",
      "size_bytes": 2248106,
      "url": "/actions/core/serve-document/doc_2f80ba4c17"
    }
  ],
  "filename": "9ea68fd3-f953-42c1-9742-976c447fb463-bleeped.mp3",
  "size_bytes": 2248106,
  "status": "redacted_audio_ready",
  "transcript_id": "9ea68fd3-f953-42c1-9742-976c447fb463",
  "url": "/actions/core/serve-document/doc_2f80ba4c17"
}
```

### Get the paragraphs

The transcript broken into paragraphs, each with where it falls in the recording. Use it when you want the transcript laid out to be read (in a document, an email or a page), rather than as one block.

**Inputs**

- Transcript (`transcript_id`, text, required): The transcript to read, as handed back by 'Transcribe a recording'. Chain it from that step rather than typing it.

**Outputs**

- `confidence` (number): How sure AssemblyAI is of the words, from 0 to 1.
- `count` (number): How many there are.
- `duration_seconds` (number): How long the recording is, in seconds.
- `passages` (list): The transcript, in order.
- `split_by` (text): 'sentence' or 'paragraph'.
- `transcript_id` (text): The transcript this came from.

**Example output**

```json
{
  "confidence": 0.9432,
  "count": 2,
  "duration_seconds": 281,
  "passages": [
    {
      "confidence": 0.96,
      "end_seconds": 4.1,
      "speaker": "A",
      "start_seconds": 0.52,
      "text": "Thanks for calling Northwind Support, this is Priya."
    },
    {
      "confidence": 0.98,
      "end_seconds": 5.36,
      "speaker": "A",
      "start_seconds": 4.12,
      "text": "How can I help today?"
    }
  ],
  "split_by": "paragraph",
  "transcript_id": "9ea68fd3-f953-42c1-9742-976c447fb463"
}
```

### Get the sentences

The transcript broken into sentences, each with where it falls in the recording and who said it. Use it to pull a quote with a timestamp, or to walk the transcript a sentence at a time.

**Inputs**

- Transcript (`transcript_id`, text, required): The transcript to read, as handed back by 'Transcribe a recording'. Chain it from that step rather than typing it.

**Outputs**

- `confidence` (number): How sure AssemblyAI is of the words, from 0 to 1.
- `count` (number): How many there are.
- `duration_seconds` (number): How long the recording is, in seconds.
- `passages` (list): The transcript, in order.
- `split_by` (text): 'sentence' or 'paragraph'.
- `transcript_id` (text): The transcript this came from.

**Example output**

```json
{
  "confidence": 0.9432,
  "count": 2,
  "duration_seconds": 281,
  "passages": [
    {
      "confidence": 0.96,
      "end_seconds": 4.1,
      "speaker": "A",
      "start_seconds": 0.52,
      "text": "Thanks for calling Northwind Support, this is Priya."
    },
    {
      "confidence": 0.98,
      "end_seconds": 5.36,
      "speaker": "A",
      "start_seconds": 4.12,
      "text": "How can I help today?"
    }
  ],
  "split_by": "sentence",
  "transcript_id": "9ea68fd3-f953-42c1-9742-976c447fb463"
}
```

### Transcribe a recording

Turn an audio or video recording into text and wait for it. Point it at a call, a meeting, a voicemail or a podcast (upload the file, use one an earlier step produced, or paste a link) and get back everything that was said, who said it, and, if you ask, a summary, the sentiment, the topics and the names and amounts mentioned. Personal details can be taken out as it goes.

**Inputs**

- Recording (`recording`, text, required): The audio or video to transcribe: upload a file, pick one an earlier step produced, or paste a link to one.
- Language (`language`, text): The language being spoken. Leave it on automatic unless the recording is short or noisy enough that detection might get it wrong. One of: `auto` (Detect automatically (recommended)), `en` (English (global)), `en_us` (English (US)), `en_uk` (English (British)), `en_au` (English (Australian)), `es` (Spanish), `fr` (French), `de` (German), `it` (Italian), `pt` (Portuguese), and 93 more. Default: `auto`.
- Tell the speakers apart (`identify_speakers`, true/false): Label who is speaking, so the transcript reads as a conversation rather than one block of text. Turn this on for calls, interviews and meetings. Default: `false`.
- How many people are speaking (`expected_speakers`, number): Only if you know. Telling AssemblyAI the number keeps it from splitting one person into two. Needs 'Tell the speakers apart' turned on. From 1 to 10.
- Also work out (`analyze`, list): What to read out of the recording alongside the words. Each one comes back as its own field. A summary and chapters can't be done in the same pass (pick whichever you need), and either one transcribes with an older, slightly less accurate model, so leave both off when the words themselves matter most. One or more of: `summary` (A summary of the whole recording), `chapters` (Chapters, each with its own headline), `key_phrases` (The key phrases that came up), `sentiment` (How positive or negative each sentence was), `entities` (The names, dates, places and amounts mentioned), `topics` (What the recording was about), `sensitive_content` (Warnings about sensitive content).
- Summary style (`summary_style`, text): The shape of the summary. Only applies when you have asked for one above. One of: `bullets` (Bullet points), `detailed_bullets` (Detailed bullet points), `paragraph` (A paragraph), `headline` (A one-line headline), `one_line` (Just a few words). Default: `bullets`.
- Remove personal information (`remove_personal_information`, list): What to take out of the transcript. Anything removed is replaced with a label such as [PERSON_NAME], so the transcript still reads. Leave it empty to keep the recording exactly as spoken. One or more of: `everything` (Everything personal (recommended)), `names` (Names of people), `ages_and_birthdays` (Ages and dates of birth), `phone_numbers` (Phone numbers), `email_addresses` (Email addresses), `addresses` (Street addresses and locations), `card_details` (Payment card details), `bank_details` (Bank and account details), `social_security_numbers` (Social security numbers), `id_numbers` (Licence, passport and vehicle numbers), and 6 more.
- Also bleep the audio (`bleep_the_recording`, true/false): Make a copy of the recording with the removed details beeped out, which 'Get the bleeped recording' can then download. Needs something chosen above. Default: `false`.
- Words to listen for (`words_to_listen_for`, list): Names, products or jargon the recording uses that a transcriber would not expect: 'Lodol', 'Skipflow', a drug name, a customer's surname. Short phrases are fine, up to six words each.

**Outputs**

- `chapters` (list): The recording split into chapters. Only when chapters were asked for.
- `confidence` (number): How sure AssemblyAI is of the words, from 0 to 1.
- `duration_seconds` (number): How long the recording is, in seconds.
- `entities` (list): The people, places, dates and amounts that were mentioned. Only when entities were asked for.
- `key_phrases` (list): The phrases that stood out, most important first. Only when key phrases were asked for.
- `language` (text): The language that was spoken, detected or set.
- `overall_sentiment` (text): 'positive', 'neutral' or 'negative' for the recording as a whole, from whether positive or negative sentences won out.
- `recording_url` (text): The recording AssemblyAI transcribed.
- `sensitive_content` (list): Each passage that was flagged, and what for.
- `sensitive_content_topics` (list): The kinds of sensitive content found anywhere in the recording, such as 'profanity'.
- `sentiment_counts` (object): How many sentences were positive, neutral and negative.
- `sentiment_segments` (list): Every sentence with its own sentiment, in order.
- `speaker_transcript` (text): The same words laid out as 'Speaker A: …' lines. Only when speakers were identified.
- `speakers` (list): The speakers it heard, in the order they first spoke. Only when speakers were identified.
- `status` (text): 'completed' when the words are ready. 'queued' or 'processing' means AssemblyAI is still working on it.
- `summary` (text): The summary. Only when a summary was asked for.
- `text` (text): Everything that was said, as one piece of text.
- `topics` (list): What the recording was about, most relevant first. Only when topics were asked for.
- `transcript_id` (text): AssemblyAI's ID for this transcript. Pass it to any of the other AssemblyAI steps.
- `utterances` (list): Each turn of the conversation, in order.
- `word_count` (number): How many words were said.

**Example output**

```json
{
  "chapters": [],
  "confidence": 0.9432,
  "duration_seconds": 281,
  "entities": [
    {
      "end_seconds": 3.2,
      "start_seconds": 2.8,
      "text": "Priya",
      "type": "person_name"
    },
    {
      "end_seconds": 2.6,
      "start_seconds": 1.4,
      "text": "Northwind Support",
      "type": "organization"
    }
  ],
  "key_phrases": [
    {
      "count": 2,
      "rank": 0.08,
      "text": "seat count"
    },
    {
      "count": 3,
      "rank": 0.07,
      "text": "invoice"
    }
  ],
  "language": "en_us",
  "overall_sentiment": "neutral",
  "recording_url": "https://cdn.assemblyai.com/upload/4f2c1a90-support-call.m4a",
  "sensitive_content": [],
  "sensitive_content_topics": [],
  "sentiment_counts": {
    "negative": 2,
    "neutral": 3,
    "positive": 2
  },
  "sentiment_segments": [
    {
      "confidence": 0.79,
      "end_seconds": 4.1,
      "sentiment": "positive",
      "speaker": "A",
      "start_seconds": 0.52,
      "text": "Thanks for calling Northwind Support, this is Priya."
    }
  ],
  "speaker_transcript": "A: Thanks for calling Northwind Support, this is Priya.\nB: Hi Priya, our invoice this month came in almost double what we expected and I want to understand what changed before I approve it.\nA: I can see the seat count went from twelve to twenty-one in May, which is what moved the bill. I can credit the difference for this cycle and set it so an admin approves any seat change first.",
  "speakers": [
    "A",
    "B"
  ],
  "status": "completed",
  "summary": "- The customer's invoice roughly doubled this month.\n- The increase came from the seat count rising from twelve to twenty-one in May.\n- Support offered a credit for this cycle and an admin approval step for future seat changes.",
  "text": "Thanks for calling Northwind Support, this is Priya. Hi Priya, our invoice this month came in almost double what we expected and I want to understand what changed before I approve it. I can see the seat count went from twelve to twenty-one in May, which is what moved the bill. I can credit the difference for this cycle and set it so an admin approves any seat change first.",
  "topics": [
    {
      "relevance": 0.91,
      "topic": "Business>BusinessSoftwareAndServices"
    },
    {
      "relevance": 0.42,
      "topic": "Business>Sales"
    }
  ],
  "transcript_id": "9ea68fd3-f953-42c1-9742-976c447fb463",
  "utterances": [
    {
      "confidence": 0.96,
      "end_seconds": 4.1,
      "speaker": "A",
      "start_seconds": 0.52,
      "text": "Thanks for calling Northwind Support, this is Priya."
    },
    {
      "confidence": 0.94,
      "end_seconds": 13.88,
      "speaker": "B",
      "start_seconds": 4.5,
      "text": "Hi Priya, our invoice this month came in almost double what we expected and I want to understand what changed before I approve it."
    }
  ],
  "word_count": 74
}
```
