Speaker diarization API

A speaker diarization API that gives you the audio, not just timestamps

Most diarization APIs tell you who spoke when, then leave the cutting to you. SpeakerSplit does the cutting. Send a podcast, interview or meeting recording and get back one MP3 or WAV per speaker, each speaker’s name, and a transcript with every line labelled.

Get an API key · Read the API docs

What you get back

  • One track per speaker. Each track runs the full length of the recording and is silent where that person isn’t talking, so the tracks line up in your editor. Set preserve_timing to false to get only that person’s speech, back to back.
  • Real names instead of SPEAKER_00. Names said in the recording ("I’m your host, Jane Doe") are picked up automatically, and a list of who might be speaking, with a short description like "Host" or "Guest, founder of Acme", names the rest. Set identify_speakers to false for plain labels (A, B, C…).
  • A transcript with speaker names, as JSON, TXT, Markdown, SRT or VTT, from GET /v1/jobs/{id}/transcript.
  • MP3 at 64, 96, 128, 192 (default), 256 or 320 kbps, or WAV.

Split a recording in one request

speaker_split is the default tool, so you only send the file and, if you know them, the speakers.

curl https://speakersplit.io/v1/jobs \
  -H "Authorization: Bearer $SPEAKERSPLIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "audio_url": "https://cdn.example.com/episodes/ep-142.mp3",
    "speakers": [
      { "name": "Jane Doe", "description": "Host" },
      { "name": "Sam Lee", "description": "Guest" }
    ],
    "speakers_expected": 2,
    "webhook_url": "https://example.com/hooks/speakersplit"
  }'

When the job is completed, fetch the subtitles

curl "https://speakersplit.io/v1/jobs/job_8f3c2a91d4e07b6a5c1f2e3d/transcript?format=srt" \
  -H "Authorization: Bearer $SPEAKERSPLIT_API_KEY" -o episode.srt

How it works

  1. Create an API key on your keys page.
  2. Send the recording: a public https link as audio_url, or upload a local file with POST /v1/uploads and pass its upload_id.
  3. Wait for the signed job.completed webhook, or poll GET /v1/jobs/{id} every 10 to 30 seconds.
  4. Download the tracks and the transcript.

Made for long, messy recordings

Jobs take recordings up to 4 hours long, in MP3, WAV, M4A, FLAC, OGG or video like MP4, MOV and WEBM. Leave language_code out and the language is detected for you, including recordings that switch between languages. Or set it, for example "en" or "es".

Speakers are ordered by how long they talk, and the track files are numbered to match, so they import into your editor in a sensible order.

Limits and safety

  • 120 requests a minute per API key, and up to 5 jobs running at once per account.
  • Upload local files up to 2 GB with POST /v1/uploads, or pass a public https link as audio_url.
  • Send an Idempotency-Key header and a retried request never starts (or charges) a second job.
  • Unknown parameters are rejected with a 400, so a typo never runs a job with the wrong settings.
  • Result links work for 30 days.

What it costs

Recording lengthCredits
Under 5 minutes1
5 to 30 minutes2
30 to 60 minutes4
60 to 90 minutes6
Each started 30 minutes after that, up to 4 hours+2

Credits are the same ones you use on the website. Plans and credit options are on the pricing page.

See plans and credits

Common questions

What is a speaker diarization API?

Speaker diarization answers "who spoke when" in a recording. A diarization API takes an audio file and tells you which speaker is talking at each moment. The SpeakerSplit API goes one step further and returns a separate audio file for each speaker, plus a transcript.

Can the API name the speakers?

Yes. Names said in the recording, like "I’m your host, Jane Doe", are picked up automatically. Pass a speakers list with names and, if you like, a short description such as "Host" or "Guest, CEO of Acme" to name the others. Anyone still unnamed keeps a plain label (A, B, C…), and identify_speakers set to false gives plain labels only.

How long can a recording be?

Up to 4 hours per job. Pass a public https link, or upload a file of up to 2 GB with POST /v1/uploads.

How much does speaker diarization cost?

It uses website credits: 1 credit under 5 minutes, 2 under 30 minutes, 4 under 60 minutes and 6 up to 90 minutes. After that, each started 30 minutes adds 2 credits, up to 4 hours.

Do I have to poll for results?

No. Pass webhook_url and the finished job is posted to you as job.completed or job.failed, signed with the SpeakerSplit-Signature header. Each delivery is tried up to 3 times.

Can I use it from Claude or ChatGPT instead of code?

Yes. The same speaker split is a tool in the SpeakerSplit MCP server, so you can ask Claude, ChatGPT, Cursor or Claude Code to split a recording in plain words.

Related