> ## 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.

# Unified TTS

> Stream synthesized audio from any WebSocket-capable TTS model over SLNG's native protocol. Send `init` (the model comes from the route path; `model` in the body is advisory), `text` frames, and `flush` to end a turn. The gateway returns `ready`, raw binary audio frames in the init encoding and sample rate, a bare `audio_end` after each flushed turn, `cleared` after `clear`, and flat `error` frames. There is no JSON `audio_chunk`, no `flushed` event, and no `data` envelope on any message. Encodings and sample rates are model-specific: Deepgram Aura accepts linear16 (8000–48000 Hz), mulaw, and alaw (8000/16000 Hz) over WebSocket only; Fish Audio accepts linear16/pcm/wav (8000–44100 Hz), mp3 (32000/44100 Hz), and opus (48000 Hz).



## AsyncAPI

````yaml api-reference/asyncapi/bridges-unmute.asyncapi.yaml /v1/bridges/unmute/tts/{model_variant}
id: /v1/bridges/unmute/tts/{model_variant}
title: Unmute TTS Bridge
description: >-
  Stream synthesized audio from any WebSocket-capable TTS model over SLNG's
  native protocol. Send `init` (the model comes from the route path; `model` in
  the body is advisory), `text` frames, and `flush` to end a turn. The gateway
  returns `ready`, raw binary audio frames in the init encoding and sample rate,
  a bare `audio_end` after each flushed turn, `cleared` after `clear`, and flat
  `error` frames. There is no JSON `audio_chunk`, no `flushed` event, and no
  `data` envelope on any message. Encodings and sample rates are model-specific:
  Deepgram Aura accepts linear16 (8000–48000 Hz), mulaw, and alaw (8000/16000
  Hz) over WebSocket only; Fish Audio accepts linear16/pcm/wav (8000–44100 Hz),
  mp3 (32000/44100 Hz), and opus (48000 Hz).
servers:
  - id: production
    protocol: wss
    host: api.slng.ai
    bindings: []
    variables: []
address: /v1/bridges/unmute/tts/{model_variant}
parameters: []
bindings:
  - protocol: ws
    version: latest
    value:
      method: GET
    schemaProperties:
      - name: method
        type: string
        description: GET
        required: false
