Developer Quickstart
Make your first STT API call and get a transcript.
API Reference
View the complete API specification.
Code Examples
Browse ready-to-use GitHub samples for sync and real-time STT.
Supported Providers
Inworld (first-party)
Supports 30 languages. See Language Support for the full list.
Streaming includes automatic end-of-turn detection with tunable sensitivity, plus a manual mode for client-controlled turn boundaries. See Turn Detection.
Groq
AssemblyAI
AssemblyAI models currently support the WebSocket streaming endpoint only. Sync HTTP support is coming soon.
Soniox
Soniox models currently support the WebSocket streaming endpoint only.
Deepgram
Deepgram models currently support the WebSocket streaming endpoint only.
Model comparison
Supported Audio Formats
Recommended defaults: 16,000 Hz sample rate, 16-bit depth, mono. For container formats (MP3, FLAC, OGG_OPUS, WAV),
sampleRateHertz is optional — the API auto-detects it from the file header.
Sync transcription accepts audio files up to ~16 MB. The actual duration depends on the encoding — for example, ~18 minutes of MP3 or ~8 minutes of 16 kHz 16-bit WAV. For larger files, split them into chunks or use the WebSocket streaming endpoint.
STT performs best with 16 kHz audio. Lower sample rates (such as 8 kHz telephony audio) contain fewer data points for the model to interpret, which reduces transcription accuracy. Upsampling low-sample-rate audio does not improve quality — it only interpolates between existing samples without adding new information.
Endpoints
Supported Languages
Language support depends on the STT provider. See Language Support for the full list of languages supported by the Inworld first-party model, and links to third-party provider language documentation.Error Handling
Errors follow the standard gRPC status format. Authentication errorBest Practices
- Model choice — Use
inworld/inworld-stt-1when you want Voice Profile or Inworld-optimized turn-taking; use Groq/AssemblyAI/Soniox for specific latency/accuracy needs. - Audio — Use MP3/OGG_OPUS for file uploads to reduce size; use LINEAR16 for streaming (required) and when you need highest quality.
- Streaming — For Inworld model with manual turn-taking, send
endTurnat each turn boundary andcloseStreamwhen done. - Speech events — Listen for
speechStartedandspeechStoppedevents in the streaming response to detect when a speaker begins and stops talking. Use these to build custom turn-taking logic or visualize voice activity. - Voice Profile — Set
voiceProfileConfig.enableVoiceProfiletotrueand optionally adjusttopN(default: 10) to control how many labels per category are returned. - Language hint — If you know the audio’s language, set
language(e.g.en,ja) for cleaner output; forinworld/inworld-stt-1the hint also constrains the output script (see Language Support). Leave it empty to auto-detect or when speakers switch languages. - Custom vocabulary — Pass domain-specific terms (names, jargon, acronyms) in
promptsto bias recognition toward them. It is a soft bias rather than a hard keyword lock, so test it on the cases where the baseline actually misses the term. - Test with sample audio and your target language before production.
Troubleshooting
For more help, see the Inworld Discord community.