> ## Documentation Index
> Fetch the complete documentation index at: https://docs.slng.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Saaras v3

> "Stream real-time speech-to-text transcripts from Sarvam AI Saaras v3 over WebSocket with voice activity detection across 23 Indian languages. Session configuration is provided via query parameters on the WebSocket upgrade URL: `language-code`, `mode`, `sample_rate`, `input_audio_codec`, `high_vad_sensitivity`, `vad_signals`."



## AsyncAPI

````yaml api-reference/asyncapi/stt-sarvam.asyncapi.yaml /v1/stt/sarvam/saaras:v3
id: /v1/stt/sarvam/saaras:v3
title: Saaras v3
description: >-
  Stream real-time speech-to-text transcripts from Sarvam AI Saaras v3 over
  WebSocket with voice activity detection across 23 Indian languages. Session
  configuration is provided via query parameters on the WebSocket upgrade URL:
  `language-code`, `mode`, `sample_rate`, `input_audio_codec`,
  `high_vad_sensitivity`, `vad_signals`.
servers:
  - id: production
    protocol: wss
    host: api.slng.ai
    bindings: []
    variables: []
  - id: staging
    protocol: wss
    host: stageapi.slng.ai
    bindings: []
    variables: []
address: /v1/stt/sarvam/saaras:v3
parameters: []
bindings:
  - protocol: ws
    version: latest
    value:
      method: GET
      headers:
        type: object
        properties:
          X-World-Part-Override:
            type: string
            description: >-
              Target world part override. Auto-selected if not provided.
              Available world parts: `ap`.
            enum:
              - ap
            x-parser-schema-id: <anonymous-schema-22>
        x-parser-schema-id: WebsocketHeadersSarvamSaarasV3
    schemaProperties:
      - name: method
        type: string
        description: GET
        required: false
      - name: headers
        type: object
        required: false
        properties:
          - name: X-World-Part-Override
            type: string
            description: >-
              Target world part override. Auto-selected if not provided.
              Available world parts: `ap`.
            enumValues:
              - ap
            required: false
