Overview
Transcribe multi-speaker audio at scale using the Gnani Prisma v2.5 Batch STT API. This guide walks through every step — from submitting an audio file to receiving a clean, speaker-separated transcript — using podcast transcription as the working example. Audio-first content — podcasts, interview recordings, panel discussions — carries information that stays locked unless it is transcribed. Speaker-level transcription is what separates a readable document from a wall of undifferentiated text. You know who said what, when they said it, and for how long.Other Use Cases
The same create-start-poll-download pipeline works for any long-form, speaker-rich audio. Any scenario involving long audio files, two speakers, and a need for speaker-separated text maps directly to this pipeline.Two-speaker limit: The Gnani Prisma v2.5 Batch STT API supports a maximum of two distinct speakers per file. It is optimised for two-party audio — interviews, conversations, and one-on-one recordings. Panel discussions with three or more speakers are outside the current scope.
Prerequisites
Authentication
Store your API key as an environment variable. Never hardcode it in source files or commit it to version control.
.env
loading credentials
Limits & Supported Formats
See Batch STT Introduction — Limits for the full reference.
Supported Audio Formats
.wav · .mp3 · .mp4 · .flac · .ogg · .opus · .m4a · .aac · .webm · .amr
Supported Languages
Pass the BCP-47 code in thelanguage_code field of your job config.
ITN not supported on Batch STT. Inverse Text Normalization (spoken numbers, currency, dates) is not available in the Batch Jobs API. Use REST STT if you need ITN on short clips.
Pipeline
Creating a job does not start transcription. You must call/start after upload.
1
Create the job
POST to
/stt/v3/batch/jobs with a multipart body: a config JSON field and one or more files. Receive a job_id with status CREATED. Transcription has not started yet.2
Start the job
POST to
/stt/v3/batch/jobs/{job_id}/start. Status moves to STARTING, then QUEUED → IN_PROGRESS → COMPLETED.3
Poll for completion
GET
/stt/v3/batch/jobs/{job_id} every 10 seconds until status reaches a terminal state (COMPLETED, PARTIAL_FAILURE, FAILED, or CANCELLED).4
Fetch transcript URLs
GET
/stt/v3/batch/jobs/{job_id}/files?status=COMPLETED. Each completed file includes a transcript_url (valid for 1 hour).5
Download and parse
GET each
transcript_url to retrieve JSON with full_transcript and segments. Group by speaker_id, build per-speaker text blocks with timestamps, and save output files.Step 1 — Create Job
create_job()
Step 2 — Start Job
start_job()
Step 3 — Poll
poll_until_complete()
Step 4 — Fetch Transcript URLs
fetch_completed_files()
Step 5 — Download & Parse
download_and_parse()
Full Script
podcast_transcription.py
Sample Output
Related docs: Batch STT Introduction · Create Job · Start Job · Get Job Status · Get Job Files