> For clean Markdown of any page, append `.md` to the page URL.
> For a complete documentation index, see https://docs.sarvam.ai/llms.txt.
> For full documentation content in one file, see https://docs.sarvam.ai/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.sarvam.ai/_mcp/server.

# Speech To Text Realtime Streaming

GET /speech-to-text-realtime/ws

WebSocket channel for real-time speech to text streaming powered by the
`saaras:v3-realtime` model.

**Beta:** Beta access is required.

**Authentication:** Pass your API subscription key via the
`API-SUBSCRIPTION-KEY` header, or (in browsers) via the WebSocket
subprotocol `api-subscription-key.<key>` — the server echoes the
subprotocol back.

**Note:** This API Reference page is provided for informational purposes only.
The Try It playground may not provide the best experience for streaming audio.
For optimal streaming performance, please use the SDK or implement your own WebSocket client.


Reference: https://docs.sarvam.ai/api-reference/speech-to-text/transcribe/realtime/ws

## AsyncAPI Specification

```yaml
asyncapi: 2.6.0
info:
  title: speechToTextRealtimeStreaming
  version: subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming
  description: >
    WebSocket channel for real-time speech to text streaming powered by the

    `saaras:v3-realtime` model.


    **Beta:** Beta access is required.


    **Authentication:** Pass your API subscription key via the

    `API-SUBSCRIPTION-KEY` header, or (in browsers) via the WebSocket

    subprotocol `api-subscription-key.<key>` — the server echoes the

    subprotocol back.


    **Note:** This API Reference page is provided for informational purposes
    only.

    The Try It playground may not provide the best experience for streaming
    audio.

    For optimal streaming performance, please use the SDK or implement your own
    WebSocket client.
channels:
  /speech-to-text-realtime/ws:
    description: >
      WebSocket channel for real-time speech to text streaming powered by the

      `saaras:v3-realtime` model.


      **Beta:** Beta access is required.


      **Authentication:** Pass your API subscription key via the

      `API-SUBSCRIPTION-KEY` header, or (in browsers) via the WebSocket

      subprotocol `api-subscription-key.<key>` — the server echoes the

      subprotocol back.


      **Note:** This API Reference page is provided for informational purposes
      only.

      The Try It playground may not provide the best experience for streaming
      audio.

      For optimal streaming performance, please use the SDK or implement your
      own WebSocket client.
    bindings:
      ws:
        query:
          type: object
          properties:
            language_code:
              $ref: '#/components/schemas/speechToTextRealtimeStreaming_language_code'
            model:
              $ref: '#/components/schemas/speechToTextRealtimeStreaming_model'
              default: saaras:v3-realtime
            stream_type:
              $ref: '#/components/schemas/speechToTextRealtimeStreaming_stream_type'
              default: balanced
            mode:
              $ref: '#/components/schemas/speechToTextRealtimeStreaming_mode'
              default: transcribe
            prompt:
              type: string
            endpointing:
              $ref: '#/components/schemas/speechToTextRealtimeStreaming_endpointing'
              default: vad
            encoding:
              $ref: '#/components/schemas/speechToTextRealtimeStreaming_encoding'
              default: linear16
            sample_rate:
              $ref: '#/components/schemas/speechToTextRealtimeStreaming_sample_rate'
              default: 16000
            return_timestamps:
              $ref: >-
                #/components/schemas/speechToTextRealtimeStreaming_return_timestamps
              default: 'false'
            threshold:
              type: string
              default: 0.3
            prefix_padding_ms:
              type: string
              default: 300
            silence_duration_ms:
              type: string
              default: 500
            min_speech_duration_ms:
              type: string
              default: 250
        headers:
          type: object
          properties:
            Api-Subscription-Key:
              type: string
    publish:
      operationId: >-
        subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-publish
      summary: Server messages
      message:
        oneOf:
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-0-Realtime
              Session Begin
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-1-Realtime
              VAD Events
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-2-Realtime
              VAD Events
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-3-Realtime
              Partial Transcript
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-4-Realtime
              Final Transcript
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-5-Realtime
              Config Updated
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-6-Realtime
              Pong
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-7-Realtime
              Session End
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-8-Realtime
              Error
    subscribe:
      operationId: >-
        subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-subscribe
      summary: Client messages
      message:
        oneOf:
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-0-Realtime
              Audio Input
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-1-Realtime
              Speech Start
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-2-Realtime
              Speech End
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-3-Realtime
              Flush
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-4-Realtime
              Config Update
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-5-Realtime
              End Session
          - $ref: >-
              #/components/messages/subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-6-Realtime
              Ping
servers:
  Production:
    url: wss://api.sarvam.ai/
    protocol: wss
    x-default: true
components:
  messages:
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-0-Realtime Session Begin:
      name: Realtime Session Begin
      title: Realtime Session Begin
      description: Receive the session.begin event with the resolved session config
      payload:
        $ref: >-
          #/components/schemas/speechToTextRealtimeStreaming_realtimeSessionBegin
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-1-Realtime VAD Events:
      name: Realtime VAD Events
      title: Realtime VAD Events
      description: Receive VAD speech start/end events (endpointing=vad only)
      payload:
        $ref: >-
          #/components/schemas/speechToTextRealtimeStreaming_realtimeVadSpeechStart
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-2-Realtime VAD Events:
      name: Realtime VAD Events
      title: Realtime VAD Events
      description: Receive VAD speech start/end events (endpointing=vad only)
      payload:
        $ref: >-
          #/components/schemas/speechToTextRealtimeStreaming_realtimeVadSpeechEnd
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-3-Realtime Partial Transcript:
      name: Realtime Partial Transcript
      title: Realtime Partial Transcript
      description: Receive streaming partial transcripts during an utterance
      payload:
        $ref: >-
          #/components/schemas/speechToTextRealtimeStreaming_realtimeTranscriptPartial
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-4-Realtime Final Transcript:
      name: Realtime Final Transcript
      title: Realtime Final Transcript
      description: Receive the final transcript for a completed utterance
      payload:
        $ref: >-
          #/components/schemas/speechToTextRealtimeStreaming_realtimeTranscriptFinal
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-5-Realtime Config Updated:
      name: Realtime Config Updated
      title: Realtime Config Updated
      description: Receive the config.updated acknowledgement after a config.update
      payload:
        $ref: >-
          #/components/schemas/speechToTextRealtimeStreaming_realtimeConfigUpdated
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-6-Realtime Pong:
      name: Realtime Pong
      title: Realtime Pong
      description: Receive the pong response to a client ping
      payload:
        $ref: '#/components/schemas/speechToTextRealtimeStreaming_realtimePong'
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-7-Realtime Session End:
      name: Realtime Session End
      title: Realtime Session End
      description: Receive the session.end summary when the session closes
      payload:
        $ref: '#/components/schemas/speechToTextRealtimeStreaming_realtimeSessionEnd'
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-server-8-Realtime Error:
      name: Realtime Error
      title: Realtime Error
      description: Receive non-fatal or fatal error notifications
      payload:
        $ref: '#/components/schemas/speechToTextRealtimeStreaming_realtimeError'
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-0-Realtime Audio Input:
      name: Realtime Audio Input
      title: Realtime Audio Input
      description: Send an audio chunk for real-time transcription (saaras:v3-realtime)
      payload:
        $ref: '#/components/schemas/speechToTextRealtimeStreaming_realtimeAudioInput'
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-1-Realtime Speech Start:
      name: Realtime Speech Start
      title: Realtime Speech Start
      description: Signal the start of an utterance (endpointing=manual only)
      payload:
        $ref: '#/components/schemas/speechToTextRealtimeStreaming_realtimeSpeechStart'
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-2-Realtime Speech End:
      name: Realtime Speech End
      title: Realtime Speech End
      description: Signal the end of an utterance (endpointing=manual only)
      payload:
        $ref: '#/components/schemas/speechToTextRealtimeStreaming_realtimeSpeechEnd'
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-3-Realtime Flush:
      name: Realtime Flush
      title: Realtime Flush
      payload:
        $ref: '#/components/schemas/speechToTextRealtimeStreaming_realtimeFlush'
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-4-Realtime Config Update:
      name: Realtime Config Update
      title: Realtime Config Update
      description: Update session config mid-stream
      payload:
        $ref: >-
          #/components/schemas/speechToTextRealtimeStreaming_realtimeConfigUpdate
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-5-Realtime End Session:
      name: Realtime End Session
      title: Realtime End Session
      description: Gracefully end the realtime session
      payload:
        $ref: '#/components/schemas/speechToTextRealtimeStreaming_realtimeEnd'
    subpackage_speechToTextRealtimeStreaming.speechToTextRealtimeStreaming-client-6-Realtime Ping:
      name: Realtime Ping
      title: Realtime Ping
      description: Send a keepalive ping to the realtime WebSocket
      payload:
        $ref: '#/components/schemas/speechToTextRealtimeStreaming_realtimePing'
  schemas:
    speechToTextRealtimeStreaming_language_code:
      type: string
      enum:
        - auto
        - en-IN
        - hi-IN
        - bn-IN
        - kn-IN
        - ml-IN
        - mr-IN
        - or-IN
        - pa-IN
        - ta-IN
        - te-IN
        - gu-IN
        - as-IN
        - ur-IN
        - ne-IN
        - kok-IN
        - ks-IN
        - sd-IN
        - sa-IN
        - sat-IN
        - mni-IN
        - brx-IN
        - mai-IN
        - doi-IN
      description: |
        BCP-47 language code of the input audio. **Required.**

        **Supported languages (saaras:v3-realtime):**
        - `auto`: Adaptive automatic language detection
        - `en-IN`: English
        - `hi-IN`: Hindi
        - `bn-IN`: Bengali
        - `kn-IN`: Kannada
        - `ml-IN`: Malayalam
        - `mr-IN`: Marathi
        - `or-IN`: Odia
        - `pa-IN`: Punjabi
        - `ta-IN`: Tamil
        - `te-IN`: Telugu
        - `gu-IN`: Gujarati
        - `as-IN`: Assamese
        - `ur-IN`: Urdu
        - `ne-IN`: Nepali
        - `kok-IN`: Konkani
        - `ks-IN`: Kashmiri
        - `sd-IN`: Sindhi
        - `sa-IN`: Sanskrit
        - `sat-IN`: Santali
        - `mni-IN`: Manipuri
        - `brx-IN`: Bodo
        - `mai-IN`: Maithili
        - `doi-IN`: Dogri
      title: speechToTextRealtimeStreaming_language_code
    speechToTextRealtimeStreaming_model:
      type: string
      enum:
        - saaras:v3-realtime
      default: saaras:v3-realtime
      description: >
        Speech-to-text model. Only `saaras:v3-realtime` is accepted on this
        endpoint.
      title: speechToTextRealtimeStreaming_model
    speechToTextRealtimeStreaming_stream_type:
      type: string
      enum:
        - fast
        - balanced
        - simulated
      default: balanced
      description: |
        Controls audio chunking and latency behaviour.

        - **fast**: Partials at low latency.
        - **balanced** (default): Partials with better accuracy.
        - **simulated**: No partials.
      title: speechToTextRealtimeStreaming_stream_type
    speechToTextRealtimeStreaming_mode:
      type: string
      enum:
        - transcribe
        - translate
        - verbatim
        - translit
        - codemix
      default: transcribe
      description: >
        Task applied on the final transcript, not on partial transcripts.

        Streaming partials are always straight transcription regardless of

        this value.


        - **transcribe** (default): Standard transcription in the source
        language script.

        - **translate**: Translation to English.

        - **verbatim**: Exact transcription in the original script (includes
        disfluencies).

        - **translit**: Transliteration to Latin script.

        - **codemix**: Code-mixed output (native + English).
      title: speechToTextRealtimeStreaming_mode
    speechToTextRealtimeStreaming_endpointing:
      type: string
      enum:
        - vad
        - manual
      default: vad
      description: >
        Turn detection strategy.


        - **vad** (default): Voice Activity Detection automatically detects turn
        boundaries.

        - **manual**: The client delimits turns with `speech_start` /
        `speech_end` events.
      title: speechToTextRealtimeStreaming_endpointing
    speechToTextRealtimeStreaming_encoding:
      type: string
      enum:
        - linear16
        - linear32
        - mulaw
        - alaw
      default: linear16
      description: |
        Audio encoding of the input stream. **Mono only.**
      title: speechToTextRealtimeStreaming_encoding
    speechToTextRealtimeStreaming_sample_rate:
      type: string
      enum:
        - '16000'
        - '8000'
      description: |
        Audio sample rate in Hz. Must match the actual audio.

        **Accepted values:**
        - `8000`
        - `16000` (default)

        Any other value closes the connection with code `4000`.
      title: speechToTextRealtimeStreaming_sample_rate
    speechToTextRealtimeStreaming_return_timestamps:
      type: string
      enum:
        - 'true'
        - 'false'
      default: 'false'
      description: |
        When `true`, adds segment-level `start_s` / `end_s` audio-time offsets
        to `transcript.final`.
      title: speechToTextRealtimeStreaming_return_timestamps
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSessionBeginEvent:
      type: string
      enum:
        - session.begin
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSessionBeginEvent
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSessionBeginConfig:
      type: object
      properties:
        model:
          type: string
        language_code:
          type: string
        encoding:
          type: string
        sample_rate:
          type: integer
        stream_type:
          type: string
        mode:
          type: string
        prompt:
          type: string
        turn_detection:
          type: string
          description: Endpointing strategy, echoed as turn_detection (vad / manual)
        threshold:
          type: string
          title: float
        prefix_padding_ms:
          type: integer
        silence_duration_ms:
          type: integer
        min_speech_duration_ms:
          type: integer
        return_timestamps:
          type: boolean
      description: Resolved server-side session configuration
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSessionBeginConfig
    speechToTextRealtimeStreaming_realtimeSessionBegin:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSessionBeginEvent
        request_id:
          type: string
          description: Per-connection correlation id (quote it in support/debugging)
        config:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSessionBeginConfig
          description: Resolved server-side session configuration
      required:
        - event
        - request_id
      description: >
        Sent immediately after the connection is accepted. The `config` block

        echoes the resolved surface. Note that the endpointing field is echoed
        as

        `turn_detection` (`vad` / `manual`), not `endpointing`.
      title: speechToTextRealtimeStreaming_realtimeSessionBegin
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeVadSpeechStartEvent:
      type: string
      enum:
        - vad.speech_start
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeVadSpeechStartEvent
    speechToTextRealtimeStreaming_realtimeVadSpeechStart:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeVadSpeechStartEvent
        utterance_idx:
          type: integer
          description: Zero-based utterance counter for the session
        confidence:
          type: string
          title: float
          description: VAD confidence (0.0–1.0)
      required:
        - event
        - utterance_idx
      description: Emitted when VAD detects the start of speech (endpointing=vad only).
      title: speechToTextRealtimeStreaming_realtimeVadSpeechStart
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeVadSpeechEndEvent:
      type: string
      enum:
        - vad.speech_end
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeVadSpeechEndEvent
    speechToTextRealtimeStreaming_realtimeVadSpeechEnd:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeVadSpeechEndEvent
        utterance_idx:
          type: integer
          description: Zero-based utterance counter for the session
        confidence:
          type: string
          title: float
          description: VAD confidence (0.0–1.0)
      required:
        - event
        - utterance_idx
      description: Emitted when VAD detects end of speech (endpointing=vad only).
      title: speechToTextRealtimeStreaming_realtimeVadSpeechEnd
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeTranscriptPartialEvent:
      type: string
      enum:
        - transcript.partial
      title: >-
        ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeTranscriptPartialEvent
    speechToTextRealtimeStreaming_realtimeTranscriptPartial:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeTranscriptPartialEvent
        utterance_idx:
          type: integer
          description: Zero-based utterance counter for the session
        text:
          type: string
          description: Partial transcript text so far
        language:
          type: string
          description: |
            Detected language. Present only when `language_code=auto` was
            selected on the connection.
      required:
        - event
        - utterance_idx
        - text
      description: >
        Streaming partial result during an active utterance (not sent in

        `simulated`). Partials always stream straight transcription in the
        sticky

        language. No `confidence` is emitted.
      title: speechToTextRealtimeStreaming_realtimeTranscriptPartial
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeTranscriptFinalEvent:
      type: string
      enum:
        - transcript.final
      title: >-
        ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeTranscriptFinalEvent
    speechToTextRealtimeStreaming_realtimeTranscriptFinal:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeTranscriptFinalEvent
        utterance_idx:
          type: integer
          description: Zero-based utterance counter for the session
        text:
          type: string
          description: Final transcript text for the utterance
        language:
          type: string
          description: |
            Detected language (BCP-47, e.g. `gu-IN`). Present only when
            `language_code=auto` was selected on the connection.
        language_confidence:
          type: string
          title: float
          description: |
            Detection confidence (0.0–1.0). Present only when
            `language_code=auto` was selected on the connection.
        start_s:
          type: string
          title: float
          description: |
            Segment start (seconds since stream start). Present only when
            `return_timestamps=true`.
        end_s:
          type: string
          title: float
          description: |
            Segment end (seconds since stream start). Present only when
            `return_timestamps=true`.
      required:
        - event
        - utterance_idx
        - text
      description: >
        Emitted once per utterance when finalization completes by the

        non-streaming finalizer. No `confidence` and no `words` array are
        emitted

        by this endpoint, even with `return_timestamps=true`.
      title: speechToTextRealtimeStreaming_realtimeTranscriptFinal
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdatedEvent:
      type: string
      enum:
        - config.updated
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdatedEvent
    speechToTextRealtimeStreaming_realtimeConfigUpdated:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdatedEvent
        applied:
          type: array
          items:
            type: string
          description: Config keys that were applied
      required:
        - event
        - applied
      description: Acknowledges a config.update, listing the keys that were applied.
      title: speechToTextRealtimeStreaming_realtimeConfigUpdated
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimePongEvent:
      type: string
      enum:
        - pong
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimePongEvent
    speechToTextRealtimeStreaming_realtimePong:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimePongEvent
      required:
        - event
      description: Response to a client ping.
      title: speechToTextRealtimeStreaming_realtimePong
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSessionEndEvent:
      type: string
      enum:
        - session.end
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSessionEndEvent
    speechToTextRealtimeStreaming_realtimeSessionEnd:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSessionEndEvent
        request_id:
          type: string
          description: Per-connection correlation id
        total_duration_s:
          type: string
          title: float
          description: Total wall-clock session duration in seconds
        total_utterances:
          type: integer
          description: Number of utterances processed during the session
        audio_duration_s:
          type: string
          title: float
          description: >-
            Total audio duration processed in seconds (the billed audio
            quantity)
      required:
        - event
        - request_id
      description: |
        Sent when the session closes (client `end`, inactivity timeout, max
        duration, or server error). Keyed by `request_id` (not `session_id`).
      title: speechToTextRealtimeStreaming_realtimeSessionEnd
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeErrorEvent:
      type: string
      enum:
        - error
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeErrorEvent
    speechToTextRealtimeStreaming_realtimeError:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeErrorEvent
        code:
          type: string
          description: Machine-readable error code
        is_fatal:
          type: boolean
          description: Whether the error is fatal (the connection will be closed)
        message:
          type: string
          description: Human-readable error message
        status_code:
          type: integer
          description: |
            HTTP-equivalent status code, present on fatal rejections
            (e.g. `401`, `403`, `503`, `400`, `408`, `413`, `500`). Useful
            because the WebSocket close reason string is capped at 123 bytes.
      required:
        - event
        - code
        - is_fatal
        - message
      description: >
        Non-fatal or fatal error notification. The wire payload always carries

        `event`, `code`, `is_fatal`, and `message`, plus an optional

        `status_code` on fatal rejections.


        **WebSocket close codes:**

        - `1003`: Rate limit exceeded, quota exhausted, or invalid subscription
        key.

        - `1008`: Inactivity timeout.

        - `1011`: Internal server error.

        - `4000`: Application rejection (beta denied, invalid model, unsupported
        `language_code` / query param, gRPC backend unavailable). The close
        reason string is capped at 123 bytes.


        **Known error codes:**

        - `invalid_config` (non-fatal): A `config.update` value was rejected
        (e.g. changing `stream_type` to/from `simulated`). The session continues
        with the previous config.
      title: speechToTextRealtimeStreaming_realtimeError
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeAudioInputEvent:
      type: string
      enum:
        - audio_input
      default: audio_input
      description: Event type identifier
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeAudioInputEvent
    speechToTextRealtimeStreaming_realtimeAudioInput:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeAudioInputEvent
          description: Event type identifier
        audio:
          type: string
          format: base64
          description: Audio bytes as a base64-encoded string
      required:
        - event
        - audio
      description: |
        Audio chunk sent as a JSON message. The audio must be provided as a
        base64-encoded string in the `audio` field.
      title: speechToTextRealtimeStreaming_realtimeAudioInput
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSpeechStartEvent:
      type: string
      enum:
        - speech_start
      default: speech_start
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSpeechStartEvent
    speechToTextRealtimeStreaming_realtimeSpeechStart:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSpeechStartEvent
      required:
        - event
      description: |
        Signals the beginning of an utterance (endpointing=manual only). The
        server starts streaming partial results.
      title: speechToTextRealtimeStreaming_realtimeSpeechStart
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSpeechEndEvent:
      type: string
      enum:
        - speech_end
      default: speech_end
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSpeechEndEvent
    speechToTextRealtimeStreaming_realtimeSpeechEnd:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeSpeechEndEvent
      required:
        - event
      description: |
        Signals end of speech for the current utterance (endpointing=manual
        only). The server finalizes the transcript.
      title: speechToTextRealtimeStreaming_realtimeSpeechEnd
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeFlushEvent:
      type: string
      enum:
        - flush
      default: flush
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeFlushEvent
    speechToTextRealtimeStreaming_realtimeFlush:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeFlushEvent
      required:
        - event
      description: |
        Force-finalizes buffered audio (endpointing=manual only). The server
        runs finalization on whatever audio has been buffered so far.
      title: speechToTextRealtimeStreaming_realtimeFlush
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdateEvent:
      type: string
      enum:
        - config.update
      default: config.update
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdateEvent
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdateMode:
      type: string
      enum:
        - transcribe
        - translate
        - verbatim
        - translit
        - codemix
      description: Non-streaming task selector. Boundary-gated.
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdateMode
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdateStreamType:
      type: string
      enum:
        - fast
        - balanced
      description: >-
        `fast`↔`balanced` swap. Boundary-gated. Changing to/from `simulated` is
        rejected.
      title: >-
        ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdateStreamType
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdateEndpointing:
      type: string
      enum:
        - vad
        - manual
      description: '`vad`/`manual` swap. Boundary-gated.'
      title: >-
        ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdateEndpointing
    speechToTextRealtimeStreaming_realtimeConfigUpdate:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdateEvent
        language_code:
          type: string
          description: Re-arms auto-LID and resets the sticky language. Boundary-gated.
        prompt:
          type: string
          description: Non-streaming context hint (empty string clears it). Boundary-gated.
        mode:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdateMode
          description: Non-streaming task selector. Boundary-gated.
        stream_type:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdateStreamType
          description: >-
            `fast`↔`balanced` swap. Boundary-gated. Changing to/from `simulated`
            is rejected.
        endpointing:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeConfigUpdateEndpointing
          description: '`vad`/`manual` swap. Boundary-gated.'
        threshold:
          type: string
          title: float
          description: VAD activation threshold; applied immediately (vad only).
        silence_duration_ms:
          type: integer
          description: End-of-turn silence; applied immediately (vad only).
        min_speech_duration_ms:
          type: integer
          description: Minimum speech duration; applied immediately (vad only).
      required:
        - event
      description: >
        Updates session config mid-stream. `language_code`, `mode`, `prompt`,

        `stream_type`, and `endpointing` are boundary-gated: validated on
        arrival

        but deferred and applied at the next utterance boundary while an
        utterance

        is in progress, so each utterance's partials and final use one
        consistent

        config snapshot. The VAD detector knobs (`threshold`,

        `silence_duration_ms`, `min_speech_duration_ms`) apply immediately on
        the

        next VAD rebuild and are ignored under `endpointing=manual`. Changing

        `stream_type` to/from `simulated` is rejected (`invalid_config`).


        The server replies with `config.updated` (listing the applied keys), or
        an

        `error` with code `invalid_config` on a rejected value.
      title: speechToTextRealtimeStreaming_realtimeConfigUpdate
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeEndEvent:
      type: string
      enum:
        - end
      default: end
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeEndEvent
    speechToTextRealtimeStreaming_realtimeEnd:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimeEndEvent
      required:
        - event
      description: |
        Gracefully ends the session. The server finalizes any pending utterance
        and closes the connection.
      title: speechToTextRealtimeStreaming_realtimeEnd
    ChannelsSpeechToTextRealtimeStreamingMessagesRealtimePingEvent:
      type: string
      enum:
        - ping
      default: ping
      title: ChannelsSpeechToTextRealtimeStreamingMessagesRealtimePingEvent
    speechToTextRealtimeStreaming_realtimePing:
      type: object
      properties:
        event:
          $ref: >-
            #/components/schemas/ChannelsSpeechToTextRealtimeStreamingMessagesRealtimePingEvent
      required:
        - event
      description: Keepalive ping.
      title: speechToTextRealtimeStreaming_realtimePing

```