Speaker diarization API for multi-speaker audio

Turn podcasts, interviews, and meetings into anonymous speaker-labeled segments.
The API can preserve overlapping timestamps when simultaneous speech is detected.

Example: Speaker Diarization + Optional Word Timestamps

B
09:51.152 → 09:58.352

This is essentially diarization.

A
10:03.392 → 10:05.552

The system isn't just listening to words…

B
10:15.024 → 10:16.964

Even in a chaotic multi person meeting.

{ "speaker_id" : "A" }

Sentence-level excerpts shown here use both Parse Speakers and Parse Words. Diarization alone adds speaker_id to each transcript segment.

Turn One Mixed Recording into Speaker-Attributed Segments

The example above uses verbatim lines and word-level timestamps from a completed transcription job in which two text-to-speech hosts reviewed Speech is Cheap's own changelog.

Enable It with One Flag

Set can_parse_speakers to true when you create a transcription job.

Represent Detected Overlap

When simultaneous speech is detected, different speakers can have crossing timestamps instead of being cut at an invented midpoint.

Use Standard or Split-Channel Mode

Group mixed audio by voice, or assign one speaker per channel for recordings that already separate the participants.

Receive Structured Speaker Segments

Each speech segment includes an anonymous speaker_id together with its start, end, confidence, language, and text.

API Example

Enable Speaker Diarization in One Request

Use the asynchronous Jobs v2 API for a public media URL, direct upload, webhook delivery, or streamed output.

Request

Bash
curl --request POST \
  --url https://api.speechischeap.com/v2/jobs/ \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "input_url": "https://example.com/customer-interview.mp3",
    "can_parse_speakers": true,
    "webhook_url": "https://your-domain.com/webhook"
  }'

Completed output excerpt

JSON
{
  "id": "019cecbf-fa71-7440-b948-f0653fb4d058-sic",
  "status": "COMPLETED",
  "output": {
    "segments": [
      {
        "id": 98,
        "start": 591.152,
        "end": 598.352,
        "speaker_id": "B",
        "language": "en (99.90%)",
        "confidence": 0.992,
        "processing_duration_in_s": 0.029,
        "text": "This is essentially diarization. It analyzes the audio and figures out exactly who said what, isolating the text by speaker."
      },
      {
        "id": 99,
        "start": 598.352,
        "end": 602.432,
        "speaker_id": "A",
        "language": "en (99.60%)",
        "confidence": 0.951,
        "processing_duration_in_s": 0.024,
        "text": "And you know, diarisation is incredibly taxing from a computational standpoint."
      }
    ]
  }
}

This is an excerpt from a real completed job with 198 speaker-labeled segments. Speaker parsing also works with word timestamps, audio labels, webhooks, and chronological SSE output.

See Params

Under the Hood

Purpose-Built Speaker Processing

The pipeline combines speech detection, speaker embeddings, spectral clustering, and overlap analysis to group recurring voices across long recordings.

Find Speech First

Speech regions are isolated before speaker analysis so silence and other non-speech audio do not distort the result.

Compare Voice Characteristics

Speaker embeddings measure voice characteristics across the recording instead of relying on sentence breaks.

Reconnect Returning Speakers

The clustering stage is designed to keep the same anonymous label when a voice returns later in the recording.

Preserve Likely Overlap

Likely simultaneous turns receive additional analysis so detected overlap can remain visible in the timestamps.

Multiple Speaker Modes

Match the API to How Your Recording Was Captured

Diarize two speakers or more in mixed conversations, or use split-channel parsing when your source already isolates each participant.

Mixed Audio

Voice-Based Diarization

Use can_parse_speakers when multiple people appear in the same mixed recording. Segments are assigned anonymous speaker labels based on the speaker's voice.

"can_parse_speakers" : true

Multi-Channel Audio

Split-Channel Parsing

Use is_split_channel when each speaker has a dedicated channel, as in many call-center or multi-track recordings. The API assigns one speaker to every available channel, including supported recordings with more than two channels.

"is_split_channel" : true

Built for Recurring Multi-Speaker Transcription

Turn conversations into structured records your application can search, display, summarize, or pass to downstream systems.

Customer and sales calls

Keep agent and customer turns separate in call recordings, especially when each side is captured on its own channel.

Podcasts and interviews

Create readable transcripts that preserve host, guest, and interviewer turns across long-form recordings.

Meetings and discussions

Represent a multi-person conversation as chronological, speaker-labeled segments for later processing.

Research and media archives

Add speaker structure to recorded interviews, panels, oral histories, and other searchable audio collections.

Transparent Add-On Pricing

Pay for Speaker Parsing Only When You Use It

The Parse Speakers add-on is billed in addition to the core transcription rate.

Pay as You Go

$0.002 per audio minute

$0.12 per hour for the speaker diarization add-on.

  • Core transcription: $0.002 per minute
  • Speaker parsing: an additional $0.002 per minute
  • No subscription commitment
Best for Volume

Subscriber

$0.001 per audio minute

$0.06 per hour for the speaker diarization add-on.

  • $20 per month includes 21,600 transcription minutes
  • Speaker parsing: an additional $0.001 per minute
  • Core overage: $0.000926 per minute

Optional add-ons are billed separately. You are charged only for successfully completed transcriptions.

Compare API Plans

Clear Boundaries

Know How Speaker Diarization Works

Design your integration around the output the API actually returns.

Labels, not identities

The API returns anonymous labels such as A and B. The documented output does not return a participant's name or a known-speaker identity match.

Non-speech may have no speaker

When speaker parsing is combined with the Label Audio add-on, a music, silence, or other non-speech segment may return an empty speaker_id.

Split-channel assumes one speaker per channel

Use split-channel parsing only when the recording layout matches that assumption. Otherwise, use voice-based diarization on the mixed audio.

Use Jobs v2

Speaker parsing is exposed by the asynchronous Jobs v2 API. The current Edge v2 request parameters do not include can_parse_speakers.

Speaker Diarization API Questions

Implementation details developers usually need before integrating.

What is speaker diarization?

Speaker diarization separates a conversation into speech segments and assigns an anonymous speaker_id, such as A or B, to each segment. It answers “who spoke when” without identifying a person by name.

How do I enable speaker diarization?

Create a Jobs v2 transcription request with can_parse_speakers set to true. The completed JSON output will include speaker_id on each speech segment.

How does the API represent overlapping speech?

Different speakers are allowed to have overlapping timestamps. When the diarizer finds simultaneous turns, one segment may end after the next segment begins instead of forcing both voices to meet at an artificial midpoint.

Does diarization identify speakers by name?

No. The API returns anonymous labels such as A and B. Your application may associate those labels with names when it has separate, reliable information about the participants.

What is split-channel speaker parsing?

For multi-channel recordings where one speaker is isolated on each channel, set is_split_channel to true. The API assigns one speaker to every available channel, including supported recordings with more than two channels.

Can I combine diarization with word timestamps and audio labels?

Yes. Jobs v2 accepts can_parse_speakers, can_parse_words, and can_label_audio in the same request. When speaker parsing and audio labels are combined, a non-speech segment may have an empty speaker_id.

How much does the speaker diarization add-on cost?

The Parse Speakers add-on costs $0.002 per audio minute for pay-as-you-go customers and $0.001 per audio minute for subscribers. Core transcription is billed separately.

What inputs can I diarize?

Jobs v2 accepts a publicly accessible file URL or a direct file upload. Inputs must be between six seconds and 24 hours long; direct uploads may be up to 2 GiB. See the supported file types.

Add Speaker Labels to Your Next Transcript

Choose a plan, get your API key, and set can_parse_speakers to true.