operations:
  - &ref_2
    id: unmuteTtsBridgeReceiveInit
    title: Unmute tts bridge receive init
    description: Initialize session on Unmute TTS Bridge
    type: receive
    messages:
      - &ref_14
        id: UnmuteTtsInitMessage
        contentType: application/json
        payload:
          - name: Init (Unmute TTS)
            description: Initialize Unmute TTS session with voice and configuration.
            type: object
            properties:
              - name: type
                type: string
                description: init
                required: true
              - name: model
                type: string
                description: >-
                  Advisory and optional. Never honoured or forwarded; the route
                  path selects the model.
                required: false
              - name: voice
                type: string
                description: Voice identifier for the selected model.
                required: false
              - name: pronunciation
                type: object
                description: >-
                  Optional pronunciation rewrite. `mode` is always `rewrite`;
                  supply exactly one of `name` (a dictionary name, 1–128
                  characters) or `dictionary_id`.
                required: false
                properties:
                  - name: mode
                    type: string
                    description: rewrite
                    required: true
                  - name: name
                    type: string
                    required: false
                  - name: dictionary_id
                    type: string
                    required: false
              - name: config
                type: object
                description: Synthesis configuration.
                required: false
                properties:
                  - name: sample_rate
                    type: integer
                    description: Audio sample rate in Hz.
                    enumValues:
                      - 8000
                      - 16000
                      - 22050
                      - 24000
                      - 32000
                      - 44100
                      - 48000
                    required: false
                  - name: encoding
                    type: string
                    description: >-
                      Union across bridge targets; each route accepts only its
                      own subset. Deepgram Aura over WebSocket accepts linear16,
                      mulaw, and alaw only (mp3/opus/flac are HTTP-only for
                      Aura). Fish Audio accepts linear16 (alias of pcm), pcm,
                      wav, mp3, and opus.
                    enumValues:
                      - linear16
                      - mp3
                      - opus
                      - mulaw
                      - alaw
                      - flac
                      - aac
                      - wav
                      - pcm
                    required: false
                  - name: language
                    type: string
                    description: ISO-639-1 language code.
                    enumValues:
                      - en
                      - ja
                      - zh
                      - de
                      - hi
                      - fr
                      - ko
                      - pt
                      - it
                      - es
                      - id
                      - nl
                      - tr
                      - fil
                      - pl
                      - sv
                      - bg
                      - ro
                      - ar
                      - cs
                      - el
                      - fi
                      - hr
                      - ms
                      - sk
                      - da
                      - ta
                      - uk
                      - ru
                      - hu
                      - 'no'
                      - vi
                    required: false
                  - name: speed
                    type: number
                    description: >-
                      Optional speaking-speed hint in the selected model's
                      units; models without a speed control accept and ignore
                      it.
                    required: false
                  - name: pronunciation
                    type: object
                    description: >-
                      Optional pronunciation rewrite. `mode` is always
                      `rewrite`; supply exactly one of `name` (a dictionary
                      name, 1–128 characters) or `dictionary_id`.
                    required: false
                    properties:
                      - name: mode
                        type: string
                        description: rewrite
                        required: true
                      - name: name
                        type: string
                        required: false
                      - name: dictionary_id
                        type: string
                        required: false
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Opens the provider session. The model comes from the route path;
            `model` in the body is advisory and discarded. `config.encoding` and
            `config.sample_rate` are validated against the selected model before
            any provider connection and rejected with a `config_error`
            otherwise.
          required:
            - type
          properties:
            type:
              type: string
              const: init
              x-parser-schema-id: <anonymous-schema-49>
            model:
              type: string
              description: >-
                Advisory and optional. Never honoured or forwarded; the route
                path selects the model.
              x-parser-schema-id: <anonymous-schema-50>
            voice:
              type: string
              description: Voice identifier for the selected model.
              x-parser-schema-id: <anonymous-schema-51>
            pronunciation:
              type: object
              description: >-
                Optional pronunciation rewrite. `mode` is always `rewrite`;
                supply exactly one of `name` (a dictionary name, 1–128
                characters) or `dictionary_id`.
              required:
                - mode
              properties:
                mode:
                  type: string
                  const: rewrite
                  x-parser-schema-id: <anonymous-schema-53>
                name:
                  type: string
                  minLength: 1
                  maxLength: 128
                  x-parser-schema-id: <anonymous-schema-54>
                dictionary_id:
                  type: string
                  minLength: 1
                  x-parser-schema-id: <anonymous-schema-55>
              x-parser-schema-id: <anonymous-schema-52>
            config:
              type: object
              description: Synthesis configuration.
              properties:
                sample_rate:
                  type: integer
                  description: Audio sample rate in Hz.
                  enum:
                    - 8000
                    - 16000
                    - 22050
                    - 24000
                    - 32000
                    - 44100
                    - 48000
                  x-parser-schema-id: SampleRate
                encoding:
                  type: string
                  description: >-
                    Union across bridge targets; each route accepts only its own
                    subset. Deepgram Aura over WebSocket accepts linear16,
                    mulaw, and alaw only (mp3/opus/flac are HTTP-only for Aura).
                    Fish Audio accepts linear16 (alias of pcm), pcm, wav, mp3,
                    and opus.
                  enum:
                    - linear16
                    - mp3
                    - opus
                    - mulaw
                    - alaw
                    - flac
                    - aac
                    - wav
                    - pcm
                  x-parser-schema-id: <anonymous-schema-57>
                language:
                  type: string
                  description: ISO-639-1 language code.
                  enum:
                    - en
                    - ja
                    - zh
                    - de
                    - hi
                    - fr
                    - ko
                    - pt
                    - it
                    - es
                    - id
                    - nl
                    - tr
                    - fil
                    - pl
                    - sv
                    - bg
                    - ro
                    - ar
                    - cs
                    - el
                    - fi
                    - hr
                    - ms
                    - sk
                    - da
                    - ta
                    - uk
                    - ru
                    - hu
                    - 'no'
                    - vi
                  x-parser-schema-id: LanguageCode
                speed:
                  type: number
                  description: >-
                    Optional speaking-speed hint in the selected model's units;
                    models without a speed control accept and ignore it.
                  x-parser-schema-id: <anonymous-schema-58>
                pronunciation:
                  type: object
                  description: >-
                    Optional pronunciation rewrite. `mode` is always `rewrite`;
                    supply exactly one of `name` (a dictionary name, 1–128
                    characters) or `dictionary_id`.
                  required:
                    - mode
                  properties:
                    mode:
                      type: string
                      const: rewrite
                      x-parser-schema-id: <anonymous-schema-60>
                    name:
                      type: string
                      minLength: 1
                      maxLength: 128
                      x-parser-schema-id: <anonymous-schema-61>
                    dictionary_id:
                      type: string
                      minLength: 1
                      x-parser-schema-id: <anonymous-schema-62>
                  x-parser-schema-id: <anonymous-schema-59>
              x-parser-schema-id: <anonymous-schema-56>
          x-parser-schema-id: <anonymous-schema-48>
        title: Init (Unmute TTS)
        description: Initialize Unmute TTS session with voice and configuration.
        example: |-
          {
            "type": "init",
            "voice": "aura-2-thalia-en",
            "config": {
              "sample_rate": 24000,
              "encoding": "linear16"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: UnmuteTtsInitMessage
    bindings: []
    extensions: &ref_0
      - id: x-parser-unique-object-id
        value: /v1/bridges/unmute/tts/{model_variant}
  - &ref_3
    id: unmuteTtsBridgeReceiveText
    title: Unmute tts bridge receive text
    description: Send text to Unmute TTS Bridge
    type: receive
    messages:
      - &ref_15
        id: UnmuteTtsTextMessage
        contentType: application/json
        payload:
          - name: Text (Unmute TTS)
            description: Send text to synthesize.
            type: object
            properties:
              - name: type
                type: string
                description: text
                required: true
              - name: text
                type: string
                description: Text to synthesize.
                required: true
              - name: flush
                type: boolean
                description: Flush the turn immediately after this text.
                required: false
              - name: partial
                type: boolean
                description: >-
                  Marks this frame as the start or middle of a sentence that the
                  next text frames continue. The gateway either sends it on or
                  holds it and sends it joined to the next frame, whichever
                  suits the provider. Held text is joined exactly as sent, with
                  no added spaces. Cannot be combined with `flush: true`. A
                  frame with `partial: true` may contain only `type`, `text`,
                  `partial`, `pronunciation`, and `flush: false`. End the
                  sentence with an ordinary text frame or a `flush`; if the
                  connection closes first, held text is discarded. Where the
                  gateway sends the fragment on, the provider receives it
                  unchanged, so send at least a clause at a time: single words
                  can be voiced one at a time. Send `partial` only when `ready`
                  includes `accepts_partial_text: true`.
                required: false
              - name: pronunciation
                type: object
                description: >-
                  Optional pronunciation rewrite. `mode` is always `rewrite`;
                  supply exactly one of `name` (a dictionary name, 1–128
                  characters) or `dictionary_id`.
                required: false
                properties:
                  - name: mode
                    type: string
                    description: rewrite
                    required: true
                  - name: name
                    type: string
                    required: false
                  - name: dictionary_id
                    type: string
                    required: false
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Text for the current turn. `flush: true` ends the turn with this
            text. Set `partial: true` on a frame that ends mid-sentence when
            more of the same sentence follows.
          required:
            - type
            - text
          properties:
            type:
              type: string
              const: text
              x-parser-schema-id: <anonymous-schema-64>
            text:
              type: string
              description: Text to synthesize.
              x-parser-schema-id: <anonymous-schema-65>
            flush:
              type: boolean
              description: Flush the turn immediately after this text.
              x-parser-schema-id: <anonymous-schema-66>
            partial:
              type: boolean
              description: >-
                Marks this frame as the start or middle of a sentence that the
                next text frames continue. The gateway either sends it on or
                holds it and sends it joined to the next frame, whichever suits
                the provider. Held text is joined exactly as sent, with no added
                spaces. Cannot be combined with `flush: true`. A frame with
                `partial: true` may contain only `type`, `text`, `partial`,
                `pronunciation`, and `flush: false`. End the sentence with an
                ordinary text frame or a `flush`; if the connection closes
                first, held text is discarded. Where the gateway sends the
                fragment on, the provider receives it unchanged, so send at
                least a clause at a time: single words can be voiced one at a
                time. Send `partial` only when `ready` includes
                `accepts_partial_text: true`.
              x-parser-schema-id: <anonymous-schema-67>
            pronunciation:
              type: object
              description: >-
                Optional pronunciation rewrite. `mode` is always `rewrite`;
                supply exactly one of `name` (a dictionary name, 1–128
                characters) or `dictionary_id`.
              required:
                - mode
              properties:
                mode:
                  type: string
                  const: rewrite
                  x-parser-schema-id: <anonymous-schema-69>
                name:
                  type: string
                  minLength: 1
                  maxLength: 128
                  x-parser-schema-id: <anonymous-schema-70>
                dictionary_id:
                  type: string
                  minLength: 1
                  x-parser-schema-id: <anonymous-schema-71>
              x-parser-schema-id: <anonymous-schema-68>
          x-parser-schema-id: <anonymous-schema-63>
        title: Text (Unmute TTS)
        description: Send text to synthesize.
        example: |-
          {
            "type": "text",
            "text": "Hello, how can I help you?"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: UnmuteTtsTextMessage
    bindings: []
    extensions: *ref_0
  - &ref_4
    id: unmuteTtsBridgeReceiveFlush
    title: Unmute tts bridge receive flush
    description: Flush the current turn on Unmute TTS Bridge
    type: receive
    messages:
      - &ref_16
        id: UnmuteTtsFlushMessage
        contentType: application/json
        payload:
          - name: Flush (Unmute TTS)
            description: End the current turn and synthesize buffered text.
            type: object
            properties:
              - name: type
                type: string
                description: flush
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Ends the current turn. Binary audio frames follow and the turn
            terminates with a bare `audio_end`; there is no `flushed`
            acknowledgement.
          required:
            - type
          properties:
            type:
              type: string
              const: flush
              x-parser-schema-id: <anonymous-schema-73>
          x-parser-schema-id: <anonymous-schema-72>
        title: Flush (Unmute TTS)
        description: End the current turn and synthesize buffered text.
        example: |-
          {
            "type": "flush"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: UnmuteTtsFlushMessage
    bindings: []
    extensions: *ref_0
  - &ref_5
    id: unmuteTtsBridgeReceiveClear
    title: Unmute tts bridge receive clear
    description: Discard queued output on Unmute TTS Bridge
    type: receive
    messages:
      - &ref_17
        id: UnmuteTtsClearMessage
        contentType: application/json
        payload:
          - name: Clear (Unmute TTS)
            description: Discard queued output for the current turn.
            type: object
            properties:
              - name: type
                type: string
                description: clear
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Cancels the active provider turn and discards queued output. The
            gateway replies with `cleared`.
          required:
            - type
          properties:
            type:
              type: string
              const: clear
              x-parser-schema-id: <anonymous-schema-75>
          x-parser-schema-id: <anonymous-schema-74>
        title: Clear (Unmute TTS)
        description: Discard queued output for the current turn.
        example: |-
          {
            "type": "clear"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: UnmuteTtsClearMessage
    bindings: []
    extensions: *ref_0
  - &ref_6
    id: unmuteTtsBridgeReceiveCancel
    title: Unmute tts bridge receive cancel
    description: Cancel the current synthesis turn on Unmute TTS Bridge
    type: receive
    messages:
      - &ref_18
        id: UnmuteTtsCancelMessage
        contentType: application/json
        payload:
          - name: Cancel (Unmute TTS)
            description: Cancel the current synthesis turn.
            type: object
            properties:
              - name: type
                type: string
                description: cancel
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Cancels the current synthesis turn without a dedicated
            acknowledgement; the session stays open for the next turn.
          required:
            - type
          properties:
            type:
              type: string
              const: cancel
              x-parser-schema-id: <anonymous-schema-77>
          x-parser-schema-id: <anonymous-schema-76>
        title: Cancel (Unmute TTS)
        description: Cancel the current synthesis turn.
        example: |-
          {
            "type": "cancel"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: UnmuteTtsCancelMessage
    bindings: []
    extensions: *ref_0
  - &ref_7
    id: unmuteTtsBridgeReceiveClose
    title: Unmute tts bridge receive close
    description: Close session on Unmute TTS Bridge
    type: receive
    messages:
      - &ref_19
        id: UnmuteTtsCloseMessage
        contentType: application/json
        payload:
          - name: Close (Unmute TTS)
            description: Close the session.
            type: object
            properties:
              - name: type
                type: string
                description: close
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          description: Ends the session after in-flight audio is delivered.
          required:
            - type
          properties:
            type:
              type: string
              const: close
              x-parser-schema-id: <anonymous-schema-79>
          x-parser-schema-id: <anonymous-schema-78>
        title: Close (Unmute TTS)
        description: Close the session.
        example: |-
          {
            "type": "close"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: UnmuteTtsCloseMessage
    bindings: []
    extensions: *ref_0
  - &ref_8
    id: unmuteTtsBridgeReceiveKeepalive
    title: Unmute tts bridge receive keepalive
    description: Send keepalive on Unmute TTS Bridge
    type: receive
    messages:
      - &ref_20
        id: UnmuteTtsKeepaliveMessage
        contentType: application/json
        payload:
          - name: Keepalive (Unmute TTS)
            description: Keep an idle session open.
            type: object
            properties:
              - name: type
                type: string
                description: keepalive
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Resets the gateway idle timeout and is forwarded upstream only for
            providers with a native keepalive frame (Sarvam). It produces no
            reply and never extends the maximum session duration.
          required:
            - type
          properties:
            type:
              type: string
              const: keepalive
              x-parser-schema-id: <anonymous-schema-81>
          x-parser-schema-id: <anonymous-schema-80>
        title: Keepalive (Unmute TTS)
        description: Keep an idle session open.
        example: |-
          {
            "type": "keepalive"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: UnmuteTtsKeepaliveMessage
    bindings: []
    extensions: *ref_0
  - &ref_9
    id: unmuteTtsBridgeSendReady
    title: Unmute tts bridge send ready
    description: Receive ready signal from Unmute TTS Bridge
    type: send
    messages:
      - &ref_21
        id: UnmuteTtsReadyMessage
        contentType: application/json
        payload:
          - name: Ready (Unmute TTS)
            description: Unmute TTS session is ready.
            type: object
            properties:
              - name: type
                type: string
                description: ready
                required: true
              - name: session_id
                type: string
                description: Gateway request identifier for this session.
                required: true
              - name: slng_request_id
                type: string
                description: >-
                  SLNG request identifier (same value as `session_id`) for log
                  correlation.
                required: true
              - name: accepts_partial_text
                type: boolean
                description: >-
                  `true` when this gateway honours `partial` on text frames.
                  Absent when it does not, in which case do not send `partial`.
                required: false
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Sent once after the upstream session is open. `session_id` and
            `slng_request_id` carry the same gateway request identifier.
          required:
            - type
            - session_id
            - slng_request_id
          properties:
            type:
              type: string
              const: ready
              x-parser-schema-id: <anonymous-schema-83>
            session_id:
              type: string
              description: Gateway request identifier for this session.
              x-parser-schema-id: <anonymous-schema-84>
            slng_request_id:
              type: string
              description: >-
                SLNG request identifier (same value as `session_id`) for log
                correlation.
              x-parser-schema-id: <anonymous-schema-85>
            accepts_partial_text:
              type: boolean
              description: >-
                `true` when this gateway honours `partial` on text frames.
                Absent when it does not, in which case do not send `partial`.
              x-parser-schema-id: <anonymous-schema-86>
          x-parser-schema-id: <anonymous-schema-82>
        title: Ready (Unmute TTS)
        description: Unmute TTS session is ready.
        example: |-
          {
            "type": "ready",
            "session_id": "1e1a9598-077e-4d9d-aba6-78af6363f27c",
            "slng_request_id": "1e1a9598-077e-4d9d-aba6-78af6363f27c",
            "accepts_partial_text": true
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: UnmuteTtsReadyMessage
    bindings: []
    extensions: *ref_0
  - &ref_10
    id: unmuteTtsBridgeSendBinaryAudio
    title: Unmute tts bridge send binary audio
    description: Receive a raw binary audio frame from Unmute TTS Bridge
    type: send
    messages:
      - &ref_22
        id: UnmuteTtsBinaryAudio
        contentType: application/octet-stream
        payload:
          - name: Binary Audio Frame
            description: Raw binary audio frame from Unmute TTS.
            type: object
            properties:
              - name: type
                type: string
                description: >-
                  Placeholder discriminator. The actual message is a raw binary
                  WebSocket frame, not JSON.
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Synthesized audio is delivered only as raw binary WebSocket frames
            in the encoding and sample rate selected at init. This is NOT a JSON
            message and there is no base64 `audio_chunk` envelope. The object
            schema below exists only because the AsyncAPI tooling requires one.
          required:
            - type
          properties:
            type:
              type: string
              const: binary
              description: >-
                Placeholder discriminator. The actual message is a raw binary
                WebSocket frame, not JSON.
              x-parser-schema-id: <anonymous-schema-88>
          x-parser-schema-id: <anonymous-schema-87>
        title: Binary Audio Frame
        description: Raw binary audio frame from Unmute TTS.
        example: >-
          "0000FF00000000FF00000000010101010101010100000000FFFFFFFFFFFEFEFDFEFEFEFEFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFEFEFEFEFF0001000001020303030303030303030201010000FFFFFEFDFDFDFDFEFFFFFFFF0001020303020201000000FFFDFCFBFAFAFBFAF9F8F7F7F7F6F6F4F2F2F3F7FC000406090F14191A19181715110E0A05FEF9F6F3F0EEECEBEBECEEF2F6F9FC0005090D0F101010100E0C080401"
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: UnmuteTtsBinaryAudio
    bindings: []
    extensions: *ref_0
  - &ref_11
    id: unmuteTtsBridgeSendCleared
    title: Unmute tts bridge send cleared
    description: Receive clear acknowledgement from Unmute TTS Bridge
    type: send
    messages:
      - &ref_23
        id: UnmuteTtsClearedMessage
        contentType: application/json
        payload:
          - name: Cleared (Unmute TTS)
            description: Queued output was discarded.
            type: object
            properties:
              - name: type
                type: string
                description: cleared
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Acknowledges a client `clear`; queued provider output for the turn
            was discarded.
          required:
            - type
          properties:
            type:
              type: string
              const: cleared
              x-parser-schema-id: <anonymous-schema-90>
          x-parser-schema-id: <anonymous-schema-89>
        title: Cleared (Unmute TTS)
        description: Queued output was discarded.
        example: |-
          {
            "type": "cleared"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: UnmuteTtsClearedMessage
    bindings: []
    extensions: *ref_0
  - &ref_12
    id: unmuteTtsBridgeSendAudioEnd
    title: Unmute tts bridge send audio end
    description: Receive bare audio_end turn boundary from Unmute TTS Bridge
    type: send
    messages:
      - &ref_24
        id: UnmuteTtsAudioEndMessage
        contentType: application/json
        payload:
          - name: Audio End (Unmute TTS)
            description: Bare turn boundary after the last audio frame.
            type: object
            properties:
              - name: type
                type: string
                description: audio_end
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Sent after the last binary audio frame of a flushed turn, on cache
            replay, and when the provider transport closes cleanly. The frame is
            exactly `{"type":"audio_end"}`: no `duration`, no payload, no nested
            `data`.
          required:
            - type
          properties:
            type:
              type: string
              const: audio_end
              x-parser-schema-id: <anonymous-schema-92>
          x-parser-schema-id: <anonymous-schema-91>
        title: Audio End (Unmute TTS)
        description: Bare turn boundary after the last audio frame.
        example: |-
          {
            "type": "audio_end"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: UnmuteTtsAudioEndMessage
    bindings: []
    extensions: *ref_0
  - &ref_13
    id: unmuteTtsBridgeSendError
    title: Unmute tts bridge send error
    description: Receive error from Unmute TTS Bridge
    type: send
    messages:
      - &ref_25
        id: UnmuteTtsErrorMessage
        contentType: application/json
        payload:
          - name: Error (Unmute TTS)
            description: Error occurred during Unmute TTS session.
            type: object
            properties:
              - name: type
                type: string
                description: error
                required: true
              - name: code
                type: &ref_1
                  - string
                  - integer
                description: >-
                  Error code. Gateway codes are strings; a provider-forwarded
                  code keeps the provider's value, which may be numeric.
                required: true
              - name: message
                type: string
                description: Human-readable error description; wording may change.
                required: true
              - name: slng_request_id
                type: string
                description: SLNG request identifier, present only on pronunciation errors.
                required: false
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            Flat error frame; there is no nested `data` envelope. Provider
            errors are forwarded with the provider's own `code` value (which may
            be numeric) or `provider_error` when the provider gave none.
            Gateway-generated TTS session errors use string codes such as
            `config_error`, `provider_error`, `rate_limit_exceeded`,
            `payload_too_large`, `processing_error`, `watermarking_error`,
            `unsupported_watermark_format`, and `invalid_pronunciation`.
            `slng_request_id` is present only on pronunciation errors; use the
            `ready` message for correlation otherwise.
          required:
            - type
            - code
            - message
          properties:
            type:
              type: string
              const: error
              x-parser-schema-id: <anonymous-schema-94>
            code:
              type: *ref_1
              description: >-
                Error code. Gateway codes are strings; a provider-forwarded code
                keeps the provider's value, which may be numeric.
              x-parser-schema-id: <anonymous-schema-95>
            message:
              type: string
              description: Human-readable error description; wording may change.
              x-parser-schema-id: <anonymous-schema-96>
            slng_request_id:
              type: string
              description: SLNG request identifier, present only on pronunciation errors.
              x-parser-schema-id: <anonymous-schema-97>
          x-parser-schema-id: <anonymous-schema-93>
        title: Error (Unmute TTS)
        description: Error occurred during Unmute TTS session.
        example: |-
          {
            "type": "error",
            "code": "provider_error",
            "message": "Upstream service unavailable"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: UnmuteTtsErrorMessage
    bindings: []
    extensions: *ref_0
sendOperations:
  - *ref_2
  - *ref_3
  - *ref_4
  - *ref_5
  - *ref_6
  - *ref_7
  - *ref_8
receiveOperations:
  - *ref_9
  - *ref_10
  - *ref_11
  - *ref_12
  - *ref_13
sendMessages:
  - *ref_14
  - *ref_15
  - *ref_16
  - *ref_17
  - *ref_18
  - *ref_19
  - *ref_20
receiveMessages:
  - *ref_21
  - *ref_22
  - *ref_23
  - *ref_24
  - *ref_25
extensions:
  - id: x-parser-unique-object-id
    value: /v1/bridges/unmute/tts/{model_variant}
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: []

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.