Diarization

Speaker diarization and speaker identification for transcripts

Speaker diarization labels who said what in a recording. Add diarize: true to a request and get Speaker 1, Speaker 2 labels on every segment. Use it for interview transcription or uploaded meeting recordings.

  • Speaker 1, Speaker 2 labels on every segment
  • Labels in JSON, text, SRT and VTT
  • Works for YouTube links and uploaded files

How it works

One option
diarize defaults to false. Set it to true on POST /v1/transcriptions, or pass diarize to the MCP transcribe tool.
AI transcription only
Speaker labels need speech-to-text. With source set to auto, diarize: true skips YouTube captions and goes straight to it.
Labels in every format
transcript.speakers, each segment's speaker field, a Speaker 1: prefix in text and SRT, and a voice tag in VTT.
Word-level speakers
Add include=words to a JSON read to get per-word timings, each with its speaker.
Clear errors
source: captions together with diarize: true is rejected with 422 invalid_request instead of silently ignoring one.

Request

Use the speaker diarization API

Set diarize to true in the request body. To transcribe audio with speakers from a file, send the same option as a form field.

Request body
{
  "platform": "youtube",
  "url": "https://youtu.be/dQw4w9WgXcQ",
  "source": "stt",
  "diarize": true
}

JSON

Speakers on every segment

transcript.speakers lists the labels and each segment names its speaker. transcript_source is speech_to_text because captions carry no speaker information.

Response (shortened)
{
  "status": "completed",
  "transcript_source": "speech_to_text",
  "transcript": {
    "speakers": ["Speaker 1", "Speaker 2"],
    "segments": [
      { "start": 0, "end": 3.4, "speaker": "Speaker 1", "language": "en", "text": "Good morning." },
      { "start": 3.4, "end": 7.9, "speaker": "Speaker 2", "language": "en", "text": "Thanks for having me." }
    ]
  }
}

SRT and VTT

Speaker labels in SRT and WebVTT files

format=srt prefixes the cue text with Speaker 1:. format=vtt uses a voice tag. format=text gives one labeled line per segment.

format=vtt
WEBVTT

00:00:00.000 --> 00:00:03.400
<v Speaker 1>Good morning.

00:00:03.400 --> 00:00:07.900
<v Speaker 2>Thanks for having me.

Start with 60 free minutes

60 free minutes after you verify your email. No card required.

Get your API key

Frequently asked questions

Something missing? Ask support

How are speakers named?

As Speaker 1, Speaker 2 and so on. transcript1 does not know real names, so map the labels to people in your own code.

Do YouTube captions have speaker labels?

No. Captions do not say who is speaking. With source set to auto, diarize: true uses AI transcription instead of captions. Combining source: captions with diarize: true is rejected.

Does speaker diarization cost extra?

No. A transcription costs one credit per media minute, rounded up, with or without diarize.