Transcription

Turn audio into text with a shared TranscriptionModel API.

Every transcription provider conforms to TranscriptionModel and works with transcribe.

let result = try await transcribe(
  model: OpenAITranscriptionModel("whisper-1"),
  audio: audioData,
  mediaType: "audio/mpeg"
)

print(result.text)
for segment in result.segments {
  print("\(segment.startSecond)s–\(segment.endSecond)s", segment.text)
}

Results include the text plus segments, detected language, and duration when the provider returns them. Native request fields go in providerOptions:

let result = try await transcribe(
  model: OpenAITranscriptionModel("whisper-1"),
  audio: audioData,
  mediaType: "audio/wav",
  providerOptions: ["openai": ["language": "en", "temperature": 0]]
)

AssemblyAI, Rev.ai, and Gladia are asynchronous upstream. Their model types submit, poll, and fetch internally, so your call remains a single await.

Models

ProviderModel typeDefault or example modelKey
OpenAIOpenAITranscriptionModelwhisper-1OPENAI_API_KEY
ElevenLabsElevenLabsTranscriptionModelscribe_v2ELEVENLABS_API_KEY
DeepgramDeepgramTranscriptionModelnova-3DEEPGRAM_API_KEY
AssemblyAIAssemblyAITranscriptionModeluniversal-3-5-proASSEMBLYAI_API_KEY
Rev.aiRevAITranscriptionModelmachineREVAI_API_KEY
GladiaGladiaTranscriptionModelsolaria-1GLADIA_API_KEY
SarvamSarvamTranscriptionModelsaaras:v3SARVAM_API_KEY

Groq-hosted Whisper also works through OpenAITranscriptionModel with Groq's base URL; see the Groq provider page.

On this page