Realtime TTS-2 is live. Built for realtime conversation that feels human. Read the Realtime TTS-2 announcement

Third-Party STT Models

Integration reference for third-party STT models on the Inworld STT API and Realtime session.update.

The Inworld STT API can route transcription to select third-party providers. This is offered for customers consolidating existing third-party STT workloads onto the Inworld platform, with the goal of transitioning to inworld/inworld-stt-1 over time. Third-party models use the same authentication, request format, and endpoints as inworld/inworld-stt-1. Switching models is a modelId change on the STT API, or audio.input.transcription.model in a Realtime session.update.

Before you integrate

  • No capacity or SLA guarantees — while we'll work with the third-party model provider as your usage grows, we can't guarantee capacity or SLAs on their infrastructure.
  • Latency and quality are vendor-dependent — third-party model performance characteristics are outside Inworld's control.
  • Providers may deprecate models — we can't control third-party model lifecycles; a provider may deprecate or retire a model, and we'll pass along as much notice as we can.
  • Data processing — audio sent to a third-party model is processed on the vendor's infrastructure under the vendor's terms. Inworld has Zero Data Retention agreements in place with these providers.

Model comparison

Featureinworld/inworld-stt-1groq/whisper-large-v3assemblyai/universal-3-5-proassemblyai/u3-rt-prosoniox/stt-rt-v4soniox/stt-rt-v5
Pricing (per hour)$0.10/hr$0.111/hr$0.21/hr$0.45/hr$0.12/hr$0.12/hr
EndpointSync API + WebSocketSync API onlyWebSocket onlyWebSocket onlyWebSocket onlyWebSocket only
Realtime API (session.update)
Real-time streaming
Languages30 (see list)100+ (Whisper)18 languages6 languages60+ languages60+ languages
Speaker diarization (guide) (0-based) (0-based) (1-based) (1-based)
Word timestamps (streaming) (sync)
Custom vocabulary (prompts)
Turn-taking controlsAutomatic + tunable + manual (guide)— (sync only)assemblyaiConfig silence/VAD tuningassemblyaiConfig silence/VAD tuningSemantic endpointing (sonioxConfig)Semantic endpointing (sonioxConfig)
Voice Profile (guide)

Language coverage

ProviderModelsLanguage documentation
Groqgroq/whisper-large-v3Whisper — supported languages
AssemblyAIassemblyai/universal-3-5-pro, assemblyai/u3-rt-proAssemblyAI — supported languages
Sonioxsoniox/stt-rt-v4, soniox/stt-rt-v5Soniox — supported languages

Speaker diarization

AssemblyAI and Soniox models support speaker diarization on streaming. Set enableSpeakerDiarization: true together with includeWordTimestamps: true; speaker labels are returned on wordTimestamps[].speaker. These flags are STT API-only — they are not session.update fields.

Numbering varies by provider (AssemblyAI starts at 0, Soniox at 1) — don't hardcode a starting index. Some words may arrive without a label; treat those as unattributed. See the Speaker Diarization guide.

Voice Profile

Voice Profile (age, emotion, pitch, vocal style, accent) is an Inworld platform feature that works with every STT model on the API — including third-party models. Enable it with voiceProfileConfig: { "enableVoiceProfile": true } on the STT API, or providerData.stt.voice_profile: true on Realtime; migrating between models does not affect it.

Provider configuration

Every model accepts the standard transcribeConfig fields documented in the API reference — language hints, sample rate, custom vocabulary, turn-taking thresholds, diarization, and word timestamps all work the same way across models. The sections below cover only what is provider-specific: each provider's optional tuning block and a ready-to-use request example.

AssemblyAI (assemblyaiConfig)

WebSocket streaming only; audio must be LINEAR16.

json
{
  "transcribeConfig": {
    "modelId": "assemblyai/universal-3-5-pro",
    "audioEncoding": "LINEAR16",
    "sampleRateHertz": 16000,
    "language": "en",
    "assemblyaiConfig": {
      "minEndOfTurnSilenceWhenConfident": 500,
      "maxTurnSilence": 3000,
      "vadThreshold": 0.5
    }
  }
}
FieldTypeDescription
minEndOfTurnSilenceWhenConfidentinteger (ms)Minimum silence duration when end-of-turn confidence is high
maxTurnSilenceinteger (ms)Maximum allowed silence before forcing a turn boundary
vadThresholdfloatVoice activity detection threshold. Range: 0.0–1.0. Default: 0.5
promptstringCustom transcription instructions for the model. Universal-3 Pro Streaming only

Soniox (sonioxConfig)

WebSocket streaming only; audio must be LINEAR16.

json
{
  "transcribeConfig": {
    "modelId": "soniox/stt-rt-v5",
    "audioEncoding": "LINEAR16",
    "sampleRateHertz": 16000,
    "sonioxConfig": {
      "languageHints": ["en", "es"],
      "languageHintsStrict": true,
      "context": {
        "general": { "domain": "healthcare" },
        "text": "Patient intake call for a cardiology clinic.",
        "terms": ["angioplasty", "pheochromocytoma"]
      }
    }
  }
}
FieldTypeDescription
languageHintsstring[]Language hints to guide the model. If set, overrides the language field from the main config
languageHintsStrictbooleanIf true, the model strongly prefers producing languages only from the languageHints list
enableEndpointDetectionbooleanIf true, enables intelligent semantic-based end-of-turn detection
maxEndpointDelayMsinteger (ms)Maximum delay between end of previous turn and start of next. Range: 500–5000. Default: 2000
context.generalmap<string, string>Structured key-value information (domain, topic, intent, etc.)
context.textstringLonger free-form background text or related documents
context.termsstring[]Domain-specific or uncommon words

Groq (groqConfig)

