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

# Save agent as a new version API

> Save a Bolna voice agent configuration as a new version without making it live, to test it before calls use it.

Saves a configuration as a new version of the agent. The live agent and its calls don't change until you [make the version live](https://www.bolna.ai/docs/api-reference/agent/v2/versions/set_current.md).

The body is the same as [Update agent](https://www.bolna.ai/docs/api-reference/agent/v2/update.md), validated the same way, plus two optional fields:

| Field | Description |
| - | - |
| `version_name` | Name for the version, one no other version of the agent uses. Defaults to the next number, such as `v4`. |
| `tags` | Tags for the version |

The response carries the new version's `version_id`. Use it to [place a test call](https://www.bolna.ai/docs/api-reference/calls/make.md#call-a-specific-agent-version), [save more edits into it](https://www.bolna.ai/docs/api-reference/agent/v2/versions/update.md) or make it live.

> [!NOTE]
>
> This is different from [Update agent](https://www.bolna.ai/docs/api-reference/agent/v2/update.md), which saves into the live version and changes what calls use straight away.


## OpenAPI

````yaml POST /v2/agent/{agent_id}/versions
openapi: 3.1.0
info:
  title: Bolna API
  description: >-
    Use and leverage Bolna Voice AI using APIs through HTTP requests from any
    language in your applications and workflows.
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://api.bolna.ai
    description: Production server
security:
  - bearerAuth: []
tags:
  - name: SIP trunks
    description: >-
      Bring-your-own-carrier SIP trunks, their gateways, carrier IPs and
      numbers.
paths:
  /v2/agent/{agent_id}/versions:
    post:
      description: >-
        Save an agent configuration as a new version without making it live.
        Takes the same body as [Update agent](/api-reference/agent/v2/update).
        The live agent and its calls don't change.
      parameters:
        - in: path
          name: agent_id
          required: true
          description: The agent's `id`
          schema:
            type: string
            format: uuid
      requestBody:
        description: The full agent configuration to save, as in `PUT /v2/agent/{agent_id}`
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AgentVersionRequest'
        required: true
      responses:
        '200':
          description: Version saved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentVersionSaveStatus'
              example:
                agent_id: 123e4567-e89b-12d3-a456-426655440000
                version_id: 7e775357-d9d3-4c82-a7d7-b7c3346caf79
                version_name: v4
                state: saved
        '400':
          description: The configuration failed validation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Another save of this agent is in progress
          content:
            application/json:
              example:
                message: Agent is currently being updated. Please retry.
components:
  schemas:
    AgentVersionRequest:
      allOf:
        - $ref: '#/components/schemas/AgentRequestV2'
        - type: object
          properties:
            version_name:
              type: string
              description: >-
                Name for the new version. Defaults to the next number, such as
                `v4`.
              example: Holiday offer
            tags:
              items:
                type: string
              type: array
    AgentVersionSaveStatus:
      type: object
      properties:
        agent_id:
          type: string
          format: uuid
        version_id:
          type: string
          format: uuid
          description: '`id` of the save just written'
        version_name:
          type: string
        state:
          type: string
          enum:
            - saved
            - updated
          description: >-
            `saved` for a new version, `updated` for a save into an existing
            version
    Error:
      required:
        - error
        - message
      type: object
      properties:
        error:
          type: integer
          format: int32
        message:
          type: string
    AgentRequestV2:
      properties:
        agent_config:
          $ref: '#/components/schemas/AgentConfigV2'
          description: Configuration of the agent
        agent_prompts:
          $ref: '#/components/schemas/AgentPrompt'
          description: >-
            Prompts to be provided to the agent. It can have multiple tasks of
            the form `task_<task_id>`
      type: object
      required:
        - agent_config
        - agent_prompts
    AgentConfigV2:
      required:
        - agent_name
        - tasks
      type: object
      properties:
        agent_name:
          description: The name of the agent
          type: string
          example: Alfred
        agent_welcome_message:
          description: >-
            Initial welcome message by agent. On a multilingual agent, a
            language's own `welcome_message` replaces it for calls that start in
            that language.
          type: string
          example: How are you doing Bruce?
        webhook_url:
          description: >-
            Webhook URL to receive data for all conversations as [get_execution
            API](/api-reference/executions/get_execution). Bolna sends webhooks
            from source IPs `13.203.39.153`, `13.126.9.249` and `13.202.133.53`.
            Whitelist all three on your server.
          type: string
          example: https://your-server.com/webhook
        agent_type:
          description: Agent type
          type: string
          example: other
        tasks:
          items:
            $ref: '#/components/schemas/TasksConfigV2'
          type: array
          description: An array of tasks that the agent can perform
        ingest_source_config:
          $ref: '#/components/schemas/IngestSourceConfig'
        calling_guardrails:
          type: object
          description: Time-based restrictions for outbound calls
          properties:
            call_start_hour:
              type: integer
              minimum: 0
              maximum: 23
              description: >-
                Start of allowed calling window in 24-hour format (recipient's
                timezone)
              example: 9
            call_end_hour:
              type: integer
              minimum: 0
              maximum: 23
              description: >-
                End of allowed calling window in 24-hour format (recipient's
                timezone)
              example: 17
        call_summary_enabled:
          type: boolean
          default: false
          description: >-
            Runs a platform summary pass after each call. The summary is written
            to the execution's `summary` field and to `extracted_data` under
            `General > Call Summary` with only a `subjective` value. Disabled
            agents produce no call summary.
    AgentPrompt:
      properties:
        task_1:
          type: object
          properties:
            system_prompt:
              description: The system prompt fed into the agent
              type: string
              example: >-
                What is the Ultimate Question of Life, the Universe, and
                Everything?
          required:
            - system_prompt
      type: object
    TasksConfigV2:
      properties:
        task_type:
          type: string
          description: Type of task
          enum:
            - conversation
            - extraction
            - summarization
        tools_config:
          $ref: '#/components/schemas/ToolsConfigV2'
          type: object
          description: Configuration of multiple tools that form a task
        toolchain:
          $ref: '#/components/schemas/Toolchain'
          type: object
          description: Agent will execute these tools in the specified order
        task_config:
          $ref: '#/components/schemas/ConversationConfig'
          type: object
          description: >-
            Should be used only in conversation task for now and it consists of
            all the required configuration for conversational nuances
      type: object
    IngestSourceConfig:
      type: object
      description: >-
        Configuration for ingestion source used for inbound agents. Required
        fields vary by `source_type`.
      properties:
        source_type:
          type: string
          enum:
            - api
            - csv
            - google_sheet
          description: Type of CRM ingestion source
          example: api
        source_url:
          type: string
          format: uri
          nullable: true
          description: API or Google Sheet URL
          example: https://example.com/api/data
        source_auth_token:
          type: string
          nullable: true
          description: Bearer token for API authentication
          example: abc123
        source_name:
          type: string
          nullable: true
          description: File or sheet name
          example: leads_sheet_june.csv
      allOf:
        - if:
            properties:
              source_type:
                const: api
          then:
            required:
              - source_url
              - source_auth_token
        - if:
            properties:
              source_type:
                const: csv
          then:
            required:
              - source_name
        - if:
            properties:
              source_type:
                const: google_sheet
          then:
            required:
              - source_name
              - source_url
    ToolsConfigV2:
      properties:
        llm_agent:
          $ref: '#/components/schemas/LlmAgentV2'
          type: object
          description: Configuration of LLM model for the agent task
        synthesizer:
          $ref: '#/components/schemas/Synthesizer'
          type: object
          description: Configuration of Synthesizer model for the agent task
        transcriber:
          $ref: '#/components/schemas/Transcriber'
          type: object
          description: Configuration of Transcriber model for the agent task
        input:
          $ref: '#/components/schemas/InputOutput'
          type: object
          description: Configuration of Input handler
        output:
          $ref: '#/components/schemas/InputOutput'
          type: object
          description: Configuration of Output handler
        api_tools:
          $ref: '#/components/schemas/ApiTools'
          type: object
          description: Api tools you'd like the agents to have access to
          default: null
          nullable: true
        s2s:
          $ref: '#/components/schemas/S2SConfig'
          type: object
          description: >-
            Speech-to-speech configuration. When set, one realtime model
            replaces llm_agent, transcriber and synthesizer, which must all be
            null
          default: null
          nullable: true
        multilingual_config:
          $ref: '#/components/schemas/MultilingualConfig'
          description: >-
            Enables a multilingual agent that can understand and respond in
            multiple languages within a single call. The top-level `transcriber`
            and `synthesizer` act as the base; each language overrides them. See
            the [Multilingual Config
            Reference](/customizations/multilingual-config-reference).
          default: null
          nullable: true
      type: object
      required:
        - llm_agent
        - synthesizer
        - transcriber
        - input
        - output
    Toolchain:
      properties:
        execution:
          type: string
          enum:
            - parallel
            - sequential
        pipelines:
          type: array
          description: >-
            Array of pipeline stages. Each element is itself an array of stage
            names, representing one pipeline (e.g.
            `[["transcriber","llm","synthesizer"]]`).
          items:
            type: array
            items:
              type: string
              enum:
                - transcriber
                - llm
                - synthesizer
          example:
            - - transcriber
              - llm
              - synthesizer
      type: object
      required:
        - execution
        - pipelines
    ConversationConfig:
      properties:
        hangup_after_silence:
          anyOf:
            - type: integer
          title: Hangup After Silence
          description: >-
            Time to wait in seconds before hanging up in case user doesn't speak
            a thing
          default: 10
          example: 10
        hangup_after_LLMCall:
          type: boolean
          title: Hangup After Llmcall
          description: >-
            Whether to use LLM prompt to hang up or not. Pretty soon this will
            be replaced by predefined function
          default: false
          example: false
        incremental_delay:
          anyOf:
            - type: integer
          title: Incremental Delay
          description: >-
            Since we work with interim results, this will dictate the linear
            delay to add before speaking everytime we get a partial transcript
            from ASR
          default: 400
          example: 400
        number_of_words_for_interruption:
          anyOf:
            - type: integer
          title: Number Of Words For Interruption
          description: >-
            To avoid accidental interruption, how many words should we wait for
            before interrupting
          default: 2
          example: 2
        call_cancellation_prompt:
          anyOf:
            - type: string
          title: Call Cancellation Prompt
          example: null
        backchanneling:
          anyOf:
            - type: boolean
          title: Backchanneling
          description: >-
            This will enable agent to acknowledge when user is speaking long
            sentences
          default: false
          example: false
        backchanneling_message_gap:
          anyOf:
            - type: integer
          title: Backchanneling Message Gap
          description: >-
            Gap between every successive acknowledgement. We will also add a
            random jitter to this value to make it more random
          default: 5
          example: 5
        backchanneling_start_delay:
          anyOf:
            - type: integer
          title: Backchanneling Start Delay
          description: Basic delay after which we should start with backchanneling
          default: 5
          example: 5
        ambient_noise:
          type: boolean
          default: false
          description: >-
            Whether ambient background noise is played during the call. The
            track is selected using `ambient_noise_track`
        ambient_noise_track:
          type: string
          title: Ambient Noise Track
          description: >-
            ID of the ambient noise track to play during calls. Use a preset
            track ID (e.g. `coffee-shop`, `office-ambience`, `call-center`) or
            the ID of a custom track uploaded via `POST /ambient-sounds/custom`.
            Set to `null` to disable ambient noise. Only supported with Plivo
            and Vobiz telephony providers.
          default: null
          example: coffee-shop
        call_terminate:
          anyOf:
            - type: integer
          title: Terminate a call after specified number of seconds
          description: The call automatically disconnects reaching this limit
          default: 90
          example: 90
        inbound_limit:
          type: integer
          default: -1
          description: >-
            Set the number of times each phone number is allowed to call. Put
            `-1` to allow unlimited calls.
        whitelist_phone_numbers:
          type: array
          example: null
          items:
            type: string
            format: uuid
          description: >-
            Add phone numbers here that should never be restricted by the call
            limits (ideal for internal or testing numbers). Phone number should
            have a country code (in [E.164](https://en.wikipedia.org/wiki/E.164)
            format)
        disallow_unknown_numbers:
          type: boolean
          default: false
          description: >-
            Only allow incoming calls from the numbers you've sourced using
            IngestSourceConfig.
        dtmf_enabled:
          type: boolean
          default: false
          description: >-
            Allow the agent to accept keypad (DTMF) input during the call. See
            [DTMF input](/inbound/dtmf)
        auto_reschedule:
          type: boolean
          default: false
          description: >-
            Automatically reschedule the call when the user asks to be called
            back at a later time
        welcome_message_delay:
          type: integer
          minimum: 0
          maximum: 1000
          default: 0
          example: 0
          description: >-
            Delay in milliseconds before the agent plays the welcome message
            once the call is connected. Accepts a value between `0` and `1000`
        noise_cancellation_level:
          type: integer
          nullable: true
          minimum: 60
          maximum: 100
          default: null
          example: null
          description: >-
            Level of background noise cancellation applied to the call audio.
            Accepts a value between `60` and `100`. Set to `null` to disable
            noise cancellation
        call_hangup_message:
          nullable: true
          default: null
          example: null
          description: >-
            Final message the agent speaks before disconnecting the call.
            Accepts a string, or a map of language code to message for
            multilingual agents (see [multilingual
            messages](/customizations/auto-switch-multilingual-messages))
          oneOf:
            - type: string
            - type: object
              additionalProperties:
                type: string
        interruptible_hangup_message:
          type: boolean
          default: false
          example: false
          description: >-
            Let the caller interrupt the agent's goodbye when the agent ends the
            call through the hangup prompt (`hangup_after_LLMCall`). Speaking
            over the goodbye cancels the hangup and the conversation continues.
            Silence, call-timeout, transfer and voicemail hangups are never
            interruptible
        check_if_user_online:
          type: boolean
          default: true
          description: Check whether the user is still on the call when they go silent
        trigger_user_online_message_after:
          type: integer
          default: 10
          example: 10
          description: >-
            Seconds of user silence after which the agent asks whether the user
            is still there. Applicable only when `check_if_user_online` is
            `true`
        voicemail:
          type: boolean
          default: false
          description: >-
            Enable voicemail detection. Agent will automatically disconnect the
            call if voicemail is detected
        voicemail_detection_duration:
          type: number
          format: float
          default: 30
          example: 30
          description: >-
            Time window in seconds from the start of the call during which
            voicemail detection runs. Applicable only when `voicemail` is `true`
        voicemail_check_interval:
          type: number
          format: float
          default: 7
          example: 7
          description: >-
            Minimum time in seconds between two successive voicemail detection
            checks
        voicemail_min_transcript_length:
          type: integer
          default: 7
          example: 7
          description: >-
            Minimum number of words in the transcript before a voicemail
            detection check is run
        voicemail_detection_time:
          type: number
          format: float
          nullable: true
          default: null
          example: null
          description: >-
            Optional override for the voicemail detection timing. Set to `null`
            to use the default behaviour
      type: object
      title: ConversationConfig
    LlmAgentV2:
      properties:
        agent_type:
          type: string
          description: >-
            Conversation engine for this task. Any other value is rejected at
            creation time. `simple_llm_agent` is the default: one LLM answers
            from the system prompt. `knowledgebase_agent` is the same as a
            simple agent, plus retrieval over uploaded [knowledge
            bases](/knowledge-base). `graph_agent` is a node-based flow; see
            [Graph agents](/graph-agent/introduction). `realtime_agent` replaces
            the transcriber, LLM, and synthesizer with a realtime
            [speech-to-speech](/speech-to-speech) model. See [Agent
            type](/api-reference/agent/v2/create#agent-type).
          enum:
            - simple_llm_agent
            - knowledgebase_agent
            - graph_agent
            - realtime_agent
          default: simple_llm_agent
        agent_flow_type:
          type: string
          enum:
            - streaming
          default: streaming
        routes:
          $ref: '#/components/schemas/Routes'
          type: object
          description: Semantic routing layer
        llm_config:
          oneOf:
            - $ref: '#/components/schemas/SimpleLlmAgent'
            - $ref: '#/components/schemas/KnowledgebaseAgent'
          description: LLM configuration
      type: object
    Synthesizer:
      properties:
        provider:
          type: string
          description: >-
            Text-to-speech provider. Any other value is rejected with `400
            Invalid value for provider:'<value>' provided`. Each provider takes
            its own `provider_config` shape. See [Supported
            providers](/api-reference/agent/v2/create#synthesizer).
          enum:
            - elevenlabs
            - cartesia
            - sarvam
            - smallest
            - deepgram
            - polly
            - azuretts
            - rime
            - openai
            - gemini
            - maya
            - kalpa
            - soniox
            - navana
          example: elevenlabs
        provider_config:
          description: >-
            Provider-specific voice settings; pick the tab matching your
            `provider`. Resolve a valid `model` and `voice_id` pair with [List
            voices](/api-reference/voice/get_all) first. Most providers also
            require `language` here.
          oneOf:
            - $ref: '#/components/schemas/ElevenLabsConfig'
            - $ref: '#/components/schemas/CartesiaConfig'
            - $ref: '#/components/schemas/SarvamTtsConfig'
            - $ref: '#/components/schemas/SmallestTtsConfig'
            - $ref: '#/components/schemas/DeepgramConfig'
            - $ref: '#/components/schemas/PollyConfig'
            - $ref: '#/components/schemas/AzureTtsConfig'
            - $ref: '#/components/schemas/RimeConfig'
            - $ref: '#/components/schemas/OpenAIConfig'
            - $ref: '#/components/schemas/GeminiTtsConfig'
            - $ref: '#/components/schemas/MayaConfig'
            - $ref: '#/components/schemas/KalpaConfig'
            - $ref: '#/components/schemas/SonioxTtsConfig'
            - $ref: '#/components/schemas/NavanaConfig'
        stream:
          type: boolean
          default: true
        caching:
          type: boolean
          default: true
          description: >-
            Re-use synthesised audio for repeated text (welcome messages, static
            lines) instead of re-synthesising it
        buffer_size:
          type: integer
          default: 250
          example: 250
        audio_format:
          type: string
          default: wav
          enum:
            - wav
        pronunciation_rules:
          type: array
          nullable: true
          maxItems: 100
          description: >-
            Words and how the voice should say them, for brand names, acronyms,
            codes and place names. Used on `elevenlabs`, and on `cartesia`
            `sonic-3` and newer; other providers ignore it. Each word can appear
            once, ignoring capitalization, and an agent can have up to 100 words
            across all its languages. On a multilingual agent, each language has
            its own list under
            `multilingual_config.languages.<code>.synthesizer.pronunciation_rules`,
            and a list set here is used for the language the agent starts in.
            See [Pronunciation](/customizations/pronunciation).
          items:
            $ref: '#/components/schemas/PronunciationRule'
      type: object
      required:
        - provider
        - provider_config
    Transcriber:
      type: object
      description: >-
        Speech-to-text configuration. `model` and `language` are validated
        against the chosen provider: an unsupported pair returns `400 Provided
        language: <language> is not available for the model: <model>`.
      properties:
        provider:
          type: string
          description: >-
            Speech-to-text provider. Any other value is rejected with `400
            Invalid value for provider:'<value>' provided`.
          enum:
            - deepgram
            - azure
            - sarvam
            - assembly
            - google
            - gemini
            - openai
            - elevenlabs
            - smallest
            - gladia
            - soniox
          example: deepgram
        model:
          type: string
          description: >-
            Provider-specific model id, validated together with `language`. For
            example `nova-3` for Deepgram or `saaras:v4` for Sarvam. See
            [Supported providers](/api-reference/agent/v2/create#transcriber)
            for the confirmed model id of every provider.
          example: nova-3
        language:
          type: string
          description: >-
            ISO 639-1 code such as `en` or `hi`. Send the plain form even for
            Sarvam, which rejects `hi-IN`. Multilingual agents override this per
            language in
            [`multilingual_config`](/customizations/multilingual-config-reference).
          example: en
        stream:
          type: boolean
          default: true
        sampling_rate:
          type: integer
          default: 16000
          example: 16000
          description: >-
            8000 for telephony audio, 16000 for web calls. Bolna sets this
            automatically to match the telephony provider.
        encoding:
          type: string
          default: linear16
          enum:
            - linear16
            - mulaw
          description: >-
            `mulaw` for Twilio and sip-trunk. Every other telephony provider
            streams `linear16`.
        endpointing:
          type: integer
          default: 500
          example: 250
          description: Milliseconds of silence before the transcript is treated as final.
        keywords:
          type: string
          nullable: true
          default: null
          example: Bolna,Acme
          description: >-
            Comma-separated terms that bias recognition towards brand or domain
            vocabulary. Read by most transcribers, each with its own term limit.
            A `word:boost` weight reaches only Deepgram's `nova-2` family and
            Smallest, and is stripped at save time for every other provider. See
            [Keywords and
            context](/customizations/asr-keywords-and-context#provider-support).
        context:
          type: string
          nullable: true
          default: null
          example: >-
            Inbound support line for a voice AI platform. Callers ask about
            telephony setup and billing.
          description: >-
            Plain description of the call that biases recognition towards what
            the model should expect. This is not a prompt for the language
            model. Honoured by [AssemblyAI](/assemblyai) (max 1750 characters,
            Universal-3 models only), [Soniox](/soniox) (max 10000 characters)
            and [Sarvam](/sarvam-transcriber); ignored by every other provider.
            See [Keywords and
            context](/customizations/asr-keywords-and-context).
        vad_threshold:
          type: number
          format: float
          default: 0.5
          description: Voice-activity-detection sensitivity.
        vad_prefix_padding_ms:
          type: integer
          default: 300
          description: Milliseconds of audio retained ahead of detected speech.
        eot_threshold:
          type: number
          format: float
          nullable: true
          default: null
          example: 0.7
          description: >-
            Confidence required before an end-of-turn is emitted, `0.5`–`0.9`.
            **[Deepgram Flux](/deepgram-flux) only.**
        eot_timeout_ms:
          type: integer
          nullable: true
          default: null
          example: 1000
          description: >-
            Maximum silence before an end-of-turn is forced, in milliseconds.
            **[Deepgram Flux](/deepgram-flux) only.**
        eager_eot_threshold:
          type: number
          format: float
          nullable: true
          default: null
          example: 0.5
          description: >-
            Confidence at which an `EagerEndOfTurn` fires so the LLM can start
            speculatively. **[Deepgram Flux](/deepgram-flux) only.**
        assemblyai_config:
          type: object
          nullable: true
          default: null
          description: >-
            AssemblyAI session settings. Every field is optional; one left out
            keeps AssemblyAI's own default. `mode`, `interruption_delay` and the
            voice focus fields apply to the Universal-3 models only and are not
            sent on legacy models. **[AssemblyAI](/assemblyai) only.** See
            [Session settings](/assemblyai#session-settings).
          properties:
            mode:
              type: string
              nullable: true
              enum:
                - balanced
                - max_accuracy
                - min_latency
              example: balanced
              description: >-
                Preset that sets the defaults of the turn settings. `balanced`
                is AssemblyAI's default and suits voice agents; `max_accuracy`
                ends turns a few hundred milliseconds later.
            min_turn_silence:
              type: integer
              nullable: true
              minimum: 0
              example: 200
              description: >-
                Milliseconds of silence before AssemblyAI checks whether the
                caller has finished.
            max_turn_silence:
              type: integer
              nullable: true
              minimum: 0
              example: 2000
              description: >-
                Milliseconds of silence after which the caller's turn always
                ends. AssemblyAI's default is 1280.
            interruption_delay:
              type: integer
              nullable: true
              minimum: 0
              maximum: 1000
              example: 300
              description: >-
                Milliseconds AssemblyAI waits before sending the first partial
                transcript.
            vad_threshold:
              type: number
              format: float
              nullable: true
              minimum: 0
              maximum: 1
              example: 0.4
              description: >-
                Confidence AssemblyAI needs before treating audio as speech.
                Defaults to 0.2 on the Universal-3 models and 0.4 on legacy
                models.
            voice_focus:
              type: string
              nullable: true
              enum:
                - near-field
                - far-field
              example: near-field
              description: >-
                Suppresses background voices and noise. `near-field` for
                handsets and headsets, `far-field` for speakerphones.
            voice_focus_threshold:
              type: number
              format: float
              nullable: true
              minimum: 0
              maximum: 1
              example: 0.6
              description: >-
                How strongly voice focus suppresses audio that is not the main
                speaker. Requires `voice_focus`.
        delay:
          type: string
          nullable: true
          default: medium
          enum:
            - minimal
            - low
            - medium
            - high
            - xhigh
          description: >-
            Latency-versus-accuracy trade-off. **[OpenAI
            Realtime](/openai-transcriber) only.**
        noise_reduction:
          type: boolean
          default: false
          description: >-
            Near-field noise reduction for call-centre and office audio.
            **[OpenAI Realtime](/openai-transcriber) only.**
        language_hints:
          type: array
          nullable: true
          default: null
          items:
            type: string
          example:
            - en
            - hi
          description: >-
            Candidate languages for code-switching conversations, on providers
            that support language identification.
        task:
          type: string
          default: transcribe
          description: >-
            Transcription task. Agents created through the dashboard carry
            `transcribe`.
        deepgram_host:
          type: string
          nullable: true
          default: null
          example: api.example-onprem.com
          description: >-
            Host of a dedicated or self-hosted Deepgram deployment to use
            instead of Bolna's shared Deepgram. Relevant to [on-premise
            deployments](/enterprise/on-premise-deployments). Leave `null` to
            use Bolna's.
        deepgram_host_protocol:
          type: string
          nullable: true
          default: null
          example: wss
          description: Protocol used to reach `deepgram_host`.
        deepgram_flux_host:
          type: string
          nullable: true
          default: null
          example: flux.example-onprem.com
          description: >-
            Equivalent of `deepgram_host` for [Deepgram Flux](/deepgram-flux)
            models.
      required:
        - provider
        - model
        - language
    InputOutput:
      properties:
        provider:
          type: string
          default: plivo
          description: >-
            Telephony provider carrying the call audio; `input` and `output`
            normally match. `trunk` is for [SIP
            trunks](/api-reference/trunks/overview) and `sip-trunk` for Legacy
            SIP trunks (deprecated). `freeswitch` is web calling, and `default`
            and `database` are internal. See [Supported telephony
            providers](/supported-telephony-providers).
          enum:
            - twilio
            - plivo
            - exotel
            - vobiz
            - trunk
            - sip-trunk
            - freeswitch
            - default
            - database
        format:
          type: string
          default: wav
          description: >-
            `wav` for twilio, plivo, exotel and vobiz; `linear16` for trunk;
            `ulaw` for sip-trunk.
          enum:
            - wav
            - linear16
            - ulaw
      type: object
      required:
        - provider
        - format
    ApiTools:
      type: object
      properties:
        tools:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/TransferCallTools'
          description: >-
            Description of all the tools you'd like to add to the agent. It
            needs to be a JSON string as this will be passed to LLM.
        tools_params:
          $ref: '#/components/schemas/TransferCallToolParams'
          type: object
          description: >-
            Parameters for each tool, where keys must match the `name` field in
            the `tools` array.
      default: null
    S2SConfig:
      properties:
        provider:
          type: string
          description: Speech-to-speech provider
          enum:
            - openai_realtime
            - gemini_live
        provider_config:
          type: object
          description: Provider specific settings
          oneOf:
            - $ref: '#/components/schemas/OpenAIRealtimeConfig'
            - $ref: '#/components/schemas/GeminiLiveConfig'
        welcome_audio_gate_ms:
          type: integer
          description: >-
            Caller audio is ignored for this long after the greeting starts, so
            the agent's own voice does not trip the provider's voice activity
            detection
          default: 1500
      required:
        - provider
        - provider_config
      type: object
    MultilingualConfig:
      type: object
      description: >-
        Multilingual configuration for an agent. When `enabled` is true, Bolna
        keeps a transcriber and synthesizer per language and switches them,
        along with the active system prompt, during the call.
      required:
        - enabled
        - languages
      properties:
        enabled:
          type: boolean
          description: >-
            Must be `true` for multilingual to take effect. When `false` or
            omitted, the agent runs single-language and this object is ignored.
          default: false
          example: true
        active_language:
          type: string
          description: >-
            Language code the agent starts the call in. Must be one of the keys
            in `languages`.
          default: en
          example: en
        languages:
          type: object
          description: >-
            Map of ISO 639-1 language code to its per-language configuration.
            Must contain at least 2 languages.
          minProperties: 2
          additionalProperties:
            $ref: '#/components/schemas/MultilingualLanguageEntry'
          example:
            en:
              synthesizer:
                provider: elevenlabs
                provider_config:
                  voice_id: 21m00Tcm4TlvDq8ikWAM
                  model: eleven_turbo_v2_5
              system_prompt: You are a helpful assistant. Keep replies short.
              agent_name: Alex
            hi:
              transcriber:
                language: hi
              synthesizer:
                provider: sarvam
                provider_config:
                  voice_id: suhani
                  model: bulbul:v3
              system_prompt: आप एक सहायक एजेंट हैं। हिंदी में संक्षेप में उत्तर दें।
              handoff_message: ठीक है, मैं हिंदी में बात करता हूँ।
              agent_name: राज
              welcome_message: नमस्ते {{name}}, मैं राज बोल रहा हूँ।
        switch_tool_description:
          type: string
          description: >-
            Overrides the description of the `switch_language` tool the LLM uses
            to change languages mid-call.
          nullable: true
          example: Switch the conversation language when the caller changes language.
    Routes:
      properties:
        embedding_model:
          type: string
          title: Embedding Model
          default: snowflake/snowflake-arctic-embed-m
          example: snowflake/snowflake-arctic-embed-m
          description: >-
            Since we use fastembed all models supported by fastembed are
            supported by us
        routes:
          items:
            $ref: '#/components/schemas/Route'
          type: array
          title: route
          description: >-
            These are predefined routes that can be used to answer FAQs, or set
            basic guardrails, or do a static function call.
      type: object
      title: Routes
    SimpleLlmAgent:
      title: SimpleLlmAgent
      properties:
        agent_flow_type:
          type: string
          enum:
            - streaming
          default: streaming
        provider:
          type: string
          default: openai
          example: openai
          description: >-
            LLM provider. Anything beyond `openai`, `azure-openai`, `anthropic`,
            `google`, `deepseek`, `sarvam`, `bedrock`, `openrouter` and `custom`
            routes through LiteLLM. Not validated at creation, so a wrong value
            fails only when a call runs. See [Supported
            providers](/api-reference/agent/v2/create#llm).
          enum:
            - openai
            - azure-openai
            - azure
            - anthropic
            - google
            - deepseek
            - sarvam
            - bedrock
            - openrouter
            - custom
            - groq
            - cohere
            - together
            - fireworks
            - deepinfra
            - perplexity
            - anyscale
            - ollama
            - vllm
            - ola
        family:
          type: string
          default: openai
          example: openai
          description: >-
            Prompt format the model expects. Leave as `openai` for every hosted
            provider. Set it to the underlying family such as `llama` or `qwen`
            only when `provider` is `custom`.
        model:
          type: string
          default: gpt-5.4-mini
          example: gpt-5.4-mini
        summarization_details:
          type: string
          default: null
          example: null
          nullable: true
        extraction_details:
          type: string
          default: null
          example: null
          nullable: true
        max_tokens:
          type: integer
          default: 100
          example: 150
          description: >
            Cap on the tokens generated per response. On GPT-5-series models
            this is sent as `max_completion_tokens`, and reasoning tokens are
            drawn from the same budget, so raise it above the default when
            running `reasoning_effort` higher than `none`/`minimal`.
        temperature:
          type: number
          format: float
          default: 0.1
          example: 1
          description: >
            Sampling temperature. **GPT-5-series models require exactly `1`.**
            Any other value is rejected with `400 For GPT-5 models, temperature
            must be 1`. The field defaults to `0.1`, so a GPT-5 agent must send
            `1` explicitly rather than omitting it.
        reasoning_effort:
          type: string
          nullable: true
          default: null
          example: low
          enum:
            - none
            - minimal
            - low
            - medium
            - high
            - xhigh
          description: >
            How much the model reasons before answering. GPT-5-series models
            only. The accepted values differ per model and an unsupported value
            is rejected. See
            [OpenAI](/providers/llm-model/openai#reasoning-effort) for the
            per-model table. Omit it to get the lowest-latency effort the model
            supports, which is what voice agents usually want.
        verbosity:
          type: string
          nullable: true
          default: null
          example: low
          enum:
            - low
            - medium
            - high
          description: >
            How long the model's answers run. GPT-5-series models only. Defaults
            to `low`, which suits voice.
        use_responses_api:
          type: boolean
          default: false
          description: >
            Route the model through OpenAI's Responses API. Always on for
            `gpt-5.4`, `gpt-5.5` and `gpt-5.6` regardless of this field, since
            function calling with `reasoning_effort` is not accepted on chat
            completions for those models.
        compact_threshold:
          type: integer
          nullable: true
          default: null
          description: >
            Token count at which the provider compacts conversation context.
            Applies only when the model runs through the Responses API.
        extra_body:
          type: object
          nullable: true
          default: null
          additionalProperties: true
          example:
            chat_template_kwargs:
              enable_thinking: false
          description: >
            Custom providers only (`provider: custom`). Extra fields added as
            top-level keys to every request sent to your endpoint, for
            parameters your server accepts beyond the OpenAI standard, e.g.
            `{"chat_template_kwargs": {"enable_thinking": false}}` to turn Qwen3
            thinking off on vLLM. Rejected on any other provider, and when it
            sets `model`, `messages`, `stream`, `stream_options`, `tools`,
            `tool_choice`, `parallel_tool_calls` or `response_format`. See
            [Extra request params](/custom#extra-request-params).
        presence_penalty:
          type: number
          format: float
          default: 0
          example: 0
          description: >-
            Accepted for backwards compatibility. Not sent to OpenAI or Azure
            models.
        frequency_penalty:
          type: number
          format: float
          default: 0
          example: 0
          description: >-
            Accepted for backwards compatibility. Not sent to OpenAI or Azure
            models.
        base_url:
          type: string
          default: https://api.openai.com/v1
          example: https://api.openai.com/v1
        top_p:
          type: number
          format: float
          default: 0.9
          example: 0.9
          description: >-
            Accepted for backwards compatibility. Not sent to OpenAI or Azure
            models.
        min_p:
          type: number
          format: float
          default: 0.1
          example: 0.1
          description: >-
            Accepted for backwards compatibility. Not sent to OpenAI or Azure
            models.
        top_k:
          type: number
          format: integer
          default: 0
          example: 0
          description: >-
            Accepted for backwards compatibility. Not sent to OpenAI or Azure
            models.
        request_json:
          type: boolean
          default: false
      type: object
    KnowledgebaseAgent:
      title: KnowledgebaseAgent
      allOf:
        - type: object
          properties:
            vector_store:
              $ref: '#/components/schemas/VectorStore'
              type: object
              description: >-
                Vector Store for knowledge base. Use [Knowledge Base
                APIs](/api-reference/knowledgebase/create) to upload PDFs or
                URLs. You can select multiple knowledge bases using
                `vector_ids`.
        - $ref: '#/components/schemas/SimpleLlmAgent'
    ElevenLabsConfig:
      title: ElevenLabs
      description: '[ElevenLabs](/elevenlabs-voice) text-to-speech.'
      properties:
        voice:
          type: string
          description: Display name of the voice, exactly as the voice catalogue returns it
          example: Angelica
        voice_id:
          type: string
          description: >-
            ElevenLabs voice id, from [List
            voices](/api-reference/voice/get_all)
          example: IkSv4tkouLJ6kYsQA7XD
        model:
          type: string
          enum:
            - eleven_turbo_v2_5
            - eleven_flash_v2_5
            - eleven_multilingual_v2
            - eleven_v3_conversational
            - eleven_v4_turbo
          example: eleven_turbo_v2_5
        temperature:
          type: number
          format: float
          default: 0.5
        similarity_boost:
          type: number
          format: float
          default: 0.75
        speed:
          type: number
          format: float
          default: 1
        style:
          type: number
          format: float
          default: 0
        pronunciation_dictionary_locators:
          type: array
          nullable: true
          maxItems: 3
          description: >-
            Pronunciation dictionaries from your own ElevenLabs account, applied
            in order. Only used when your own ElevenLabs key is connected; Bolna
            checks each one exists in that account when you save. For most
            cases, use `pronunciation_rules` on the synthesizer instead.
          items:
            type: object
            required:
              - pronunciation_dictionary_id
              - version_id
            properties:
              pronunciation_dictionary_id:
                type: string
                example: 5xM3yVvZQKV0EfqQpLrJ
              version_id:
                type: string
                example: Tdiw9eBX1Z4oE1fqKD9u
      required:
        - voice
        - voice_id
        - model
    CartesiaConfig:
      title: Cartesia
      description: '[Cartesia](/cartesia) text-to-speech.'
      properties:
        voice:
          type: string
          example: Brooke - Big Sister
        voice_id:
          type: string
          example: e07c00bc-4134-4eae-9ea4-1a55fb45746b
        model:
          type: string
          enum:
            - sonic-3.6
            - sonic-3.5
            - sonic-3
          example: sonic-3.5
        language:
          type: string
          example: en
        speed:
          type: number
          format: float
          default: 1
        pronunciation_dict_id:
          type: string
          nullable: true
          description: >-
            A pronunciation dictionary from your own Cartesia account. Only used
            when your own Cartesia key is connected, on `sonic-3` and newer;
            Bolna checks it exists in that account when you save. For most
            cases, use `pronunciation_rules` on the synthesizer instead.
          example: pdict_4zFfRk2Ux8oWnJb7Qc1aLs
      required:
        - voice
        - voice_id
        - model
        - language
    SarvamTtsConfig:
      title: Sarvam
      description: >-
        [Sarvam](/sarvam-voice) text-to-speech, with the widest coverage of
        Indian languages.
      properties:
        voice:
          type: string
          example: Priya
        voice_id:
          type: string
          example: priya
        model:
          type: string
          example: bulbul:v3
        language:
          type: string
          example: hi
        speed:
          type: number
          format: float
          default: 1
          description: >-
            Speaking rate, mapped to Sarvam's pace control. Shown as **Speed
            rate** in the dashboard. Sarvam's pitch, loudness and temperature
            parameters are not exposed.
      required:
        - voice
        - voice_id
        - model
        - language
    SmallestTtsConfig:
      title: Smallest
      description: '[Smallest](/smallest-voice) text-to-speech.'
      properties:
        voice:
          type: string
          example: Aditi
        voice_id:
          type: string
          example: aditi
        model:
          type: string
          enum:
            - lightning_v3.1
            - lightning_v3.1_pro
          example: lightning_v3.1
        language:
          type: string
          example: en
      required:
        - voice
        - voice_id
        - model
        - language
    DeepgramConfig:
      title: Deepgram
      description: '[Deepgram Aura](/deepgram-voice) text-to-speech.'
      properties:
        voice:
          type: string
          example: Andromeda
        voice_id:
          type: string
          example: andromeda-en
        model:
          type: string
          enum:
            - aura-2
          example: aura-2
      required:
        - voice
        - voice_id
        - model
    PollyConfig:
      title: AWS Polly
      description: '[Amazon Polly](/aws-polly) text-to-speech.'
      properties:
        voice:
          type: string
          example: Matthew
        engine:
          type: string
          description: Polly engine. Polly takes this rather than a `model` key.
          enum:
            - generative
            - neural
            - standard
          example: generative
        language:
          type: string
          description: Polly locale for the voice
          example: en-US
      required:
        - voice
        - engine
        - language
    AzureTtsConfig:
      title: Azure
      description: >-
        [Azure](/azure-voice) neural text-to-speech. The provider value is
        `azuretts`, not `azure`.
      properties:
        voice:
          type: string
          description: Azure neural voice name
          example: en-GB-SoniaNeural
        model:
          type: string
          enum:
            - neural
          default: neural
        language:
          type: string
          example: en-GB
        speed:
          type: number
          format: float
          default: 1
      required:
        - voice
        - model
        - language
    RimeConfig:
      title: Rime
      description: '[Rime](/rime) text-to-speech.'
      properties:
        voice:
          type: string
          example: Abbie
        voice_id:
          type: string
          example: abbie
        model:
          type: string
          enum:
            - mistv2
            - arcana
          example: mistv2
        language:
          type: string
          example: en
      required:
        - voice
        - voice_id
        - model
        - language
    OpenAIConfig:
      title: OpenAI
      description: >-
        OpenAI text-to-speech, using OpenAI's own voice names such as `alloy`,
        `echo` or `nova`. A voice outside that set is rejected with `400
        Provided voice: <voice> is not available for the provider: openai`.
        [List voices](/api-reference/voice/get_all) returns nothing for this
        provider, so its catalogue cannot be browsed through the API. It takes
        no `language` or `voice_id`.
      properties:
        voice:
          type: string
          example: alloy
        model:
          type: string
          example: tts-1
      required:
        - voice
        - model
    GeminiTtsConfig:
      title: Gemini
      description: >-
        Google Gemini text-to-speech. Accepted as a `provider` value, but no
        Gemini TTS model currently resolves. Creation fails with `400 Model
        '<model>' is not available for provider 'gemini'`, and [List TTS
        providers](/api-reference/voice/get_providers) does not return Gemini
        for any language.
      properties:
        voice:
          type: string
        voice_id:
          type: string
          description: Gemini voice name
        model:
          type: string
        language:
          type: string
        style:
          type: string
          nullable: true
          default: null
          description: Feeds Gemini's structured speech metadata
      required:
        - voice
        - voice_id
        - model
        - language
    MayaConfig:
      title: Maya
      description: >-
        [Maya](/maya) Indic-first streaming text-to-speech. One model covers
        every supported language.
      properties:
        voice:
          type: string
          description: >-
            `Ananya` (female) or `Arjun` (male), the only two voices.
            Case-sensitive.
          example: Ananya
        voice_id:
          type: string
          example: Ananya
        model:
          type: string
          enum:
            - Maya 2 Native
          default: Maya 2 Native
        language:
          type: string
          default: en
          description: >-
            One of `hi`, `bn`, `gu`, `kn`, `ml`, `mr`, `or`, `pa`, `ta`, `te`,
            `en` or `auto`. `en` is Indian English; `auto` detects per
            utterance. Region-qualified codes such as `en-IN` reduce to the
            primary subtag.
      required:
        - voice
        - voice_id
        - model
    KalpaConfig:
      title: Kalpa
      description: >-
        [Kalpa](/kalpa) conversational text-to-speech. Every field has a
        default.
      properties:
        voice:
          type: string
          default: Arjun
          example: June
        voice_id:
          type: string
          nullable: true
          default: null
          example: 8636013a-4e31-4cd4-b706-653d854a714b
        model:
          type: string
          enum:
            - kalpa-tts-1
            - kalpa-tts-multilingual-beta-v0.1
            - kalpa-tts-beta-v0.1
          default: kalpa-tts-1
        temperature:
          type: number
          format: float
          nullable: true
          default: null
        acoustic_temperature:
          type: number
          format: float
          nullable: true
          default: null
        max_new_tokens:
          type: integer
          nullable: true
          default: null
        audio_quality:
          type: string
          nullable: true
          default: null
        chunk_length_schedule:
          type: array
          nullable: true
          default: null
          items:
            type: integer
    SonioxTtsConfig:
      title: Soniox
      description: >-
        [Soniox](/soniox-voice) real-time text-to-speech. Built-in voices are
        addressed by name, so `voice` and `voice_id` carry the same value; a
        cloned voice's id goes in `voice_id`.
      properties:
        voice:
          type: string
          description: Built-in voice name
          example: Adrian
        voice_id:
          type: string
          description: The same name for a built-in voice, or a cloned voice's id
          example: Adrian
        model:
          type: string
          enum:
            - tts-rt-v2
          default: tts-rt-v2
        language:
          type: string
          description: >-
            Plain ISO code such as `en` or `hi`. Region-qualified codes such as
            `en-IN` reduce to the primary subtag.
          example: en
        speed:
          type: number
          format: float
          nullable: true
          default: null
          minimum: 0.7
          maximum: 1.3
          description: >-
            Rejected at agent setup outside `0.7`–`1.3`. Omit to use Soniox's
            default.
        reduce_silence:
          type: boolean
          nullable: true
          default: null
          description: Shortens the pauses Soniox inserts between sentences
      required:
        - voice
        - voice_id
        - model
        - language
    NavanaConfig:
      title: Navana
      description: >-
        [Navana](/navana) Indian-language streaming text-to-speech. Every voice
        speaks all ten languages.
      properties:
        voice:
          type: string
          description: Voice display name, e.g. `Default Female` or `Ayesha`.
          example: Default Female
        voice_id:
          type: string
          description: >-
            Navana voice id: `default_female` or a stock voice id such as
            `ayesha`.
          example: default_female
        model:
          type: string
          enum:
            - navana-tts
            - navana-tts-fast
          default: navana-tts
        language:
          type: string
          description: >-
            One of `hi`, `bn`, `gu`, `kn`, `ml`, `mr`, `od`, `ta`, `te` or `en`.
            Region-qualified codes such as `hi-IN` reduce to the primary subtag,
            and `od` is sent to Navana as `or`.
          example: hi
      required:
        - voice
        - voice_id
        - model
        - language
    PronunciationRule:
      type: object
      description: One word and how the voice should say it.
      required:
        - word
        - say_as
      properties:
        word:
          type: string
          minLength: 1
          maxLength: 50
          description: >-
            The word or phrase as it appears in what the agent says. Matching
            ignores capitalization, and phrases such as `Blue Sky` are replaced
            as a whole.
          example: HDFC
        say_as:
          type: string
          minLength: 1
          maxLength: 100
          description: >-
            How the voice should say it. Write it in the script the voice
            speaks.
          example: H D F C bank
    TransferCallTools:
      title: transfer_call
      properties:
        name:
          type: string
          description: Any unique name for this function tool
          example: transfer_call_support
        key:
          type: string
          enum:
            - transfer_call
          default: transfer_call
        description:
          type: string
          description: Use this tool to transfer the call
          example: Use this tool to transfer the call
        parameters:
          type: object
          properties:
            type:
              type: string
              example: object
            properties:
              type: object
              properties:
                call_sid:
                  type: object
                  properties:
                    type:
                      type: string
                      example: string
                    description:
                      type: string
                      description: unique call id
                      example: unique call id
            required:
              type: array
              items:
                type: string
                enum:
                  - call_sid
              example:
                - - call_sid
    TransferCallToolParams:
      type: object
      properties:
        transfer_call_support:
          type: object
          properties:
            method:
              type: string
              enum:
                - POST
                - GET
              default: GET
              description: Type of request
              example: POST
            url:
              type: string
              format: uri
              description: Link of the URL to control the transferring of call
              example: null
              nullable: true
            api_token:
              type: string
              example: null
              nullable: true
              description: API Token in case the URL needs authentication
            param:
              description: Stringified JSON of the tool schema
              type: string
              example: >-
                {"call_transfer_number": "+19876543210","call_sid":
                "%(call_sid)s"}
    OpenAIRealtimeConfig:
      properties:
        model:
          type: string
          description: OpenAI Realtime model
          enum:
            - gpt-realtime-2.1
            - gpt-realtime-2.1-mini
            - gpt-realtime-2
            - gpt-realtime-1.5
          default: gpt-realtime-2.1
        voice:
          type: string
          description: Realtime voice
          enum:
            - alloy
            - ash
            - ballad
            - cedar
            - coral
            - echo
            - marin
            - sage
            - shimmer
            - verse
          default: marin
        turn_detection_type:
          type: string
          description: >-
            semantic_vad judges whether the caller finished a thought;
            server_vad uses a silence timer
          enum:
            - semantic_vad
            - server_vad
          default: semantic_vad
        eagerness:
          type: string
          description: >-
            semantic_vad only. How long the model lets a hesitant caller keep
            the floor
          enum:
            - auto
            - low
            - medium
            - high
          default: auto
        vad_threshold:
          type: number
          description: server_vad only. Speech detection sensitivity
          default: 0.5
        vad_silence_duration_ms:
          type: integer
          description: server_vad only. Silence before the caller's turn is considered over
          default: 500
        vad_prefix_padding_ms:
          type: integer
          description: server_vad only. Audio retained ahead of detected speech
          default: 300
        reasoning_effort:
          type: string
          description: Reasoning models only. Higher settings answer more slowly
          enum:
            - minimal
            - low
            - medium
            - high
            - xhigh
          nullable: true
        max_output_tokens:
          type: integer
          description: Cap on a single response
          nullable: true
        transcription_model:
          type: string
          description: >-
            Model used to transcribe the caller for the record. Does not affect
            what the agent hears
          default: gpt-4o-mini-transcribe
        language:
          type: string
          description: >-
            ISO code for the caller's language. Without it the model detects per
            utterance
          nullable: true
      type: object
    GeminiLiveConfig:
      properties:
        model:
          type: string
          description: Gemini Live model
          enum:
            - gemini-3.1-flash-live-preview
            - gemini-2.5-flash-native-audio-preview-12-2025
          default: gemini-3.1-flash-live-preview
        voice:
          type: string
          description: Gemini Live prebuilt voice
          default: Kore
        language:
          type: string
          description: BCP-47 code, for example en-US or hi-IN
          nullable: true
        temperature:
          type: number
          description: Response variability
          nullable: true
        start_sensitivity:
          type: string
          description: How readily the caller starting to speak is detected
          enum:
            - START_SENSITIVITY_HIGH
            - START_SENSITIVITY_LOW
          nullable: true
        end_sensitivity:
          type: string
          description: How long to wait before treating the caller's turn as finished
          enum:
            - END_SENSITIVITY_HIGH
            - END_SENSITIVITY_LOW
          nullable: true
        vad_silence_duration_ms:
          type: integer
          description: >-
            Silence before the caller's turn is considered over. Usable band is
            500 to 800ms
          default: 600
        vad_prefix_padding_ms:
          type: integer
          description: Audio retained ahead of detected speech
          nullable: true
        enable_session_resumption:
          type: boolean
          description: >-
            Restore the session from the provider's handle when Gemini rotates
            it, so long calls continue uninterrupted
          default: true
        enable_context_compression:
          type: boolean
          description: >-
            Compress the context window so long calls do not hit the model's
            limit
          default: true
      type: object
    MultilingualLanguageEntry:
      type: object
      description: >-
        Per-language configuration. Starts from the base transcriber and
        synthesizer and applies these overrides.
      required:
        - synthesizer
      properties:
        transcriber:
          type: object
          description: >-
            Speech-to-text override for this language. If omitted, the base
            transcriber is reused with this language code applied. Extra
            provider fields (for example `model`, `language_hints`) are allowed.
          required:
            - language
          properties:
            language:
              type: string
              description: Language code for this entry's transcriber.
              example: hi
        synthesizer:
          type: object
          description: >-
            Text-to-speech configuration for this language. Extra provider
            fields are allowed.
          required:
            - provider
            - provider_config
          properties:
            provider:
              type: string
              description: TTS provider for this language.
              example: sarvam
            provider_config:
              type: object
              description: >-
                Provider-specific TTS configuration (for example `voice_id`,
                `model`). For `sarvam`, `smallest`, `cartesia`, `openai`, and
                `polly`, the language is resolved into
                `provider_config.language` automatically.
            buffer_size:
              type: integer
              nullable: true
              description: Optional synthesizer buffer size for this language.
            pronunciation_rules:
              type: array
              nullable: true
              maxItems: 100
              description: >-
                This language's word list: words and how this language's voice
                should say them. The same word can sound different in each
                language. See [Pronunciation](/customizations/pronunciation).
              items:
                $ref: '#/components/schemas/PronunciationRule'
        system_prompt:
          type: string
          description: >-
            Prompt activated while the agent speaks this language. Write it in
            the language's native script.
          nullable: true
        handoff_message:
          type: string
          description: Message played when the agent switches to this language.
          nullable: true
        agent_name:
          type: string
          description: Agent name used while speaking this language.
          nullable: true
        welcome_message:
          type: string
          description: >-
            Welcome message for calls that start in this language. Supports
            variables. When omitted or blank, `agent_welcome_message` is used.
            See [Welcome message per
            language](/customizations/start-call-in-language#welcome-message-per-language).
          nullable: true
          example: नमस्ते {{name}}, मैं राज बोल रहा हूँ।
    Route:
      properties:
        route_name:
          type: string
          title: Route Name
          example: politics
        utterances:
          items:
            type: string
          type: array
          title: Utterances
          example:
            - Who do you think will win the elections?
            - Whom would you vote for?
          description: >-
            This is an array of utterances which when spoken you want to send a
            static response
        response:
          anyOf:
            - items:
                type: string
              type: array
            - type: string
          example: Hey, thanks but I do not have opinions on politics
          title: Response
          description: >-
            It can be a stand alone string or array of responses. If it's an
            array the length should be same as number of utterances and a
            particular index will be matched before returning
        score_threshold:
          description: Similarity score threshold
          type: number
          title: Score Threshold
          default: 0.85
          example: 0.9
      type: object
      required:
        - route_name
        - utterances
        - response
      title: Route
    VectorStore:
      properties:
        provider:
          type: string
          enum:
            - lancedb
          default: lancedb
          description: Provider vector store database
        provider_config:
          $ref: '#/components/schemas/LanceDbConfig'
          type: object
          description: Configuration of the vector store database
      type: object
      title: VectorStore
    LanceDbConfig:
      properties:
        vector_id:
          type: string
          format: uuid
          description: >-
            Vector id of a single knowledge base (legacy, use `vector_ids` for
            multiple)
        vector_ids:
          type: array
          items:
            type: string
            format: uuid
          description: Array of vector ids to use multiple knowledge bases simultaneously
          example:
            - 3c90c3cc-0d44-4b50-8822-8dd25736052a
            - 4d91c4dd-1e55-5c61-9933-9ee36847163b
      type: object
      title: LanceDbConfig
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````

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