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

# Create Assistant

> Create a new assistant.

Creates a new voice assistant with the specified configuration.
The assistant will be associated with the authenticated user's organization.

<article>
  <section aria-labelledby="create-assistant-overview">
    <h2 id="create-assistant-overview">Create an Assistant</h2>

    <p>
      Use this endpoint to create a voice AI assistant from your own product, CRM, onboarding flow, or admin tools.
    </p>

    <p>
      The assistant record holds model settings, voice, speech recognition, tools, webhooks, and telephony configuration.
    </p>

    <ul>
      <li>Create production assistants without opening the dashboard.</li>
      <li>Preload prompts, welcome messages, transfer rules, and provider settings.</li>
      <li>Return the assistant ID for later updates, phone-number assignment, and call routing.</li>
    </ul>
  </section>

  <section aria-labelledby="create-assistant-api-behavior">
    <h2 id="create-assistant-api-behavior">How this endpoint maps to the product</h2>

    <p>
      The JSON body mirrors the assistant creation form in the Burki dashboard. The same groups appear in the API: basic info, LLM, TTS, STT, calling behavior, tools, knowledge, post-call actions, safety, and telephony.
    </p>

    <p>
      A successful request creates the assistant in your organization and returns the full record, including the assistant ID for updates, phone-number assignment, and routing.
    </p>
  </section>

  <section aria-labelledby="create-assistant-request-body">
    <h2 id="create-assistant-request-body">Request body</h2>

    <p>
      The request body is a JSON object with the assistant's configuration. Fields follow the same groups as the dashboard. Many fields are <strong>conditional</strong> on the provider or options you pick.
    </p>

    <AccordionGroup>
      <Accordion title="Basic Information">
        * `name` (string, **required**): A unique name for your assistant.
        * `description` (string, optional): A brief description of the assistant's purpose.
        * `is_active` (boolean, optional): Set to `true` to allow the assistant to handle calls. Defaults to `true`.
      </Accordion>

      <Accordion title="AI Configuration">
        This section covers the core AI models for language, speech-to-text, and text-to-speech.

        **LLM (Language Model)**

        * `llm_provider` (string): The language model provider.
          * **Enum**: `"openai"`, `"azure"`, `"azure_ai_foundry"`, `"anthropic"`, `"gemini"`, `"groq"`, `"xai"`, `"custom"`, `"custom_websocket"`. Defaults to `openai`.
        * `llm_provider_config` (object): Provider-specific configuration.
          * `api_key` (string, **required**): The API key for the selected provider.
          * `model` (string, optional): The specific model to use (e.g., `gpt-4o-mini`).
          * `base_url` (string, optional): A custom or Azure-compatible API base URL.
          * `custom_config.ws_url` (string, optional): WebSocket URL for `custom_websocket`.
          * `custom_config.fallback_base_url` (string, optional): HTTP fallback URL for `custom_websocket`.
          * `custom_config.api_version` (string, optional): Azure OpenAI API version when using Azure deployments.
        * `llm_settings` (object): General parameters for the language model.
          * `temperature` (number): Controls creativity. Defaults to `0.7`.
          * `max_tokens` (integer): Max length of the AI's response in tokens. Defaults to `1000`.
          * `top_p` (number): Nucleus sampling control. Defaults to `1.0`.
          * `system_prompt` (string): The AI's personality and instructions.
          * `welcome_message` (string): The first thing the assistant says to the caller.
        * `llm_fallback_providers` (object, optional): Configure backup LLM providers.
          * `enabled` (boolean): Set to `true` to enable fallbacks.
          * `fallbacks` (array of objects): An ordered list of fallback providers. Each object contains `provider`, `model`, `api_key`, and `base_url`.

        **TTS (Text-to-Speech)**

        * `tts_settings` (object):
          * `provider` (string): The TTS provider. **Enum**: `"elevenlabs"`, `"deepgram"`, `"azure"`, `"cartesia"`, `"inworld"`, `"openai"`, `"murf"`, `"soniox"`, `"uplift"`.
          * `voice_id` (string): The specific voice character to use (e.g., `rachel`).
          * `model_id` (string, optional): The voice model (e.g., `eleven_flash_v2_5`).
          * **Conditional Fields**:
            * If `provider` is `elevenlabs`:
              * `stability` (number): Voice consistency.
              * `similarity_boost` (number): Voice accuracy.
              * `style` (number): Speaking style variation.
              * `use_speaker_boost` (boolean): Enhances audio quality.
            * If `provider` is `resemble`:
              * `provider_config.project_uuid` (string): Your Resemble AI project UUID.
            * If `provider` is `inworld`:
              * `provider_config.language` (string): Language code (e.g., `en`).
          * `background_audio` / provider-specific background sound settings may be supplied for assistants that use ambient audio.

        **STT (Speech-to-Text)**

        * `stt_settings` (object):
          * `provider` (string, optional): STT provider. Supported dashboard providers include `deepgram`, `azure`, `uplift`, `elevenlabs`, `speechmatics`, `soniox`, and `telnyx`.
          * `model` (string): The STT model (e.g., `nova-2`, `nova-3`).
          * `language` (string): Language code (e.g., `en-US`).
          * `punctuate`, `smart_format`, `interim_results`, `audio_denoising` (boolean, optional): Transcript formatting and audio cleanup controls.
          * `endpointing.silence_threshold`, `utterance_end_ms`, `utterance_timeout_seconds` (optional): Turn-detection controls for providers that consume them.
          * `keywords` (array of objects, optional): An array of keywords to boost. Each object should have a `keyword` (string) and an optional `intensifier` (float). For `nova-2` and older models.
          * `keyterms` (array of strings, optional): An array of key terms to boost. For `nova-3` model only.
          * `speculative_config` (object, optional): Speculative LLM settings for lower latency on partial transcripts.
            * `enable_speculative_llm` (boolean): Start the LLM before final STT arrives.
            * `speculative_stream_to_tts` (boolean): Stream speculative output immediately to TTS.
            * `speculative_debounce_ms` (integer): Delay after the latest partial before speculation.
            * `speculative_min_words` (integer): Minimum words before triggering speculation.
            * `speculative_similarity_threshold` (number): Confirmation threshold between partial and final transcript.
      </Accordion>

      <Accordion title="Call & Interruption Management">
        * `interruption_settings` (object):
          * `interruption_mode` (string, optional): `"aggressive"`, `"balanced"`, or `"conservative"`.
          * `interruption_threshold` (integer): Number of words a user must speak to interrupt.
          * `min_speaking_time` (number): How long the assistant must speak before being interruptible (in seconds).
          * `interruption_cooldown` (number): Cooldown period after an interruption (in seconds).
          * `min_confidence`, `tentative_window_ms`, `backchannel_filter`, `tail_protection_ms` (optional): Advanced interruption controls.
        * `backchannel_settings` (object, optional): Active listening cues such as "uh-huh".
          * `enabled` (boolean): Enable backchannels.
          * `frequency` (integer): Backchannel frequency from rare to aggressive.
        * `conversation_continuity_enabled` (boolean, optional): Continue context for repeat calls from the same number within the continuity window.
        * `idle_message` (string, optional): Message sent when the caller is silent.
        * `max_idle_messages` (integer, optional): How many idle messages to send before ending the call.
        * `idle_timeout` (integer, optional): Seconds of silence before sending an idle message.
        * `max_call_length` (integer or null, optional): Maximum call duration in seconds. Omit or set null for no assistant-level cap.
      </Accordion>

      <Accordion title="Tools">
        * `tools_settings` (object): Configure built-in tools.
          * `end_call` (object, optional):
            * `enabled` (boolean): Enable/disable the tool.
            * `scenarios` (array of strings): Phrases that will trigger ending the call.
          * `transfer_call` (object, optional):
            * `enabled` (boolean): Enable/disable the tool.
            * `scenarios` (array of strings): Phrases that will trigger a transfer.
            * `transfer_numbers` (array of strings): Phone numbers where calls can be transferred.
            * `transfer_type` (string): `"cold"` for blind transfer or `"warm"` for an agent-briefed handoff.
            * `agent_confirmation` (boolean): For warm transfer, require the agent to confirm before connection.
            * `unavailable_message` (string, optional): Message for failed/unavailable warm transfer.
          * `dtmf_solver` (object, optional): Enable IVR/touch-tone navigation and provide scenarios.
          * `send_sms` (object, optional): Enable SMS sending, provide scenarios, and optionally set `default_message`.
          * `custom_tools` (array, optional): Assigned organization tools with `tool_id`, `enabled`, `timeout_seconds`, and optional custom configuration.
      </Accordion>

      <Accordion title="Knowledge, Post-Call, and Safety">
        * `rag_settings` (object, optional): Enable the assistant knowledge base and tune retrieval.
          * `enabled` (boolean): Enable retrieval-augmented answers from uploaded documents.
          * `search_limit` (integer): Max documents/chunks to retrieve.
          * `similarity_threshold` (number): Minimum relevance score.
        * `recording_settings` (object, optional): Recording and disclosure controls.
          * `enabled` (boolean): Store call audio.
          * `record_user_only_track` (boolean or null, optional): Store a caller-only track. Omit/null to use organization default.
          * `disclosure_enabled`, `disclosure_message`, `disclosure_mode`: Caller recording disclosure controls.
        * `bypass_numbers` (array of strings, optional): E.164 numbers that skip the AI and route directly to transfer.
        * Spam detection scenarios and thresholds are managed through the assistant spam detection endpoints and dashboard Safety section.
      </Accordion>

      <Accordion title="Advanced & Integration">
        * `custom_settings` (object, optional): For advanced data extraction.
          * `structured_data_prompt` (string): Custom instructions for the AI on how to extract data.
          * `structured_data_schema` (object): A JSON schema defining the data to be extracted.
        * `twilio_config` (object, optional): Bring your own Twilio credentials.
          * `account_sid` (string): Your Twilio Account SID.
          * `auth_token` (string): Your Twilio Auth Token.
        * `telnyx_config` (object, optional): Bring your own Telnyx credentials.
          * `api_key` (string): Your Telnyx API Key.
          * `connection_id` (string): Your Telnyx Connection ID for Call Control Application.
        * `webhook_url` (string, optional): A URL to send call event webhooks to.
        * `sms_webhook_url` (string, optional): A URL to send SMS event webhooks to.
        * `messaging_service_sid` (string, optional): Twilio Messaging Service SID for SMS handling.

        **Telephony Provider Selection:**

        * If multiple provider configs are provided, the system will use the one associated with assigned phone numbers.
        * If no provider config is provided, the system uses your organization's default telephony credentials.
        * Each assistant can use a different telephony provider.
      </Accordion>
    </AccordionGroup>
  </section>

  <section aria-labelledby="create-assistant-examples">
    <h2 id="create-assistant-examples">Example requests</h2>

    <p>
      These payloads mirror the dashboard. Arrays such as <code>scenarios</code> and <code>transfer\_numbers</code> use JSON arrays of strings.
    </p>

    <h3 id="create-example-twilio">Example: Twilio assistant</h3>

    ```json theme={null}
    {
      "name": "ServiceBot 5000",
      "description": "Handles initial customer service questions and escalations.",
      "is_active": true,
      "llm_provider": "openai",
      "llm_provider_config": {
        "model": "gpt-4o-mini",
        "api_key": "sk-your-openai-api-key"
      },
      "llm_settings": {
        "temperature": 0.7,
        "max_tokens": 1000,
        "system_prompt": "You are a friendly and efficient customer support agent. Your goal is to help with common questions and transfer to a human when requested.",
        "welcome_message": "Hello! Thanks for calling support. How can I assist you today?"
      },
      "tts_settings": {
        "provider": "elevenlabs",
        "voice_id": "rachel",
        "model_id": "eleven_flash_v2_5",
        "stability": 0.5,
        "similarity_boost": 0.75,
        "style": 0.0,
        "use_speaker_boost": true
      },
      "stt_settings": {
        "model": "nova-2",
        "language": "en-US",
        "keywords": [
            {"keyword": "agent", "intensifier": 1.5},
            {"keyword": "human"},
            {"keyword": "representative"}
        ]
      },
      "interruption_settings": {
        "interruption_threshold": 3,
        "min_speaking_time": 0.5,
        "interruption_cooldown": 2.0
      },
      "idle_message": "Are you still there? I'm here to help if you need anything.",
      "max_idle_messages": 2,
      "idle_timeout": 20,
      "tools_settings": {
        "transfer_call": {
          "enabled": true,
          "scenarios": [
            "speak to an agent",
            "talk to a human",
            "transfer me to a representative"
          ],
          "transfer_numbers": [
            "+18005551212"
          ]
        }
      },
      "twilio_config": {
        "account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "auth_token": "your_twilio_auth_token"
      },
      "webhook_url": "https://yourapi.com/webhooks/call-events"
    }
    ```

    <h3 id="create-example-telnyx">Example: Telnyx assistant</h3>

    ```json theme={null}
    {
      "name": "SalesBot Pro",
      "description": "Modern sales assistant using Telnyx for competitive call rates.",
      "is_active": true,
      "llm_provider": "openai",
      "llm_provider_config": {
        "model": "gpt-4o-mini",
        "api_key": "sk-your-openai-api-key"
      },
      "llm_settings": {
        "temperature": 0.8,
        "max_tokens": 1000,
        "system_prompt": "You are an enthusiastic sales representative. Help qualify leads and schedule demos.",
        "welcome_message": "Hi there! Thanks for your interest in our product. How can I help you today?"
      },
      "tts_settings": {
        "provider": "elevenlabs",
        "voice_id": "charlie",
        "model_id": "eleven_flash_v2_5",
        "stability": 0.6,
        "similarity_boost": 0.8,
        "use_speaker_boost": true
      },
      "stt_settings": {
        "model": "nova-3",
        "language": "en-US",
        "keyterms": ["demo", "pricing", "features", "schedule"]
      },
      "telnyx_config": {
        "api_key": "KEYxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "connection_id": "1234567890"
      },
      "webhook_url": "https://yourapi.com/webhooks/telnyx-events"
    }
    ```
  </section>
