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

# Update an assistant

> Update an AI Assistant's attributes.



## OpenAPI

````yaml https://telnyx-openapi-ng.s3.us-east-1.amazonaws.com/ai/assistants.yml post /ai/assistants/{assistant_id}
openapi: 3.1.0
info:
  title: Telnyx AI Assistants API
  version: 2.0.0
  description: >-
    API for managing AI Assistants, including CRUD fields, versions, tags,
    integrations, MCP servers, and shared tools.
  contact:
    email: support@telnyx.com
servers:
  - url: https://api.telnyx.com/v2
security:
  - bearerAuth: []
paths:
  /ai/assistants/{assistant_id}:
    post:
      tags:
        - Assistants
      summary: Update an assistant
      description: Update an AI Assistant's attributes.
      operationId: update_assistant_public_assistants__assistant_id__post
      parameters:
        - name: assistant_id
          in: path
          required: true
          schema:
            type: string
            title: Assistant Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAssistantRequestWithPromotion'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inference-embedding_Assistant'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            import Telnyx from 'telnyx';


            const client = new Telnyx({
              apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted
            });


            const inferenceEmbedding = await
            client.ai.assistants.update('assistant_id');


            console.log(inferenceEmbedding.id);
        - lang: Python
          source: |-
            import os
            from telnyx import Telnyx

            client = Telnyx(
                api_key=os.environ.get("TELNYX_API_KEY"),  # This is the default and can be omitted
            )
            inference_embedding = client.ai.assistants.update(
                assistant_id="assistant_id",
            )
            print(inference_embedding.id)
        - lang: Go
          source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/team-telnyx/telnyx-go\"\n\t\"github.com/team-telnyx/telnyx-go/option\"\n)\n\nfunc main() {\n\tclient := telnyx.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tinferenceEmbedding, err := client.AI.Assistants.Update(\n\t\tcontext.TODO(),\n\t\t\"assistant_id\",\n\t\ttelnyx.AIAssistantUpdateParams{},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", inferenceEmbedding.ID)\n}\n"
        - lang: Java
          source: |-
            package com.telnyx.sdk.example;

            import com.telnyx.sdk.client.TelnyxClient;
            import com.telnyx.sdk.client.okhttp.TelnyxOkHttpClient;
            import com.telnyx.sdk.models.ai.assistants.AssistantUpdateParams;
            import com.telnyx.sdk.models.ai.assistants.InferenceEmbedding;

            public final class Main {
                private Main() {}

                public static void main(String[] args) {
                    TelnyxClient client = TelnyxOkHttpClient.fromEnv();

                    InferenceEmbedding inferenceEmbedding = client.ai().assistants().update("assistant_id");
                }
            }
        - lang: Ruby
          source: |-
            require "telnyx"

            telnyx = Telnyx::Client.new(api_key: "My API Key")

            inference_embedding = telnyx.ai.assistants.update("assistant_id")

            puts(inference_embedding)
        - lang: PHP
          source: >-
            <?php


            require_once dirname(__DIR__) . '/vendor/autoload.php';


            use Telnyx\Client;

            use Telnyx\AI\Assistants\EnabledFeatures;

            use Telnyx\Core\Exceptions\APIException;


            $client = new Client(apiKey: getenv('TELNYX_API_KEY') ?: 'My API
            Key');


            try {
              $inferenceEmbedding = $client->ai->assistants->update(
                'assistant_id',
                description: 'description',
                dynamicVariables: ['foo' => 'bar'],
                dynamicVariablesWebhookTimeoutMs: 1,
                dynamicVariablesWebhookURL: 'dynamic_variables_webhook_url',
                enabledFeatures: [EnabledFeatures::TELEPHONY],
                externalLlm: [
                  'baseURL' => 'base_url',
                  'model' => 'model',
                  'authenticationMethod' => 'token',
                  'certificateRef' => 'certificate_ref',
                  'forwardMetadata' => true,
                  'llmAPIKeyRef' => 'llm_api_key_ref',
                  'tokenRetrievalURL' => 'token_retrieval_url',
                ],
                fallbackConfig: [
                  'externalLlm' => [
                    'baseURL' => 'base_url',
                    'model' => 'model',
                    'authenticationMethod' => 'token',
                    'certificateRef' => 'certificate_ref',
                    'forwardMetadata' => true,
                    'llmAPIKeyRef' => 'llm_api_key_ref',
                    'tokenRetrievalURL' => 'token_retrieval_url',
                  ],
                  'llmAPIKeyRef' => 'llm_api_key_ref',
                  'model' => 'model',
                ],
                greeting: 'greeting',
                insightSettings: ['insightGroupID' => 'insight_group_id'],
                instructions: 'instructions',
                integrations: [
                  ['integrationID' => 'integration_id', 'allowedList' => ['string']]
                ],
                interruptionSettings: [
                  'disableGreetingInterruption' => true,
                  'enable' => true,
                  'startSpeakingPlan' => [
                    'transcriptionEndpointingPlan' => [
                      'onNoPunctuationSeconds' => 0,
                      'onNumberSeconds' => 0,
                      'onPunctuationSeconds' => 0,
                    ],
                    'waitSeconds' => 0,
                  ],
                ],
                llmAPIKeyRef: 'llm_api_key_ref',
                mcpServers: [['id' => 'id', 'allowedTools' => ['string']]],
                messagingSettings: [
                  'conversationInactivityMinutes' => 1,
                  'defaultMessagingProfileID' => 'default_messaging_profile_id',
                  'deliveryStatusWebhookURL' => 'delivery_status_webhook_url',
                ],
                model: 'model',
                name: 'name',
                observabilitySettings: [
                  'host' => 'host',
                  'promptLabel' => 'prompt_label',
                  'promptName' => 'prompt_name',
                  'promptSync' => 'enabled',
                  'promptVersion' => 1,
                  'publicKeyRef' => 'public_key_ref',
                  'secretKeyRef' => 'secret_key_ref',
                  'status' => 'enabled',
                ],
                postConversationSettings: ['enabled' => true],
                privacySettings: ['dataRetention' => true],
                promoteToMain: true,
                tags: ['string'],
                telephonySettings: [
                  'defaultTexmlAppID' => 'default_texml_app_id',
                  'noiseSuppression' => 'krisp',
                  'noiseSuppressionConfig' => [
                    'attenuationLimit' => 0, 'mode' => 'advanced'
                  ],
                  'recordingSettings' => [
                    'channels' => 'single', 'enabled' => true, 'format' => 'wav'
                  ],
                  'supportsUnauthenticatedWebCalls' => true,
                  'timeLimitSecs' => 30,
                  'userIdleReplySecs' => 0,
                  'userIdleTimeoutSecs' => 10,
                  'voicemailDetection' => [
                    'onVoicemailDetected' => [
                      'action' => 'stop_assistant',
                      'voicemailMessage' => [
                        'message' => 'message', 'prompt' => 'prompt', 'type' => 'prompt'
                      ],
                    ],
                  ],
                ],
                toolIDs: ['string'],
                tools: [
                  [
                    'type' => 'webhook',
                    'webhook' => [
                      'description' => 'description',
                      'name' => 'name',
                      'url' => 'https://example.com/api/v1/function',
                      'async' => true,
                      'bodyParameters' => [
                        'properties' => ['age' => 'bar', 'location' => 'bar'],
                        'required' => ['age', 'location'],
                        'type' => 'object',
                      ],
                      'headers' => [['name' => 'name', 'value' => 'value']],
                      'method' => 'GET',
                      'pathParameters' => [
                        'properties' => ['id' => 'bar'],
                        'required' => ['id'],
                        'type' => 'object',
                      ],
                      'queryParameters' => [
                        'properties' => ['page' => 'bar'],
                        'required' => ['page'],
                        'type' => 'object',
                      ],
                      'storeFieldsAsVariables' => [['name' => 'x', 'valuePath' => 'x']],
                      'timeoutMs' => 500,
                    ],
                  ],
                ],
                transcription: [
                  'apiKeyRef' => 'api_key_ref',
                  'language' => 'language',
                  'model' => 'deepgram/flux',
                  'region' => 'region',
                  'settings' => [
                    'eagerEotThreshold' => 0.3,
                    'endOfTurnConfidenceThreshold' => 0,
                    'eotThreshold' => 0.5,
                    'eotTimeoutMs' => 500,
                    'keyterm' => 'keyterm',
                    'maxTurnSilence' => 100,
                    'minTurnSilence' => 100,
                    'numerals' => true,
                    'smartFormat' => true,
                  ],
                ],
                versionName: 'version_name',
                voiceSettings: [
                  'voice' => 'voice',
                  'apiKeyRef' => 'api_key_ref',
                  'backgroundAudio' => ['type' => 'predefined_media', 'value' => 'silence'],
                  'expressiveMode' => true,
                  'languageBoost' => 'auto',
                  'similarityBoost' => 0,
                  'speed' => 0,
                  'style' => 0,
                  'temperature' => 0,
                  'useSpeakerBoost' => true,
                  'voiceSpeed' => 0,
                ],
                widgetSettings: [
                  'agentThinkingText' => 'agent_thinking_text',
                  'audioVisualizerConfig' => ['color' => 'verdant', 'preset' => 'preset'],
                  'defaultState' => 'expanded',
                  'giveFeedbackURL' => 'give_feedback_url',
                  'logoIconURL' => 'logo_icon_url',
                  'position' => 'fixed',
                  'reportIssueURL' => 'report_issue_url',
                  'speakToInterruptText' => 'speak_to_interrupt_text',
                  'startCallText' => 'start_call_text',
                  'theme' => 'light',
                  'viewHistoryURL' => 'view_history_url',
                ],
              );

              var_dump($inferenceEmbedding);
            } catch (APIException $e) {
              echo $e->getMessage();
            }
        - lang: CLI
          source: |-
            telnyx ai:assistants update \
              --api-key 'My API Key' \
              --assistant-id assistant_id
components:
  schemas:
    UpdateAssistantRequestWithPromotion:
      allOf:
        - $ref: '#/components/schemas/UpdateAssistantRequest'
        - properties:
            promote_to_main:
              type: boolean
              default: true
              description: >-
                Indicates whether the assistant should be promoted to the main
                version. Defaults to true.
          type: object
    inference-embedding_Assistant:
      properties:
        id:
          type: string
        name:
          type: string
        created_at:
          type: string
          format: date-time
        version_id:
          type: string
          description: >-
            Identifier for the assistant version returned by version-aware
            assistant endpoints.
        version_created_at:
          type: string
          format: date-time
          description: Timestamp when this assistant version was created.
        description:
          type: string
        model:
          type: string
          description: >-
            ID of the model to use when `external_llm` is not set. You can use
            the [Get models
            API](https://developers.telnyx.com/api-reference/openai-chat/get-available-models-openai-compatible)
            to see available models. If `external_llm` is provided, the
            assistant uses `external_llm` instead of this field. If neither
            `model` nor `external_llm` is provided, Telnyx applies the default
            model.
        instructions:
          type: string
          description: >-
            System instructions for the assistant. These may be templated with
            [dynamic
            variables](https://developers.telnyx.com/docs/inference/ai-assistants/dynamic-variables)
        tools:
          $ref: '#/components/schemas/AssistantTools'
          description: >-
            Deprecated for new integrations. Inline tool definitions available
            to the assistant. Prefer `tool_ids` to attach shared tools created
            with the AI Tools endpoints.
        mcp_servers:
          type: array
          items:
            $ref: '#/components/schemas/AssistantMCPServer'
          default: []
          description: >-
            MCP servers attached to the assistant. Create MCP servers with
            `/ai/mcp_servers`, then reference them by `id` here.
        greeting:
          type: string
          description: >-
            Text that the assistant will use to start the conversation. This may
            be templated with [dynamic
            variables](https://developers.telnyx.com/docs/inference/ai-assistants/dynamic-variables).
            Use an empty string to have the assistant wait for the user to speak
            first. Use the special value
            `<assistant-speaks-first-with-model-generated-message>` to have the
            assistant generate the greeting based on the system instructions.
        llm_api_key_ref:
          type: string
          description: >-
            This is only needed when using third-party inference providers
            selected by `model`. The `identifier` for an integration secret
            [/v2/integration_secrets](https://developers.telnyx.com/api-reference/integration-secrets/create-a-secret)
            that refers to your LLM provider's API key. For bring-your-own
            endpoint authentication, use `external_llm.llm_api_key_ref` instead.
            Warning: Free plans are unlikely to work with this integration.
        external_llm:
          $ref: '#/components/schemas/ExternalLLM'
        fallback_config:
          $ref: '#/components/schemas/FallbackConfig'
        voice_settings:
          $ref: '#/components/schemas/VoiceSettings'
        transcription:
          $ref: '#/components/schemas/TranscriptionSettings'
        telephony_settings:
          $ref: '#/components/schemas/TelephonySettings'
        messaging_settings:
          $ref: '#/components/schemas/MessagingSettings'
        enabled_features:
          items:
            $ref: '#/components/schemas/EnabledFeatures'
          type: array
          uniqueItems: true
          title: Enabled Features
        insight_settings:
          $ref: '#/components/schemas/InsightSettings'
        privacy_settings:
          $ref: '#/components/schemas/PrivacySettings'
        dynamic_variables_webhook_url:
          type: string
          description: >-
            If `dynamic_variables_webhook_url` is set, Telnyx sends a POST
            request to this URL at the start of the conversation to resolve
            dynamic variables. **Gotcha:** the webhook response must wrap
            variables under a top-level `dynamic_variables` object, e.g.
            `{"dynamic_variables": {"customer_name": "Jane"}}`. Returning a flat
            object will be ignored and variables will fall back to their
            defaults. See the [dynamic variables
            guide](https://developers.telnyx.com/docs/inference/ai-assistants/dynamic-variables)
            for the full request/response format and timeout behavior.
        dynamic_variables_webhook_timeout_ms:
          type: integer
          minimum: 1
          maximum: 10000
          default: 1500
          description: >-
            Timeout in milliseconds for the dynamic variables webhook. Must be
            between 1 and 10000 ms. If the webhook does not respond within this
            timeout, the call proceeds with default values. See the [dynamic
            variables
            guide](https://developers.telnyx.com/docs/inference/ai-assistants/dynamic-variables).
        dynamic_variables:
          type: object
          description: Map of dynamic variables and their values
          additionalProperties: true
        import_metadata:
          $ref: '#/components/schemas/ImportMetadata'
        widget_settings:
          $ref: '#/components/schemas/WidgetSettings'
        interruption_settings:
          $ref: '#/components/schemas/inference-embedding_InterruptionSettings'
        integrations:
          type: array
          items:
            $ref: '#/components/schemas/AssistantIntegration'
          default: []
          description: >-
            Connected integrations attached to the assistant. The catalog of
            available integrations is at `/ai/integrations`; the user's
            connected integrations are at `/ai/integrations/connections`. Each
            item references a catalog integration by `integration_id`.
        observability_settings:
          $ref: '#/components/schemas/Observability'
        version_name:
          type: string
          maxLength: 50
          default: New assistant
          description: Human-readable name for the assistant version.
        related_mission_ids:
          type: array
          items:
            type: string
          default: []
          description: IDs of missions related to this assistant.
        tags:
          type: array
          items:
            type: string
          default: []
          description: >-
            Tags associated with the assistant. Tags can also be managed with
            the assistant tag endpoints.
        post_conversation_settings:
          $ref: '#/components/schemas/PostConversationSettings'
      type: object
      required:
        - id
        - name
        - created_at
        - model
        - instructions
    HTTPValidationError:
      title: HTTPValidationError
      type: object
      properties:
        detail:
          title: Detail
          type: array
          items:
            $ref: '#/components/schemas/ValidationError'
    UpdateAssistantRequest:
      properties:
        name:
          type: string
        model:
          type: string
          description: >-
            ID of the model to use when `external_llm` is not set. You can use
            the [Get models
            API](https://developers.telnyx.com/api-reference/openai-chat/get-available-models-openai-compatible)
            to see available models. If `external_llm` is provided, the
            assistant uses `external_llm` instead of this field. If neither
            `model` nor `external_llm` is provided, Telnyx applies the default
            model.
        instructions:
          type: string
          description: >-
            System instructions for the assistant. These may be templated with
            [dynamic
            variables](https://developers.telnyx.com/docs/inference/ai-assistants/dynamic-variables)
        tools:
          $ref: '#/components/schemas/AssistantTools'
          description: >-
            Deprecated for new integrations. Inline tool definitions available
            to the assistant. Prefer `tool_ids` to attach shared tools created
            with the AI Tools endpoints.
        mcp_servers:
          type: array
          items:
            $ref: '#/components/schemas/AssistantMCPServer'
          default: []
          description: >-
            MCP servers attached to the assistant. Create MCP servers with
            `/ai/mcp_servers`, then reference them by `id` here.
        tool_ids:
          title: Ids of shared tools
          items:
            type: string
          type: array
          description: >-
            IDs of shared tools to attach to the assistant. New integrations
            should prefer `tool_ids` over inline `tools`.
        description:
          type: string
        greeting:
          type: string
          description: >-
            Text that the assistant will use to start the conversation. This may
            be templated with [dynamic
            variables](https://developers.telnyx.com/docs/inference/ai-assistants/dynamic-variables).
            Use an empty string to have the assistant wait for the user to speak
            first. Use the special value
            `<assistant-speaks-first-with-model-generated-message>` to have the
            assistant generate the greeting based on the system instructions.
        llm_api_key_ref:
          type: string
          description: >-
            This is only needed when using third-party inference providers
            selected by `model`. The `identifier` for an integration secret
            [/v2/integration_secrets](https://developers.telnyx.com/api-reference/integration-secrets/create-a-secret)
            that refers to your LLM provider's API key. For bring-your-own
            endpoint authentication, use `external_llm.llm_api_key_ref` instead.
            Warning: Free plans are unlikely to work with this integration.
        external_llm:
          $ref: '#/components/schemas/ExternalLLMReq'
        fallback_config:
          $ref: '#/components/schemas/FallbackConfigReq'
        voice_settings:
          $ref: '#/components/schemas/VoiceSettings'
        transcription:
          $ref: '#/components/schemas/TranscriptionSettings'
        telephony_settings:
          $ref: '#/components/schemas/TelephonySettings'
        messaging_settings:
          $ref: '#/components/schemas/MessagingSettings'
        enabled_features:
          items:
            $ref: '#/components/schemas/EnabledFeatures'
          type: array
          uniqueItems: true
        insight_settings:
          $ref: '#/components/schemas/InsightSettings'
        privacy_settings:
          $ref: '#/components/schemas/PrivacySettings'
        dynamic_variables_webhook_url:
          type: string
          description: >-
            If `dynamic_variables_webhook_url` is set, Telnyx sends a POST
            request to this URL at the start of the conversation to resolve
            dynamic variables. **Gotcha:** the webhook response must wrap
            variables under a top-level `dynamic_variables` object, e.g.
            `{"dynamic_variables": {"customer_name": "Jane"}}`. Returning a flat
            object will be ignored and variables will fall back to their
            defaults. See the [dynamic variables
            guide](https://developers.telnyx.com/docs/inference/ai-assistants/dynamic-variables)
            for the full request/response format and timeout behavior.
        dynamic_variables_webhook_timeout_ms:
          type: integer
          minimum: 1
          maximum: 10000
          default: 1500
          description: >-
            Timeout in milliseconds for the dynamic variables webhook. Must be
            between 1 and 10000 ms. If the webhook does not respond within this
            timeout, the call proceeds with default values. See the [dynamic
            variables
            guide](https://developers.telnyx.com/docs/inference/ai-assistants/dynamic-variables).
        dynamic_variables:
          type: object
          description: Map of dynamic variables and their default values
          additionalProperties: true
        widget_settings:
          $ref: '#/components/schemas/WidgetSettings'
        interruption_settings:
          $ref: '#/components/schemas/inference-embedding_InterruptionSettings'
        integrations:
          type: array
          items:
            $ref: '#/components/schemas/AssistantIntegration'
          default: []
          description: >-
            Connected integrations attached to the assistant. The catalog of
            available integrations is at `/ai/integrations`; the user's
            connected integrations are at `/ai/integrations/connections`. Each
            item references a catalog integration by `integration_id`.
        observability_settings:
          $ref: '#/components/schemas/ObservabilityReq'
        tags:
          type: array
          items:
            type: string
          default: []
          description: >-
            Tags associated with the assistant. Tags can also be managed with
            the assistant tag endpoints.
        version_name:
          type: string
          maxLength: 50
          default: New assistant
          description: Human-readable name for the assistant version.
        post_conversation_settings:
          $ref: '#/components/schemas/PostConversationSettingsReq'
      type: object
      title: UpdateAssistantRequest
    AssistantTools:
      description: >-
        Deprecated for new integrations. Inline tool definitions available to
        the assistant. Prefer `tool_ids` to attach shared tools created with the
        AI Tools endpoints.
      type: array
      items:
        oneOf:
          - $ref: '#/components/schemas/inference-embedding_WebhookTool'
          - $ref: '#/components/schemas/RetrievalTool'
          - $ref: '#/components/schemas/HandoffTool'
          - $ref: '#/components/schemas/HangupTool'
          - $ref: '#/components/schemas/inference-embedding_TransferTool'
          - $ref: '#/components/schemas/InviteTool'
          - $ref: '#/components/schemas/SIPReferTool'
          - $ref: '#/components/schemas/DTMFTool'
          - $ref: '#/components/schemas/SendMessageTool'
          - $ref: '#/components/schemas/SkipTurnTool'
    AssistantMCPServer:
      type: object
      title: AssistantMCPServer
      description: >-
        Reference to an MCP server attached to an assistant. Create and manage
        MCP servers with the `/ai/mcp_servers` endpoints, then attach them to
        assistants by ID.
      properties:
        id:
          type: string
          description: >-
            ID of the MCP server to attach. This must be the `id` of an MCP
            server returned by the `/ai/mcp_servers` endpoints.
        allowed_tools:
          type: array
          items:
            type: string
          description: >-
            Optional per-assistant allowlist of MCP tool names. When omitted,
            the assistant uses the MCP server's configured `allowed_tools`.
      required:
        - id
    ExternalLLM:
      properties:
        model:
          type: string
          description: Model identifier to use with the external LLM endpoint.
        base_url:
          type: string
          description: Base URL for the external LLM endpoint.
        llm_api_key_ref:
          type: string
          description: Integration secret identifier for the external LLM API key.
        authentication_method:
          $ref: '#/components/schemas/AuthenticationMethod'
        certificate_ref:
          type: string
          description: >-
            Integration secret identifier for the client certificate used with
            certificate authentication.
        token_retrieval_url:
          type: string
          description: >-
            URL used to retrieve an access token when certificate authentication
            is enabled.
        forward_metadata:
          type: boolean
          default: false
          description: >-
            When `true`, Telnyx forwards the assistant's dynamic variables to
            the external LLM endpoint as a top-level `extra_metadata` object on
            the chat completion request body. Defaults to `false`. Example
            payload sent to the external endpoint: `{"extra_metadata":
            {"customer_name": "Jane", "account_id": "acct_789",
            "telnyx_agent_target": "+13125550100", "telnyx_end_user_target":
            "+13125550123"}}`. Distinct from OpenAI's native `metadata` field,
            which has its own size and type limits.
      type: object
      required:
        - model
        - base_url
      title: ExternalLLM
    FallbackConfig:
      properties:
        model:
          type: string
          description: >-
            Fallback Telnyx-hosted model to use when the primary LLM provider is
            unavailable.
        llm_api_key_ref:
          type: string
          description: Integration secret identifier for the fallback model API key.
        external_llm:
          $ref: '#/components/schemas/ExternalLLM'
      type: object
      title: FallbackConfig
    VoiceSettings:
      properties:
        voice:
          type: string
          description: >-
            The voice to be used by the voice assistant. Check the full list of
            [available
            voices](https://developers.telnyx.com/docs/tts-stt/tts-available-voices)
            via our voices API.

            To use ElevenLabs, you must reference your ElevenLabs API key as an
            integration secret under the `api_key_ref` field. See [integration
            secrets
            documentation](https://developers.telnyx.com/api-reference/integration-secrets/create-a-secret)
            for details. For Telnyx voices, use `Telnyx.<model_id>.<voice_id>`
            (e.g. Telnyx.KokoroTTS.af_heart).

            The voice portion of the identifier supports [dynamic
            variables](https://developers.telnyx.com/docs/inference/ai-assistants/dynamic-variables)
            using mustache syntax (e.g. `Telnyx.Ultra.{{voice_id}}`). The
            variable is resolved at call time from your dynamic variables
            webhook, allowing you to select the voice dynamically per call.
        voice_speed:
          type: number
          default: 1
          description: >-
            The speed of the voice in the range [0.25, 2.0]. 1.0 is deafult
            speed. Larger numbers make the voice faster, smaller numbers make it
            slower. This is only applicable for Telnyx Natural voices.
        api_key_ref:
          type: string
          description: >-
            The `identifier` for an integration secret
            [/v2/integration_secrets](https://developers.telnyx.com/api-reference/integration-secrets/create-a-secret)
            that refers to your ElevenLabs API key. Warning: Free plans are
            unlikely to work with this integration.
        temperature:
          type: number
          default: 0.5
          description: >-
            Determines how stable the voice is and the randomness between each
            generation. Lower values create a broader emotional range; higher
            values produce more consistent, monotonous output. Only applicable
            when using ElevenLabs.
        similarity_boost:
          type: number
          default: 0.75
          description: >-
            Determines how closely the AI should adhere to the original voice
            when attempting to replicate it. Only applicable when using
            ElevenLabs.
        use_speaker_boost:
          type: boolean
          default: true
          description: >-
            Amplifies similarity to the original speaker voice. Increases
            computational load and latency slightly. Only applicable when using
            ElevenLabs.
        style:
          type: number
          default: 0
          description: >-
            Determines the style exaggeration of the voice. Amplifies speaker
            style but consumes additional resources when set above 0. Only
            applicable when using ElevenLabs.
        speed:
          type: number
          default: 1
          description: >-
            Adjusts speech velocity. 1.0 is default speed; values less than 1.0
            slow speech; values greater than 1.0 accelerate it. Only applicable
            when using ElevenLabs.
        language_boost:
          type:
            - string
            - 'null'
          description: >-
            Enhances recognition for specific languages and dialects during
            MiniMax TTS synthesis. Default is null (no boost). Set to 'auto' for
            automatic language detection. Only applicable when using MiniMax
            voices.
          enum:
            - null
            - auto
            - Chinese
            - Chinese,Yue
            - English
            - Arabic
            - Russian
            - Spanish
            - French
            - Portuguese
            - German
            - Turkish
            - Dutch
            - Ukrainian
            - Vietnamese
            - Indonesian
            - Japanese
            - Italian
            - Korean
            - Thai
            - Polish
            - Romanian
            - Greek
            - Czech
            - Finnish
            - Hindi
            - Bulgarian
            - Danish
            - Hebrew
            - Malay
            - Persian
            - Slovak
            - Swedish
            - Croatian
            - Filipino
            - Hungarian
            - Norwegian
            - Slovenian
            - Catalan
            - Nynorsk
            - Tamil
            - Afrikaans
          default: null
        expressive_mode:
          type: boolean
          default: false
          description: >-
            Enables emotionally expressive speech using SSML emotion tags. When
            enabled, the assistant uses audio tags like angry, excited, content,
            and sad to add emotional nuance. Only supported for Telnyx Ultra
            voices.
        background_audio:
          description: >-
            Optional background audio to play on the call. Use a predefined
            media bed, or supply a looped MP3 URL. If a media URL is chosen in
            the portal, customers can preview it before saving.
          oneOf:
            - type: object
              properties:
                type:
                  type: string
                  enum:
                    - predefined_media
                  description: Select from predefined media options.
                value:
                  type: string
                  enum:
                    - silence
                    - office
                  default: silence
                  description: >-
                    The predefined media to use. `silence` disables background
                    audio.
              required:
                - type
                - value
            - type: object
              properties:
                type:
                  type: string
                  enum:
                    - media_url
                  description: >-
                    Provide a direct URL to an MP3 file. The audio will loop
                    during the call.
                value:
                  type: string
                  format: uri
                  description: HTTPS URL to an MP3 file.
              required:
                - type
                - value
            - type: object
              properties:
                type:
                  type: string
                  enum:
                    - media_name
                  description: >-
                    Reference a previously uploaded media by its name from
                    Telnyx Media Storage.
                value:
                  type: string
                  description: >-
                    The `name` of a media asset created via [Media Storage
                    API](https://developers.telnyx.com/api/media-storage/create-media-storage).
                    The audio will loop during the call.
              required:
                - type
                - value
      type: object
      required:
        - voice
    TranscriptionSettings:
      properties:
        model:
          type: string
          enum:
            - deepgram/flux
            - deepgram/nova-3
            - deepgram/nova-2
            - azure/fast
            - assemblyai/universal-streaming
            - xai/grok-stt
            - distil-whisper/distil-large-v2
            - openai/whisper-large-v3-turbo
          description: >-
            The speech to text model to be used by the voice assistant. All
            Deepgram models are run on-premise.


            - `deepgram/flux` is optimized for turn-taking with multilingual
            language hints.

            - `deepgram/nova-3` is multilingual with automatic language
            detection.

            - `deepgram/nova-2` is Deepgram's previous-generation multilingual
            model.

            - `azure/fast` is a multilingual Azure transcription model.

            - `assemblyai/universal-streaming` is a multilingual streaming model
            with configurable turn detection.

            - `xai/grok-stt` is a multilingual Grok STT model.
        language:
          type: string
          description: >-
            The language of the audio to be transcribed. If not set, or if set
            to `auto`, supported models will automatically detect the language.
            For `deepgram/flux`, supported values are: `auto` (Telnyx language
            detection controls the language hint), `multi` (no language hint),
            and language-specific hints `en`, `es`, `fr`, `de`, `hi`, `ru`,
            `pt`, `ja`, `it`, and `nl`.
        api_key_ref:
          title: Api Key Ref
          type: string
          description: >-
            Integration secret identifier for the transcription provider API
            key. Currently used for Azure transcription regions that require a
            customer-provided API key.
        region:
          title: Region
          type: string
          description: >-
            Region on third party cloud providers (currently Azure) if using one
            of their models. Some regions require `api_key_ref`.
        settings:
          $ref: '#/components/schemas/TranscriptionSettingsConfig'
      type: object
    TelephonySettings:
      properties:
        default_texml_app_id:
          type: string
          description: >-
            Default Texml App used for voice calls with your assistant. This
            will be created automatically on assistant creation.
        supports_unauthenticated_web_calls:
          type: boolean
          description: >-
            When enabled, allows users to interact with your AI assistant
            directly from your website without requiring authentication. This is
            required for FE widgets that work with assistants that have
            telephony enabled.
        noise_suppression:
          type: string
          enum:
            - krisp
            - deepfilternet
            - disabled
          description: >-
            The noise suppression engine to use. Use 'disabled' to turn off
            noise suppression.
        noise_suppression_config:
          type: object
          description: >-
            Configuration for noise suppression. Only applicable when
            noise_suppression is 'deepfilternet'.
          properties:
            attenuation_limit:
              type: integer
              minimum: 0
              maximum: 100
              default: 100
              description: 'Attenuation limit for noise suppression. Range: 0-100.'
            mode:
              type: string
              enum:
                - advanced
              description: Mode for noise suppression configuration.
        time_limit_secs:
          type: integer
          minimum: 30
          maximum: 14400
          default: 1800
          description: >-
            Maximum duration in seconds for the AI assistant to participate on
            the call. When this limit is reached the assistant will be stopped.
            This limit does not apply to portions of a call without an active
            assistant (for instance, a call transferred to a human
            representative).
        user_idle_timeout_secs:
          type: integer
          minimum: 10
          maximum: 14400
          description: >-
            Maximum duration in seconds of end user silence on the call. When
            this limit is reached the assistant will be stopped. This limit does
            not apply to portions of a call without an active assistant (for
            instance, a call transferred to a human representative).
        user_idle_reply_secs:
          type: integer
          minimum: 0
          default: 10
          description: >-
            Duration in seconds of end user silence before the assistant checks
            in on the user. When this limit is reached the assistant will prompt
            the user to respond. This is distinct from user_idle_timeout_secs
            which stops the assistant entirely.
        voicemail_detection:
          type: object
          description: >-
            Configuration for voicemail detection (AMD - Answering Machine
            Detection) on outgoing calls. These settings only apply if AMD is
            enabled on the Dial command. See [TeXML Dial
            documentation](https://developers.telnyx.com/api-reference/texml-rest-commands/initiate-an-outbound-call)
            for enabling AMD. Recommended settings: MachineDetection=Enable,
            AsyncAmd=true, DetectionMode=Premium.
          properties:
            on_voicemail_detected:
              type: object
              description: Action to take when voicemail is detected.
              properties:
                action:
                  type: string
                  enum:
                    - stop_assistant
                    - leave_message_and_stop_assistant
                    - continue_assistant
                  description: The action to take when voicemail is detected.
                voicemail_message:
                  type: object
                  description: >-
                    Configuration for the voicemail message to leave. Only
                    applicable when action is
                    'leave_message_and_stop_assistant'.
                  properties:
                    type:
                      type: string
                      enum:
                        - prompt
                        - message
                      description: >-
                        The type of voicemail message. Use 'prompt' to have the
                        assistant generate a message based on a prompt, or
                        'message' to leave a specific message.
                    prompt:
                      type: string
                      description: >-
                        The prompt to use for generating the voicemail message.
                        Only applicable when type is 'prompt'.
                    message:
                      type: string
                      description: >-
                        The specific message to leave as voicemail. Only
                        applicable when type is 'message'.
        recording_settings:
          type: object
          description: Configuration for call recording format and channel settings.
          properties:
            enabled:
              type: boolean
              default: true
              description: >-
                Whether call recording is enabled. When set to false, calls will
                not be recorded regardless of other recording configuration.
            channels:
              type: string
              enum:
                - single
                - dual
              default: dual
              description: >-
                The number of channels for the recording. 'single' for mono,
                'dual' for stereo.
            format:
              type: string
              enum:
                - wav
                - mp3
              default: mp3
              description: The format of the recording file.
      type: object
      title: TelephonySettings
    MessagingSettings:
      properties:
        default_messaging_profile_id:
          type: string
          description: >-
            Default Messaging Profile used for messaging exchanges with your
            assistant. This will be created automatically on assistant creation.
        delivery_status_webhook_url:
          type: string
          description: >-
            The URL where webhooks related to delivery statused for assistant
            messages will be sent.
        conversation_inactivity_minutes:
          type: integer
          minimum: 1
          maximum: 10000000
          description: >-
            If more than this many minutes have passed since the last message,
            the assistant will start a new conversation instead of continuing
            the existing one.
      type: object
    EnabledFeatures:
      type: string
      enum:
        - telephony
        - messaging
      description: >-
        If `telephony` is enabled, the assistant will be able to make and
        receive calls. If `messaging` is enabled, the assistant will be able to
        send and receive messages.
    InsightSettings:
      properties:
        insight_group_id:
          type: string
          description: >-
            Reference to an Insight Group. Insights in this group will be run
            automatically for all the assistant's conversations.
      type: object
    PrivacySettings:
      properties:
        data_retention:
          type: boolean
          description: >-
            If true, conversation history and insights will be stored. If false,
            they will not be stored. This in‑tool toggle governs solely the
            retention of conversation history and insights via the AI assistant.
            It has no effect on any separate recording, transcription, or
            storage configuration that you have set at the account, number, or
            application level. All such external settings remain in force
            regardless of your selection here.
      type: object
    ImportMetadata:
      properties:
        import_provider:
          type: string
          enum:
            - elevenlabs
            - vapi
            - retell
          description: Provider the assistant was imported from.
        import_id:
          type: string
          description: ID of the assistant in the provider's system.
      type: object
    WidgetSettings:
      type: object
      properties:
        theme:
          type: string
          enum:
            - light
            - dark
          description: The visual theme for the widget.
        audio_visualizer_config:
          $ref: '#/components/schemas/AudioVisualizerConfig'
        start_call_text:
          type: string
          description: Custom text displayed on the start call button.
        default_state:
          type: string
          enum:
            - expanded
            - collapsed
          description: The default state of the widget.
        position:
          type: string
          enum:
            - fixed
            - static
          description: The positioning style for the widget.
        view_history_url:
          type:
            - string
            - 'null'
          description: URL to view conversation history.
        report_issue_url:
          type:
            - string
            - 'null'
          description: URL for users to report issues.
        give_feedback_url:
          type:
            - string
            - 'null'
          description: URL for users to give feedback.
        agent_thinking_text:
          type: string
          description: Text displayed while the agent is processing.
        speak_to_interrupt_text:
          type: string
          description: Text prompting users to speak to interrupt.
        logo_icon_url:
          type:
            - string
            - 'null'
          description: URL to a custom logo icon for the widget.
      title: WidgetSettings
      description: Configuration settings for the assistant's web widget.
    inference-embedding_InterruptionSettings:
      type: object
      title: InterruptionSettings
      description: >-
        Settings for interruptions and how the assistant decides the user has
        finished speaking. These timings are most relevant when using non
        turn-taking transcription models. For turn-taking models like
        `deepgram/flux`, end-of-turn behavior is controlled by the transcription
        end-of-turn settings under `transcription.settings` (`eot_threshold`,
        `eot_timeout_ms`, `eager_eot_threshold`).
      properties:
        enable:
          type: boolean
          default: true
          description: Whether users can interrupt the assistant while it is speaking.
        disable_greeting_interruption:
          type: boolean
          description: >-
            When true, disables user interruptions while the assistant greeting
            is playing.
        start_speaking_plan:
          $ref: '#/components/schemas/StartSpeakingPlan'
    AssistantIntegration:
      type: object
      title: AssistantIntegration
      description: >-
        Reference to a connected integration attached to an assistant. Discover
        available integrations with `/ai/integrations` and connected
        integrations with `/ai/integrations/connections`.
      properties:
        integration_id:
          type: string
          description: >-
            Catalog integration ID to attach. This is the `id` from the
            integrations catalog at `/ai/integrations` (the same value also
            appears as `integration_id` on entries returned by
            `/ai/integrations/connections`). It is **not** the connection-level
            `id` from `/ai/integrations/connections`.
        allowed_list:
          type: array
          items:
            type: string
          description: >-
            Optional per-assistant allowlist of integration tool names. When
            omitted or empty, all tools allowed by the connected integration are
            available to the assistant.
      required:
        - integration_id
    Observability:
      properties:
        status:
          $ref: '#/components/schemas/ObservabilityStatus'
          default: disabled
        secret_key_ref:
          title: Secret Key Ref
          type: string
        public_key_ref:
          title: Public Key Ref
          type: string
        host:
          title: Host
          type: string
        prompt_name:
          title: Prompt Name
          type: string
        prompt_version:
          title: Prompt Version
          type: integer
          minimum: 1
        prompt_label:
          title: Prompt Label
          type: string
        prompt_sync:
          $ref: '#/components/schemas/PromptSyncStatus'
          default: disabled
      type: object
      title: Observability
    PostConversationSettings:
      type: object
      description: >-
        Configuration for post-conversation processing. When enabled, the
        assistant receives one additional LLM turn after the conversation ends,
        allowing it to execute tool calls such as logging to a CRM or sending a
        summary. The assistant can execute multiple parallel or sequential tools
        during this phase. Telephony-control tools (e.g. hangup, transfer) are
        unavailable post-conversation. Beta feature.
      properties:
        enabled:
          type: boolean
          description: >-
            Whether post-conversation processing is enabled. When true, the
            assistant will be invoked after the conversation ends to perform any
            final tool calls. Defaults to false.
          default: false
    ValidationError:
      title: ValidationError
      required:
        - loc
        - msg
        - type
      type: object
      properties:
        loc:
          title: Location
          type: array
          items:
            anyOf:
              - type: string
              - type: integer
        msg:
          title: Message
          type: string
        type:
          title: Error Type
          type: string
    ExternalLLMReq:
      properties:
        model:
          type: string
          description: Model identifier to use with the external LLM endpoint.
        base_url:
          type: string
          description: Base URL for the external LLM endpoint.
        llm_api_key_ref:
          type: string
          description: Integration secret identifier for the external LLM API key.
        authentication_method:
          $ref: '#/components/schemas/AuthenticationMethod'
        certificate_ref:
          type: string
          description: >-
            Integration secret identifier for the client certificate used with
            certificate authentication.
        token_retrieval_url:
          type: string
          description: >-
            URL used to retrieve an access token when certificate authentication
            is enabled.
        forward_metadata:
          type: boolean
          default: false
          description: >-
            When `true`, Telnyx forwards the assistant's dynamic variables to
            the external LLM endpoint as a top-level `extra_metadata` object on
            the chat completion request body. Defaults to `false`. Example
            payload sent to the external endpoint: `{"extra_metadata":
            {"customer_name": "Jane", "account_id": "acct_789",
            "telnyx_agent_target": "+13125550100", "telnyx_end_user_target":
            "+13125550123"}}`. Distinct from OpenAI's native `metadata` field,
            which has its own size and type limits.
      type: object
      required:
        - model
        - base_url
      title: ExternalLLMReq
    FallbackConfigReq:
      properties:
        model:
          type: string
          description: >-
            Fallback Telnyx-hosted model to use when the primary LLM provider is
            unavailable.
        llm_api_key_ref:
          type: string
          description: Integration secret identifier for the fallback model API key.
        external_llm:
          $ref: '#/components/schemas/ExternalLLMReq'
      type: object
      title: FallbackConfigReq
    ObservabilityReq:
      properties:
        status:
          $ref: '#/components/schemas/ObservabilityStatus'
          default: disabled
        secret_key_ref:
          title: Secret Key Ref
          type: string
        public_key_ref:
          title: Public Key Ref
          type: string
        host:
          title: Host
          type: string
        prompt_name:
          title: Prompt Name
          type: string
        prompt_version:
          title: Prompt Version
          type: integer
          minimum: 1
        prompt_label:
          title: Prompt Label
          type: string
        prompt_sync:
          $ref: '#/components/schemas/PromptSyncStatus'
          default: disabled
      type: object
      title: ObservabilityReq
    PostConversationSettingsReq:
      type: object
      description: >-
        Configuration for post-conversation processing. When enabled, the
        assistant receives one additional LLM turn after the conversation ends,
        allowing it to execute tool calls such as logging to a CRM or sending a
        summary. The assistant can execute multiple parallel or sequential tools
        during this phase. Telephony-control tools (e.g. hangup, transfer) are
        unavailable post-conversation. Beta feature.
      properties:
        enabled:
          type: boolean
          description: >-
            Whether post-conversation processing is enabled. When true, the
            assistant will be invoked after the conversation ends to perform any
            final tool calls. Defaults to false.
          default: false
    inference-embedding_WebhookTool:
      properties:
        type:
          type: string
          enum:
            - webhook
        webhook:
          $ref: '#/components/schemas/WebhookToolParams'
      type: object
      required:
        - type
        - webhook
      title: WebhookTool
    RetrievalTool:
      properties:
        type:
          type: string
          enum:
            - retrieval
        retrieval:
          $ref: '#/components/schemas/BucketIds'
      type: object
      required:
        - type
        - retrieval
      title: RetrievalTool
    HandoffTool:
      description: >-
        The handoff tool allows the assistant to hand off control of the
        conversation to another AI assistant. By default, this will happen
        transparently to the end user.
      properties:
        type:
          type: string
          enum:
            - handoff
        handoff:
          $ref: '#/components/schemas/HandoffToolParams'
      type: object
      required:
        - type
        - handoff
      title: HandoffTool
    HangupTool:
      properties:
        type:
          type: string
          enum:
            - hangup
        hangup:
          $ref: '#/components/schemas/HangupToolParams'
      type: object
      required:
        - type
        - hangup
      title: HangupTool
    inference-embedding_TransferTool:
      properties:
        type:
          type: string
          enum:
            - transfer
        transfer:
          $ref: '#/components/schemas/InferenceEmbeddingTransferToolParams'
      type: object
      required:
        - type
        - transfer
      title: TransferTool
    InviteTool:
      properties:
        type:
          type: string
          enum:
            - invite
        invite:
          $ref: '#/components/schemas/InviteToolConfig'
          title: InviteToolConfig
      type: object
      required:
        - type
        - invite
      title: InviteTool
    SIPReferTool:
      properties:
        type:
          type: string
          enum:
            - refer
        refer:
          $ref: '#/components/schemas/SIPReferToolParams'
      type: object
      required:
        - type
        - refer
      title: SIPReferTool
    DTMFTool:
      properties:
        type:
          type: string
          enum:
            - send_dtmf
        send_dtmf:
          type: object
          additionalProperties: true
      type: object
      required:
        - type
        - send_dtmf
      title: DTMFTool
    SendMessageTool:
      description: >-
        The send_message tool allows the assistant to send SMS or MMS messages
        to the end user. The 'to' and 'from' addresses are automatically
        determined from the conversation context, and the message text is
        generated by the assistant unless a message_template is provided for
        runtime variable substitution.
      properties:
        type:
          type: string
          enum:
            - send_message
        send_message:
          type: object
          properties:
            message_template:
              type:
                - string
                - 'null'
              description: >-
                Optional message template with dynamic variable support using
                mustache syntax (e.g., {{variable_name}}). When set, the
                assistant will use this template for the SMS body instead of
                generating one. Dynamic variables like
                {{telnyx_end_user_target}}, {{telnyx_agent_target}}, and custom
                webhook-provided variables will be resolved at runtime.
          additionalProperties: true
      type: object
      required:
        - type
        - send_message
      title: SendMessageTool
    SkipTurnTool:
      properties:
        type:
          type: string
          enum:
            - skip_turn
        skip_turn:
          $ref: '#/components/schemas/SkipTurnToolParams'
      type: object
      required:
        - type
        - skip_turn
      title: SkipTurnTool
    AuthenticationMethod:
      type: string
      enum:
        - token
        - certificate
      default: token
      description: Authentication method used when connecting to the external LLM endpoint.
      title: AuthenticationMethod
    TranscriptionSettingsConfig:
      properties:
        smart_format:
          title: Smart Format
          type: boolean
        numerals:
          title: Numerals
          type: boolean
        eot_threshold:
          title: Eot Threshold
          type: number
          description: >-
            Available only for deepgram/flux. Confidence required to trigger an
            end of turn. Higher values = more reliable turn detection but
            slightly increased latency.
          minimum: 0.5
          maximum: 0.9
          default: 0.8
        eot_timeout_ms:
          title: Eot Timeout Ms
          type: integer
          description: >-
            Available only for deepgram/flux. Maximum milliseconds of silence
            before forcing an end of turn, regardless of confidence.
          minimum: 500
          maximum: 10000
          default: 5000
        eager_eot_threshold:
          title: Eager Eot Threshold
          type: number
          minimum: 0.3
          maximum: 0.9
          default: 0.8
          description: >-
            Available only for deepgram/flux. Confidence threshold for eager end
            of turn detection. Must be lower than or equal to eot_threshold.
            Setting this equal to eot_threshold effectively disables eager end
            of turn.
        keyterm:
          title: Keyterm
          type: string
          description: >-
            Available only for deepgram/nova-3 and deepgram/flux. A
            comma-separated list of key terms to boost for recognition during
            transcription. Helps improve accuracy for domain-specific
            terminology, proper nouns, or uncommon words. This field may be
            templated with [dynamic
            variables](https://developers.telnyx.com/docs/inference/ai-assistants/dynamic-variables)
            using mustache syntax (e.g. `Telnyx,{{customer_name}},VoIP`).
            Variables are resolved at call time before the value is sent to the
            speech-to-text engine.
        end_of_turn_confidence_threshold:
          title: End Of Turn Confidence Threshold
          type: number
          minimum: 0
          maximum: 1
          default: 0.4
          description: >-
            Available only for assemblyai/universal-streaming. Confidence level
            required to trigger an end of turn. Higher values require more
            certainty before ending a turn.
        min_turn_silence:
          title: Min Turn Silence
          type: integer
          minimum: 100
          maximum: 5000
          default: 400
          description: >-
            Available only for assemblyai/universal-streaming. Minimum duration
            of silence in milliseconds before a turn can end. Must be less than
            or equal to max_turn_silence.
        max_turn_silence:
          title: Max Turn Silence
          type: integer
          minimum: 100
          maximum: 5000
          default: 1280
          description: >-
            Available only for assemblyai/universal-streaming. Maximum duration
            of silence in milliseconds before forcing an end of turn.
      type: object
      title: TranscriptionSettingsConfig
    AudioVisualizerConfig:
      type: object
      properties:
        color:
          type: string
          enum:
            - verdant
            - twilight
            - bloom
            - mystic
            - flare
            - glacier
          description: The color theme for the audio visualizer.
        preset:
          type: string
          description: The preset style for the audio visualizer.
      title: AudioVisualizerConfig
    StartSpeakingPlan:
      type: object
      title: StartSpeakingPlan
      description: >-
        Controls when the assistant starts speaking after the user stops. These
        thresholds primarily apply to non turn-taking transcription models. For
        turn-taking models like `deepgram/flux`, end-of-turn detection is driven
        by the transcription end-of-turn settings under `transcription.settings`
        instead.
      properties:
        wait_seconds:
          type: number
          format: float
          default: 0.4
          minimum: 0
          description: Minimum seconds to wait before the assistant starts speaking.
        transcription_endpointing_plan:
          $ref: '#/components/schemas/TranscriptionEndpointingPlan'
    ObservabilityStatus:
      type: string
      enum:
        - enabled
        - disabled
      title: ObservabilityStatus
    PromptSyncStatus:
      type: string
      enum:
        - enabled
        - disabled
      title: PromptSyncStatus
      description: >-
        Whether to auto-publish the assistant's instructions as a Langfuse
        prompt.


        When ENABLED + prompt_name set, every assistant create/update pushes

        `instructions` to Langfuse via create_prompt and stores the returned

        version in prompt_version.
    WebhookToolParams:
      properties:
        name:
          type: string
          description: The name of the tool.
        description:
          type: string
          description: The description of the tool.
        url:
          description: >-
            The URL of the external tool to be called. This URL is going to be
            used by the assistant. The URL can be templated like:
            `https://example.com/api/v1/{id}`, where `{id}` is a placeholder for
            a value that will be provided by the assistant if `path_parameters`
            are provided with the `id` attribute.
          type: string
          example: https://example.com/api/v1/function
        method:
          description: The HTTP method to be used when calling the external tool.
          type: string
          enum:
            - GET
            - POST
            - PUT
            - DELETE
            - PATCH
          default: POST
        headers:
          description: The headers to be sent to the external tool.
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              value:
                description: >-
                  The value of the header. Note that we support mustache
                  templating for the value. For example you can use `Bearer
                  {{#integration_secret}}test-secret{{/integration_secret}}` to
                  pass the value of the integration secret as the bearer token.
                  [Telnyx signature
                  headers](https://developers.telnyx.com/docs/voice/programmable-voice/voice-api-webhooks)
                  will be automatically added to the request.
                type: string
        body_parameters:
          description: >-
            The body parameters the webhook tool accepts, described as a JSON
            Schema object. These parameters will be passed to the webhook as the
            body of the request. See the [JSON Schema
            reference](https://json-schema.org/understanding-json-schema) for
            documentation about the format
          type: object
          properties:
            properties:
              description: The properties of the body parameters.
              type: object
              additionalProperties: true
            required:
              description: The required properties of the body parameters.
              type: array
              items:
                type: string
            type:
              type: string
              enum:
                - object
          example:
            properties:
              age:
                description: The age of the customer.
                type: integer
              location:
                description: The location of the customer.
                type: string
            required:
              - age
              - location
            type: object
        path_parameters:
          description: >-
            The path parameters the webhook tool accepts, described as a JSON
            Schema object. These parameters will be passed to the webhook as the
            path of the request if the URL contains a placeholder for a value.
            See the [JSON Schema
            reference](https://json-schema.org/understanding-json-schema) for
            documentation about the format
          type: object
          properties:
            properties:
              description: The properties of the path parameters.
              type: object
              additionalProperties: true
            required:
              description: The required properties of the path parameters.
              type: array
              items:
                type: string
            type:
              type: string
              enum:
                - object
          example:
            properties:
              id:
                description: The id of the customer.
                type: string
            required:
              - id
            type: object
        query_parameters:
          description: >-
            The query parameters the webhook tool accepts, described as a JSON
            Schema object. These parameters will be passed to the webhook as the
            query of the request. See the [JSON Schema
            reference](https://json-schema.org/understanding-json-schema) for
            documentation about the format
          type: object
          properties:
            properties:
              description: The properties of the query parameters.
              type: object
              additionalProperties: true
            required:
              description: The required properties of the query parameters.
              type: array
              items:
                type: string
            type:
              type: string
              enum:
                - object
          example:
            properties:
              page:
                description: The page number.
                type: integer
            required:
              - page
            type: object
        async:
          type: boolean
          default: false
          description: >-
            If async, the assistant will move forward without waiting for your
            server to respond.
        timeout_ms:
          type: integer
          minimum: 500
          maximum: 10000
          description: >-
            The maximum number of milliseconds to wait for the webhook to
            respond. Only applicable when async is false.
        store_fields_as_variables:
          type: array
          description: >-
            A list of mappings that extract values from the webhook response and
            store them as dynamic variables. Each mapping specifies a dynamic
            variable name and a dot-notation path to the value in the response
            body.
          items:
            type: object
            required:
              - name
              - value_path
            properties:
              name:
                type: string
                minLength: 1
                description: >-
                  The name of the dynamic variable to store the extracted value
                  in.
              value_path:
                type: string
                minLength: 1
                description: >-
                  A dot-notation path to the value in the webhook response body
                  (e.g. 'customer.name' or 'id').
            additionalProperties: false
      type: object
      required:
        - url
        - name
        - description
      title: WebhookToolParams
    BucketIds:
      properties:
        bucket_ids:
          items:
            type: string
          type: array
          description: >-
            List of [embedded storage
            buckets](https://developers.telnyx.com/api-reference/embeddings/embed-documents)
            to use for retrieval-augmented generation.
        max_num_results:
          description: >-
            The maximum number of results to retrieve as context for the
            language model.
          type: integer
      type: object
      required:
        - bucket_ids
      title: BucketIds
    HandoffToolParams:
      properties:
        voice_mode:
          type: string
          enum:
            - unified
            - distinct
          description: >-
            With the unified voice mode all assistants share the same voice,
            making the handoff transparent to the user. With the distinct voice
            mode all assistants retain their voice configuration, providing the
            experience of a conference call with a team of assistants.
        ai_assistants:
          type: array
          description: List of possible assistants that can receive a handoff.
          items:
            type: object
            properties:
              name:
                type: string
                description: >-
                  Helpful name for giving context on when to handoff to the
                  assistant.
                example: Scheduling Specialist
              id:
                type: string
                description: The ID of the assistant to hand off to.
                example: assistant-1234567890abcdef
            required:
              - name
              - id
      required:
        - ai_assistants
      type: object
      title: HandoffToolParams
    HangupToolParams:
      properties:
        description:
          type: string
          default: This tool is used to hang up the call.
          description: >-
            The description of the function that will be passed to the
            assistant.
      type: object
      title: HangupToolParams
    InferenceEmbeddingTransferToolParams:
      properties:
        targets:
          oneOf:
            - type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                    description: The name of the target.
                    example: Support
                  to:
                    type: string
                    description: The destination number or SIP URI of the call.
                    example: '+13129457420'
                required:
                  - to
            - type: string
              description: >-
                A dynamic variable string like `{{ targets }}` where `targets`
                is returned by the dynamic variables webhook and resolves to an
                array of target objects at runtime.
              example: '{{ targets }}'
          description: >-
            The different possible targets of the transfer. The assistant will
            be able to choose one of the targets to transfer the call to. This
            can also be a dynamic variable string like `{{ targets }}` where
            `targets` is returned by the dynamic variables webhook and resolves
            to an array of target objects at runtime.
        from:
          type: string
          example: '+35319605860'
          description: Number or SIP URI placing the call.
        warm_transfer_instructions:
          type: string
          example: >-
            Briefly greet the transfer recipient and provide any relevant
            information from the call. Let them know you will bridge the call
            right after.
          description: >-
            Natural language instructions for your agent for how to provide
            context for the transfer recipient.
        warm_message_delay_ms:
          type:
            - integer
            - 'null'
          example: 2000
          description: >-
            Optional delay in milliseconds before playing the warm message audio
            when the transferred call is answered. When set, the audio_url is
            not included in the dial command; instead, playback starts after the
            specified delay. When not set, existing behavior (audio_url in dial)
            is preserved.
        custom_headers:
          description: >-
            Custom headers to be added to the SIP INVITE for the transfer
            command.
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              value:
                description: >-
                  The value of the header. Note that we support mustache
                  templating for the value. For example you can use
                  `{{#integration_secret}}test-secret{{/integration_secret}}` to
                  pass the value of the integration secret.
                type: string
        voicemail_detection:
          type: object
          description: >-
            Configuration for voicemail detection (AMD - Answering Machine
            Detection) on the transferred call. Allows the assistant to detect
            when a voicemail system answers the transferred call and take
            appropriate action.
          properties:
            detection_mode:
              type: string
              enum:
                - disabled
                - premium
              description: >-
                The AMD detection mode to use. 'premium' enables premium
                answering machine detection. 'disabled' turns off AMD detection.
            on_voicemail_detected:
              type: object
              description: >-
                Action to take when voicemail is detected on the transferred
                call.
              properties:
                action:
                  type: string
                  enum:
                    - stop_transfer
                    - leave_message_and_stop_transfer
                  description: >-
                    The action to take when voicemail is detected.
                    'stop_transfer' hangs up immediately.
                    'leave_message_and_stop_transfer' leaves a message then
                    hangs up.
                voicemail_message:
                  type: object
                  description: >-
                    Configuration for the voicemail message to leave. Only
                    applicable when action is 'leave_message_and_stop_transfer'.
                  properties:
                    type:
                      type: string
                      enum:
                        - message
                        - warm_transfer_instructions
                      description: >-
                        The type of voicemail message. Use 'message' to leave a
                        specific TTS message, or 'warm_transfer_instructions' to
                        play the warm transfer audio.
                    message:
                      type: string
                      description: >-
                        The specific message to leave as voicemail (converted to
                        speech). Only applicable when type is 'message'.
            detection_config:
              type: object
              description: >-
                Advanced AMD detection configuration parameters. All values are
                optional - Telnyx will use defaults if not specified.
              properties:
                greeting_silence_duration_millis:
                  type: integer
                  minimum: 500
                  maximum: 50000
                  description: >-
                    Duration of silence after the greeting to wait before
                    considering the greeting complete.
                greeting_total_analysis_time_millis:
                  type: integer
                  minimum: 500
                  maximum: 300000
                  description: Maximum time to spend analyzing the greeting.
                after_greeting_silence_millis:
                  type: integer
                  minimum: 100
                  maximum: 5000
                  description: >-
                    Duration of silence after greeting detection before
                    finalizing the result.
                between_words_silence_millis:
                  type: integer
                  minimum: 10
                  maximum: 5000
                  description: Maximum silence duration between words during greeting.
                greeting_duration_millis:
                  type: integer
                  minimum: 100
                  maximum: 10000
                  description: Expected duration of greeting speech.
                initial_silence_millis:
                  type: integer
                  minimum: 100
                  maximum: 500000
                  description: >-
                    Maximum silence duration at the start of the call before
                    speech.
                maximum_number_of_words:
                  type: integer
                  minimum: 1
                  maximum: 50
                  description: Maximum number of words expected in a human greeting.
                maximum_word_length_millis:
                  type: integer
                  minimum: 50
                  maximum: 5000
                  description: Maximum duration of a single word.
                silence_threshold:
                  type: integer
                  minimum: 1
                  maximum: 1000
                  description: Audio level threshold for silence detection.
                total_analysis_time_millis:
                  type: integer
                  minimum: 500
                  maximum: 60000
                  description: Total time allowed for AMD analysis.
                min_word_length_millis:
                  type: integer
                  minimum: 1
                  maximum: 1000
                  description: Minimum duration for audio to be considered a word.
      type: object
      required:
        - targets
        - from
      title: TransferToolParams
    InviteToolConfig:
      properties:
        from:
          type: string
          example: '+35319605860'
          description: Number or SIP URI placing the call.
        targets:
          oneOf:
            - type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                    description: The name of the target.
                    example: Support
                  to:
                    type: string
                    description: The destination number or SIP URI of the call.
                    example: '+13129457420'
                required:
                  - to
            - type: string
              description: >-
                A dynamic variable string like `{{ targets }}` where `targets`
                is returned by the dynamic variables webhook and resolves to an
                array of target objects at runtime.
              example: '{{ targets }}'
            - type: 'null'
          description: >-
            The different possible targets of the invite. The assistant will be
            able to choose one of the targets to invite to the call. This can
            also be a dynamic variable string like `{{ targets }}` where
            `targets` is returned by the dynamic variables webhook and resolves
            to an array of target objects at runtime. If omitted or null, the
            invite tool can still be configured and targets may be supplied
            dynamically at runtime.
        custom_headers:
          description: Custom headers to be added to the SIP INVITE for the invite command.
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              value:
                description: >-
                  The value of the header. Note that we support mustache
                  templating for the value. For example you can use
                  `{{#integration_secret}}test-secret{{/integration_secret}}` to
                  pass the value of the integration secret.
                type: string
        voicemail_detection:
          type: object
          description: >-
            Configuration for voicemail detection (AMD - Answering Machine
            Detection) on the invited call.
          properties:
            detection_mode:
              type: string
              enum:
                - disabled
                - premium
              description: >-
                The AMD detection mode to use. 'premium' enables premium
                answering machine detection. 'disabled' turns off AMD detection.
            on_voicemail_detected:
              type: object
              description: Action to take when voicemail is detected on the invited call.
              properties:
                action:
                  type: string
                  enum:
                    - stop_invite
                  description: The action to take when voicemail is detected.
      type: object
      required:
        - from
      title: InviteToolConfig
    SIPReferToolParams:
      properties:
        targets:
          type: array
          description: >-
            The different possible targets of the SIP refer. The assistant will
            be able to choose one of the targets to refer the call to.
          items:
            type: object
            properties:
              name:
                type: string
                description: The name of the target.
                example: Support
              sip_address:
                type: string
                description: The SIP URI to which the call will be referred.
                example: sip:username@sip.non-telnyx-address.com
              sip_auth_username:
                type: string
                description: SIP Authentication username used for SIP challenges.
              sip_auth_password:
                type: string
                description: SIP Authentication password used for SIP challenges.
            required:
              - name
              - sip_address
        sip_headers:
          description: >-
            SIP headers to be added to the SIP REFER. Currently only
            User-to-User and Diversion headers are supported.
          type: array
          items:
            type: object
            properties:
              name:
                type: string
                enum:
                  - User-to-User
                  - Diversion
              value:
                description: >-
                  The value of the header. Note that we support mustache
                  templating for the value. For example you can use
                  `{{#integration_secret}}test-secret{{/integration_secret}}` to
                  pass the value of the integration secret.
                type: string
        custom_headers:
          description: Custom headers to be added to the SIP REFER.
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              value:
                description: >-
                  The value of the header. Note that we support mustache
                  templating for the value. For example you can use
                  `{{#integration_secret}}test-secret{{/integration_secret}}` to
                  pass the value of the integration secret.
                type: string
      type: object
      required:
        - targets
      title: SIPReferToolParams
    SkipTurnToolParams:
      properties:
        description:
          type: string
          default: >-
            This tool is used to skip the assistant turn without producing a
            response.
          description: >-
            The description of the function that will be passed to the
            assistant.
      type: object
      title: SkipTurnToolParams
    TranscriptionEndpointingPlan:
      type: object
      title: TranscriptionEndpointingPlan
      description: >-
        Endpointing thresholds used to decide when the user has finished
        speaking. Applies to non turn-taking transcription models. For
        `deepgram/flux`, use `transcription.settings.eot_threshold` /
        `eot_timeout_ms` / `eager_eot_threshold`.
      properties:
        on_punctuation_seconds:
          type: number
          format: float
          default: 0.1
          description: Seconds to wait after the transcript ends with punctuation.
        on_no_punctuation_seconds:
          type: number
          format: float
          default: 1.5
          description: Seconds to wait after the transcript ends without punctuation.
        on_number_seconds:
          type: number
          format: float
          default: 0.5
          description: Seconds to wait after the transcript ends with a number.
  securitySchemes:
    bearerAuth:
      scheme: bearer
      type: http

````