Multimodal

Speech-to-text

Multipart upload, same shape as OpenAI's audio.transcriptionsPOST /v1/audio/transcriptions. Billed per minute of audio — the real provider-reported duration, not a size-based estimate.

audio_file = open("call.wav", "rb")
resp = client.audio.transcriptions.create(
    model="whisper-1",
    file=audio_file,
)
print(resp.text)

Which models

ModelProvider
whisper-1OpenAI (default)
gpt-4o-transcribeOpenAI
gpt-4o-mini-transcribeOpenAI
scribe_v1ElevenLabs

Response format

response_format accepts json (default, {"text": ...}), text (raw body), and verbose_json (full provider object including duration and segments). We always request verbose_json from the upstream provider regardless of what you asked for, purely to get a real duration to bill on, then reshape the response to match.

Not yet supported

srt and vtt response formats aren't built — they need real reformatting, not just a passthrough of the provider response.