</article>


## OpenAPI

````yaml POST /api/v1/assistants
openapi: 3.1.0
info:
  title: Burki
  description: A system that uses AI to answer customer Calls.
  version: 0.1.0
servers: []
security: []
paths:
  /api/v1/assistants:
    post:
      tags:
        - assistants
      summary: Create Assistant
      description: >-
        Create a new assistant.


        Creates a new voice assistant with the specified configuration.

        The assistant will be associated with the authenticated user's
        organization.
      operationId: create_assistant_api_v1_assistants_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssistantCreate'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssistantResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
components:
  schemas:
    AssistantCreate:
      properties:
        name:
          type: string
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        llm_provider:
          anyOf:
            - type: string
            - type: 'null'
          title: Llm Provider
          description: 'LLM provider: openai, azure, anthropic, gemini, xai, groq, custom'
          default: openai
        llm_provider_config:
          $ref: '#/components/schemas/LLMProviderConfig'
          description: Configuration for the selected LLM provider.
        llm_settings:
          $ref: '#/components/schemas/LLMSettings'
        webhook_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Webhook Url
        sms_webhook_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Sms Webhook Url
          description: URL to receive SMS webhook events
        messaging_service_sid:
          anyOf:
            - type: string
            - type: 'null'
          title: Messaging Service Sid
          description: Twilio Messaging Service SID for SMS handling
        interruption_settings:
          $ref: '#/components/schemas/InterruptionSettings'
        tts_settings:
          $ref: '#/components/schemas/TTSSettings'
        stt_settings:
          $ref: '#/components/schemas/STTSettings'
        end_call_message:
          anyOf:
            - type: string
            - type: 'null'
          title: End Call Message
        transfer_call_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Transfer Call Message
        idle_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Idle Message
          default: Are you still there? I'm here to help if you need anything.
        max_idle_messages:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Idle Messages
        idle_timeout:
          anyOf:
            - type: integer
            - type: 'null'
          title: Idle Timeout
        max_call_length:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Max Call Length
          description: >-
            Maximum call length in seconds. Calls will be automatically ended
            when this limit is reached. None means unlimited.
        conversation_continuity_enabled:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Conversation Continuity Enabled
          description: >-
            Enable conversation history continuity across calls from same number
            within 15 minutes
          default: true
        tools_settings:
          $ref: '#/components/schemas/ToolsSettings'
        rag_settings:
          $ref: '#/components/schemas/RAGSettings'
        llm_fallback_providers:
          $ref: '#/components/schemas/LLMFallbackSettings'
        bypass_numbers:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Bypass Numbers
          description: >-
            Phone numbers in E.164 format (e.g. +12345678900) that bypass AI and
            transfer directly to the configured transfer number
        custom_settings:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Custom Settings
        is_active:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Is Active
          default: true
        backchannel_settings:
          anyOf:
            - $ref: '#/components/schemas/BackchannelGenerationSettings'
            - type: 'null'
          description: AI backchannel generation settings for active listening cues
        recording_settings:
          anyOf:
            - $ref: '#/components/schemas/RecordingSettings'
            - type: 'null'
          description: Recording settings including enabled flag and disclosure options
        api_keys:
          anyOf:
            - additionalProperties:
                anyOf:
                  - type: string
                  - type: 'null'
              type: object
            - type: 'null'
          title: Api Keys
          description: >-
            Assistant-specific API keys (overrides organization keys). Keys:
            elevenlabs_api_key, deepgram_api_key, cartesia_api_key, etc.
        tts_limit:
          anyOf:
            - type: integer
              maximum: 1000
              minimum: 1
            - type: 'null'
          title: Tts Limit
          description: >-
            TTS slot limit for this assistant (only used if assistant has own
            TTS key)
        stt_limit:
          anyOf:
            - type: integer
              maximum: 1000
              minimum: 1
            - type: 'null'
          title: Stt Limit
          description: >-
            STT slot limit for this assistant (only used if assistant has own
            STT key)
      additionalProperties: true
      type: object
      required:
        - name
      title: AssistantCreate
      description: Schema for creating a new assistant.
    AssistantResponse:
      properties:
        name:
          type: string
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        llm_provider:
          anyOf:
            - type: string
            - type: 'null'
          title: Llm Provider
          description: 'LLM provider: openai, azure, anthropic, gemini, xai, groq, custom'
          default: openai
        llm_provider_config:
          $ref: '#/components/schemas/LLMProviderConfig'
          description: Configuration for the selected LLM provider.
        llm_settings:
          $ref: '#/components/schemas/LLMSettings'
        webhook_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Webhook Url
        sms_webhook_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Sms Webhook Url
          description: URL to receive SMS webhook events
        messaging_service_sid:
          anyOf:
            - type: string
            - type: 'null'
          title: Messaging Service Sid
          description: Twilio Messaging Service SID for SMS handling
        interruption_settings:
          $ref: '#/components/schemas/InterruptionSettings'
        tts_settings:
          $ref: '#/components/schemas/TTSSettings'
        stt_settings:
          $ref: '#/components/schemas/STTSettings'
        end_call_message:
          anyOf:
            - type: string
            - type: 'null'
          title: End Call Message
        transfer_call_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Transfer Call Message
        idle_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Idle Message
          default: Are you still there? I'm here to help if you need anything.
        max_idle_messages:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Idle Messages
        idle_timeout:
          anyOf:
            - type: integer
            - type: 'null'
          title: Idle Timeout
        max_call_length:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Max Call Length
          description: >-
            Maximum call length in seconds. Calls will be automatically ended
            when this limit is reached. None means unlimited.
        conversation_continuity_enabled:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Conversation Continuity Enabled
          description: >-
            Enable conversation history continuity across calls from same number
            within 15 minutes
          default: true
        tools_settings:
          $ref: '#/components/schemas/ToolsSettings'
        rag_settings:
          $ref: '#/components/schemas/RAGSettings'
        llm_fallback_providers:
          $ref: '#/components/schemas/LLMFallbackSettings'
        bypass_numbers:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Bypass Numbers
          description: >-
            Phone numbers in E.164 format (e.g. +12345678900) that bypass AI and
            transfer directly to the configured transfer number
        custom_settings:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Custom Settings
        is_active:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Is Active
          default: true
        backchannel_settings:
          anyOf:
            - $ref: '#/components/schemas/BackchannelGenerationSettings'
            - type: 'null'
          description: AI backchannel generation settings for active listening cues
        recording_settings:
          anyOf:
            - $ref: '#/components/schemas/RecordingSettings'
            - type: 'null'
          description: Recording settings including enabled flag and disclosure options
        api_keys:
          anyOf:
            - additionalProperties:
                anyOf:
                  - type: string
                  - type: 'null'
              type: object
            - type: 'null'
          title: Api Keys
          description: >-
            Assistant-specific API keys (overrides organization keys). Keys:
            elevenlabs_api_key, deepgram_api_key, cartesia_api_key, etc.
        tts_limit:
          anyOf:
            - type: integer
              maximum: 1000
              minimum: 1
            - type: 'null'
          title: Tts Limit
          description: >-
            TTS slot limit for this assistant (only used if assistant has own
            TTS key)
        stt_limit:
          anyOf:
            - type: integer
              maximum: 1000
              minimum: 1
            - type: 'null'
          title: Stt Limit
          description: >-
            STT slot limit for this assistant (only used if assistant has own
            STT key)
        id:
          type: integer
          title: Id
        organization_id:
          type: integer
          title: Organization Id
        user_id:
          type: integer
          title: User Id
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
        total_calls:
          anyOf:
            - type: integer
            - type: 'null'
          title: Total Calls
          description: Total number of calls for this assistant
        avg_call_duration:
          anyOf:
            - type: integer
            - type: 'null'
          title: Avg Call Duration
          description: Average call duration in seconds
        success_rate:
          anyOf:
            - type: number
            - type: 'null'
          title: Success Rate
          description: Success rate percentage
      additionalProperties: true
      type: object
      required:
        - name
        - id
        - organization_id
        - user_id
        - created_at
        - updated_at
      title: AssistantResponse
      description: Schema for assistant response.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    LLMProviderConfig:
      properties:
        api_key:
          anyOf:
            - type: string
            - type: 'null'
          title: Api Key
        base_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Base Url
        model:
          anyOf:
            - type: string
            - type: 'null'
          title: Model
          default: gpt-4o-mini
        custom_config:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Custom Config
      type: object
      title: LLMProviderConfig
      description: Configuration for the LLM provider.
    LLMSettings:
      properties:
        temperature:
          type: number
          title: Temperature
          default: 0.5
        max_tokens:
          type: integer
          title: Max Tokens
          default: 1000
        system_prompt:
          type: string
          title: System Prompt
          default: >-
            You are a helpful assistant that can answer questions and help with
            tasks.
        welcome_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Welcome Message
        top_p:
          type: number
          title: Top P
          default: 1
        frequency_penalty:
          type: number
          title: Frequency Penalty
          default: 0
        presence_penalty:
          type: number
          title: Presence Penalty
          default: 0
        stop_sequences:
          items:
            type: string
          type: array
          title: Stop Sequences
      type: object
      title: LLMSettings
      description: Settings for the Large Language Model.
    InterruptionSettings:
      properties:
        interruption_threshold:
          type: integer
          title: Interruption Threshold
          default: 3
        min_speaking_time:
          type: number
          title: Min Speaking Time
          default: 0.5
        interruption_cooldown:
          type: number
          title: Interruption Cooldown
          default: 2
        interruption_mode:
          anyOf:
            - type: string
            - type: 'null'
          title: Interruption Mode
        min_stt_confidence:
          type: number
          title: Min Stt Confidence
          default: 0.65
        confirmation_window_ms:
          type: integer
          title: Confirmation Window Ms
          default: 400
        tentative_confirm_words:
          type: integer
          title: Tentative Confirm Words
          default: 2
        backchannel_filter:
          type: boolean
          title: Backchannel Filter
          default: true
        tail_protection_ms:
          type: integer
          title: Tail Protection Ms
          default: 2000
      type: object
      title: InterruptionSettings
      description: Settings for call interruption behavior.
    TTSSettings:
      properties:
        provider:
          type: string
          title: Provider
          default: elevenlabs
        voice_id:
          type: string
          title: Voice Id
          default: rachel
        model_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Model Id
          default: turbo
        latency:
          type: integer
          title: Latency
          default: 1
        stability:
          type: number
          title: Stability
          default: 0.5
        similarity_boost:
          type: number
          title: Similarity Boost
          default: 0.75
        style:
          type: number
          title: Style
          default: 0
        speed:
          type: number
          title: Speed
          default: 1
        volume:
          type: number
          title: Volume
          default: 1
        use_speaker_boost:
          type: boolean
          title: Use Speaker Boost
          default: true
        provider_config:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Provider Config
        background_sound:
          $ref: '#/components/schemas/BackgroundSoundSettings'
          description: Background sound settings
      type: object
      title: TTSSettings
      description: Settings for Text-to-Speech (TTS) service.
    STTSettings:
      properties:
        provider:
          anyOf:
            - type: string
            - type: 'null'
          title: Provider
          description: >-
            STT provider: deepgram, azure, uplift, elevenlabs, speechmatics,
            soniox, telnyx
          default: deepgram
        model:
          type: string
          title: Model
          default: nova-2
        language:
          type: string
          title: Language
          default: en-US
        punctuate:
          type: boolean
          title: Punctuate
          default: true
        interim_results:
          type: boolean
          title: Interim Results
          default: true
        endpointing:
          $ref: '#/components/schemas/STTEndpointingSettings'
        utterance_end_ms:
          type: integer
          maximum: 10000
          minimum: 100
          title: Utterance End Ms
          description: Silence before ending utterance (minimum 100ms, recommended 1000ms)
          default: 1000
        smart_format:
          type: boolean
          title: Smart Format
          default: true
        keywords:
          items:
            $ref: '#/components/schemas/Keyword'
          type: array
          title: Keywords
        keyterms:
          items:
            type: string
          type: array
          title: Keyterms
        diarize:
          type: boolean
          title: Diarize
          description: Enable speaker diarization (speaker labels per word)
          default: false
        detect_entities:
          type: boolean
          title: Detect Entities
          description: >-
            Enable entity detection (NAME, ORG, PHONE_NUMBER, etc.) in final
            transcripts
          default: false
        audio_denoising:
          type: boolean
          title: Audio Denoising
          default: false
        flux_config:
          anyOf:
            - $ref: '#/components/schemas/FluxConfig'
            - type: 'null'
          description: Flux-specific turn detection settings (only for flux- models)
        elevenlabs_config:
          anyOf:
            - $ref: '#/components/schemas/ElevenLabsSTTConfig'
            - type: 'null'
          description: >-
            ElevenLabs STT (Scribe) specific settings (only for elevenlabs
            provider)
        speechmatics_config:
          anyOf:
            - $ref: '#/components/schemas/SpeechmaticsSTTConfig'
            - type: 'null'
          description: Speechmatics STT specific settings (only for speechmatics provider)
        soniox_config:
          anyOf:
            - $ref: '#/components/schemas/SonioxSTTConfig'
            - type: 'null'
          description: >-
            Soniox STT specific settings (only for soniox provider). Supports
            language hints, endpoint detection, speaker diarization, language
            identification, context boosting, and real-time translation.
        speculative_config:
          anyOf:
            - $ref: '#/components/schemas/SpeculativeConfig'
            - type: 'null'
          description: Speculative LLM settings for reduced latency on partial transcripts
        utterance_timeout_seconds:
          anyOf:
            - type: number
              maximum: 5
              minimum: 0.3
            - type: 'null'
          title: Utterance Timeout Seconds
          description: >-
            Seconds to wait after last is_final before committing utterance to
            LLM (default 1.5s). Lower values reduce latency when
            speech_final/UtteranceEnd are missing.
        incomplete_utterance_detection:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Incomplete Utterance Detection
          description: >-
            When enabled, short utterances (< 5 words) are classified by a
            lightweight LLM to detect incomplete thoughts (e.g. 'I want to...')
            and hold finalization to give the caller time to continue.
          default: false
        provider_config:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Provider Config
          description: >-
            Provider-specific configuration including api_key for
            assistant-level credentials
        prefer_flux_for_english:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Prefer Flux For English
          description: >-
            When using ElevenLabs, auto-swap to Deepgram Flux mid-call if
            English is detected on first utterance
          default: false
        english_flux_config:
          anyOf:
            - $ref: '#/components/schemas/FluxConfig'
            - type: 'null'
          description: >-
            Flux config for mid-call English swap. Defaults to
            eot_timeout_ms=6000, thresholds=0.9 if None
      type: object
      title: STTSettings
      description: Settings for Speech-to-Text (STT) service.
    ToolsSettings:
      properties:
        enabled_tools:
          items:
            type: string
          type: array
          title: Enabled Tools
          description: >-
            List of enabled tool names. This is auto-populated based on other
            settings.
        end_call:
          $ref: '#/components/schemas/EndCallTool'
        transfer_call:
          $ref: '#/components/schemas/TransferCallTool'
        dtmf_solver:
          $ref: '#/components/schemas/DtmfSolverTool'
        send_sms:
          $ref: '#/components/schemas/SendSmsTool'
        custom_tools:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Custom Tools
      type: object
      title: ToolsSettings
      description: Settings for integrated tools.
    RAGSettings:
      properties:
        enabled:
          type: boolean
          title: Enabled
          default: false
        rag_inject_before_llm:
          type: boolean
          title: Rag Inject Before Llm
          description: >-
            If True, inject RAG context into system prompt before LLM call
            (single round-trip); searchKnowledgeBase tool is omitted.
          default: false
        search_limit:
          type: integer
          title: Search Limit
          default: 3
        similarity_threshold:
          type: number
          title: Similarity Threshold
          default: 0.7
        embedding_model:
          type: string
          title: Embedding Model
          default: text-embedding-3-small
        chunking_strategy:
          type: string
          title: Chunking Strategy
          default: recursive
        chunk_size:
          type: integer
          title: Chunk Size
          default: 1000
        chunk_overlap:
          type: integer
          title: Chunk Overlap
          default: 200
        auto_process:
          type: boolean
          title: Auto Process
          default: true
        include_metadata:
          type: boolean
          title: Include Metadata
          default: true
        context_window_tokens:
          type: integer
          title: Context Window Tokens
          default: 4000
      type: object
      title: RAGSettings
      description: Settings for Retrieval-Augmented Generation (RAG).
    LLMFallbackSettings:
      properties:
        enabled:
          type: boolean
          title: Enabled
          default: false
        fallbacks:
          items:
            $ref: '#/components/schemas/LLMFallbackProvider'
          type: array
          title: Fallbacks
      type: object
      title: LLMFallbackSettings
      description: Settings for LLM fallback providers.
    BackchannelGenerationSettings:
      properties:
        enabled:
          type: boolean
          title: Enabled
          description: Enable AI backchannel generation during user speech
          default: false
        frequency:
          type: integer
          maximum: 5
          minimum: 1
          title: Frequency
          description: >-
            Backchannel frequency: 1=Rare, 2=Occasional, 3=Moderate, 4=Frequent,
            5=Aggressive
          default: 3
      type: object
      title: BackchannelGenerationSettings
      description: >-
        Settings for AI backchannel generation (active listening cues).


        When enabled, the AI produces short verbal acknowledgments like
        "uh-huh",

        "mm-hmm", "I see" while the user is speaking to signal active listening.
    RecordingSettings:
      properties:
        enabled:
          type: boolean
          title: Enabled
          description: Whether recording is enabled for this assistant
          default: true
        format:
          anyOf:
            - type: string
            - type: 'null'
          title: Format
          description: Audio format (wav, mp3)
          default: mp3
        sample_rate:
          anyOf:
            - type: integer
            - type: 'null'
          title: Sample Rate
          description: Audio sample rate in Hz
          default: 8000
        channels:
          anyOf:
            - type: integer
            - type: 'null'
          title: Channels
          description: Number of audio channels
          default: 1
        record_user_audio:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Record User Audio
          default: true
        record_assistant_audio:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Record Assistant Audio
          default: true
        record_mixed_audio:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Record Mixed Audio
          default: true
        record_user_only_track:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Record User Only Track
          description: >-
            When True, also store a user-only (caller) recording in addition to
            mixed. When None/omitted, org setting applies.
        auto_save:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Auto Save
          default: true
        recordings_dir:
          anyOf:
            - type: string
            - type: 'null'
          title: Recordings Dir
          default: recordings
        create_database_records:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Create Database Records
          default: true
        disclosure_enabled:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Disclosure Enabled
          default: false
        disclosure_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Disclosure Message
        disclosure_mode:
          anyOf:
            - type: string
            - type: 'null'
          title: Disclosure Mode
          default: every_call
      additionalProperties: true
      type: object
      title: RecordingSettings
      description: Settings for call recording (local recording, disclosure, etc.).
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    BackgroundSoundSettings:
      properties:
        enabled:
          type: boolean
          title: Enabled
          description: Enable background sounds during calls
          default: false
        storage_key:
          anyOf:
            - type: string
            - type: 'null'
          title: Storage Key
          description: Storage key for uploaded background sound file (preferred)
        sound_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Sound Url
          description: >-
            External URL of background sound file (fallback if storage_key not
            provided)
        volume:
          type: number
          maximum: 1
          minimum: 0
          title: Volume
          description: 'Volume level (0.0 to 1.0, recommended: 0.2-0.4)'
          default: 0.3
        loop:
          type: boolean
          title: Loop
          description: Loop the background sound continuously
          default: true
      type: object
      title: BackgroundSoundSettings
      description: Settings for background sounds during calls.
    STTEndpointingSettings:
      properties:
        silence_threshold:
          type: integer
          title: Silence Threshold
          default: 500
        min_silence_duration:
          type: integer
          title: Min Silence Duration
          default: 500
      type: object
      title: STTEndpointingSettings
      description: |-
        Endpointing settings for Speech-to-Text (STT).

        - `silence_threshold` (ms): Deepgram endpointing window — passed to the
          Deepgram WebSocket as `endpointing`.
        - `min_silence_duration` (ms): legacy utterance-timeout fallback used by
          `app/core/call_handler.py` when computing how long to wait after the
          last `is_final` before finalizing. Newer pipelines prefer
          `utterance_timeout_seconds`. Kept here so existing assistant rows
          continue to work; removed from the UI because users should configure
          utterance timeout via `utterance_timeout_seconds` instead.
    Keyword:
      properties:
        keyword:
          type: string
          title: Keyword
        intensifier:
          type: number
          title: Intensifier
          default: 1
      type: object
      required:
        - keyword
      title: Keyword
      description: A keyword to be detected in STT, with an optional intensifier.
    FluxConfig:
      properties:
        eot_timeout_ms:
          anyOf:
            - type: integer
              maximum: 10000
              minimum: 10
            - type: 'null'
          title: Eot Timeout Ms
          description: >-
            Timeout for turn detection in milliseconds (10-10000ms). Leave None
            for Deepgram default.
        eager_eot_threshold:
          anyOf:
            - type: number
              maximum: 0.9
              minimum: 0.3
            - type: 'null'
          title: Eager Eot Threshold
          description: >-
            Confidence threshold for eager turn end detection (0.3-0.9). Leave
            None for Deepgram default.
        eot_threshold:
          anyOf:
            - type: number
              maximum: 0.9
              minimum: 0.5
            - type: 'null'
          title: Eot Threshold
          description: >-
            Confidence threshold for final turn end detection (0.5-0.9). Leave
            None for Deepgram default.
        language_hints:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Language Hints
          description: >-
            Language hints for flux-general-multi model (e.g., ['en', 'es']).
            Biases transcription toward specified languages. Omit for
            auto-detect.
        tag:
          anyOf:
            - type: string
            - type: 'null'
          title: Tag
          description: Usage tracking label (e.g., 'restaurant', 'support', 'sales')
        mip_opt_out:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Mip Opt Out
          description: >-
            Opt out of Deepgram Model Improvement Program (data usage for
            training)
          default: false
      type: object
      title: FluxConfig
      description: Configuration for Deepgram Flux models (AI-powered turn detection).
    ElevenLabsSTTConfig:
      properties:
        commit_strategy:
          anyOf:
            - type: string
            - type: 'null'
          title: Commit Strategy
          description: >-
            Transcription commit strategy: 'manual' or 'vad' (voice activity
            detection). Default: 'vad'
          default: vad
        vad_threshold:
          anyOf:
            - type: number
              maximum: 0.9
              minimum: 0.1
            - type: 'null'
          title: Vad Threshold
          description: >-
            VAD sensitivity threshold (0.1-0.9). Lower = more sensitive.
            Default: 0.5
          default: 0.5
        vad_silence_threshold_secs:
          anyOf:
            - type: number
              maximum: 3
              minimum: 0.3
            - type: 'null'
          title: Vad Silence Threshold Secs
          description: >-
            Silence duration in seconds before committing transcription
            (0.3-3.0). Default: 0.8
          default: 0.8
        min_speech_duration_ms:
          anyOf:
            - type: integer
              maximum: 2000
              minimum: 50
            - type: 'null'
          title: Min Speech Duration Ms
          description: >-
            Minimum speech duration in milliseconds to consider valid (50-2000).
            Default: 100
          default: 100
        min_silence_duration_ms:
          anyOf:
            - type: integer
              maximum: 2000
              minimum: 50
            - type: 'null'
          title: Min Silence Duration Ms
          description: >-
            Minimum silence duration in milliseconds for segmentation (50-2000).
            Default: 250
          default: 250
        include_timestamps:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Include Timestamps
          description: 'Include word-level timestamps in transcription. Default: False'
          default: false
        include_language_detection:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Include Language Detection
          description: 'Include detected language in response. Default: False'
          default: false
        manual_commit_silence_secs:
          anyOf:
            - type: number
              maximum: 5
              minimum: 0.5
            - type: 'null'
          title: Manual Commit Silence Secs
          description: >-
            Silence duration in seconds before committing in manual mode
            (0.5-5.0). Default: 1.5
          default: 1.5
        manual_commit_short_silence_secs:
          anyOf:
            - type: number
              maximum: 2
              minimum: 0.3
            - type: 'null'
          title: Manual Commit Short Silence Secs
          description: >-
            Faster silence threshold for short utterances (≤3 words) in manual
            mode (0.3-2.0). Default: 0.8
          default: 0.8
      type: object
      title: ElevenLabsSTTConfig
      description: Configuration for ElevenLabs STT (Scribe) specific settings.
    SpeechmaticsSTTConfig:
      properties:
        region:
          anyOf:
            - type: string
            - type: 'null'
          title: Region
          description: 'API region: ''us'' or ''eu''. Default: ''us'''
          default: us
        max_delay:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0.5
            - type: 'null'
          title: Max Delay
          description: >-
            Maximum delay for transcription in seconds (0.5-10.0). Lower =
            faster but less accurate. Default: 1.0
          default: 1
        enable_partials:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Enable Partials
          description: >-
            Enable partial/interim transcripts for real-time feedback. Default:
            True
          default: true
        remove_disfluencies:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Remove Disfluencies
          description: 'Remove filler words like ''um'', ''uh'', ''ah''. Default: True'
          default: true
        enable_diarization:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Enable Diarization
          description: >-
            Enable speaker diarization (identify different speakers). Default:
            False
          default: false
        speaker_diarization_max_speakers:
          anyOf:
            - type: integer
              maximum: 10
              minimum: 1
            - type: 'null'
          title: Speaker Diarization Max Speakers
          description: 'Maximum number of speakers for diarization (1-10). Default: 2'
          default: 2
        additional_vocab:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Additional Vocab
          description: >-
            List of additional vocabulary words to improve recognition (e.g.,
            product names, technical terms)
        utterance_silence_timeout:
          anyOf:
            - type: number
              maximum: 5
              minimum: 0.3
            - type: 'null'
          title: Utterance Silence Timeout
          description: >-
            Seconds of silence before emitting final utterance (0.3-5.0).
            Default: 1.0
          default: 1
      type: object
      title: SpeechmaticsSTTConfig
      description: Configuration for Speechmatics STT specific settings.
    SonioxSTTConfig:
      properties:
        language_hints:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Language Hints
          description: >-
            Language hints for multi-language support (e.g., ['en', 'es',
            'fr']). First language is treated as primary. If empty, defaults to
            assistant language.
        enable_endpoint_detection:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Enable Endpoint Detection
          description: >-
            Enable endpoint detection to identify when user stops speaking.
            Emits <end> token boundaries. Default: True
          default: true
        max_endpoint_delay_ms:
          anyOf:
            - type: integer
              maximum: 3000
              minimum: 500
            - type: 'null'
          title: Max Endpoint Delay Ms
          description: >-
            Maximum delay for endpoint detection in ms (500-3000). Lower =
            faster turn detection but may cut off speech. Default: 2000
          default: 2000
        enable_speaker_diarization:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Enable Speaker Diarization
          description: >-
            Enable speaker diarization to identify different speakers. Default:
            False
          default: false
        enable_language_identification:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Enable Language Identification
          description: >-
            Enable automatic language identification per token. Works with
            language_hints to detect which language is being spoken. Default:
            False
          default: false
        context_terms:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Context Terms
          description: >-
            Terms to boost recognition accuracy — simple list of strings. E.g.,
            ["BiteBuddy", "Chicken Tikka"]
        context_text:
          anyOf:
            - type: string
            - type: 'null'
          title: Context Text
          description: >-
            Context text to prime the model (e.g., a description of the
            conversation topic).
        context_general:
          anyOf:
            - items:
                additionalProperties:
                  type: string
                type: object
              type: array
            - type: 'null'
          title: Context General
          description: >-
            General context as key-value pairs. Keys: domain, topic, doctor,
            patient, organization. E.g., [{"key": "domain", "value": "restaurant
            ordering"}]
        context_translation_terms:
          anyOf:
            - items:
                additionalProperties:
                  type: string
                type: object
              type: array
            - type: 'null'
          title: Context Translation Terms
          description: >-
            Translation-specific terms with source and target. E.g., [{"source":
            "BiteBuddy", "target": "BiteBuddy"}]
        translation_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Translation Type
          description: >-
            Translation mode: 'one_way' (all speech → target) or 'two_way'
            (bidirectional between two languages).
        translation_target_language:
          anyOf:
            - type: string
            - type: 'null'
          title: Translation Target Language
          description: >-
            Target language for one_way translation (e.g., 'es'). All speech
            will be translated to this language.
        translation_language_a:
          anyOf:
            - type: string
            - type: 'null'
          title: Translation Language A
          description: First language for two_way translation (e.g., 'en').
        translation_language_b:
          anyOf:
            - type: string
            - type: 'null'
          title: Translation Language B
          description: >-
            Second language for two_way translation (e.g., 'es'). English speech
            translates to Spanish and vice versa.
        num_channels:
          anyOf:
            - type: integer
              maximum: 2
              minimum: 1
            - type: 'null'
          title: Num Channels
          description: 'Number of audio channels (1=mono, 2=stereo). Default: 1'
          default: 1
        utterance_silence_timeout:
          anyOf:
            - type: number
              maximum: 5
              minimum: 0.3
            - type: 'null'
          title: Utterance Silence Timeout
          description: >-
            Seconds of silence before emitting final utterance (0.3-5.0).
            Default: 1.0
          default: 1
      type: object
      title: SonioxSTTConfig
      description: Configuration for Soniox STT specific settings.
    SpeculativeConfig:
      properties:
        enable_speculative_llm:
          type: boolean
          title: Enable Speculative Llm
          description: >-
            Master toggle for speculative LLM on partial transcripts. Default:
            False
          default: false
        speculative_stream_to_tts:
          type: boolean
          title: Speculative Stream To Tts
          description: >-
            Aggressive mode: stream speculative LLM to TTS immediately. False =
            safe mode (buffer until confirmed). Default: True
          default: true
        speculative_debounce_ms:
          type: integer
          maximum: 1000
          minimum: 100
          title: Speculative Debounce Ms
          description: >-
            Debounce delay in ms after last partial before triggering
            speculative LLM (100-1000). Default: 300
          default: 300
        speculative_min_words:
          type: integer
          maximum: 10
          minimum: 1
          title: Speculative Min Words
          description: >-
            Minimum word count in partial transcript to trigger speculative LLM
            (1-10). Default: 3
          default: 3
        speculative_similarity_threshold:
          type: number
          maximum: 1
          minimum: 0.5
          title: Speculative Similarity Threshold
          description: >-
            Similarity threshold between partial and final text to confirm
            speculative (0.5-1.0). Default: 0.85
          default: 0.85
      type: object
      title: SpeculativeConfig
      description: >-
        Configuration for speculative LLM processing on partial transcripts.


        When enabled, the pipeline starts an LLM call on partial transcripts

        before the final/committed transcript arrives. If the final text
        matches,

        the LLM response is already in flight, saving VAD silence latency.
    EndCallTool:
      properties:
        enabled:
          type: boolean
          title: Enabled
          default: false
        scenarios:
          items:
            type: string
          type: array
          title: Scenarios
        custom_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Custom Message
      type: object
      title: EndCallTool
      description: Configuration for the 'end call' tool.
    TransferCallTool:
      properties:
        enabled:
          type: boolean
          title: Enabled
          default: false
        scenarios:
          items:
            type: string
          type: array
          title: Scenarios
        transfer_numbers:
          items:
            type: string
          type: array
          title: Transfer Numbers
        custom_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Custom Message
        transfer_type:
          type: string
          enum:
            - cold
            - warm
          title: Transfer Type
          description: >-
            cold=immediate blind transfer, warm=caller on hold while agent is
            briefed with AI summary
          default: cold
        agent_confirmation:
          type: boolean
          title: Agent Confirmation
          description: Ask agent to confirm before connecting caller (warm transfer only)
          default: false
        unavailable_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Unavailable Message
          description: >-
            Message played to caller when agent declines (warm transfer +
            agent_confirmation)
      type: object
      title: TransferCallTool
      description: Configuration for the 'transfer call' tool.
    DtmfSolverTool:
      properties:
        enabled:
          type: boolean
          title: Enabled
          default: false
        scenarios:
          items:
            type: string
          type: array
          title: Scenarios
          description: >-
            Scenarios when to send DTMF tones (e.g., 'navigating IVR', 'entering
            PIN')
      type: object
      title: DtmfSolverTool
      description: Configuration for the 'DTMF solver' tool - allows AI to send DTMF tones.
    SendSmsTool:
      properties:
        enabled:
          type: boolean
          title: Enabled
          default: false
        scenarios:
          items:
            type: string
          type: array
          title: Scenarios
          description: >-
            Scenarios when to send SMS (e.g., 'caller requests a follow-up
            text')
        default_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Default Message
          description: >-
            Pre-configured message to send. If set, the LLM uses this instead of
            asking the caller.
      type: object
      title: SendSmsTool
      description: >-
        Configuration for the 'send SMS' tool - allows AI to send SMS to the
        caller.
    LLMFallbackProvider:
      properties:
        provider:
          type: string
          title: Provider
        api_key:
          anyOf:
            - type: string
            - type: 'null'
          title: Api Key
        base_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Base Url
        model:
          anyOf:
            - type: string
            - type: 'null'
          title: Model
      type: object
      required:
        - provider
      title: LLMFallbackProvider
      description: Configuration for a single LLM fallback provider.
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer

````