operations:
  - &ref_1
    id: sttSarvamSaarasV3ReceiveAudio
    title: Stt sarvam saaras v3 receive audio
    description: Send audio frame to Saaras v3
    type: receive
    messages:
      - &ref_6
        id: SarvamSaarasV3AudioFrame
        contentType: application/json
        payload:
          - name: Audio Frame
            description: >-
              Stream a base64-encoded audio chunk to Saaras v3 as a JSON
              message.
            type: object
            properties:
              - name: audio
                type: object
                required: true
                properties:
                  - name: data
                    type: string
                    description: >-
                      Base64-encoded audio bytes for this chunk. At 16 kHz
                      linear16, a ~256 ms chunk is roughly 8192 bytes before
                      base64.
                    required: true
                  - name: sample_rate
                    type: integer
                    description: Sample rate of the audio in Hz.
                    required: true
                  - name: encoding
                    type: string
                    description: >-
                      Encoding of the audio bytes. Raw PCM variants are
                      normalized to `audio/wav` before being forwarded to
                      Sarvam.
                    enumValues:
                      - wav
                      - linear16
                      - LINEAR16
                      - pcm_s16le
                      - pcm_l16
                      - pcm_raw
                      - audio/wav
                    required: true
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Audio frame envelope expected by Saaras v3. Send a JSON message
            whose `audio.data` is a base64-encoded PCM/WAV chunk together with
            the sample rate and encoding. The gateway forwards the frame to
            Sarvam after normalizing `encoding` values to `audio/wav` when the
            source is raw PCM.
          required:
            - audio
          properties:
            audio:
              type: object
              required:
                - data
                - sample_rate
                - encoding
              properties:
                data:
                  type: string
                  format: byte
                  description: >-
                    Base64-encoded audio bytes for this chunk. At 16 kHz
                    linear16, a ~256 ms chunk is roughly 8192 bytes before
                    base64.
                  x-parser-schema-id: <anonymous-schema-3>
                sample_rate:
                  type: integer
                  description: Sample rate of the audio in Hz.
                  default: 16000
                  x-parser-schema-id: <anonymous-schema-4>
                encoding:
                  type: string
                  description: >-
                    Encoding of the audio bytes. Raw PCM variants are normalized
                    to `audio/wav` before being forwarded to Sarvam.
                  default: wav
                  enum:
                    - wav
                    - linear16
                    - LINEAR16
                    - pcm_s16le
                    - pcm_l16
                    - pcm_raw
                    - audio/wav
                  x-parser-schema-id: <anonymous-schema-5>
              x-parser-schema-id: <anonymous-schema-2>
          x-parser-schema-id: <anonymous-schema-1>
        title: Audio Frame
        description: Stream a base64-encoded audio chunk to Saaras v3 as a JSON message.
        example: |-
          {
            "audio": {
              "data": "UklGRiQAAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQAAAAA=",
              "sample_rate": 16000,
              "encoding": "wav"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: SarvamSaarasV3AudioFrame
    bindings: []
    extensions: &ref_0
      - id: x-parser-unique-object-id
        value: /v1/stt/sarvam/saaras:v3
  - &ref_2
    id: sttSarvamSaarasV3ReceiveFlush
    title: Stt sarvam saaras v3 receive flush
    description: Force-finalize buffered audio on Saaras v3
    type: receive
    messages:
      - &ref_7
        id: SarvamSaarasV3FlushSignal
        contentType: application/json
        payload:
          - name: Flush Signal
            description: Force-finalize buffered audio without closing the connection.
            type: object
            properties:
              - name: type
                type: string
                description: flush
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Mid-stream flush. The gateway translates this to Saaras's `finalize`
            control message so the server emits a final transcript for the audio
            buffered so far. The WebSocket stays open for further audio.
          required:
            - type
          properties:
            type:
              type: string
              const: flush
              x-parser-schema-id: <anonymous-schema-7>
          x-parser-schema-id: <anonymous-schema-6>
        title: Flush Signal
        description: Force-finalize buffered audio without closing the connection.
        example: |-
          {
            "type": "flush"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: SarvamSaarasV3FlushSignal
    bindings: []
    extensions: *ref_0
  - &ref_3
    id: sttSarvamSaarasV3SendData
    title: Stt sarvam saaras v3 send data
    description: Receive transcript from Saaras v3
    type: send
    messages:
      - &ref_8
        id: SarvamSaarasV3TranscriptMessage
        contentType: application/json
        payload:
          - name: Transcript
            description: Saaras v3 final transcript chunk for the most recent utterance.
            type: object
            properties:
              - name: type
                type: string
                description: data
                required: true
              - name: data
                type: object
                required: true
                properties:
                  - name: transcript
                    type: string
                    description: >-
                      Transcribed text for the utterance, in the language
                      determined by the `language-code` query parameter.
                    required: true
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Final transcript event emitted by Saaras v3 after an utterance ends
            or after a flush. Saaras v3 emits final transcripts only — there are
            no partial/interim results on this channel.
          required:
            - type
            - data
          properties:
            type:
              type: string
              const: data
              x-parser-schema-id: <anonymous-schema-9>
            data:
              type: object
              required:
                - transcript
              properties:
                transcript:
                  type: string
                  description: >-
                    Transcribed text for the utterance, in the language
                    determined by the `language-code` query parameter.
                  x-parser-schema-id: <anonymous-schema-11>
              x-parser-schema-id: <anonymous-schema-10>
          x-parser-schema-id: <anonymous-schema-8>
        title: Transcript
        description: Saaras v3 final transcript chunk for the most recent utterance.
        example: |-
          {
            "type": "data",
            "data": {
              "transcript": "నమస్తే ఇది తెలుగు పరీక్ష"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: SarvamSaarasV3TranscriptMessage
    bindings: []
    extensions: *ref_0
  - &ref_4
    id: sttSarvamSaarasV3SendEvents
    title: Stt sarvam saaras v3 send events
    description: Receive VAD events from Saaras v3
    type: send
    messages:
      - &ref_9
        id: SarvamSaarasV3EventsMessage
        contentType: application/json
        payload:
          - name: VAD Event
            description: Voice activity detection signal from Saaras v3.
            type: object
            properties:
              - name: type
                type: string
                description: events
                required: true
              - name: data
                type: object
                required: true
                properties:
                  - name: signal_type
                    type: string
                    description: Which VAD boundary this event marks.
                    enumValues:
                      - START_SPEECH
                      - END_SPEECH
                    required: true
                  - name: occured_at
                    type: string
                    description: ISO-8601 timestamp at which Saaras observed the boundary.
                    required: false
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Voice activity event emitted when `vad_signals=true` is set on the
            upgrade query string. `START_SPEECH` marks the start of an utterance
            and `END_SPEECH` marks the end.
          required:
            - type
            - data
          properties:
            type:
              type: string
              const: events
              x-parser-schema-id: <anonymous-schema-13>
            data:
              type: object
              required:
                - signal_type
              properties:
                signal_type:
                  type: string
                  description: Which VAD boundary this event marks.
                  enum:
                    - START_SPEECH
                    - END_SPEECH
                  x-parser-schema-id: <anonymous-schema-15>
                occured_at:
                  type: string
                  format: date-time
                  description: ISO-8601 timestamp at which Saaras observed the boundary.
                  x-parser-schema-id: <anonymous-schema-16>
              x-parser-schema-id: <anonymous-schema-14>
          x-parser-schema-id: <anonymous-schema-12>
        title: VAD Event
        description: Voice activity detection signal from Saaras v3.
        example: |-
          {
            "type": "events",
            "data": {
              "signal_type": "END_SPEECH",
              "occured_at": "2026-05-18T12:50:56.000Z"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: SarvamSaarasV3EventsMessage
    bindings: []
    extensions: *ref_0
  - &ref_5
    id: sttSarvamSaarasV3SendError
    title: Stt sarvam saaras v3 send error
    description: Receive error from Saaras v3
    type: send
    messages:
      - &ref_10
        id: SarvamSaarasV3ErrorMessage
        contentType: application/json
        payload:
          - name: Error
            description: Error from Saaras v3 or the SLNG gateway.
            type: object
            properties:
              - name: type
                type: string
                description: error
                required: true
              - name: data
                type: object
                required: true
                properties:
                  - name: message
                    type: string
                    description: Human-readable error description.
                    required: true
                  - name: code
                    type: string
                    description: >-
                      Optional machine-readable error code when the failure
                      originates from the gateway.
                    required: false
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Error message from the upstream Sarvam session or from the SLNG
            gateway when a request is malformed, an authentication or quota
            check fails, or the upstream socket disconnects unexpectedly.
          required:
            - type
            - data
          properties:
            type:
              type: string
              const: error
              x-parser-schema-id: <anonymous-schema-18>
            data:
              type: object
              required:
                - message
              properties:
                message:
                  type: string
                  description: Human-readable error description.
                  x-parser-schema-id: <anonymous-schema-20>
                code:
                  type: string
                  description: >-
                    Optional machine-readable error code when the failure
                    originates from the gateway.
                  x-parser-schema-id: <anonymous-schema-21>
              x-parser-schema-id: <anonymous-schema-19>
          x-parser-schema-id: <anonymous-schema-17>
        title: Error
        description: Error from Saaras v3 or the SLNG gateway.
        example: |-
          {
            "type": "error",
            "data": {
              "message": "Invalid audio payload"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: SarvamSaarasV3ErrorMessage
    bindings: []
    extensions: *ref_0
sendOperations:
  - *ref_1
  - *ref_2
receiveOperations:
  - *ref_3
  - *ref_4
  - *ref_5
sendMessages:
  - *ref_6
  - *ref_7
receiveMessages:
  - *ref_8
  - *ref_9
  - *ref_10
extensions:
  - id: x-parser-unique-object-id
    value: /v1/stt/sarvam/saaras:v3
securitySchemes:
  - id: bearer
    name: bearer
    type: http
    description: >
      API key issued by SLNG. Pass as `Authorization: Bearer <token>` in the
      WebSocket upgrade request headers.
    scheme: bearer
    extensions: []

````