Sync (file upload) only — no streaming. Accepts LINEAR16, MP3, OGG_OPUS, FLAC, and AUTO_DETECT, with files up to ~16 MB.

json
{
  "transcribeConfig": {
    "modelId": "groq/whisper-large-v3",
    "audioEncoding": "AUTO_DETECT",
    "language": "en",
    "groqConfig": {
      "temperature": 0.0
    }
  },
  "audioData": { "content": "<base64-audio>" }
}
FieldTypeDescription
temperaturefloatControls randomness in predictions. Higher values produce more varied output. Range: 0.0–1.0

Equivalent on inworld-stt-1

When migrating to the Inworld model, these are the replacement configurations:

Third-party featureinworld/inworld-stt-1 equivalent
assemblyaiConfig.minEndOfTurnSilenceWhenConfidentinworldSttV1Config.minEndOfTurnSilenceWhenConfident
assemblyaiConfig.maxTurnSilence / sonioxConfig.maxEndpointDelayMsinworldSttV1Config.maxTurnSilence
assemblyaiConfig.vadThresholdinworldSttV1Config.vadThreshold (set 0 for manual turn control — see Turn Detection)
assemblyaiConfig.prompt, Soniox context.terms / context.text / context.general, Whisper-style prompt biasingprompts (top-level array of key terms / context strings)
Soniox languageHintslanguage (top-level) — a soft hint that also constrains output script for supported languages (Language Support)
Soniox languageHintsStrictNo equivalent — the Inworld language field is a soft hint only; strict language enforcement is not available
Semantic endpointing / silence tuningendOfTurnConfidenceThreshold + inworldSttV1Config — see Turn Detection
Speaker diarizationenableSpeakerDiarization + includeWordTimestamps on streaming — currently Experimental (Speaker Diarization)
Word timestampsincludeWordTimestamps on streaming
Groq sync file transcriptionSupported directly — same endpoint, modelId: "inworld/inworld-stt-1"

For example, a third-party streaming config with custom vocabulary, turn tuning, diarization, and word timestamps translates to:

json
{
  "transcribeConfig": {
    "modelId": "inworld/inworld-stt-1",
    "audioEncoding": "LINEAR16",
    "sampleRateHertz": 16000,
    "language": "en",
    "prompts": ["angioplasty", "pheochromocytoma"],
    "endOfTurnConfidenceThreshold": 0.5,
    "inworldSttV1Config": {
      "minEndOfTurnSilenceWhenConfident": 500,
      "maxTurnSilence": 1500,
      "vadThreshold": 0.5
    },
    "enableSpeakerDiarization": true,
    "includeWordTimestamps": true,
    "voiceProfileConfig": { "enableVoiceProfile": true }
  }
}

For Inworld STT, minimum silence gates the first turn-completion check; maximum silence ends the turn even if confidence is insufficient, once the minimum is reached. Both fields accept 20–5000 ms. Keep the minimum less than or equal to the maximum, and test with your audio: equivalent configuration fields do not guarantee identical turn boundaries across models.

For migration support, contact your account team.

Realtime API

The Realtime API is a streaming surface of the same STT models. Send a session.update to pick the model and map provider knobs onto audio.input.transcription and providerData.stt. Partial updates merge. An unrecognized model rejects the whole update (invalid_request_error / invalid_value on session.audio.input.transcription.model).

Accepted here: assemblyai/universal-3-5-pro, assemblyai/u3-rt-pro, soniox/stt-rt-v4 (bare aliases like u3-rt-pro resolve). Not accepted: Groq (sync only) and soniox/stt-rt-v5.

Default turn detection is semantic_vad / eagerness: "medium", which already fills the four turn knobs. Explicit providerData.stt fields override that mapping. See providerData.stt.

STT APIsession.update
modelIdaudio.input.transcription.model
languageaudio.input.transcription.language
prompts / assemblyaiConfig.promptaudio.input.transcription.prompt (string; wins over providerData.stt.prompt). Third-party models only — Inworld STT does not support the singular field and takes audio.input.transcription.prompts (an array of terms) instead
assemblyaiConfig.minEndOfTurnSilenceWhenConfidentproviderData.stt.min_end_of_turn_silence
assemblyaiConfig.maxTurnSilence / sonioxConfig.maxEndpointDelayMsproviderData.stt.max_turn_silence
assemblyaiConfig.vadThresholdproviderData.stt.vad_threshold
sonioxConfig.languageHintsproviderData.stt.language_hints (ISO 639-1; Soniox only; non-strict)
sonioxConfig.enableEndpointDetectionOn when providerData.stt.end_of_turn_confidence_threshold > 0 — also on by default via semantic_vad

Not exposed: languageHintsStrict, Soniox context.*, speaker diarization, word-timestamp flags.

Example: AssemblyAI

json
{
  "type": "session.update",
  "session": {
    "audio": {
      "input": {
        "transcription": {
          "model": "assemblyai/universal-3-5-pro",
          "language": "en",
          "prompt": "Patient intake call. Vocabulary: angioplasty, pheochromocytoma."
        }
      }
    },
    "providerData": {
      "stt": {
        "min_end_of_turn_silence": 500,
        "max_turn_silence": 3000,
        "vad_threshold": 0.5,
        "voice_profile": true
      }
    }
  }
}

Example: Soniox

json
{
  "type": "session.update",
  "session": {
    "audio": {
      "input": {
        "transcription": {
          "model": "soniox/stt-rt-v4",
          "prompt": "Patient intake call. Vocabulary: angioplasty, pheochromocytoma."
        }
      }
    },
    "providerData": {
      "stt": {
        "language_hints": ["en", "es"],
        "end_of_turn_confidence_threshold": 0.7,
        "max_turn_silence": 2000,
        "voice_profile": true
      }
    }
  }
}