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

# List Campaigns



## OpenAPI

````yaml get /campaign
openapi: 3.0.0
info:
  title: cozmox API
  description: Voice AI for developers.
  version: '1'
  contact: {}
servers:
  - description: Cozmox APIs
    url: https://api.cozmox.ai
  - url: https://api.cozmox.ai
security: []
tags: []
paths:
  /campaign:
    get:
      tags:
        - Campaigns
      summary: List Campaigns
      operationId: CampaignController_findAll
      parameters:
        - name: id
          required: false
          in: query
          schema:
            type: string
        - name: status
          required: false
          in: query
          schema:
            enum:
              - scheduled
              - in-progress
              - ended
            type: string
        - name: page
          required: false
          in: query
          description: This is the page number to return. Defaults to 1.
          schema:
            minimum: 1
            type: number
        - name: sortOrder
          required: false
          in: query
          description: This is the sort order for pagination. Defaults to 'DESC'.
          schema:
            enum:
              - ASC
              - DESC
            type: string
        - name: limit
          required: false
          in: query
          description: This is the maximum number of items to return. Defaults to 100.
          schema:
            minimum: 0
            maximum: 1000
            type: number
        - name: createdAtGt
          required: false
          in: query
          description: >-
            This will return items where the createdAt is greater than the
            specified value.
          schema:
            format: date-time
            type: string
        - name: createdAtLt
          required: false
          in: query
          description: >-
            This will return items where the createdAt is less than the
            specified value.
          schema:
            format: date-time
            type: string
        - name: createdAtGe
          required: false
          in: query
          description: >-
            This will return items where the createdAt is greater than or equal
            to the specified value.
          schema:
            format: date-time
            type: string
        - name: createdAtLe
          required: false
          in: query
          description: >-
            This will return items where the createdAt is less than or equal to
            the specified value.
          schema:
            format: date-time
            type: string
        - name: updatedAtGt
          required: false
          in: query
          description: >-
            This will return items where the updatedAt is greater than the
            specified value.
          schema:
            format: date-time
            type: string
        - name: updatedAtLt
          required: false
          in: query
          description: >-
            This will return items where the updatedAt is less than the
            specified value.
          schema:
            format: date-time
            type: string
        - name: updatedAtGe
          required: false
          in: query
          description: >-
            This will return items where the updatedAt is greater than or equal
            to the specified value.
          schema:
            format: date-time
            type: string
        - name: updatedAtLe
          required: false
          in: query
          description: >-
            This will return items where the updatedAt is less than or equal to
            the specified value.
          schema:
            format: date-time
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignPaginatedResponse'
      security:
        - bearer: []
components:
  schemas:
    CampaignPaginatedResponse:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/Campaign'
        metadata:
          $ref: '#/components/schemas/PaginationMeta'
      required:
        - results
        - metadata
    Campaign:
      type: object
      properties:
        status:
          type: string
          description: This is the status of the campaign.
          enum:
            - scheduled
            - in-progress
            - ended
        endedReason:
          type: string
          description: This is the explanation for how the campaign ended.
          enum:
            - campaign.scheduled.ended-by-user
            - campaign.in-progress.ended-by-user
            - campaign.ended.success
        name:
          type: string
          description: >-
            This is the name of the campaign. This is just for your own
            reference.
          example: Q2 Sales Campaign
        assistantId:
          type: string
          description: >-
            This is the assistant ID that will be used for the campaign calls.
            Note: Either assistantId or workflowId can be used, but not both.
        workflowId:
          type: string
          description: >-
            This is the workflow ID that will be used for the campaign calls.
            Note: Either assistantId or workflowId can be used, but not both.
        phoneNumberId:
          type: string
          description: >-
            This is the phone number ID that will be used for the campaign
            calls.
        schedulePlan:
          description: This is the schedule plan for the campaign.
          allOf:
            - $ref: '#/components/schemas/SchedulePlan'
        customers:
          description: These are the customers that will be called in the campaign.
          type: array
          items:
            $ref: '#/components/schemas/CreateCustomerDTO'
        id:
          type: string
          description: This is the unique identifier for the campaign.
        orgId:
          type: string
          description: >-
            This is the unique identifier for the org that this campaign belongs
            to.
        createdAt:
          format: date-time
          type: string
          description: >-
            This is the ISO 8601 date-time string of when the campaign was
            created.
        updatedAt:
          format: date-time
          type: string
          description: >-
            This is the ISO 8601 date-time string of when the campaign was last
            updated.
        calls:
          type: object
          description: This is a map of call IDs to campaign call details.
        callsCounterScheduled:
          type: number
          description: This is the number of calls that have been scheduled.
        callsCounterQueued:
          type: number
          description: This is the number of calls that have been queued.
        callsCounterInProgress:
          type: number
          description: This is the number of calls that have been in progress.
        callsCounterEndedVoicemail:
          type: number
          description: This is the number of calls whose ended reason is 'voicemail'.
        callsCounterEnded:
          type: number
          description: This is the number of calls that have ended.
      required:
        - status
        - name
        - phoneNumberId
        - customers
        - id
        - orgId
        - createdAt
        - updatedAt
        - calls
        - callsCounterScheduled
        - callsCounterQueued
        - callsCounterInProgress
        - callsCounterEndedVoicemail
        - callsCounterEnded
    PaginationMeta:
      type: object
      properties:
        itemsPerPage:
          type: number
        totalItems:
          type: number
        currentPage:
          type: number
      required:
        - itemsPerPage
        - totalItems
        - currentPage
    SchedulePlan:
      type: object
      properties:
        earliestAt:
          format: date-time
          type: string
          description: >-
            This is the ISO 8601 date-time string of the earliest time the call
            can be scheduled.
        latestAt:
          format: date-time
          type: string
          description: >-
            This is the ISO 8601 date-time string of the latest time the call
            can be scheduled.
      required:
        - earliestAt
    CreateCustomerDTO:
      type: object
      properties:
        numberE164CheckEnabled:
          type: boolean
          description: >-
            This is the flag to toggle the E164 check for the `number` field.
            This is an advanced property which should be used if you know your
            use case requires it.


            Use cases:

            - `false`: To allow non-E164 numbers like `+001234567890`, `1234`,
            or `abc`. This is useful for dialing out to non-E164 numbers on your
            SIP trunks.

            - `true` (default): To allow only E164 numbers like `+14155551234`.
            This is standard for PSTN calls.


            If `false`, the `number` is still required to only contain
            alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`).


            @default true (E164 check is enabled)
          default: true
        extension:
          type: string
          description: >-
            This is the extension that will be dialed after the call is
            answered.
          maxLength: 10
          example: null
        assistantOverrides:
          description: >-
            These are the overrides for the assistant's settings and template
            variables specific to this customer.

            This allows customization of the assistant's behavior for individual
            customers in batch calls.
          allOf:
            - $ref: '#/components/schemas/AssistantOverrides'
        number:
          type: string
          description: This is the number of the customer.
          minLength: 3
          maxLength: 40
        sipUri:
          type: string
          description: This is the SIP URI of the customer.
        name:
          type: string
          description: >-
            This is the name of the customer. This is just for your own
            reference.


            For SIP inbound calls, this is extracted from the `From` SIP header
            with format `"Display Name" <sip:username@domain>`.
          maxLength: 40
        email:
          type: string
          description: This is the email of the customer.
          maxLength: 40
        externalId:
          type: string
          description: This is the external ID of the customer.
          maxLength: 40
    AssistantOverrides:
      type: object
      properties:
        transcriber:
          description: These are the options for the assistant's transcriber.
          oneOf:
            - $ref: '#/components/schemas/AssemblyAITranscriber'
              title: AssemblyAITranscriber
            - $ref: '#/components/schemas/AzureSpeechTranscriber'
              title: AzureSpeechTranscriber
            - $ref: '#/components/schemas/CustomTranscriber'
              title: CustomTranscriber
            - $ref: '#/components/schemas/DeepgramTranscriber'
              title: DeepgramTranscriber
            - $ref: '#/components/schemas/ElevenLabsTranscriber'
              title: ElevenLabsTranscriber
            - $ref: '#/components/schemas/GladiaTranscriber'
              title: GladiaTranscriber
            - $ref: '#/components/schemas/GoogleTranscriber'
              title: GoogleTranscriber
            - $ref: '#/components/schemas/SpeechmaticsTranscriber'
              title: SpeechmaticsTranscriber
            - $ref: '#/components/schemas/TalkscriberTranscriber'
              title: TalkscriberTranscriber
            - $ref: '#/components/schemas/OpenAITranscriber'
              title: OpenAITranscriber
            - $ref: '#/components/schemas/CartesiaTranscriber'
              title: CartesiaTranscriber
        model:
          description: These are the options for the assistant's LLM.
          oneOf:
            - $ref: '#/components/schemas/AnthropicModel'
              title: Anthropic
            - $ref: '#/components/schemas/AnyscaleModel'
              title: Anyscale
            - $ref: '#/components/schemas/CerebrasModel'
              title: Cerebras
            - $ref: '#/components/schemas/CustomLLMModel'
              title: CustomLLM
            - $ref: '#/components/schemas/DeepInfraModel'
              title: DeepInfra
            - $ref: '#/components/schemas/DeepSeekModel'
              title: DeepSeek
            - $ref: '#/components/schemas/GoogleModel'
              title: Google
            - $ref: '#/components/schemas/GroqModel'
              title: Groq
            - $ref: '#/components/schemas/InflectionAIModel'
              title: InflectionAI
            - $ref: '#/components/schemas/OpenAIModel'
              title: OpenAI
            - $ref: '#/components/schemas/OpenRouterModel'
              title: OpenRouter
            - $ref: '#/components/schemas/PerplexityAIModel'
              title: PerplexityAI
            - $ref: '#/components/schemas/TogetherAIModel'
              title: Together
            - $ref: '#/components/schemas/XaiModel'
              title: XAI
        voice:
          description: These are the options for the assistant's voice.
          oneOf:
            - $ref: '#/components/schemas/AzureVoice'
              title: AzureVoice
            - $ref: '#/components/schemas/CartesiaVoice'
              title: CartesiaVoice
            - $ref: '#/components/schemas/CustomVoice'
              title: CustomVoice
            - $ref: '#/components/schemas/DeepgramVoice'
              title: DeepgramVoice
            - $ref: '#/components/schemas/ElevenLabsVoice'
              title: ElevenLabsVoice
            - $ref: '#/components/schemas/HumeVoice'
              title: HumeVoice
            - $ref: '#/components/schemas/LMNTVoice'
              title: LMNTVoice
            - $ref: '#/components/schemas/NeuphonicVoice'
              title: NeuphonicVoice
            - $ref: '#/components/schemas/OpenAIVoice'
              title: OpenAIVoice
            - $ref: '#/components/schemas/PlayHTVoice'
              title: PlayHTVoice
            - $ref: '#/components/schemas/RimeAIVoice'
              title: RimeAIVoice
            - $ref: '#/components/schemas/SmallestAIVoice'
              title: SmallestAIVoice
            - $ref: '#/components/schemas/TavusVoice'
              title: TavusVoice
            - $ref: '#/components/schemas/cozmoxVoice'
              title: cozmoxVoice
            - $ref: '#/components/schemas/SesameVoice'
              title: SesameVoice
            - $ref: '#/components/schemas/InworldVoice'
              title: InworldVoice
        firstMessage:
          type: string
          description: >-
            This is the first message that the assistant will say. This can also
            be a URL to a containerized audio file (mp3, wav, etc.).


            If unspecified, assistant will wait for user to speak and use the
            model to respond once they speak.
          example: Hello! How can I help you today?
        firstMessageInterruptionsEnabled:
          type: boolean
          default: false
        firstMessageMode:
          type: string
          description: >-
            This is the mode for the first message. Default is
            'assistant-speaks-first'.


            Use:

            - 'assistant-speaks-first' to have the assistant speak first.

            - 'assistant-waits-for-user' to have the assistant wait for the user
            to speak first.

            - 'assistant-speaks-first-with-model-generated-message' to have the
            assistant speak first with a message generated by the model based on
            the conversation state. (`assistant.model.messages` at call start,
            `call.messages` at squad transfer points).


            @default 'assistant-speaks-first'
          enum:
            - assistant-speaks-first
            - assistant-speaks-first-with-model-generated-message
            - assistant-waits-for-user
          example: assistant-speaks-first
        voicemailDetection:
          description: >-
            These are the settings to configure or disable voicemail detection.
            Alternatively, voicemail detection can be configured using the
            model.tools=[VoicemailTool].

            This uses Twilio's built-in detection while the VoicemailTool relies
            on the model to detect if a voicemail was reached.

            You can use neither of them, one of them, or both of them. By
            default, Twilio built-in detection is enabled while VoicemailTool is
            not.
          oneOf:
            - $ref: '#/components/schemas/GoogleVoicemailDetectionPlan'
              title: Google
            - $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan'
              title: OpenAI
            - $ref: '#/components/schemas/TwilioVoicemailDetectionPlan'
              title: Twilio
            - $ref: '#/components/schemas/cozmoxVoicemailDetectionPlan'
              title: cozmox
        clientMessages:
          type: array
          enum:
            - conversation-update
            - function-call
            - function-call-result
            - hang
            - language-changed
            - metadata
            - model-output
            - speech-update
            - status-update
            - transcript
            - tool-calls
            - tool-calls-result
            - tool.completed
            - transfer-update
            - user-interrupted
            - voice-input
            - workflow.node.started
          example:
            - conversation-update
            - function-call
            - hang
            - model-output
            - speech-update
            - status-update
            - transfer-update
            - transcript
            - tool-calls
            - user-interrupted
            - voice-input
            - workflow.node.started
          description: >-
            These are the messages that will be sent to your Client SDKs.
            Default is
            conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started.
            You can check the shape of the messages in ClientMessage schema.
          items:
            type: string
            enum:
              - conversation-update
              - function-call
              - function-call-result
              - hang
              - language-changed
              - metadata
              - model-output
              - speech-update
              - status-update
              - transcript
              - tool-calls
              - tool-calls-result
              - tool.completed
              - transfer-update
              - user-interrupted
              - voice-input
              - workflow.node.started
        serverMessages:
          type: array
          enum:
            - conversation-update
            - end-of-call-report
            - function-call
            - hang
            - language-changed
            - language-change-detected
            - model-output
            - phone-call-control
            - speech-update
            - status-update
            - transcript
            - transcript[transcriptType="final"]
            - tool-calls
            - transfer-destination-request
            - transfer-update
            - user-interrupted
            - voice-input
          example:
            - conversation-update
            - end-of-call-report
            - function-call
            - hang
            - speech-update
            - status-update
            - tool-calls
            - transfer-destination-request
            - user-interrupted
          description: >-
            These are the messages that will be sent to your Server URL. Default
            is
            conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,user-interrupted.
            You can check the shape of the messages in ServerMessage schema.
          items:
            type: string
            enum:
              - conversation-update
              - end-of-call-report
              - function-call
              - hang
              - language-changed
              - language-change-detected
              - model-output
              - phone-call-control
              - speech-update
              - status-update
              - transcript
              - transcript[transcriptType="final"]
              - tool-calls
              - transfer-destination-request
              - transfer-update
              - user-interrupted
              - voice-input
        silenceTimeoutSeconds:
          type: number
          description: >-
            How many seconds of silence to wait before ending the call. Defaults
            to 30.


            @default 30
          minimum: 10
          maximum: 3600
          example: 30
        maxDurationSeconds:
          type: number
          description: >-
            This is the maximum number of seconds that the call will last. When
            the call reaches this duration, it will be ended.


            @default 600 (10 minutes)
          minimum: 10
          maximum: 43200
          example: 600
        backgroundSound:
          description: >-
            This is the background sound in the call. Default for phone calls is
            'office' and default for web calls is 'off'.

            You can also provide a custom sound by providing a URL to an audio
            file.
          oneOf:
            - type: string
              enum:
                - 'off'
                - office
              example: office
            - type: string
              format: uri
              example: https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3
        backgroundDenoisingEnabled:
          type: boolean
          description: >-
            This enables filtering of noise and background speech while the user
            is talking.


            Default `false` while in beta.


            @default false
          deprecated: true
          example: false
        modelOutputInMessagesEnabled:
          type: boolean
          description: >-
            This determines whether the model's output is used in conversation
            history rather than the transcription of assistant's speech.


            Default `false` while in beta.


            @default false
          example: false
        transportConfigurations:
          type: array
          description: >-
            These are the configurations to be passed to the transport providers
            of assistant's calls, like Twilio. You can store multiple
            configurations for different transport providers. For a call, only
            the configuration matching the call transport provider is used.
          items:
            oneOf:
              - $ref: '#/components/schemas/TransportConfigurationTwilio'
                title: Twilio
        observabilityPlan:
          description: |-
            This is the plan for observability of assistant's calls.

            Currently, only Langfuse is supported.
          oneOf:
            - $ref: '#/components/schemas/LangfuseObservabilityPlan'
              title: Langfuse
          allOf:
            - $ref: '#/components/schemas/LangfuseObservabilityPlan'
        credentials:
          type: array
          description: >-
            These are dynamic credentials that will be used for the assistant
            calls. By default, all the credentials are available for use in the
            call but you can supplement an additional credentials using this.
            Dynamic credentials override existing credentials.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateAnthropicCredentialDTO'
                title: AnthropicCredential
              - $ref: '#/components/schemas/CreateAnyscaleCredentialDTO'
                title: AnyscaleCredential
              - $ref: '#/components/schemas/CreateAssemblyAICredentialDTO'
                title: AssemblyAICredential
              - $ref: '#/components/schemas/CreateAzureCredentialDTO'
                title: AzureCredential
              - $ref: '#/components/schemas/CreateAzureOpenAICredentialDTO'
                title: AzureOpenAICredential
              - $ref: '#/components/schemas/CreateByoSipTrunkCredentialDTO'
                title: ByoSipTrunkCredential
              - $ref: '#/components/schemas/CreateCartesiaCredentialDTO'
                title: CartesiaCredential
              - $ref: '#/components/schemas/CreateCerebrasCredentialDTO'
                title: CerebrasCredential
              - $ref: '#/components/schemas/CreateCloudflareCredentialDTO'
                title: CloudflareCredential
              - $ref: '#/components/schemas/CreateCustomLLMCredentialDTO'
                title: CustomLLMCredential
              - $ref: '#/components/schemas/CreateDeepgramCredentialDTO'
                title: DeepgramCredential
              - $ref: '#/components/schemas/CreateDeepInfraCredentialDTO'
                title: DeepInfraCredential
              - $ref: '#/components/schemas/CreateDeepSeekCredentialDTO'
                title: DeepSeekCredential
              - $ref: '#/components/schemas/CreateElevenLabsCredentialDTO'
                title: ElevenLabsCredential
              - $ref: '#/components/schemas/CreateGcpCredentialDTO'
                title: GcpCredential
              - $ref: '#/components/schemas/CreateGladiaCredentialDTO'
                title: GladiaCredential
              - $ref: '#/components/schemas/CreateGoHighLevelCredentialDTO'
                title: GhlCredential
              - $ref: '#/components/schemas/CreateGoogleCredentialDTO'
                title: GoogleCredential
              - $ref: '#/components/schemas/CreateGroqCredentialDTO'
                title: GroqCredential
              - $ref: '#/components/schemas/CreateHumeCredentialDTO'
                title: HumeCredential
              - $ref: '#/components/schemas/CreateInflectionAICredentialDTO'
                title: InflectionAICredential
              - $ref: '#/components/schemas/CreateLangfuseCredentialDTO'
                title: LangfuseCredential
              - $ref: '#/components/schemas/CreateLmntCredentialDTO'
                title: LmntCredential
              - $ref: '#/components/schemas/CreateMakeCredentialDTO'
                title: MakeCredential
              - $ref: '#/components/schemas/CreateMistralCredentialDTO'
                title: MistralCredential
              - $ref: '#/components/schemas/CreateNeuphonicCredentialDTO'
                title: NeuphonicCredential
              - $ref: '#/components/schemas/CreateOpenAICredentialDTO'
                title: OpenAICredential
              - $ref: '#/components/schemas/CreateOpenRouterCredentialDTO'
                title: OpenRouterCredential
              - $ref: '#/components/schemas/CreatePerplexityAICredentialDTO'
                title: PerplexityAICredential
              - $ref: '#/components/schemas/CreatePlayHTCredentialDTO'
                title: PlayHTCredential
              - $ref: '#/components/schemas/CreateRimeAICredentialDTO'
                title: RimeAICredential
              - $ref: '#/components/schemas/CreateRunpodCredentialDTO'
                title: RunpodCredential
              - $ref: '#/components/schemas/CreateS3CredentialDTO'
                title: S3Credential
              - $ref: '#/components/schemas/CreateSmallestAICredentialDTO'
                title: SmallestAICredential
              - $ref: '#/components/schemas/CreateSpeechmaticsCredentialDTO'
                title: SpeechmaticsCredential
              - $ref: '#/components/schemas/CreateSupabaseCredentialDTO'
                title: SupabaseCredential
              - $ref: '#/components/schemas/CreateTavusCredentialDTO'
                title: TavusCredential
              - $ref: '#/components/schemas/CreateTogetherAICredentialDTO'
                title: TogetherAICredential
              - $ref: '#/components/schemas/CreateTrieveCredentialDTO'
                title: TrieveCredential
              - $ref: '#/components/schemas/CreateTwilioCredentialDTO'
                title: TwilioCredential
              - $ref: '#/components/schemas/CreateVonageCredentialDTO'
                title: VonageCredential
              - $ref: '#/components/schemas/CreateWebhookCredentialDTO'
                title: WebhookCredential
              - $ref: '#/components/schemas/CreateXAiCredentialDTO'
                title: XAiCredential
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO
                title: GoogleCalendarOAuth2ClientCredential
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO
                title: GoogleCalendarOAuth2AuthorizationCredential
              - $ref: >-
                  #/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO
                title: GoogleSheetsOAuth2AuthorizationCredential
              - $ref: >-
                  #/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO
                title: SlackOAuth2AuthorizationCredential
              - $ref: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO'
                title: GoHighLevelMCPCredential
            discriminator:
              propertyName: provider
              mapping:
                11labs: '#/components/schemas/CreateElevenLabsCredentialDTO'
                anthropic: '#/components/schemas/CreateAnthropicCredentialDTO'
                anyscale: '#/components/schemas/CreateAnyscaleCredentialDTO'
                assembly-ai: '#/components/schemas/CreateAssemblyAICredentialDTO'
                azure-openai: '#/components/schemas/CreateAzureOpenAICredentialDTO'
                azure: '#/components/schemas/CreateAzureCredentialDTO'
                byo-sip-trunk: '#/components/schemas/CreateByoSipTrunkCredentialDTO'
                cartesia: '#/components/schemas/CreateCartesiaCredentialDTO'
                cerebras: '#/components/schemas/CreateCerebrasCredentialDTO'
                cloudflare: '#/components/schemas/CreateCloudflareCredentialDTO'
                custom-llm: '#/components/schemas/CreateCustomLLMCredentialDTO'
                deepgram: '#/components/schemas/CreateDeepgramCredentialDTO'
                deepinfra: '#/components/schemas/CreateDeepInfraCredentialDTO'
                deep-seek: '#/components/schemas/CreateDeepSeekCredentialDTO'
                gcp: '#/components/schemas/CreateGcpCredentialDTO'
                gladia: '#/components/schemas/CreateGladiaCredentialDTO'
                gohighlevel: '#/components/schemas/CreateGoHighLevelCredentialDTO'
                google: '#/components/schemas/CreateGoogleCredentialDTO'
                groq: '#/components/schemas/CreateGroqCredentialDTO'
                inflection-ai: '#/components/schemas/CreateInflectionAICredentialDTO'
                langfuse: '#/components/schemas/CreateLangfuseCredentialDTO'
                lmnt: '#/components/schemas/CreateLmntCredentialDTO'
                make: '#/components/schemas/CreateMakeCredentialDTO'
                openai: '#/components/schemas/CreateOpenAICredentialDTO'
                openrouter: '#/components/schemas/CreateOpenRouterCredentialDTO'
                perplexity-ai: '#/components/schemas/CreatePerplexityAICredentialDTO'
                playht: '#/components/schemas/CreatePlayHTCredentialDTO'
                rime-ai: '#/components/schemas/CreateRimeAICredentialDTO'
                runpod: '#/components/schemas/CreateRunpodCredentialDTO'
                s3: '#/components/schemas/CreateS3CredentialDTO'
                supabase: '#/components/schemas/CreateSupabaseCredentialDTO'
                smallest-ai: '#/components/schemas/CreateSmallestAICredentialDTO'
                tavus: '#/components/schemas/CreateTavusCredentialDTO'
                together-ai: '#/components/schemas/CreateTogetherAICredentialDTO'
                twilio: '#/components/schemas/CreateTwilioCredentialDTO'
                vonage: '#/components/schemas/CreateVonageCredentialDTO'
                webhook: '#/components/schemas/CreateWebhookCredentialDTO'
                xai: '#/components/schemas/CreateXAiCredentialDTO'
                neuphonic: '#/components/schemas/CreateNeuphonicCredentialDTO'
                hume: '#/components/schemas/CreateHumeCredentialDTO'
                mistral: '#/components/schemas/CreateMistralCredentialDTO'
                speechmatics: '#/components/schemas/CreateSpeechmaticsCredentialDTO'
                trieve: '#/components/schemas/CreateTrieveCredentialDTO'
                google.calendar.oauth2-client: >-
                  #/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO
                google.calendar.oauth2-authorization: >-
                  #/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO
                google.sheets.oauth2-authorization: >-
                  #/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO
                slack.oauth2-authorization: >-
                  #/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO
                ghl.oauth2-authorization: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO'
                inworld: '#/components/schemas/CreateInworldCredentialDTO'
        hooks:
          type: array
          description: This is a set of actions that will be performed on certain events.
          items:
            oneOf:
              - $ref: '#/components/schemas/AssistantHookCallEnding'
                title: AssistantHookCallEnding
              - $ref: '#/components/schemas/AssistantHookAssistantSpeechInterrupted'
                title: AssistantHookAssistantSpeechInterrupted
              - $ref: '#/components/schemas/AssistantHookCustomerSpeechInterrupted'
                title: AssistantHookCustomerSpeechInterrupted
        variableValues:
          type: object
          description: >-
            These are values that will be used to replace the template variables
            in the assistant messages and other text-based fields.

            This uses LiquidJS syntax.
            https://liquidjs.com/tutorials/intro-to-liquid.html


            So for example, `{{ name }}` will be replaced with the value of
            `name` in `variableValues`.

            `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will
            be replaced with the current date and time in New York.
             Some cozmox reserved defaults:
             - *customer* - the customer object
        name:
          type: string
          description: >-
            This is the name of the assistant.


            This is required when you want to transfer between assistants in a
            call.
          maxLength: 40
        voicemailMessage:
          type: string
          description: >-
            This is the message that the assistant will say if the call is
            forwarded to voicemail.


            If unspecified, it will hang up.
          maxLength: 1000
        endCallMessage:
          type: string
          description: |-
            This is the message that the assistant will say if it ends the call.

            If unspecified, it will hang up without saying anything.
          maxLength: 1000
        endCallPhrases:
          description: >-
            This list contains phrases that, if spoken by the assistant, will
            trigger the call to be hung up. Case insensitive.
          type: array
          items:
            type: string
            maxLength: 140
            minLength: 2
        compliancePlan:
          $ref: '#/components/schemas/CompliancePlan'
        metadata:
          type: object
          description: This is for metadata you want to store on the assistant.
        backgroundSpeechDenoisingPlan:
          description: >-
            This enables filtering of noise and background speech while the user
            is talking.


            Features:

            - Smart denoising using Krisp

            - Fourier denoising


            Smart denoising can be combined with or used independently of
            Fourier denoising.


            Order of precedence:

            - Smart denoising

            - Fourier denoising
          allOf:
            - $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan'
        analysisPlan:
          description: >-
            This is the plan for analysis of assistant's calls. Stored in
            `call.analysis`.
          allOf:
            - $ref: '#/components/schemas/AnalysisPlan'
        artifactPlan:
          description: >-
            This is the plan for artifacts generated during assistant's calls.
            Stored in `call.artifact`.
          allOf:
            - $ref: '#/components/schemas/ArtifactPlan'
        messagePlan:
          description: >-
            This is the plan for static predefined messages that can be spoken
            by the assistant during the call, like `idleMessages`.


            Note: `firstMessage`, `voicemailMessage`, and `endCallMessage` are
            currently at the root level. They will be moved to `messagePlan` in
            the future, but will remain backwards compatible.
          allOf:
            - $ref: '#/components/schemas/MessagePlan'
        startSpeakingPlan:
          description: >-
            This is the plan for when the assistant should start talking.


            You should configure this if you're running into these issues:

            - The assistant is too slow to start talking after the customer is
            done speaking.

            - The assistant is too fast to start talking after the customer is
            done speaking.

            - The assistant is so fast that it's actually interrupting the
            customer.
          allOf:
            - $ref: '#/components/schemas/StartSpeakingPlan'
        stopSpeakingPlan:
          description: >-
            This is the plan for when assistant should stop talking on customer
            interruption.


            You should configure this if you're running into these issues:

            - The assistant is too slow to recognize customer's interruption.

            - The assistant is too fast to recognize customer's interruption.

            - The assistant is getting interrupted by phrases that are just
            acknowledgments.

            - The assistant is getting interrupted by background noises.

            - The assistant is not properly stopping -- it starts talking right
            after getting interrupted.
          allOf:
            - $ref: '#/components/schemas/StopSpeakingPlan'
        monitorPlan:
          description: >-
            This is the plan for real-time monitoring of the assistant's calls.


            Usage:

            - To enable live listening of the assistant's calls, set
            `monitorPlan.listenEnabled` to `true`.

            - To enable live control of the assistant's calls, set
            `monitorPlan.controlEnabled` to `true`.
          allOf:
            - $ref: '#/components/schemas/MonitorPlan'
        credentialIds:
          description: >-
            These are the credentials that will be used for the assistant calls.
            By default, all the credentials are available for use in the call
            but you can provide a subset using this.
          type: array
          items:
            type: string
        server:
          description: >-
            This is where cozmox will send webhooks. You can find all webhooks
            available along with their shape in ServerMessage schema.


            The order of precedence is:


            1. assistant.server.url

            2. phoneNumber.serverUrl

            3. org.serverUrl
          allOf:
            - $ref: '#/components/schemas/Server'
        keypadInputPlan:
          $ref: '#/components/schemas/KeypadInputPlan'
    AssemblyAITranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - assembly-ai
        language:
          type: string
          description: This is the language that will be set for the transcription.
          enum:
            - en
        confidenceThreshold:
          type: number
          description: |-
            Transcripts below this confidence threshold will be discarded.

            @default 0.4
          minimum: 0
          maximum: 1
          example: 0.4
        enableUniversalStreamingApi:
          type: boolean
          description: >-
            Uses Assembly AI's new Universal Streaming API. See:
            https://www.assemblyai.com/docs/speech-to-text/universal-streaming


            @default false
          example: false
        formatTurns:
          type: boolean
          description: >-
            This enables formatting of transcripts. Only used when
            `enableUniversalStreamingApi` is true.


            @default false
          example: false
        endOfTurnConfidenceThreshold:
          type: number
          description: >-
            The confidence threshold to use when determining if the end of a
            turn has been reached. Only used when `enableUniversalStreamingApi`
            is true.


            @default 0.7
          minimum: 0
          maximum: 1
          example: 0.7
        minEndOfTurnSilenceWhenConfident:
          type: number
          description: >-
            The minimum amount of silence in milliseconds required to detect end
            of turn when confident. Only used when `enableUniversalStreamingApi`
            is true.


            @default 160
          minimum: 0
          example: 160
        wordFinalizationMaxWaitTime:
          type: number
          description: >-
            The maximum wait time for word finalization. Only used when
            `enableUniversalStreamingApi` is true.


            @default 160
          minimum: 0
          example: 160
        maxTurnSilence:
          type: number
          description: >-
            The maximum amount of silence in milliseconds allowed in a turn
            before end of turn is triggered. Only used when
            `enableUniversalStreamingApi` is true.


            @default 400
          minimum: 0
          example: 400
        realtimeUrl:
          type: string
          description: The WebSocket URL that the transcriber connects to.
        wordBoost:
          description: Add up to 2500 characters of custom vocabulary.
          type: array
          items:
            type: string
            maxLength: 2500
        endUtteranceSilenceThreshold:
          type: number
          description: The duration of the end utterance silence threshold in milliseconds.
        disablePartialTranscripts:
          type: boolean
          description: >-
            Disable partial transcripts.

            Set to `true` to not receive partial transcripts. Defaults to
            `false`.
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackTranscriberPlan'
      required:
        - provider
    AzureSpeechTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - azure
        language:
          type: string
          description: >-
            This is the language that will be set for the transcription. The
            list of languages Azure supports can be found here:
            https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt
          enum:
            - af-ZA
            - am-ET
            - ar-AE
            - ar-BH
            - ar-DZ
            - ar-EG
            - ar-IL
            - ar-IQ
            - ar-JO
            - ar-KW
            - ar-LB
            - ar-LY
            - ar-MA
            - ar-OM
            - ar-PS
            - ar-QA
            - ar-SA
            - ar-SY
            - ar-TN
            - ar-YE
            - az-AZ
            - bg-BG
            - bn-IN
            - bs-BA
            - ca-ES
            - cs-CZ
            - cy-GB
            - da-DK
            - de-AT
            - de-CH
            - de-DE
            - el-GR
            - en-AU
            - en-CA
            - en-GB
            - en-GH
            - en-HK
            - en-IE
            - en-IN
            - en-KE
            - en-NG
            - en-NZ
            - en-PH
            - en-SG
            - en-TZ
            - en-US
            - en-ZA
            - es-AR
            - es-BO
            - es-CL
            - es-CO
            - es-CR
            - es-CU
            - es-DO
            - es-EC
            - es-ES
            - es-GQ
            - es-GT
            - es-HN
            - es-MX
            - es-NI
            - es-PA
            - es-PE
            - es-PR
            - es-PY
            - es-SV
            - es-US
            - es-UY
            - es-VE
            - et-EE
            - eu-ES
            - fa-IR
            - fi-FI
            - fil-PH
            - fr-BE
            - fr-CA
            - fr-CH
            - fr-FR
            - ga-IE
            - gl-ES
            - gu-IN
            - he-IL
            - hi-IN
            - hr-HR
            - hu-HU
            - hy-AM
            - id-ID
            - is-IS
            - it-CH
            - it-IT
            - ja-JP
            - jv-ID
            - ka-GE
            - kk-KZ
            - km-KH
            - kn-IN
            - ko-KR
            - lo-LA
            - lt-LT
            - lv-LV
            - mk-MK
            - ml-IN
            - mn-MN
            - mr-IN
            - ms-MY
            - mt-MT
            - my-MM
            - nb-NO
            - ne-NP
            - nl-BE
            - nl-NL
            - pa-IN
            - pl-PL
            - ps-AF
            - pt-BR
            - pt-PT
            - ro-RO
            - ru-RU
            - si-LK
            - sk-SK
            - sl-SI
            - so-SO
            - sq-AL
            - sr-RS
            - sv-SE
            - sw-KE
            - sw-TZ
            - ta-IN
            - te-IN
            - th-TH
            - tr-TR
            - uk-UA
            - ur-IN
            - uz-UZ
            - vi-VN
            - wuu-CN
            - yue-CN
            - zh-CN
            - zh-CN-shandong
            - zh-CN-sichuan
            - zh-HK
            - zh-TW
            - zu-ZA
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackTranscriberPlan'
      required:
        - provider
    CustomTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: >-
            This is the transcription provider that will be used. Use
            `custom-transcriber` for providers that are not natively supported.
          enum:
            - custom-transcriber
        server:
          description: >-
            This is where the transcription request will be sent.


            Usage:

            1. cozmox will initiate a websocket connection with `server.url`.


            2. cozmox will send an initial text frame with the sample rate.
            Format:

            ```
                {
                  "type": "start",
                  "encoding": "linear16", // 16-bit raw PCM format
                  "container": "raw",
                  "sampleRate": {{sampleRate}},
                  "channels": 2 // customer is channel 0, assistant is channel 1
                }
            ```


            3. cozmox will send the audio data in 16-bit raw PCM format as
            binary frames.


            4. You can read the messages something like this:

            ```

            ws.on('message', (data, isBinary) => {
              if (isBinary) {
                pcmBuffer = Buffer.concat([pcmBuffer, data]);
                console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`);
              } else {
                console.log('Received message:', JSON.parse(data.toString()));
              }
            });

            ```


            5. You will respond with transcriptions as you have them. Format:

            ```
             {
                "type": "transcriber-response",
                "transcription": "Hello, world!",
                "channel": "customer" | "assistant"
             }
            ```
          allOf:
            - $ref: '#/components/schemas/Server'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackTranscriberPlan'
      required:
        - provider
        - server
    DeepgramTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - deepgram
        model:
          description: >-
            This is the Deepgram model that will be used. A list of models can
            be found here:
            https://developers.deepgram.com/docs/models-languages-overview
          oneOf:
            - type: string
              enum:
                - nova-3
                - nova-3-general
                - nova-3-medical
                - nova-2
                - nova-2-general
                - nova-2-meeting
                - nova-2-phonecall
                - nova-2-finance
                - nova-2-conversationalai
                - nova-2-voicemail
                - nova-2-video
                - nova-2-medical
                - nova-2-drivethru
                - nova-2-automotive
                - nova
                - nova-general
                - nova-phonecall
                - nova-medical
                - enhanced
                - enhanced-general
                - enhanced-meeting
                - enhanced-phonecall
                - enhanced-finance
                - base
                - base-general
                - base-meeting
                - base-phonecall
                - base-finance
                - base-conversationalai
                - base-voicemail
                - base-video
                - whisper
            - type: string
        language:
          type: string
          description: >-
            This is the language that will be set for the transcription. The
            list of languages Deepgram supports can be found here:
            https://developers.deepgram.com/docs/models-languages-overview
          enum:
            - ar
            - az
            - ba
            - bg
            - br
            - ca
            - cs
            - da
            - da-DK
            - de
            - de-CH
            - el
            - en
            - en-AU
            - en-GB
            - en-IN
            - en-NZ
            - en-US
            - es
            - es-419
            - es-LATAM
            - et
            - eu
            - fi
            - fr
            - fr-CA
            - ha
            - haw
            - he
            - hi
            - hi-Latn
            - hu
            - id
            - is
            - it
            - ja
            - jw
            - kn
            - ko
            - ko-KR
            - ln
            - lt
            - lv
            - mk
            - ms
            - multi
            - nl
            - nl-BE
            - 'no'
            - pl
            - pt
            - pt-BR
            - ro
            - ru
            - sk
            - sl
            - sn
            - so
            - sr
            - su
            - sv
            - sv-SE
            - ta
            - taq
            - th
            - th-TH
            - tr
            - tt
            - uk
            - ur
            - vi
            - yo
            - zh
            - zh-CN
            - zh-HK
            - zh-Hans
            - zh-Hant
            - zh-TW
        smartFormat:
          type: boolean
          description: >-
            This will be use smart format option provided by Deepgram. It's
            default disabled because it can sometimes format numbers as times
            but it's getting better.
          example: false
        mipOptOut:
          type: boolean
          description: >-
            If set to true, this will add mip_opt_out=true as a query parameter
            of all API requests. See
            https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out


            This will only be used if you are using your own Deepgram API key.


            @default false
          example: false
          default: false
        numerals:
          type: boolean
          description: >-
            If set to true, this will cause deepgram to convert spoken numbers
            to literal numerals. For example, "my phone number is
            nine-seven-two..." would become "my phone number is 972..."


            @default false
          example: false
        confidenceThreshold:
          type: number
          description: |-
            Transcripts below this confidence threshold will be discarded.

            @default 0.4
          minimum: 0
          maximum: 1
          example: 0.4
        keywords:
          description: >-
            These keywords are passed to the transcription model to help it pick
            up use-case specific words. Anything that may not be a common word,
            like your company name, should be added here.
          type: array
          items:
            type: string
            pattern: /^\p{L}[\p{L}\d]*(?::[+-]?\d+)?$/u
        keyterm:
          description: >-
            Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for
            important keyterms or phrases up to 90%.
          type: array
          items:
            type: string
        endpointing:
          type: number
          description: >-
            This is the timeout after which Deepgram will send transcription on
            user silence. You can read in-depth documentation here:
            https://developers.deepgram.com/docs/endpointing.


            Here are the most important bits:

            - Defaults to 10. This is recommended for most use cases to optimize
            for latency.

            - 10 can cause some missing transcriptions since because of the
            shorter context. This mostly happens for one-word utterances. For
            those uses cases, it's recommended to try 300. It will add a bit of
            latency but the quality and reliability of the experience will be
            better.

            - If neither 10 nor 300 work, contact support@cozmox.ai and we'll
            find another solution.


            @default 10
          minimum: 10
          maximum: 500
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackTranscriberPlan'
      required:
        - provider
    ElevenLabsTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - 11labs
        model:
          type: string
          description: This is the model that will be used for the transcription.
          enum:
            - scribe_v1
        language:
          type: string
          enum:
            - aa
            - ab
            - ae
            - af
            - ak
            - am
            - an
            - ar
            - as
            - av
            - ay
            - az
            - ba
            - be
            - bg
            - bh
            - bi
            - bm
            - bn
            - bo
            - br
            - bs
            - ca
            - ce
            - ch
            - co
            - cr
            - cs
            - cu
            - cv
            - cy
            - da
            - de
            - dv
            - dz
            - ee
            - el
            - en
            - eo
            - es
            - et
            - eu
            - fa
            - ff
            - fi
            - fj
            - fo
            - fr
            - fy
            - ga
            - gd
            - gl
            - gn
            - gu
            - gv
            - ha
            - he
            - hi
            - ho
            - hr
            - ht
            - hu
            - hy
            - hz
            - ia
            - id
            - ie
            - ig
            - ii
            - ik
            - io
            - is
            - it
            - iu
            - ja
            - jv
            - ka
            - kg
            - ki
            - kj
            - kk
            - kl
            - km
            - kn
            - ko
            - kr
            - ks
            - ku
            - kv
            - kw
            - ky
            - la
            - lb
            - lg
            - li
            - ln
            - lo
            - lt
            - lu
            - lv
            - mg
            - mh
            - mi
            - mk
            - ml
            - mn
            - mr
            - ms
            - mt
            - my
            - na
            - nb
            - nd
            - ne
            - ng
            - nl
            - nn
            - 'no'
            - nr
            - nv
            - ny
            - oc
            - oj
            - om
            - or
            - os
            - pa
            - pi
            - pl
            - ps
            - pt
            - qu
            - rm
            - rn
            - ro
            - ru
            - rw
            - sa
            - sc
            - sd
            - se
            - sg
            - si
            - sk
            - sl
            - sm
            - sn
            - so
            - sq
            - sr
            - ss
            - st
            - su
            - sv
            - sw
            - ta
            - te
            - tg
            - th
            - ti
            - tk
            - tl
            - tn
            - to
            - tr
            - ts
            - tt
            - tw
            - ty
            - ug
            - uk
            - ur
            - uz
            - ve
            - vi
            - vo
            - wa
            - wo
            - xh
            - yi
            - yue
            - yo
            - za
            - zh
            - zu
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackTranscriberPlan'
      required:
        - provider
    GladiaTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - gladia
        model:
          description: This is the Gladia model that will be used. Default is 'fast'
          oneOf:
            - enum:
                - fast
                - accurate
                - solaria-1
        languageBehaviour:
          description: >-
            Defines how the transcription model detects the audio language.
            Default value is 'automatic single language'.
          oneOf:
            - type: string
              enum:
                - manual
                - automatic single language
                - automatic multiple languages
        language:
          type: string
          description: >-
            Defines the language to use for the transcription. Required when
            languageBehaviour is 'manual'.
          enum:
            - af
            - sq
            - am
            - ar
            - hy
            - as
            - az
            - ba
            - eu
            - be
            - bn
            - bs
            - br
            - bg
            - ca
            - zh
            - hr
            - cs
            - da
            - nl
            - en
            - et
            - fo
            - fi
            - fr
            - gl
            - ka
            - de
            - el
            - gu
            - ht
            - ha
            - haw
            - he
            - hi
            - hu
            - is
            - id
            - it
            - ja
            - jv
            - kn
            - kk
            - km
            - ko
            - lo
            - la
            - lv
            - ln
            - lt
            - lb
            - mk
            - mg
            - ms
            - ml
            - mt
            - mi
            - mr
            - mn
            - my
            - ne
            - 'no'
            - nn
            - oc
            - ps
            - fa
            - pl
            - pt
            - pa
            - ro
            - ru
            - sa
            - sr
            - sn
            - sd
            - si
            - sk
            - sl
            - so
            - es
            - su
            - sw
            - sv
            - tl
            - tg
            - ta
            - tt
            - te
            - th
            - bo
            - tr
            - tk
            - uk
            - ur
            - uz
            - vi
            - cy
            - yi
            - yo
        languages:
          type: string
          description: >-
            Defines the languages to use for the transcription. Required when
            languageBehaviour is 'manual'.
          enum:
            - af
            - sq
            - am
            - ar
            - hy
            - as
            - az
            - ba
            - eu
            - be
            - bn
            - bs
            - br
            - bg
            - ca
            - zh
            - hr
            - cs
            - da
            - nl
            - en
            - et
            - fo
            - fi
            - fr
            - gl
            - ka
            - de
            - el
            - gu
            - ht
            - ha
            - haw
            - he
            - hi
            - hu
            - is
            - id
            - it
            - ja
            - jv
            - kn
            - kk
            - km
            - ko
            - lo
            - la
            - lv
            - ln
            - lt
            - lb
            - mk
            - mg
            - ms
            - ml
            - mt
            - mi
            - mr
            - mn
            - my
            - ne
            - 'no'
            - nn
            - oc
            - ps
            - fa
            - pl
            - pt
            - pa
            - ro
            - ru
            - sa
            - sr
            - sn
            - sd
            - si
            - sk
            - sl
            - so
            - es
            - su
            - sw
            - sv
            - tl
            - tg
            - ta
            - tt
            - te
            - th
            - bo
            - tr
            - tk
            - uk
            - ur
            - uz
            - vi
            - cy
            - yi
            - yo
        transcriptionHint:
          type: string
          description: >-
            Provides a custom vocabulary to the model to improve accuracy of
            transcribing context specific words, technical terms, names, etc. If
            empty, this argument is ignored.

            ⚠️ Warning ⚠️: Please be aware that the transcription_hint field has
            a character limit of 600. If you provide a transcription_hint longer
            than 600 characters, it will be automatically truncated to meet this
            limit.
          maxLength: 600
          example: custom vocabulary
        prosody:
          type: boolean
          description: >-
            If prosody is true, you will get a transcription that can contain
            prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)…
            Default value is false.
          example: false
        audioEnhancer:
          type: boolean
          description: >-
            If true, audio will be pre-processed to improve accuracy but latency
            will increase. Default value is false.
          example: false
        confidenceThreshold:
          type: number
          description: |-
            Transcripts below this confidence threshold will be discarded.

            @default 0.4
          minimum: 0
          maximum: 1
          example: 0.4
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackTranscriberPlan'
      required:
        - provider
    GoogleTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - google
        model:
          type: string
          description: This is the model that will be used for the transcription.
          enum:
            - gemini-2.5-pro
            - gemini-2.5-flash
            - gemini-2.5-flash-lite
            - gemini-2.5-pro-preview-05-06
            - gemini-2.5-flash-preview-05-20
            - gemini-2.5-flash-preview-04-17
            - gemini-2.0-flash-thinking-exp
            - gemini-2.0-pro-exp-02-05
            - gemini-2.0-flash
            - gemini-2.0-flash-lite
            - gemini-2.0-flash-lite-preview-02-05
            - gemini-2.0-flash-exp
            - gemini-2.0-flash-realtime-exp
            - gemini-1.5-flash
            - gemini-1.5-flash-002
            - gemini-1.5-pro
            - gemini-1.5-pro-002
            - gemini-1.0-pro
        language:
          type: string
          description: This is the language that will be set for the transcription.
          enum:
            - Multilingual
            - Arabic
            - Bengali
            - Bulgarian
            - Chinese
            - Croatian
            - Czech
            - Danish
            - Dutch
            - English
            - Estonian
            - Finnish
            - French
            - German
            - Greek
            - Hebrew
            - Hindi
            - Hungarian
            - Indonesian
            - Italian
            - Japanese
            - Korean
            - Latvian
            - Lithuanian
            - Norwegian
            - Polish
            - Portuguese
            - Romanian
            - Russian
            - Serbian
            - Slovak
            - Slovenian
            - Spanish
            - Swahili
            - Swedish
            - Thai
            - Turkish
            - Ukrainian
            - Vietnamese
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackTranscriberPlan'
      required:
        - provider
    SpeechmaticsTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - speechmatics
        model:
          type: string
          description: This is the model that will be used for the transcription.
          enum:
            - default
        language:
          type: string
          enum:
            - auto
            - ar
            - ba
            - eu
            - be
            - bn
            - bg
            - yue
            - ca
            - hr
            - cs
            - da
            - nl
            - en
            - eo
            - et
            - fi
            - fr
            - gl
            - de
            - el
            - he
            - hi
            - hu
            - id
            - ia
            - ga
            - it
            - ja
            - ko
            - lv
            - lt
            - ms
            - mt
            - cmn
            - mr
            - mn
            - 'no'
            - fa
            - pl
            - pt
            - ro
            - ru
            - sk
            - sl
            - es
            - sw
            - sv
            - ta
            - th
            - tr
            - uk
            - ur
            - ug
            - vi
            - cy
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackTranscriberPlan'
      required:
        - provider
    TalkscriberTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - talkscriber
        model:
          type: string
          description: This is the model that will be used for the transcription.
          enum:
            - whisper
        language:
          type: string
          description: >-
            This is the language that will be set for the transcription. The
            list of languages Whisper supports can be found here:
            https://github.com/openai/whisper/blob/main/whisper/tokenizer.py
          enum:
            - en
            - zh
            - de
            - es
            - ru
            - ko
            - fr
            - ja
            - pt
            - tr
            - pl
            - ca
            - nl
            - ar
            - sv
            - it
            - id
            - hi
            - fi
            - vi
            - he
            - uk
            - el
            - ms
            - cs
            - ro
            - da
            - hu
            - ta
            - 'no'
            - th
            - ur
            - hr
            - bg
            - lt
            - la
            - mi
            - ml
            - cy
            - sk
            - te
            - fa
            - lv
            - bn
            - sr
            - az
            - sl
            - kn
            - et
            - mk
            - br
            - eu
            - is
            - hy
            - ne
            - mn
            - bs
            - kk
            - sq
            - sw
            - gl
            - mr
            - pa
            - si
            - km
            - sn
            - yo
            - so
            - af
            - oc
            - ka
            - be
            - tg
            - sd
            - gu
            - am
            - yi
            - lo
            - uz
            - fo
            - ht
            - ps
            - tk
            - nn
            - mt
            - sa
            - lb
            - my
            - bo
            - tl
            - mg
            - as
            - tt
            - haw
            - ln
            - ha
            - ba
            - jw
            - su
            - yue
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackTranscriberPlan'
      required:
        - provider
    OpenAITranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - openai
        model:
          type: string
          description: This is the model that will be used for the transcription.
          enum:
            - gpt-4o-transcribe
            - gpt-4o-mini-transcribe
        language:
          type: string
          description: This is the language that will be set for the transcription.
          enum:
            - af
            - ar
            - hy
            - az
            - be
            - bs
            - bg
            - ca
            - zh
            - hr
            - cs
            - da
            - nl
            - en
            - et
            - fi
            - fr
            - gl
            - de
            - el
            - he
            - hi
            - hu
            - is
            - id
            - it
            - ja
            - kn
            - kk
            - ko
            - lv
            - lt
            - mk
            - ms
            - mr
            - mi
            - ne
            - 'no'
            - fa
            - pl
            - pt
            - ro
            - ru
            - sr
            - sk
            - sl
            - es
            - sw
            - sv
            - tl
            - ta
            - th
            - tr
            - uk
            - ur
            - vi
            - cy
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackTranscriberPlan'
      required:
        - provider
        - model
    CartesiaTranscriber:
      type: object
      properties:
        provider:
          type: string
          enum:
            - cartesia
        model:
          type: string
          enum:
            - ink-whisper
        language:
          type: string
          enum:
            - aa
            - ab
            - ae
            - af
            - ak
            - am
            - an
            - ar
            - as
            - av
            - ay
            - az
            - ba
            - be
            - bg
            - bh
            - bi
            - bm
            - bn
            - bo
            - br
            - bs
            - ca
            - ce
            - ch
            - co
            - cr
            - cs
            - cu
            - cv
            - cy
            - da
            - de
            - dv
            - dz
            - ee
            - el
            - en
            - eo
            - es
            - et
            - eu
            - fa
            - ff
            - fi
            - fj
            - fo
            - fr
            - fy
            - ga
            - gd
            - gl
            - gn
            - gu
            - gv
            - ha
            - he
            - hi
            - ho
            - hr
            - ht
            - hu
            - hy
            - hz
            - ia
            - id
            - ie
            - ig
            - ii
            - ik
            - io
            - is
            - it
            - iu
            - ja
            - jv
            - ka
            - kg
            - ki
            - kj
            - kk
            - kl
            - km
            - kn
            - ko
            - kr
            - ks
            - ku
            - kv
            - kw
            - ky
            - la
            - lb
            - lg
            - li
            - ln
            - lo
            - lt
            - lu
            - lv
            - mg
            - mh
            - mi
            - mk
            - ml
            - mn
            - mr
            - ms
            - mt
            - my
            - na
            - nb
            - nd
            - ne
            - ng
            - nl
            - nn
            - 'no'
            - nr
            - nv
            - ny
            - oc
            - oj
            - om
            - or
            - os
            - pa
            - pi
            - pl
            - ps
            - pt
            - qu
            - rm
            - rn
            - ro
            - ru
            - rw
            - sa
            - sc
            - sd
            - se
            - sg
            - si
            - sk
            - sl
            - sm
            - sn
            - so
            - sq
            - sr
            - ss
            - st
            - su
            - sv
            - sw
            - ta
            - te
            - tg
            - th
            - ti
            - tk
            - tl
            - tn
            - to
            - tr
            - ts
            - tt
            - tw
            - ty
            - ug
            - uk
            - ur
            - uz
            - ve
            - vi
            - vo
            - wa
            - wo
            - xh
            - yi
            - yue
            - yo
            - za
            - zh
            - zu
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackTranscriberPlan'
      required:
        - provider
    AnthropicModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        model:
          type: string
          description: The specific Anthropic/Claude model that will be used.
          enum:
            - claude-3-opus-20240229
            - claude-3-sonnet-20240229
            - claude-3-haiku-20240307
            - claude-3-5-sonnet-20240620
            - claude-3-5-sonnet-20241022
            - claude-3-5-haiku-20241022
            - claude-3-7-sonnet-20250219
            - claude-opus-4-20250514
            - claude-sonnet-4-20250514
        provider:
          type: string
          description: The provider identifier for Anthropic.
          enum:
            - anthropic
        thinking:
          description: |-
            Optional configuration for Anthropic's thinking feature.
            Only applicable for claude-3-7-sonnet-20250219 model.
            If provided, maxTokens must be greater than thinking.budgetTokens.
          allOf:
            - $ref: '#/components/schemas/AnthropicThinkingConfig'
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - model
        - provider
    AnyscaleModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        provider:
          type: string
          enum:
            - anyscale
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - provider
        - model
    CerebrasModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
          enum:
            - llama3.1-8b
            - llama-3.3-70b
        provider:
          type: string
          enum:
            - cerebras
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - model
        - provider
    CustomLLMModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        provider:
          type: string
          description: >-
            This is the provider that will be used for the model. Any service,
            including your own server, that is compatible with the OpenAI API
            can be used.
          enum:
            - custom-llm
        metadataSendMode:
          type: string
          description: >-
            This determines whether metadata is sent in requests to the custom
            provider.


            - `off` will not send any metadata. payload will look like `{
            messages }`

            - `variable` will send `assistant.metadata` as a variable on the
            payload. payload will look like `{ messages, metadata }`

            - `destructured` will send `assistant.metadata` fields directly on
            the payload. payload will look like `{ messages, ...metadata }`


            Further, `variable` and `destructured` will send `call`,
            `phoneNumber`, and `customer` objects in the payload.


            Default is `variable`.
          enum:
            - 'off'
            - variable
            - destructured
        url:
          type: string
          description: >-
            These is the URL we'll use for the OpenAI client's `baseURL`. Ex.
            https://openrouter.ai/api/v1
        timeoutSeconds:
          type: number
          description: >-
            This sets the timeout for the connection to the custom provider
            without needing to stream any tokens back. Default is 20 seconds.
          minimum: 20
          maximum: 600
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - provider
        - url
        - model
    DeepInfraModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        provider:
          type: string
          enum:
            - deepinfra
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - provider
        - model
    DeepSeekModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
          enum:
            - deepseek-chat
            - deepseek-reasoner
        provider:
          type: string
          enum:
            - deep-seek
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - model
        - provider
    GoogleModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        model:
          type: string
          description: This is the Google model that will be used.
          enum:
            - gemini-2.5-pro
            - gemini-2.5-flash
            - gemini-2.5-flash-lite
            - gemini-2.5-pro-preview-05-06
            - gemini-2.5-flash-preview-05-20
            - gemini-2.5-flash-preview-04-17
            - gemini-2.0-flash-thinking-exp
            - gemini-2.0-pro-exp-02-05
            - gemini-2.0-flash
            - gemini-2.0-flash-lite
            - gemini-2.0-flash-lite-preview-02-05
            - gemini-2.0-flash-exp
            - gemini-2.0-flash-realtime-exp
            - gemini-1.5-flash
            - gemini-1.5-flash-002
            - gemini-1.5-pro
            - gemini-1.5-pro-002
            - gemini-1.0-pro
        provider:
          type: string
          enum:
            - google
        realtimeConfig:
          description: >-
            This is the session configuration for the Gemini Flash 2.0
            Multimodal Live API.

            Only applicable if the model `gemini-2.0-flash-realtime-exp` is
            selected.
          allOf:
            - $ref: '#/components/schemas/GoogleRealtimeConfig'
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - model
        - provider
    GroqModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
          enum:
            - deepseek-r1-distill-llama-70b
            - llama-3.3-70b-versatile
            - llama-3.1-405b-reasoning
            - llama-3.1-8b-instant
            - llama3-8b-8192
            - llama3-70b-8192
            - gemma2-9b-it
            - meta-llama/llama-4-maverick-17b-128e-instruct
            - meta-llama/llama-4-scout-17b-16e-instruct
            - mistral-saba-24b
            - compound-beta
            - compound-beta-mini
        provider:
          type: string
          enum:
            - groq
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - model
        - provider
    InflectionAIModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
          enum:
            - inflection_3_pi
        provider:
          type: string
          enum:
            - inflection-ai
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - model
        - provider
    OpenAIModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        provider:
          type: string
          description: This is the provider that will be used for the model.
          enum:
            - openai
        model:
          type: string
          description: >-
            This is the OpenAI model that will be used.


            When using cozmox OpenAI or your own Azure Credentials, you have the
            option to specify the region for the selected model. This shouldn't
            be specified unless you have a specific reason to do so. cozmox will
            automatically find the fastest region that make sense.

            This is helpful when you are required to comply with Data Residency
            rules. Learn more about Azure regions here
            https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/.


            @default undefined
          enum:
            - gpt-4.1-2025-04-14
            - gpt-4.1-mini-2025-04-14
            - gpt-4.1-nano-2025-04-14
            - gpt-4.1
            - gpt-4.1-mini
            - gpt-4.1-nano
            - gpt-4.5-preview
            - chatgpt-4o-latest
            - o3
            - o3-mini
            - o4-mini
            - o1-preview
            - o1-preview-2024-09-12
            - o1-mini
            - o1-mini-2024-09-12
            - gpt-4o-realtime-preview-2024-10-01
            - gpt-4o-realtime-preview-2024-12-17
            - gpt-4o-mini-realtime-preview-2024-12-17
            - gpt-4o-mini-2024-07-18
            - gpt-4o-mini
            - gpt-4o
            - gpt-4o-2024-05-13
            - gpt-4o-2024-08-06
            - gpt-4o-2024-11-20
            - gpt-4-turbo
            - gpt-4-turbo-2024-04-09
            - gpt-4-turbo-preview
            - gpt-4-0125-preview
            - gpt-4-1106-preview
            - gpt-4
            - gpt-4-0613
            - gpt-3.5-turbo
            - gpt-3.5-turbo-0125
            - gpt-3.5-turbo-1106
            - gpt-3.5-turbo-16k
            - gpt-3.5-turbo-0613
            - gpt-4.1-2025-04-14:westus
            - gpt-4.1-2025-04-14:eastus2
            - gpt-4.1-2025-04-14:eastus
            - gpt-4.1-2025-04-14:westus3
            - gpt-4.1-2025-04-14:northcentralus
            - gpt-4.1-2025-04-14:southcentralus
            - gpt-4.1-mini-2025-04-14:westus
            - gpt-4.1-mini-2025-04-14:eastus2
            - gpt-4.1-mini-2025-04-14:eastus
            - gpt-4.1-mini-2025-04-14:westus3
            - gpt-4.1-mini-2025-04-14:northcentralus
            - gpt-4.1-mini-2025-04-14:southcentralus
            - gpt-4.1-nano-2025-04-14:westus
            - gpt-4.1-nano-2025-04-14:eastus2
            - gpt-4.1-nano-2025-04-14:westus3
            - gpt-4.1-nano-2025-04-14:northcentralus
            - gpt-4.1-nano-2025-04-14:southcentralus
            - gpt-4o-2024-11-20:swedencentral
            - gpt-4o-2024-11-20:westus
            - gpt-4o-2024-11-20:eastus2
            - gpt-4o-2024-11-20:eastus
            - gpt-4o-2024-11-20:westus3
            - gpt-4o-2024-11-20:southcentralus
            - gpt-4o-2024-08-06:westus
            - gpt-4o-2024-08-06:westus3
            - gpt-4o-2024-08-06:eastus
            - gpt-4o-2024-08-06:eastus2
            - gpt-4o-2024-08-06:northcentralus
            - gpt-4o-2024-08-06:southcentralus
            - gpt-4o-mini-2024-07-18:westus
            - gpt-4o-mini-2024-07-18:westus3
            - gpt-4o-mini-2024-07-18:eastus
            - gpt-4o-mini-2024-07-18:eastus2
            - gpt-4o-mini-2024-07-18:northcentralus
            - gpt-4o-mini-2024-07-18:southcentralus
            - gpt-4o-2024-05-13:eastus2
            - gpt-4o-2024-05-13:eastus
            - gpt-4o-2024-05-13:northcentralus
            - gpt-4o-2024-05-13:southcentralus
            - gpt-4o-2024-05-13:westus3
            - gpt-4o-2024-05-13:westus
            - gpt-4-turbo-2024-04-09:eastus2
            - gpt-4-0125-preview:eastus
            - gpt-4-0125-preview:northcentralus
            - gpt-4-0125-preview:southcentralus
            - gpt-4-1106-preview:australia
            - gpt-4-1106-preview:canadaeast
            - gpt-4-1106-preview:france
            - gpt-4-1106-preview:india
            - gpt-4-1106-preview:norway
            - gpt-4-1106-preview:swedencentral
            - gpt-4-1106-preview:uk
            - gpt-4-1106-preview:westus
            - gpt-4-1106-preview:westus3
            - gpt-4-0613:canadaeast
            - gpt-3.5-turbo-0125:canadaeast
            - gpt-3.5-turbo-0125:northcentralus
            - gpt-3.5-turbo-0125:southcentralus
            - gpt-3.5-turbo-1106:canadaeast
            - gpt-3.5-turbo-1106:westus
        fallbackModels:
          type: array
          description: >-
            These are the fallback models that will be used if the primary model
            fails. This shouldn't be specified unless you have a specific reason
            to do so. cozmox will automatically find the fastest fallbacks that
            make sense.
          enum:
            - gpt-4.1-2025-04-14
            - gpt-4.1-mini-2025-04-14
            - gpt-4.1-nano-2025-04-14
            - gpt-4.1
            - gpt-4.1-mini
            - gpt-4.1-nano
            - gpt-4.5-preview
            - chatgpt-4o-latest
            - o3
            - o3-mini
            - o4-mini
            - o1-preview
            - o1-preview-2024-09-12
            - o1-mini
            - o1-mini-2024-09-12
            - gpt-4o-realtime-preview-2024-10-01
            - gpt-4o-realtime-preview-2024-12-17
            - gpt-4o-mini-realtime-preview-2024-12-17
            - gpt-4o-mini-2024-07-18
            - gpt-4o-mini
            - gpt-4o
            - gpt-4o-2024-05-13
            - gpt-4o-2024-08-06
            - gpt-4o-2024-11-20
            - gpt-4-turbo
            - gpt-4-turbo-2024-04-09
            - gpt-4-turbo-preview
            - gpt-4-0125-preview
            - gpt-4-1106-preview
            - gpt-4
            - gpt-4-0613
            - gpt-3.5-turbo
            - gpt-3.5-turbo-0125
            - gpt-3.5-turbo-1106
            - gpt-3.5-turbo-16k
            - gpt-3.5-turbo-0613
            - gpt-4.1-2025-04-14:westus
            - gpt-4.1-2025-04-14:eastus2
            - gpt-4.1-2025-04-14:eastus
            - gpt-4.1-2025-04-14:westus3
            - gpt-4.1-2025-04-14:northcentralus
            - gpt-4.1-2025-04-14:southcentralus
            - gpt-4.1-mini-2025-04-14:westus
            - gpt-4.1-mini-2025-04-14:eastus2
            - gpt-4.1-mini-2025-04-14:eastus
            - gpt-4.1-mini-2025-04-14:westus3
            - gpt-4.1-mini-2025-04-14:northcentralus
            - gpt-4.1-mini-2025-04-14:southcentralus
            - gpt-4.1-nano-2025-04-14:westus
            - gpt-4.1-nano-2025-04-14:eastus2
            - gpt-4.1-nano-2025-04-14:westus3
            - gpt-4.1-nano-2025-04-14:northcentralus
            - gpt-4.1-nano-2025-04-14:southcentralus
            - gpt-4o-2024-11-20:swedencentral
            - gpt-4o-2024-11-20:westus
            - gpt-4o-2024-11-20:eastus2
            - gpt-4o-2024-11-20:eastus
            - gpt-4o-2024-11-20:westus3
            - gpt-4o-2024-11-20:southcentralus
            - gpt-4o-2024-08-06:westus
            - gpt-4o-2024-08-06:westus3
            - gpt-4o-2024-08-06:eastus
            - gpt-4o-2024-08-06:eastus2
            - gpt-4o-2024-08-06:northcentralus
            - gpt-4o-2024-08-06:southcentralus
            - gpt-4o-mini-2024-07-18:westus
            - gpt-4o-mini-2024-07-18:westus3
            - gpt-4o-mini-2024-07-18:eastus
            - gpt-4o-mini-2024-07-18:eastus2
            - gpt-4o-mini-2024-07-18:northcentralus
            - gpt-4o-mini-2024-07-18:southcentralus
            - gpt-4o-2024-05-13:eastus2
            - gpt-4o-2024-05-13:eastus
            - gpt-4o-2024-05-13:northcentralus
            - gpt-4o-2024-05-13:southcentralus
            - gpt-4o-2024-05-13:westus3
            - gpt-4o-2024-05-13:westus
            - gpt-4-turbo-2024-04-09:eastus2
            - gpt-4-0125-preview:eastus
            - gpt-4-0125-preview:northcentralus
            - gpt-4-0125-preview:southcentralus
            - gpt-4-1106-preview:australia
            - gpt-4-1106-preview:canadaeast
            - gpt-4-1106-preview:france
            - gpt-4-1106-preview:india
            - gpt-4-1106-preview:norway
            - gpt-4-1106-preview:swedencentral
            - gpt-4-1106-preview:uk
            - gpt-4-1106-preview:westus
            - gpt-4-1106-preview:westus3
            - gpt-4-0613:canadaeast
            - gpt-3.5-turbo-0125:canadaeast
            - gpt-3.5-turbo-0125:northcentralus
            - gpt-3.5-turbo-0125:southcentralus
            - gpt-3.5-turbo-1106:canadaeast
            - gpt-3.5-turbo-1106:westus
          example:
            - gpt-4-0125-preview
            - gpt-4-0613
          items:
            type: string
            enum:
              - gpt-4.1-2025-04-14
              - gpt-4.1-mini-2025-04-14
              - gpt-4.1-nano-2025-04-14
              - gpt-4.1
              - gpt-4.1-mini
              - gpt-4.1-nano
              - gpt-4.5-preview
              - chatgpt-4o-latest
              - o3
              - o3-mini
              - o4-mini
              - o1-preview
              - o1-preview-2024-09-12
              - o1-mini
              - o1-mini-2024-09-12
              - gpt-4o-realtime-preview-2024-10-01
              - gpt-4o-realtime-preview-2024-12-17
              - gpt-4o-mini-realtime-preview-2024-12-17
              - gpt-4o-mini-2024-07-18
              - gpt-4o-mini
              - gpt-4o
              - gpt-4o-2024-05-13
              - gpt-4o-2024-08-06
              - gpt-4o-2024-11-20
              - gpt-4-turbo
              - gpt-4-turbo-2024-04-09
              - gpt-4-turbo-preview
              - gpt-4-0125-preview
              - gpt-4-1106-preview
              - gpt-4
              - gpt-4-0613
              - gpt-3.5-turbo
              - gpt-3.5-turbo-0125
              - gpt-3.5-turbo-1106
              - gpt-3.5-turbo-16k
              - gpt-3.5-turbo-0613
              - gpt-4.1-2025-04-14:westus
              - gpt-4.1-2025-04-14:eastus2
              - gpt-4.1-2025-04-14:eastus
              - gpt-4.1-2025-04-14:westus3
              - gpt-4.1-2025-04-14:northcentralus
              - gpt-4.1-2025-04-14:southcentralus
              - gpt-4.1-mini-2025-04-14:westus
              - gpt-4.1-mini-2025-04-14:eastus2
              - gpt-4.1-mini-2025-04-14:eastus
              - gpt-4.1-mini-2025-04-14:westus3
              - gpt-4.1-mini-2025-04-14:northcentralus
              - gpt-4.1-mini-2025-04-14:southcentralus
              - gpt-4.1-nano-2025-04-14:westus
              - gpt-4.1-nano-2025-04-14:eastus2
              - gpt-4.1-nano-2025-04-14:westus3
              - gpt-4.1-nano-2025-04-14:northcentralus
              - gpt-4.1-nano-2025-04-14:southcentralus
              - gpt-4o-2024-11-20:swedencentral
              - gpt-4o-2024-11-20:westus
              - gpt-4o-2024-11-20:eastus2
              - gpt-4o-2024-11-20:eastus
              - gpt-4o-2024-11-20:westus3
              - gpt-4o-2024-11-20:southcentralus
              - gpt-4o-2024-08-06:westus
              - gpt-4o-2024-08-06:westus3
              - gpt-4o-2024-08-06:eastus
              - gpt-4o-2024-08-06:eastus2
              - gpt-4o-2024-08-06:northcentralus
              - gpt-4o-2024-08-06:southcentralus
              - gpt-4o-mini-2024-07-18:westus
              - gpt-4o-mini-2024-07-18:westus3
              - gpt-4o-mini-2024-07-18:eastus
              - gpt-4o-mini-2024-07-18:eastus2
              - gpt-4o-mini-2024-07-18:northcentralus
              - gpt-4o-mini-2024-07-18:southcentralus
              - gpt-4o-2024-05-13:eastus2
              - gpt-4o-2024-05-13:eastus
              - gpt-4o-2024-05-13:northcentralus
              - gpt-4o-2024-05-13:southcentralus
              - gpt-4o-2024-05-13:westus3
              - gpt-4o-2024-05-13:westus
              - gpt-4-turbo-2024-04-09:eastus2
              - gpt-4-0125-preview:eastus
              - gpt-4-0125-preview:northcentralus
              - gpt-4-0125-preview:southcentralus
              - gpt-4-1106-preview:australia
              - gpt-4-1106-preview:canadaeast
              - gpt-4-1106-preview:france
              - gpt-4-1106-preview:india
              - gpt-4-1106-preview:norway
              - gpt-4-1106-preview:swedencentral
              - gpt-4-1106-preview:uk
              - gpt-4-1106-preview:westus
              - gpt-4-1106-preview:westus3
              - gpt-4-0613:canadaeast
              - gpt-3.5-turbo-0125:canadaeast
              - gpt-3.5-turbo-0125:northcentralus
              - gpt-3.5-turbo-0125:southcentralus
              - gpt-3.5-turbo-1106:canadaeast
              - gpt-3.5-turbo-1106:westus
        toolStrictCompatibilityMode:
          type: string
          description: >-
            Azure OpenAI doesn't support `maxLength` right now
            https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs?tabs=python-secure%2Cdotnet-entra-id&pivots=programming-language-csharp#unsupported-type-specific-keywords.
            Need to strip.


            - `strip-parameters-with-unsupported-validation` will strip
            parameters with unsupported validation.

            - `strip-unsupported-validation` will keep the parameters but strip
            unsupported validation.


            @default `strip-unsupported-validation`
          enum:
            - strip-parameters-with-unsupported-validation
            - strip-unsupported-validation
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - provider
        - model
    OpenRouterModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        provider:
          type: string
          enum:
            - openrouter
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - provider
        - model
    PerplexityAIModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        provider:
          type: string
          enum:
            - perplexity-ai
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - provider
        - model
    TogetherAIModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        provider:
          type: string
          enum:
            - together-ai
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - provider
        - model
    XaiModel:
      type: object
      properties:
        messages:
          description: This is the starting state for the conversation.
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
        tools:
          type: array
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
          items:
            oneOf:
              - $ref: '#/components/schemas/CreateApiRequestToolDTO'
                title: ApiRequestTool
              - $ref: '#/components/schemas/CreateBashToolDTO'
                title: BashTool
              - $ref: '#/components/schemas/CreateComputerToolDTO'
                title: ComputerTool
              - $ref: '#/components/schemas/CreateDtmfToolDTO'
                title: DtmfTool
              - $ref: '#/components/schemas/CreateEndCallToolDTO'
                title: EndCallTool
              - $ref: '#/components/schemas/CreateFunctionToolDTO'
                title: FunctionTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO
                title: GoHighLevelCalendarAvailabilityTool
              - $ref: >-
                  #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO
                title: GoHighLevelCalendarEventCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
                title: GoHighLevelContactCreateTool
              - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
                title: GoHighLevelContactGetTool
              - $ref: >-
                  #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO
                title: GoogleCalendarCheckAvailabilityTool
              - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
                title: GoogleCalendarCreateEventTool
              - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
                title: GoogleSheetsRowAppendTool
              - $ref: '#/components/schemas/CreateMcpToolDTO'
                title: McpTool
              - $ref: '#/components/schemas/CreateQueryToolDTO'
                title: QueryTool
              - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
                title: SlackSendMessageTool
              - $ref: '#/components/schemas/CreateSmsToolDTO'
                title: SmsTool
              - $ref: '#/components/schemas/CreateTextEditorToolDTO'
                title: TextEditorTool
              - $ref: '#/components/schemas/CreateTransferCallToolDTO'
                title: TransferCallTool
        toolIds:
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
          type: array
          items:
            type: string
        knowledgeBase:
          description: These are the options for the knowledge base.
          oneOf:
            - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
              title: Custom
        knowledgeBaseId:
          type: string
          description: This is the ID of the knowledge base the model will use.
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
          enum:
            - grok-beta
            - grok-2
            - grok-3
        provider:
          type: string
          enum:
            - xai
        temperature:
          type: number
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
          minimum: 50
          maximum: 10000
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
          minimum: 0
      required:
        - model
        - provider
    AzureVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - azure
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - andrew
                - brian
                - emma
              title: Preset Voice Options
            - type: string
              title: Azure Voice ID
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          minimum: 0.5
          maximum: 2
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
    CartesiaVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - cartesia
        voiceId:
          type: string
          description: The ID of the particular voice you want to use.
        model:
          type: string
          description: >-
            This is the model that will be used. This is optional and will
            default to the correct model for the voiceId.
          enum:
            - sonic-2
            - sonic-english
            - sonic-multilingual
            - sonic-preview
            - sonic
          example: sonic-english
        language:
          type: string
          description: >-
            This is the language that will be used. This is optional and will
            default to the correct language for the voiceId.
          enum:
            - en
            - de
            - es
            - fr
            - ja
            - pt
            - zh
            - hi
            - it
            - ko
            - nl
            - pl
            - ru
            - sv
            - tr
          example: en
        experimentalControls:
          description: Experimental controls for Cartesia voice generation
          allOf:
            - $ref: '#/components/schemas/CartesiaExperimentalControls'
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
    CustomVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: >-
            This is the voice provider that will be used. Use `custom-voice` for
            providers that are not natively supported.
          enum:
            - custom-voice
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        server:
          description: >-
            This is where the voice request will be sent.


            Request Example:


            POST https://{server.url}

            Content-Type: application/json


            {
              "message": {
                "type": "voice-request",
                "text": "Hello, world!",
                "sampleRate": 24000,
                ...other metadata about the call...
              }
            }


            Response Expected: 1-channel 16-bit raw PCM audio at the sample rate
            specified in the request. Here is how the response will be piped to
            the transport:

            ```

            response.on('data', (chunk: Buffer) => {
              outputStream.write(chunk);
            });

            ```
          allOf:
            - $ref: '#/components/schemas/Server'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - server
    DeepgramVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - deepgram
        voiceId:
          type: string
          description: This is the provider-specific ID that will be used.
          enum:
            - asteria
            - luna
            - stella
            - athena
            - hera
            - orion
            - arcas
            - perseus
            - angus
            - orpheus
            - helios
            - zeus
            - thalia
            - andromeda
            - helena
            - apollo
            - arcas
            - aries
            - amalthea
            - asteria
            - athena
            - atlas
            - aurora
            - callista
            - cora
            - cordelia
            - delia
            - draco
            - electra
            - harmonia
            - hera
            - hermes
            - hyperion
            - iris
            - janus
            - juno
            - jupiter
            - luna
            - mars
            - minerva
            - neptune
            - odysseus
            - ophelia
            - orion
            - orpheus
            - pandora
            - phoebe
            - pluto
            - saturn
            - selene
            - theia
            - vesta
            - zeus
          title: This is the Deepgram Voice ID
        model:
          type: string
          description: >-
            This is the model that will be used. Defaults to 'aura-2' when not
            specified.
          enum:
            - aura
            - aura-2
          example: aura-2
        mipOptOut:
          type: boolean
          description: >-
            If set to true, this will add mip_opt_out=true as a query parameter
            of all API requests. See
            https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out


            This will only be used if you are using your own Deepgram API key.


            @default false
          example: false
          default: false
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
    ElevenLabsVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - 11labs
        voiceId:
          description: >-
            This is the provider-specific ID that will be used. Ensure the Voice
            is present in your 11Labs Voice Library.
          oneOf:
            - type: string
              enum:
                - burt
                - marissa
                - andrea
                - sarah
                - phillip
                - steve
                - joseph
                - myra
                - paula
                - ryan
                - drew
                - paul
                - mrb
                - matilda
                - mark
              title: Preset Voice Options
            - type: string
              title: 11Labs Voice ID
        stability:
          type: number
          description: Defines the stability for voice settings.
          minimum: 0
          maximum: 1
          example: 0.5
        similarityBoost:
          type: number
          description: Defines the similarity boost for voice settings.
          minimum: 0
          maximum: 1
          example: 0.75
        style:
          type: number
          description: Defines the style for voice settings.
          minimum: 0
          maximum: 1
          example: 0
        useSpeakerBoost:
          type: boolean
          description: Defines the use speaker boost for voice settings.
          example: false
        speed:
          type: number
          description: Defines the speed for voice settings.
          minimum: 0.7
          maximum: 1.2
          example: 0.9
        optimizeStreamingLatency:
          type: number
          description: >-
            Defines the optimize streaming latency for voice settings. Defaults
            to 3.
          minimum: 0
          maximum: 4
          example: 3
        enableSsmlParsing:
          type: boolean
          description: >-
            This enables the use of
            https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation.
            Defaults to false to save latency.


            @default false
          example: false
        autoMode:
          type: boolean
          description: Defines the auto mode for voice settings. Defaults to false.
          example: false
        model:
          type: string
          description: >-
            This is the model that will be used. Defaults to 'eleven_turbo_v2'
            if not specified.
          enum:
            - eleven_multilingual_v2
            - eleven_turbo_v2
            - eleven_turbo_v2_5
            - eleven_flash_v2
            - eleven_flash_v2_5
            - eleven_monolingual_v1
          example: eleven_turbo_v2_5
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        language:
          type: string
          description: >-
            This is the language (ISO 639-1) that is enforced for the model.
            Currently only Turbo v2.5 supports language enforcement. For other
            models, an error will be returned if language code is provided.
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
    HumeVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - hume
        model:
          type: string
          description: This is the model that will be used.
          enum:
            - octave
          example: octave
        voiceId:
          type: string
          description: The ID of the particular voice you want to use.
        isCustomHumeVoice:
          type: boolean
          description: >-
            Indicates whether the chosen voice is a preset Hume AI voice or a
            custom voice.
          example: false
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        description:
          type: string
          description: >-
            Natural language instructions describing how the synthesized speech
            should sound, including but not limited to tone, intonation, pacing,
            and accent (e.g., 'a soft, gentle voice with a strong British
            accent').


            If a Voice is specified in the request, this description serves as
            acting instructions.

            If no Voice is specified, a new voice is generated based on this
            description.
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
    LMNTVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - lmnt
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - amy
                - ansel
                - autumn
                - ava
                - brandon
                - caleb
                - cassian
                - chloe
                - dalton
                - daniel
                - dustin
                - elowen
                - evander
                - huxley
                - james
                - juniper
                - kennedy
                - lauren
                - leah
                - lily
                - lucas
                - magnus
                - miles
                - morgan
                - natalie
                - nathan
                - noah
                - nyssa
                - oliver
                - paige
                - ryan
                - sadie
                - sophie
                - stella
                - terrence
                - tyler
                - vesper
                - violet
                - warrick
                - zain
                - zeke
                - zoe
              title: Preset Voice Options
            - type: string
              title: LMNT Voice ID
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          minimum: 0.25
          maximum: 2
          example: null
        language:
          description: Two letter ISO 639-1 language code. Use "auto" for auto-detection.
          enum:
            - aa
            - ab
            - ae
            - af
            - ak
            - am
            - an
            - ar
            - as
            - av
            - ay
            - az
            - ba
            - be
            - bg
            - bh
            - bi
            - bm
            - bn
            - bo
            - br
            - bs
            - ca
            - ce
            - ch
            - co
            - cr
            - cs
            - cu
            - cv
            - cy
            - da
            - de
            - dv
            - dz
            - ee
            - el
            - en
            - eo
            - es
            - et
            - eu
            - fa
            - ff
            - fi
            - fj
            - fo
            - fr
            - fy
            - ga
            - gd
            - gl
            - gn
            - gu
            - gv
            - ha
            - he
            - hi
            - ho
            - hr
            - ht
            - hu
            - hy
            - hz
            - ia
            - id
            - ie
            - ig
            - ii
            - ik
            - io
            - is
            - it
            - iu
            - ja
            - jv
            - ka
            - kg
            - ki
            - kj
            - kk
            - kl
            - km
            - kn
            - ko
            - kr
            - ks
            - ku
            - kv
            - kw
            - ky
            - la
            - lb
            - lg
            - li
            - ln
            - lo
            - lt
            - lu
            - lv
            - mg
            - mh
            - mi
            - mk
            - ml
            - mn
            - mr
            - ms
            - mt
            - my
            - na
            - nb
            - nd
            - ne
            - ng
            - nl
            - nn
            - 'no'
            - nr
            - nv
            - ny
            - oc
            - oj
            - om
            - or
            - os
            - pa
            - pi
            - pl
            - ps
            - pt
            - qu
            - rm
            - rn
            - ro
            - ru
            - rw
            - sa
            - sc
            - sd
            - se
            - sg
            - si
            - sk
            - sl
            - sm
            - sn
            - so
            - sq
            - sr
            - ss
            - st
            - su
            - sv
            - sw
            - ta
            - te
            - tg
            - th
            - ti
            - tk
            - tl
            - tn
            - to
            - tr
            - ts
            - tt
            - tw
            - ty
            - ug
            - uk
            - ur
            - uz
            - ve
            - vi
            - vo
            - wa
            - wo
            - xh
            - yi
            - yue
            - yo
            - za
            - zh
            - zu
            - auto
          example: en
          oneOf:
            - type: string
              enum:
                - aa
                - ab
                - ae
                - af
                - ak
                - am
                - an
                - ar
                - as
                - av
                - ay
                - az
                - ba
                - be
                - bg
                - bh
                - bi
                - bm
                - bn
                - bo
                - br
                - bs
                - ca
                - ce
                - ch
                - co
                - cr
                - cs
                - cu
                - cv
                - cy
                - da
                - de
                - dv
                - dz
                - ee
                - el
                - en
                - eo
                - es
                - et
                - eu
                - fa
                - ff
                - fi
                - fj
                - fo
                - fr
                - fy
                - ga
                - gd
                - gl
                - gn
                - gu
                - gv
                - ha
                - he
                - hi
                - ho
                - hr
                - ht
                - hu
                - hy
                - hz
                - ia
                - id
                - ie
                - ig
                - ii
                - ik
                - io
                - is
                - it
                - iu
                - ja
                - jv
                - ka
                - kg
                - ki
                - kj
                - kk
                - kl
                - km
                - kn
                - ko
                - kr
                - ks
                - ku
                - kv
                - kw
                - ky
                - la
                - lb
                - lg
                - li
                - ln
                - lo
                - lt
                - lu
                - lv
                - mg
                - mh
                - mi
                - mk
                - ml
                - mn
                - mr
                - ms
                - mt
                - my
                - na
                - nb
                - nd
                - ne
                - ng
                - nl
                - nn
                - 'no'
                - nr
                - nv
                - ny
                - oc
                - oj
                - om
                - or
                - os
                - pa
                - pi
                - pl
                - ps
                - pt
                - qu
                - rm
                - rn
                - ro
                - ru
                - rw
                - sa
                - sc
                - sd
                - se
                - sg
                - si
                - sk
                - sl
                - sm
                - sn
                - so
                - sq
                - sr
                - ss
                - st
                - su
                - sv
                - sw
                - ta
                - te
                - tg
                - th
                - ti
                - tk
                - tl
                - tn
                - to
                - tr
                - ts
                - tt
                - tw
                - ty
                - ug
                - uk
                - ur
                - uz
                - ve
                - vi
                - vo
                - wa
                - wo
                - xh
                - yi
                - yue
                - yo
                - za
                - zh
                - zu
              title: ISO 639-1 Language Code
            - type: string
              enum:
                - auto
              title: Auto-detect
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
    NeuphonicVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - neuphonic
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - test
              title: Preset Voice Options
            - type: string
              title: Neuphonic Voice ID
        model:
          type: string
          description: >-
            This is the model that will be used. Defaults to 'neu_fast' if not
            specified.
          enum:
            - neu_hq
            - neu_fast
          example: neu_fast
        language:
          type: object
          description: This is the language (ISO 639-1) that is enforced for the model.
          example: en
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          minimum: 0.25
          maximum: 2
          example: null
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
        - language
    OpenAIVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - openai
        voiceId:
          description: >-
            This is the provider-specific ID that will be used.

            Please note that ash, ballad, coral, sage, and verse may only be
            used with realtime models.
          oneOf:
            - type: string
              enum:
                - alloy
                - echo
                - fable
                - onyx
                - nova
                - shimmer
              title: Preset Voice Options
            - type: string
              title: OpenAI Voice ID
        model:
          type: string
          description: This is the model that will be used for text-to-speech.
          enum:
            - tts-1
            - tts-1-hd
            - gpt-4o-mini-tts
        instructions:
          type: string
          description: >-
            This is a prompt that allows you to control the voice of your
            generated audio.

            Does not work with 'tts-1' or 'tts-1-hd' models.
          maxLength: 10000
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          minimum: 0.25
          maximum: 4
          example: null
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
    PlayHTVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - playht
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - jennifer
                - melissa
                - will
                - chris
                - matt
                - jack
                - ruby
                - davis
                - donna
                - michael
              title: Preset Voice Options
            - type: string
              title: PlayHT Voice ID
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          minimum: 0.1
          maximum: 5
          example: null
        temperature:
          type: number
          description: >-
            A floating point number between 0, exclusive, and 2, inclusive. If
            equal to null or not provided, the model's default temperature will
            be used. The temperature parameter controls variance. Lower
            temperatures result in more predictable results, higher temperatures
            allow each run to vary more, so the voice may sound less like the
            baseline voice.
          minimum: 0.1
          maximum: 2
          example: null
        emotion:
          type: string
          description: An emotion to be applied to the speech.
          enum:
            - female_happy
            - female_sad
            - female_angry
            - female_fearful
            - female_disgust
            - female_surprised
            - male_happy
            - male_sad
            - male_angry
            - male_fearful
            - male_disgust
            - male_surprised
          example: null
        voiceGuidance:
          type: number
          description: >-
            A number between 1 and 6. Use lower numbers to reduce how unique
            your chosen voice will be compared to other voices.
          minimum: 1
          maximum: 6
          example: null
        styleGuidance:
          type: number
          description: >-
            A number between 1 and 30. Use lower numbers to to reduce how strong
            your chosen emotion will be. Higher numbers will create a very
            emotional performance.
          minimum: 1
          maximum: 30
          example: null
        textGuidance:
          type: number
          description: >-
            A number between 1 and 2. This number influences how closely the
            generated speech adheres to the input text. Use lower values to
            create more fluid speech, but with a higher chance of deviating from
            the input text. Higher numbers will make the generated speech more
            accurate to the input text, ensuring that the words spoken align
            closely with the provided text.
          minimum: 1
          maximum: 2
          example: null
        model:
          type: string
          description: Playht voice model/engine to use.
          enum:
            - PlayHT2.0
            - PlayHT2.0-turbo
            - Play3.0-mini
            - PlayDialog
        language:
          type: string
          description: The language to use for the speech.
          enum:
            - afrikaans
            - albanian
            - amharic
            - arabic
            - bengali
            - bulgarian
            - catalan
            - croatian
            - czech
            - danish
            - dutch
            - english
            - french
            - galician
            - german
            - greek
            - hebrew
            - hindi
            - hungarian
            - indonesian
            - italian
            - japanese
            - korean
            - malay
            - mandarin
            - polish
            - portuguese
            - russian
            - serbian
            - spanish
            - swedish
            - tagalog
            - thai
            - turkish
            - ukrainian
            - urdu
            - xhosa
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
    RimeAIVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - rime-ai
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - abbie
                - allison
                - ally
                - alona
                - amber
                - ana
                - antoine
                - armon
                - brenda
                - brittany
                - carol
                - colin
                - courtney
                - elena
                - elliot
                - eva
                - geoff
                - gerald
                - hank
                - helen
                - hera
                - jen
                - joe
                - joy
                - juan
                - kendra
                - kendrick
                - kenneth
                - kevin
                - kris
                - linda
                - madison
                - marge
                - marina
                - marissa
                - marta
                - maya
                - nicholas
                - nyles
                - phil
                - reba
                - rex
                - rick
                - ritu
                - rob
                - rodney
                - rohan
                - rosco
                - samantha
                - sandy
                - selena
                - seth
                - sharon
                - stan
                - tamra
                - tanya
                - tibur
                - tj
                - tyler
                - viv
                - yadira
                - marsh
                - bayou
                - creek
                - brook
                - flower
                - spore
                - glacier
                - gulch
                - alpine
                - cove
                - lagoon
                - tundra
                - steppe
                - mesa
                - grove
                - rainforest
                - moraine
                - wildflower
                - peak
                - boulder
                - gypsum
                - zest
                - luna
                - celeste
                - orion
                - ursa
                - astra
                - esther
                - estelle
                - andromeda
              title: Preset Voice Options
            - type: string
              title: RimeAI Voice ID
        model:
          type: string
          description: >-
            This is the model that will be used. Defaults to 'mistv2' when not
            specified.
          enum:
            - mist
            - mistv2
            - arcana
          example: mistv2
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          minimum: 0.1
          example: null
        pauseBetweenBrackets:
          type: boolean
          description: >-
            This is a flag that controls whether to add slight pauses using
            angle brackets. Example: "Hi. <200> I'd love to have a conversation
            with you." adds a 200ms pause between the first and second
            sentences.
          example: false
        phonemizeBetweenBrackets:
          type: boolean
          description: >-
            This is a flag that controls whether text inside brackets should be
            phonemized (converted to phonetic pronunciation) - Example:
            "{h'El.o} World" will pronounce "Hello" as expected.
          example: false
        reduceLatency:
          type: boolean
          description: >-
            This is a flag that controls whether to optimize for reduced latency
            in streaming.
            https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency
          example: false
        inlineSpeedAlpha:
          type: string
          description: >-
            This is a string that allows inline speed control using alpha
            notation.
            https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha
          example: null
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
    SmallestAIVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - smallest-ai
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - emily
                - jasmine
                - arman
                - james
                - mithali
                - aravind
                - raj
                - diya
                - raman
                - ananya
                - isha
                - william
                - aarav
                - monika
                - niharika
                - deepika
                - raghav
                - kajal
                - radhika
                - mansi
                - nisha
                - saurabh
                - pooja
                - saina
                - sanya
              title: Preset Voice Options
            - type: string
              title: Smallest AI Voice ID
        model:
          type: string
          description: >-
            Smallest AI voice model to use. Defaults to 'lightning' when not
            specified.
          enum:
            - lightning
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          example: null
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
    TavusVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - tavus
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - r52da2535a
              title: Preset Voice Options
            - type: string
              title: Tavus Voice ID
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        personaId:
          type: string
          description: >-
            This is the unique identifier for the persona that the replica will
            use in the conversation.
        callbackUrl:
          type: string
          description: >-
            This is the url that will receive webhooks with updates regarding
            the conversation state.
        conversationName:
          type: string
          description: This is the name for the conversation.
        conversationalContext:
          type: string
          description: >-
            This is the context that will be appended to any context provided in
            the persona, if one is provided.
        customGreeting:
          type: string
          description: >-
            This is the custom greeting that the replica will give once a
            participant joines the conversation.
        properties:
          description: These are optional properties used to customize the conversation.
          allOf:
            - $ref: '#/components/schemas/TavusConversationProperties'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
    cozmoxVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - cozmox
        voiceId:
          type: string
          description: The voices provided by cozmox
          enum:
            - Elliot
            - Kylie
            - Rohan
            - Lily
            - Savannah
            - Hana
            - Neha
            - Cole
            - Harry
            - Paige
            - Spencer
        speed:
          type: number
          description: |-
            This is the speed multiplier that will be used.

            @default 1
          minimum: 0.25
          maximum: 2
          default: 1
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
    SesameVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - sesame
        voiceId:
          type: string
          description: This is the provider-specific ID that will be used.
          title: >-
            Sesame Voice ID. This should be either a name (a built-in voice) or
            a UUID (a custom voice).
        model:
          type: string
          description: This is the model that will be used.
          enum:
            - csm-1b
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
        - model
    InworldVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - inworld
        voiceId:
          type: string
          description: >-
            Available voices by language:

            • en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth,
            Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun,
            Theodore, Timothy, Wendy, Dominus

            • zh: Yichen, Xiaoyin, Xinyi, Jing

            • nl: Erik, Katrien, Lennart, Lore

            • fr: Alain, Hélène, Mathieu, Étienne

            • de: Johanna, Josef

            • it: Gianni, Orietta

            • ja: Asuka, Satoshi

            • ko: Hyunwoo, Minji, Seojun, Yoona

            • pl: Szymon, Wojciech

            • pt: Heitor, Maitê

            • es: Diego, Lupita, Miguel, Rafael
          maxLength: 120
          title: Inworld Voice ID
          enum:
            - Alex
            - Ashley
            - Craig
            - Deborah
            - Dennis
            - Edward
            - Elizabeth
            - Hades
            - Julia
            - Pixie
            - Mark
            - Olivia
            - Priya
            - Ronald
            - Sarah
            - Shaun
            - Theodore
            - Timothy
            - Wendy
            - Dominus
            - Yichen
            - Xiaoyin
            - Xinyi
            - Jing
            - Erik
            - Katrien
            - Lennart
            - Lore
            - Alain
            - Hélène
            - Mathieu
            - Étienne
            - Johanna
            - Josef
            - Gianni
            - Orietta
            - Asuka
            - Satoshi
            - Hyunwoo
            - Minji
            - Seojun
            - Yoona
            - Szymon
            - Wojciech
            - Heitor
            - Maitê
            - Diego
            - Lupita
            - Miguel
            - Rafael
          example: Alex
        model:
          type: string
          description: This is the model that will be used.
          enum:
            - inworld-tts-1
          default: inworld-tts-1
        languageCode:
          type: string
          description: Language code for Inworld TTS synthesis
          default: en
          enum:
            - en
            - zh
            - ko
            - nl
            - fr
            - es
            - ja
            - de
            - it
            - pl
            - pt
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
        fallbackPlan:
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
          allOf:
            - $ref: '#/components/schemas/FallbackPlan'
      required:
        - provider
        - voiceId
    GoogleVoicemailDetectionPlan:
      type: object
      properties:
        beepMaxAwaitSeconds:
          type: number
          description: >-
            This is the maximum duration from the start of the call that we will
            wait for a voicemail beep, before speaking our message


            - If we detect a voicemail beep before this, we will speak the
            message at that point.


            - Setting too low a value means that the bot will start speaking its
            voicemail message too early. If it does so before the actual beep,
            it will get cut off. You should definitely tune this to your use
            case.


            @default 30

            @min 0

            @max 60
          minimum: 0
          maximum: 30
          default: 30
        provider:
          type: string
          description: This is the provider to use for voicemail detection.
          enum:
            - google
        backoffPlan:
          description: This is the backoff plan for the voicemail detection.
          allOf:
            - $ref: '#/components/schemas/VoicemailDetectionBackoffPlan'
      required:
        - provider
    OpenAIVoicemailDetectionPlan:
      type: object
      properties:
        beepMaxAwaitSeconds:
          type: number
          description: >-
            This is the maximum duration from the start of the call that we will
            wait for a voicemail beep, before speaking our message


            - If we detect a voicemail beep before this, we will speak the
            message at that point.


            - Setting too low a value means that the bot will start speaking its
            voicemail message too early. If it does so before the actual beep,
            it will get cut off. You should definitely tune this to your use
            case.


            @default 30

            @min 0

            @max 60
          minimum: 0
          maximum: 30
          default: 30
        provider:
          type: string
          description: This is the provider to use for voicemail detection.
          enum:
            - openai
        backoffPlan:
          description: This is the backoff plan for the voicemail detection.
          allOf:
            - $ref: '#/components/schemas/VoicemailDetectionBackoffPlan'
      required:
        - provider
    TwilioVoicemailDetectionPlan:
      type: object
      properties:
        provider:
          type: string
          description: This is the provider to use for voicemail detection.
          enum:
            - twilio
        voicemailDetectionTypes:
          type: array
          description: >-
            These are the AMD messages from Twilio that are considered as
            voicemail. Default is ['machine_end_beep', 'machine_end_silence'].


            @default {Array} ['machine_end_beep', 'machine_end_silence']
          enum:
            - machine_start
            - human
            - fax
            - unknown
            - machine_end_beep
            - machine_end_silence
            - machine_end_other
          example:
            - machine_end_beep
            - machine_end_silence
          items:
            type: string
            enum:
              - machine_start
              - human
              - fax
              - unknown
              - machine_end_beep
              - machine_end_silence
              - machine_end_other
        enabled:
          type: boolean
          description: >-
            This sets whether the assistant should detect voicemail. Defaults to
            true.


            @default true
        machineDetectionTimeout:
          type: number
          description: >-
            The number of seconds that Twilio should attempt to perform
            answering machine detection before timing out and returning
            AnsweredBy as unknown. Default is 30 seconds.


            Increasing this value will provide the engine more time to make a
            determination. This can be useful when DetectMessageEnd is provided
            in the MachineDetection parameter and there is an expectation of
            long answering machine greetings that can exceed 30 seconds.


            Decreasing this value will reduce the amount of time the engine has
            to make a determination. This can be particularly useful when the
            Enable option is provided in the MachineDetection parameter and you
            want to limit the time for initial detection.


            Check the [Twilio
            docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters)
            for more info.


            @default 30
          minimum: 3
          maximum: 59
        machineDetectionSpeechThreshold:
          type: number
          description: >-
            The number of milliseconds that is used as the measuring stick for
            the length of the speech activity. Durations lower than this value
            will be interpreted as a human, longer as a machine. Default is 2400
            milliseconds.


            Increasing this value will reduce the chance of a False Machine
            (detected machine, actually human) for a long human greeting (e.g.,
            a business greeting) but increase the time it takes to detect a
            machine.


            Decreasing this value will reduce the chances of a False Human
            (detected human, actually machine) for short voicemail greetings.
            The value of this parameter may need to be reduced by more than
            1000ms to detect very short voicemail greetings. A reduction of that
            significance can result in increased False Machine detections.
            Adjusting the MachineDetectionSpeechEndThreshold is likely the
            better approach for short voicemails. Decreasing
            MachineDetectionSpeechThreshold will also reduce the time it takes
            to detect a machine.


            Check the [Twilio
            docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters)
            for more info.


            @default 2400
          minimum: 1000
          maximum: 6000
        machineDetectionSpeechEndThreshold:
          type: number
          description: >-
            The number of milliseconds of silence after speech activity at which
            point the speech activity is considered complete. Default is 1200
            milliseconds.


            Increasing this value will typically be used to better address the
            short voicemail greeting scenarios. For short voicemails, there is
            typically 1000-2000ms of audio followed by 1200-2400ms of silence
            and then additional audio before the beep. Increasing the
            MachineDetectionSpeechEndThreshold to ~2500ms will treat the
            1200-2400ms of silence as a gap in the greeting but not the end of
            the greeting and will result in a machine detection. The downsides
            of such a change include:

            - Increasing the delay for human detection by the amount you
            increase this parameter, e.g., a change of 1200ms to 2500ms
            increases human detection delay by 1300ms.

            - Cases where a human has two utterances separated by a period of
            silence (e.g. a "Hello", then 2000ms of silence, and another
            "Hello") may be interpreted as a machine.


            Decreasing this value will result in faster human detection. The
            consequence is that it can lead to increased False Human (detected
            human, actually machine) detections because a silence gap in a
            voicemail greeting (not necessarily just in short voicemail
            scenarios) can be incorrectly interpreted as the end of speech.


            Check the [Twilio
            docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters)
            for more info.


            @default 1200
          minimum: 500
          maximum: 5000
        machineDetectionSilenceTimeout:
          type: number
          description: >-
            The number of milliseconds of initial silence after which an unknown
            AnsweredBy result will be returned. Default is 5000 milliseconds.


            Increasing this value will result in waiting for a longer period of
            initial silence before returning an 'unknown' AMD result.


            Decreasing this value will result in waiting for a shorter period of
            initial silence before returning an 'unknown' AMD result.


            Check the [Twilio
            docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters)
            for more info.


            @default 5000
          minimum: 2000
          maximum: 10000
      required:
        - provider
    cozmoxVoicemailDetectionPlan:
      type: object
      properties:
        beepMaxAwaitSeconds:
          type: number
          description: >-
            This is the maximum duration from the start of the call that we will
            wait for a voicemail beep, before speaking our message


            - If we detect a voicemail beep before this, we will speak the
            message at that point.


            - Setting too low a value means that the bot will start speaking its
            voicemail message too early. If it does so before the actual beep,
            it will get cut off. You should definitely tune this to your use
            case.


            @default 30

            @min 0

            @max 60
          minimum: 0
          maximum: 30
          default: 30
        provider:
          type: string
          description: This is the provider to use for voicemail detection.
          enum:
            - cozmox
        backoffPlan:
          description: This is the backoff plan for the voicemail detection.
          allOf:
            - $ref: '#/components/schemas/VoicemailDetectionBackoffPlan'
      required:
        - provider
    TransportConfigurationTwilio:
      type: object
      properties:
        provider:
          type: string
          enum:
            - twilio
        timeout:
          type: number
          description: >-
            The integer number of seconds that we should allow the phone to ring
            before assuming there is no answer.

            The default is `60` seconds and the maximum is `600` seconds.

            For some call flows, we will add a 5-second buffer to the timeout
            value you provide.

            For this reason, a timeout value of 10 seconds could result in an
            actual timeout closer to 15 seconds.

            You can set this to a short time, such as `15` seconds, to hang up
            before reaching an answering machine or voicemail.


            @default 60
          minimum: 1
          maximum: 600
          example: 60
        record:
          type: boolean
          description: |-
            Whether to record the call.
            Can be `true` to record the phone call, or `false` to not.
            The default is `false`.

            @default false
          example: false
        recordingChannels:
          type: string
          description: >-
            The number of channels in the final recording.

            Can be: `mono` or `dual`.

            The default is `mono`.

            `mono` records both legs of the call in a single channel of the
            recording file.

            `dual` records each leg to a separate channel of the recording file.

            The first channel of a dual-channel recording contains the parent
            call and the second channel contains the child call.


            @default 'mono'
          enum:
            - mono
            - dual
          example: mono
      required:
        - provider
    LangfuseObservabilityPlan:
      type: object
      properties:
        provider:
          type: string
          enum:
            - langfuse
        tags:
          description: >-
            This is an array of tags to be added to the Langfuse trace. Tags
            allow you to categorize and filter traces.
            https://langfuse.com/docs/tracing-features/tags
          type: array
          items:
            type: string
        metadata:
          type: object
          description: >-
            This is a JSON object that will be added to the Langfuse trace.
            Traces can be enriched with metadata to better understand your
            users, application, and experiments.
            https://langfuse.com/docs/tracing-features/metadata

            By default it includes the call metadata, assistant metadata, and
            assistant overrides.
      required:
        - provider
        - tags
    CreateAnthropicCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - anthropic
        apiKey:
          type: string
          maxLength: 10000
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateAnyscaleCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - anyscale
        apiKey:
          type: string
          maxLength: 10000
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateAssemblyAICredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - assembly-ai
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateAzureCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - azure
        service:
          type: string
          description: This is the service being used in Azure.
          enum:
            - speech
            - blob_storage
          default: speech
        region:
          type: string
          description: This is the region of the Azure resource.
          enum:
            - australia
            - canadaeast
            - canadacentral
            - eastus2
            - eastus
            - france
            - india
            - japaneast
            - japanwest
            - uaenorth
            - northcentralus
            - norway
            - southcentralus
            - swedencentral
            - switzerland
            - uk
            - westus
            - westus3
        apiKey:
          type: string
          maxLength: 10000
          description: This is not returned in the API.
        fallbackIndex:
          type: number
          minimum: 1
          description: >-
            This is the order in which this storage provider is tried during
            upload retries. Lower numbers are tried first in increasing order.
        bucketPlan:
          description: >-
            This is the bucket plan that can be provided to store call artifacts
            in Azure Blob Storage.
          allOf:
            - $ref: '#/components/schemas/AzureBlobStorageBucketPlan'
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - service
    CreateAzureOpenAICredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - azure-openai
        region:
          type: string
          enum:
            - australia
            - canadaeast
            - canadacentral
            - eastus2
            - eastus
            - france
            - india
            - japaneast
            - japanwest
            - uaenorth
            - northcentralus
            - norway
            - southcentralus
            - swedencentral
            - switzerland
            - uk
            - westus
            - westus3
        models:
          type: array
          enum:
            - gpt-4.1-2025-04-14
            - gpt-4.1-mini-2025-04-14
            - gpt-4.1-nano-2025-04-14
            - gpt-4o-2024-11-20
            - gpt-4o-2024-08-06
            - gpt-4o-2024-05-13
            - gpt-4o-mini-2024-07-18
            - gpt-4-turbo-2024-04-09
            - gpt-4-0125-preview
            - gpt-4-1106-preview
            - gpt-4-0613
            - gpt-35-turbo-0125
            - gpt-35-turbo-1106
          example:
            - gpt-4-0125-preview
            - gpt-4-0613
          items:
            type: string
            enum:
              - gpt-4.1-2025-04-14
              - gpt-4.1-mini-2025-04-14
              - gpt-4.1-nano-2025-04-14
              - gpt-4o-2024-11-20
              - gpt-4o-2024-08-06
              - gpt-4o-2024-05-13
              - gpt-4o-mini-2024-07-18
              - gpt-4-turbo-2024-04-09
              - gpt-4-0125-preview
              - gpt-4-1106-preview
              - gpt-4-0613
              - gpt-35-turbo-0125
              - gpt-35-turbo-1106
        openAIKey:
          type: string
          maxLength: 10000
          description: This is not returned in the API.
        ocpApimSubscriptionKey:
          type: string
          description: This is not returned in the API.
        openAIEndpoint:
          type: string
          maxLength: 10000
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - region
        - models
        - openAIKey
        - openAIEndpoint
    CreateByoSipTrunkCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          description: >-
            This can be used to bring your own SIP trunks or to connect to a
            Carrier.
          enum:
            - byo-sip-trunk
        gateways:
          description: This is the list of SIP trunk's gateways.
          type: array
          items:
            $ref: '#/components/schemas/SipTrunkGateway'
        outboundAuthenticationPlan:
          description: >-
            This can be used to configure the outbound authentication if
            required by the SIP trunk.
          allOf:
            - $ref: '#/components/schemas/SipTrunkOutboundAuthenticationPlan'
        outboundLeadingPlusEnabled:
          type: boolean
          description: >-
            This ensures the outbound origination attempts have a leading plus.
            Defaults to false to match conventional telecom behavior.


            Usage:

            - Vonage/Twilio requires leading plus for all outbound calls. Set
            this to true.


            @default false
        techPrefix:
          type: string
          description: >-
            This can be used to configure the tech prefix on outbound calls.
            This is an advanced property.
          maxLength: 10000
        sipDiversionHeader:
          type: string
          description: >-
            This can be used to enable the SIP diversion header for
            authenticating the calling number if the SIP trunk supports it. This
            is an advanced property.
          maxLength: 10000
        sbcConfiguration:
          description: >-
            This is an advanced configuration for enterprise deployments. This
            uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather
            than the managed SBC provided by cozmox.
          allOf:
            - $ref: '#/components/schemas/SbcConfiguration'
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - gateways
    CreateCartesiaCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - cartesia
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateCerebrasCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - cerebras
        apiKey:
          type: string
          maxLength: 10000
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateCloudflareCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - cloudflare
          description: Credential provider. Only allowed value is cloudflare
        accountId:
          type: string
          description: Cloudflare Account Id.
        apiKey:
          type: string
          description: Cloudflare API Key / Token.
        accountEmail:
          type: string
          description: Cloudflare Account Email.
        fallbackIndex:
          type: number
          minimum: 1
          description: >-
            This is the order in which this storage provider is tried during
            upload retries. Lower numbers are tried first in increasing order.
        bucketPlan:
          description: >-
            This is the bucket plan that can be provided to store call artifacts
            in R2
          allOf:
            - $ref: '#/components/schemas/CloudflareR2BucketPlan'
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
    CreateCustomLLMCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - custom-llm
        apiKey:
          type: string
          maxLength: 10000
          description: This is not returned in the API.
        authenticationPlan:
          description: >-
            This is the authentication plan. Currently supports OAuth2 RFC 6749.
            To use Bearer authentication, use apiKey
          allOf:
            - $ref: '#/components/schemas/OAuth2AuthenticationPlan'
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateDeepgramCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - deepgram
        apiKey:
          type: string
          description: This is not returned in the API.
        apiUrl:
          type: string
          description: >-
            This can be used to point to an onprem Deepgram instance. Defaults
            to api.deepgram.com.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateDeepInfraCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - deepinfra
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateDeepSeekCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - deep-seek
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateElevenLabsCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - 11labs
        apiKey:
          type: string
          maxLength: 10000
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateGcpCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - gcp
        fallbackIndex:
          type: number
          minimum: 1
          description: >-
            This is the order in which this storage provider is tried during
            upload retries. Lower numbers are tried first in increasing order.
        gcpKey:
          description: >-
            This is the GCP key. This is the JSON that can be generated in the
            Google Cloud Console at
            https://console.cloud.google.com/iam-admin/serviceaccounts/details/<service-account-id>/keys.


            The schema is identical to the JSON that GCP outputs.
          allOf:
            - $ref: '#/components/schemas/GcpKey'
        region:
          type: string
          description: This is the region of the GCP resource.
          maxLength: 40
        bucketPlan:
          $ref: '#/components/schemas/BucketPlan'
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - gcpKey
    CreateGladiaCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - gladia
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateGoHighLevelCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - gohighlevel
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateGoogleCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          description: >-
            This is the key for Gemini in Google AI Studio. Get it from here:
            https://aistudio.google.com/app/apikey
          enum:
            - google
        apiKey:
          type: string
          maxLength: 10000
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateGroqCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - groq
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateHumeCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - hume
        apiKey:
          type: string
          maxLength: 10000
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateInflectionAICredentialDTO:
      type: object
      properties:
        provider:
          type: string
          description: >-
            This is the api key for Pi in InflectionAI's console. Get it from
            here: https://developers.inflection.ai/keys, billing will need to be
            setup
          enum:
            - inflection-ai
        apiKey:
          type: string
          maxLength: 10000
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateLangfuseCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - langfuse
        publicKey:
          type: string
          description: 'The public key for Langfuse project. Eg: pk-lf-...'
        apiKey:
          type: string
          description: >-
            The secret key for Langfuse project. Eg: sk-lf-... .This is not
            returned in the API.
        apiUrl:
          type: string
          description: 'The host URL for Langfuse project. Eg: https://cloud.langfuse.com'
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - publicKey
        - apiKey
        - apiUrl
    CreateLmntCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - lmnt
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateMakeCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - make
        teamId:
          type: string
          description: Team ID
        region:
          type: string
          description: 'Region of your application. For example: eu1, eu2, us1, us2'
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - teamId
        - region
        - apiKey
    CreateMistralCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - mistral
        apiKey:
          type: string
          maxLength: 100
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateNeuphonicCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - neuphonic
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateOpenAICredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - openai
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateOpenRouterCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - openrouter
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreatePerplexityAICredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - perplexity-ai
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreatePlayHTCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - playht
        apiKey:
          type: string
          description: This is not returned in the API.
        userId:
          type: string
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
        - userId
    CreateRimeAICredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - rime-ai
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateRunpodCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - runpod
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateS3CredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - s3
          description: Credential provider. Only allowed value is s3
        awsAccessKeyId:
          type: string
          description: AWS access key ID.
        awsSecretAccessKey:
          type: string
          description: AWS access key secret. This is not returned in the API.
        region:
          type: string
          description: AWS region in which the S3 bucket is located.
        s3BucketName:
          type: string
          description: AWS S3 bucket name.
        s3PathPrefix:
          type: string
          description: The path prefix for the uploaded recording. Ex. "recordings/"
        fallbackIndex:
          type: number
          minimum: 1
          description: >-
            This is the order in which this storage provider is tried during
            upload retries. Lower numbers are tried first in increasing order.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - awsAccessKeyId
        - awsSecretAccessKey
        - region
        - s3BucketName
        - s3PathPrefix
    CreateSmallestAICredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - smallest-ai
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateSpeechmaticsCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - speechmatics
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateSupabaseCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - supabase
          description: This is for supabase storage.
        fallbackIndex:
          type: number
          minimum: 1
          description: >-
            This is the order in which this storage provider is tried during
            upload retries. Lower numbers are tried first in increasing order.
        bucketPlan:
          $ref: '#/components/schemas/SupabaseBucketPlan'
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
    CreateTavusCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - tavus
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateTogetherAICredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - together-ai
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateTrieveCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - trieve
        apiKey:
          type: string
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateTwilioCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - twilio
        authToken:
          type: string
          description: This is not returned in the API.
        apiKey:
          type: string
          description: This is not returned in the API.
        apiSecret:
          type: string
          description: This is not returned in the API.
        accountSid:
          type: string
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - accountSid
    CreateVonageCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - vonage
        apiSecret:
          type: string
          description: This is not returned in the API.
        apiKey:
          type: string
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiSecret
        - apiKey
    CreateWebhookCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - webhook
        authenticationPlan:
          description: >-
            This is the authentication plan. Supports OAuth2 RFC 6749 and HMAC
            signing.
          oneOf:
            - $ref: '#/components/schemas/OAuth2AuthenticationPlan'
            - $ref: '#/components/schemas/HMACAuthenticationPlan'
          discriminator:
            propertyName: type
            mapping:
              oauth2: '#/components/schemas/OAuth2AuthenticationPlan'
              hmac: '#/components/schemas/HMACAuthenticationPlan'
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - authenticationPlan
    CreateXAiCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          description: >-
            This is the api key for Grok in XAi's console. Get it from here:
            https://console.x.ai
          enum:
            - xai
        apiKey:
          type: string
          maxLength: 10000
          description: This is not returned in the API.
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - apiKey
    CreateGoogleCalendarOAuth2ClientCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - google.calendar.oauth2-client
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
    CreateGoogleCalendarOAuth2AuthorizationCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - google.calendar.oauth2-authorization
        authorizationId:
          type: string
          description: The authorization ID for the OAuth2 authorization
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - authorizationId
    CreateGoogleSheetsOAuth2AuthorizationCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - google.sheets.oauth2-authorization
        authorizationId:
          type: string
          description: The authorization ID for the OAuth2 authorization
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - authorizationId
    CreateSlackOAuth2AuthorizationCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - slack.oauth2-authorization
        authorizationId:
          type: string
          description: The authorization ID for the OAuth2 authorization
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - authorizationId
    CreateGoHighLevelMCPCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
            - ghl.oauth2-authorization
        authenticationSession:
          description: This is the authentication session for the credential.
          allOf:
            - $ref: '#/components/schemas/Oauth2AuthenticationSession'
        name:
          type: string
          description: This is the name of credential. This is just for your reference.
          minLength: 1
          maxLength: 40
      required:
        - provider
        - authenticationSession
    AssistantHookCallEnding:
      type: object
      properties:
        'on':
          type: string
          description: This is the event that triggers this hook
          enum:
            - call.ending
          maxLength: 1000
        do:
          type: array
          description: This is the set of actions to perform when the hook triggers
          items:
            oneOf:
              - $ref: '#/components/schemas/TransferAssistantHookAction'
                title: TransferAssistantHookAction
              - $ref: '#/components/schemas/FunctionCallAssistantHookAction'
                title: FunctionCallAssistantHookAction
        filters:
          description: This is the set of filters that must match for the hook to trigger
          type: array
          items:
            $ref: '#/components/schemas/AssistantHookFilter'
      required:
        - 'on'
        - do
    AssistantHookAssistantSpeechInterrupted:
      type: object
      properties:
        'on':
          type: string
          description: This is the event that triggers this hook
          enum:
            - assistant.speech.interrupted
          maxLength: 1000
        do:
          type: array
          description: This is the set of actions to perform when the hook triggers
          items:
            oneOf:
              - $ref: '#/components/schemas/TransferAssistantHookAction'
                title: TransferAssistantHookAction
              - $ref: '#/components/schemas/FunctionCallAssistantHookAction'
                title: FunctionCallAssistantHookAction
              - $ref: '#/components/schemas/SayAssistantHookAction'
                title: SayAssistantHookAction
      required:
        - 'on'
        - do
    AssistantHookCustomerSpeechInterrupted:
      type: object
      properties:
        'on':
          type: string
          description: This is the event that triggers this hook
          enum:
            - customer.speech.interrupted
          maxLength: 1000
        do:
          type: array
          description: This is the set of actions to perform when the hook triggers
          items:
            oneOf:
              - $ref: '#/components/schemas/TransferAssistantHookAction'
                title: TransferAssistantHookAction
              - $ref: '#/components/schemas/FunctionCallAssistantHookAction'
                title: FunctionCallAssistantHookAction
              - $ref: '#/components/schemas/SayAssistantHookAction'
                title: SayAssistantHookAction
      required:
        - 'on'
        - do
    CompliancePlan:
      type: object
      properties:
        hipaaEnabled:
          type: boolean
          description: >-
            When this is enabled, no logs, recordings, or transcriptions will be
            stored.

            At the end of the call, you will still receive an end-of-call-report
            message to store on your server. Defaults to false.
          example:
            hipaaEnabled: false
        pciEnabled:
          type: boolean
          description: >-
            When this is enabled, the user will be restricted to use
            PCI-compliant providers, and no logs or transcripts are stored.

            At the end of the call, you will receive an end-of-call-report
            message to store on your server. Defaults to false.
          example:
            pciEnabled: false
    BackgroundSpeechDenoisingPlan:
      type: object
      properties:
        smartDenoisingPlan:
          description: Whether smart denoising using Krisp is enabled.
          allOf:
            - $ref: '#/components/schemas/SmartDenoisingPlan'
        fourierDenoisingPlan:
          description: >-
            Whether Fourier denoising is enabled. Note that this is experimental
            and may not work as expected.


            This can be combined with smart denoising, and will be run
            afterwards.
          allOf:
            - $ref: '#/components/schemas/FourierDenoisingPlan'
    AnalysisPlan:
      type: object
      properties:
        minMessagesThreshold:
          type: number
          description: >-
            The minimum number of messages required to run the analysis plan.

            If the number of messages is less than this, analysis will be
            skipped.

            @default 2
          minimum: 0
        summaryPlan:
          description: >-
            This is the plan for generating the summary of the call. This
            outputs to `call.analysis.summary`.
          allOf:
            - $ref: '#/components/schemas/SummaryPlan'
        structuredDataPlan:
          description: >-
            This is the plan for generating the structured data from the call.
            This outputs to `call.analysis.structuredData`.
          allOf:
            - $ref: '#/components/schemas/StructuredDataPlan'
        structuredDataMultiPlan:
          description: >-
            This is an array of structured data plan catalogs. Each entry
            includes a `key` and a `plan` for generating the structured data
            from the call. This outputs to `call.analysis.structuredDataMulti`.
          type: array
          items:
            $ref: '#/components/schemas/StructuredDataMultiPlan'
        successEvaluationPlan:
          description: >-
            This is the plan for generating the success evaluation of the call.
            This outputs to `call.analysis.successEvaluation`.
          allOf:
            - $ref: '#/components/schemas/SuccessEvaluationPlan'
    ArtifactPlan:
      type: object
      properties:
        recordingEnabled:
          type: boolean
          description: >-
            This determines whether assistant's calls are recorded. Defaults to
            true.


            Usage:

            - If you don't want to record the calls, set this to false.

            - If you want to record the calls when `assistant.hipaaEnabled`
            (deprecated) or `assistant.compliancePlan.hipaaEnabled` explicity
            set this to true and make sure to provide S3 or GCP credentials on
            the Provider Credentials page in the Dashboard.


            You can find the recording at `call.artifact.recordingUrl` and
            `call.artifact.stereoRecordingUrl` after the call is ended.


            @default true
          example: true
        recordingFormat:
          type: string
          description: |-
            This determines the format of the recording. Defaults to `wav;l16`.

            @default 'wav;l16'
          enum:
            - wav;l16
            - mp3
        videoRecordingEnabled:
          type: boolean
          description: >-
            This determines whether the video is recorded during the call.
            Defaults to false. Only relevant for `webCall` type.


            You can find the video recording at
            `call.artifact.videoRecordingUrl` after the call is ended.


            @default false
          example: false
        pcapEnabled:
          type: boolean
          description: >-
            This determines whether the SIP packet capture is enabled. Defaults
            to true. Only relevant for `phone` type calls where phone number's
            provider is `cozmox` or `byo-phone-number`.


            You can find the packet capture at `call.artifact.pcapUrl` after the
            call is ended.


            @default true
          example: true
        pcapS3PathPrefix:
          type: string
          description: >-
            This is the path where the SIP packet capture will be uploaded. This
            is only used if you have provided S3 or GCP credentials on the
            Provider Credentials page in the Dashboard.


            If credential.s3PathPrefix or credential.bucketPlan.path is set,
            this will append to it.


            Usage:

            - If you want to upload the packet capture to a specific path, set
            this to the path. Example: `/my-assistant-captures`.

            - If you want to upload the packet capture to the root of the
            bucket, set this to `/`.


            @default '/'
          example: /pcaps
        transcriptPlan:
          description: >-
            This is the plan for `call.artifact.transcript`. To disable, set
            `transcriptPlan.enabled` to false.
          allOf:
            - $ref: '#/components/schemas/TranscriptPlan'
        recordingPath:
          type: string
          description: >-
            This is the path where the recording will be uploaded. This is only
            used if you have provided S3 or GCP credentials on the Provider
            Credentials page in the Dashboard.


            If credential.s3PathPrefix or credential.bucketPlan.path is set,
            this will append to it.


            Usage:

            - If you want to upload the recording to a specific path, set this
            to the path. Example: `/my-assistant-recordings`.

            - If you want to upload the recording to the root of the bucket, set
            this to `/`.


            @default '/'
    MessagePlan:
      type: object
      properties:
        idleMessages:
          description: >-
            This are the messages that the assistant will speak when the user
            hasn't responded for `idleTimeoutSeconds`. Each time the timeout is
            triggered, a random message will be chosen from this array.


            Usage:

            - If user gets distracted and doesn't respond for a while, this can
            be used to grab their attention.

            - If the transcriber doesn't pick up what the user said, this can be
            used to ask the user to repeat themselves. (From the perspective of
            the assistant, the conversation is idle since it didn't "hear" any
            user messages.)


            @default null (no idle message is spoken)
          type: array
          items:
            type: string
            maxLength: 1000
        idleMessageMaxSpokenCount:
          type: number
          description: >-
            This determines the maximum number of times `idleMessages` can be
            spoken during the call.


            @default 3
          minimum: 1
          maximum: 10
        idleMessageResetCountOnUserSpeechEnabled:
          type: boolean
          description: >-
            This determines whether the idle message count is reset whenever the
            user speaks.


            @default false
        idleTimeoutSeconds:
          type: number
          description: >-
            This is the timeout in seconds before a message from `idleMessages`
            is spoken. The clock starts when the assistant finishes speaking and
            remains active until the user speaks.


            @default 10
          minimum: 5
          maximum: 60
        silenceTimeoutMessage:
          type: string
          description: >-
            This is the message that the assistant will say if the call ends due
            to silence.


            If unspecified, it will hang up without saying anything.
          maxLength: 1000
    StartSpeakingPlan:
      type: object
      properties:
        waitSeconds:
          type: number
          description: >-
            This is how long assistant waits before speaking. Defaults to 0.4.


            This is the minimum it will wait but if there is latency is the
            pipeline, this minimum will be exceeded. This is intended as a
            stopgap in case the pipeline is moving too fast.


            Example:

            - If model generates tokens and voice generates bytes within 100ms,
            the pipeline still waits 300ms before outputting speech.


            Usage:

            - If the customer is taking long pauses, set this to a higher value.

            - If the assistant is accidentally jumping in too much, set this to
            a higher value.


            @default 0.4
          minimum: 0
          maximum: 5
          example: 0.4
        smartEndpointingEnabled:
          example: false
          deprecated: true
          oneOf:
            - type: boolean
            - type: string
              enum:
                - livekit
        smartEndpointingPlan:
          description: >-
            This is the plan for smart endpointing. Pick between cozmox smart
            endpointing or LiveKit smart endpointing (or nothing). We strongly
            recommend using livekit endpointing when working in English. LiveKit
            endpointing is not supported in other languages, yet.


            If this is set, it will override and take precedence over
            `transcriptionEndpointingPlan`.

            This plan will still be overridden by any matching
            `customEndpointingRules`.
          oneOf:
            - $ref: '#/components/schemas/cozmoxSmartEndpointingPlan'
              title: cozmox
            - $ref: '#/components/schemas/LivekitSmartEndpointingPlan'
              title: Livekit
            - $ref: '#/components/schemas/CustomEndpointingModelSmartEndpointingPlan'
              title: Custom Endpointing Model
        customEndpointingRules:
          type: array
          description: >-
            These are the custom endpointing rules to set an endpointing timeout
            based on a regex on the customer's speech or the assistant's last
            message.


            Usage:

            - If you have yes/no questions like "are you interested in a loan?",
            you can set a shorter timeout.

            - If you have questions where the customer may pause to look up
            information like "what's my account number?", you can set a longer
            timeout.

            - If you want to wait longer while customer is enumerating a list of
            numbers, you can set a longer timeout.


            These rules have the highest precedence and will override both
            `smartEndpointingPlan` and `transcriptionEndpointingPlan` when a
            rule is matched.


            The rules are evaluated in order and the first one that matches will
            be used.


            Order of precedence for endpointing:

            1. customEndpointingRules (if any match)

            2. smartEndpointingPlan (if set)

            3. transcriptionEndpointingPlan


            @default []
          items:
            oneOf:
              - $ref: '#/components/schemas/AssistantCustomEndpointingRule'
                title: Assistant
              - $ref: '#/components/schemas/CustomerCustomEndpointingRule'
                title: Customer
              - $ref: '#/components/schemas/BothCustomEndpointingRule'
                title: Both
        transcriptionEndpointingPlan:
          description: >-
            This determines how a customer speech is considered done
            (endpointing) using the transcription of customer's speech.


            Once an endpoint is triggered, the request is sent to
            `assistant.model`.


            Note: This plan is only used if `smartEndpointingPlan` is not set.
            If both are provided, `smartEndpointingPlan` takes precedence.

            This plan will also be overridden by any matching
            `customEndpointingRules`.
          allOf:
            - $ref: '#/components/schemas/TranscriptionEndpointingPlan'
    StopSpeakingPlan:
      type: object
      properties:
        numWords:
          type: number
          description: >-
            This is the number of words that the customer has to say before the
            assistant will stop talking.


            Words like "stop", "actually", "no", etc. will always interrupt
            immediately regardless of this value.


            Words like "okay", "yeah", "right" will never interrupt.


            When set to 0, `voiceSeconds` is used in addition to the
            transcriptions to determine the customer has started speaking.


            Defaults to 0.


            @default 0
          minimum: 0
          maximum: 10
          example: 0
        voiceSeconds:
          type: number
          description: >-
            This is the seconds customer has to speak before the assistant stops
            talking. This uses the VAD (Voice Activity Detection) spike to
            determine if the customer has started speaking.


            Considerations:

            - A lower value might be more responsive but could potentially pick
            up non-speech sounds.

            - A higher value reduces false positives but might slightly delay
            the detection of speech onset.


            This is only used if `numWords` is set to 0.


            Defaults to 0.2


            @default 0.2
          minimum: 0
          maximum: 0.5
          example: 0.2
        backoffSeconds:
          type: number
          description: >-
            This is the seconds to wait before the assistant will start talking
            again after being interrupted.


            Defaults to 1.


            @default 1
          minimum: 0
          maximum: 10
          example: 1
        acknowledgementPhrases:
          description: >-
            These are the phrases that will never interrupt the assistant, even
            if numWords threshold is met.

            These are typically acknowledgement or backchanneling phrases.
          example:
            - i understand
            - i see
            - i got it
            - i hear you
            - im listening
            - im with you
            - right
            - okay
            - ok
            - sure
            - alright
            - got it
            - understood
            - yeah
            - 'yes'
            - uh-huh
            - mm-hmm
            - gotcha
            - mhmm
            - ah
            - yeah okay
            - yeah sure
          default:
            - i understand
            - i see
            - i got it
            - i hear you
            - im listening
            - im with you
            - right
            - okay
            - ok
            - sure
            - alright
            - got it
            - understood
            - yeah
            - 'yes'
            - uh-huh
            - mm-hmm
            - gotcha
            - mhmm
            - ah
            - yeah okay
            - yeah sure
          type: array
          items:
            type: string
            maxLength: 240
        interruptionPhrases:
          description: >-
            These are the phrases that will always interrupt the assistant
            immediately, regardless of numWords.

            These are typically phrases indicating disagreement or desire to
            stop.
          example:
            - stop
            - shut
            - up
            - enough
            - quiet
            - silence
            - but
            - dont
            - not
            - 'no'
            - hold
            - wait
            - cut
            - pause
            - nope
            - nah
            - nevermind
            - never
            - bad
            - actually
          default:
            - stop
            - shut
            - up
            - enough
            - quiet
            - silence
            - but
            - dont
            - not
            - 'no'
            - hold
            - wait
            - cut
            - pause
            - nope
            - nah
            - nevermind
            - never
            - bad
            - actually
          type: array
          items:
            type: string
            maxLength: 240
    MonitorPlan:
      type: object
      properties:
        listenEnabled:
          type: boolean
          description: >-
            This determines whether the assistant's calls allow live listening.
            Defaults to true.


            Fetch `call.monitor.listenUrl` to get the live listening URL.


            @default true
          example: false
        listenAuthenticationEnabled:
          type: boolean
          description: >-
            This enables authentication on the `call.monitor.listenUrl`.


            If `listenAuthenticationEnabled` is `true`, the
            `call.monitor.listenUrl` will require an `Authorization: Bearer
            <cozmox-public-api-key>` header.


            @default false
          example: false
        controlEnabled:
          type: boolean
          description: >-
            This determines whether the assistant's calls allow live control.
            Defaults to true.


            Fetch `call.monitor.controlUrl` to get the live control URL.


            To use, send any control message via a POST request to
            `call.monitor.controlUrl`. Here are the types of controls supported:
            https://docs.cozmox.ai/api-reference/messages/client-inbound-message


            @default true
          example: false
        controlAuthenticationEnabled:
          type: boolean
          description: >-
            This enables authentication on the `call.monitor.controlUrl`.


            If `controlAuthenticationEnabled` is `true`, the
            `call.monitor.controlUrl` will require an `Authorization: Bearer
            <cozmox-public-api-key>` header.


            @default false
          example: false
    Server:
      type: object
      properties:
        timeoutSeconds:
          type: number
          description: >-
            This is the timeout in seconds for the request. Defaults to 20
            seconds.


            @default 20
          minimum: 1
          maximum: 300
          example: 20
        url:
          type: string
          description: This is where the request will be sent.
        headers:
          type: object
          description: |-
            These are the headers to include in the request.

            Each key-value pair represents a header name and its value.
        backoffPlan:
          description: >-
            This is the backoff plan if the request fails. Defaults to undefined
            (the request will not be retried).


            @default undefined (the request will not be retried)
          allOf:
            - $ref: '#/components/schemas/BackoffPlan'
    KeypadInputPlan:
      type: object
      properties:
        enabled:
          type: boolean
          description: |-
            This keeps track of whether the user has enabled keypad input.
            By default, it is off.

            @default false
        timeoutSeconds:
          type: number
          description: >-
            This is the time in seconds to wait before processing the input.

            If the input is not received within this time, the input will be
            ignored.

            If set to "off", the input will be processed when the user enters a
            delimiter or immediately if no delimiter is used.


            @default 2
          minimum: 0
          maximum: 10
        delimiters:
          type: string
          description: |-
            This is the delimiter(s) that will be used to process the input.
            Can be '#', '*', or an empty array.
          enum:
            - '#'
            - '*'
            - ''
    FallbackTranscriberPlan:
      type: object
      properties:
        transcribers:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/FallbackAssemblyAITranscriber'
                title: AssemblyAI
              - $ref: '#/components/schemas/FallbackAzureSpeechTranscriber'
                title: Azure
              - $ref: '#/components/schemas/FallbackCustomTranscriber'
                title: Custom
              - $ref: '#/components/schemas/FallbackDeepgramTranscriber'
                title: Deepgram
              - $ref: '#/components/schemas/FallbackElevenLabsTranscriber'
                title: ElevenLabs
              - $ref: '#/components/schemas/FallbackGladiaTranscriber'
                title: Gladia
              - $ref: '#/components/schemas/FallbackGoogleTranscriber'
                title: Google
              - $ref: '#/components/schemas/FallbackTalkscriberTranscriber'
                title: Talkscriber
              - $ref: '#/components/schemas/FallbackSpeechmaticsTranscriber'
                title: Speechmatics
              - $ref: '#/components/schemas/FallbackOpenAITranscriber'
                title: OpenAI
              - $ref: '#/components/schemas/FallbackCartesiaTranscriber'
                title: Cartesia
      required:
        - transcribers
    OpenAIMessage:
      type: object
      properties:
        content:
          type: string
          nullable: true
          maxLength: 100000000
        role:
          type: string
          enum:
            - assistant
            - function
            - user
            - system
            - tool
      required:
        - content
        - role
    CreateApiRequestToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - apiRequest
          description: The type of tool. "apiRequest" for API request tool.
        method:
          type: string
          enum:
            - POST
            - GET
        timeoutSeconds:
          type: number
          description: >-
            This is the timeout in seconds for the request. Defaults to 20
            seconds.


            @default 20
          minimum: 1
          maximum: 300
          example: 20
        name:
          type: string
          description: >-
            This is the name of the tool. This will be passed to the model.


            Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a
            maximum length of 40.
          maxLength: 40
          pattern: /^[a-zA-Z0-9_-]{1,40}$/
        description:
          type: string
          description: >-
            This is the description of the tool. This will be passed to the
            model.
          maxLength: 1000
        url:
          type: string
          description: This is where the request will be sent.
        body:
          description: This is the body of the request.
          allOf:
            - $ref: '#/components/schemas/JsonSchema'
        headers:
          description: These are the headers to send in the request.
          allOf:
            - $ref: '#/components/schemas/JsonSchema'
        backoffPlan:
          description: >-
            This is the backoff plan if the request fails. Defaults to undefined
            (the request will not be retried).


            @default undefined (the request will not be retried)
          allOf:
            - $ref: '#/components/schemas/BackoffPlan'
        variableExtractionPlan:
          description: >-
            This is the plan to extract variables from the tool's response.
            These will be accessible during the call and stored in
            `call.artifact.variableValues` after the call.


            Usage:

            1. Use `aliases` to extract variables from the tool's response body.
            (Most common case)


            ```json

            {
              "aliases": [
                {
                  "key": "customerName",
                  "value": "{{customer.name}}"
                },
                {
                  "key": "customerAge",
                  "value": "{{customer.age}}"
                }
              ]
            }

            ```


            The tool response body is made available to the liquid template.


            2. Use `aliases` to extract variables from the tool's response body
            if the response is an array.


            ```json

            {
              "aliases": [
                {
                  "key": "customerName",
                  "value": "{{$[0].name}}"
                },
                {
                  "key": "customerAge",
                  "value": "{{$[0].age}}"
                }
              ]
            }

            ```


            $ is a shorthand for the tool's response body. `$[0]` is the first
            item in the array. `$[n]` is the nth item in the array. Note, $ is
            available regardless of the response body type (both object and
            array).


            3. Use `aliases` to extract variables from the tool's response
            headers.


            ```json

            {
              "aliases": [
                {
                  "key": "customerName",
                  "value": "{{tool.response.headers.customer-name}}"
                },
                {
                  "key": "customerAge",
                  "value": "{{tool.response.headers.customer-age}}"
                }
              ]
            }

            ```


            `tool.response` is made available to the liquid template.
            Particularly, both `tool.response.headers` and `tool.response.body`
            are available. Note, `tool.response` is available regardless of the
            response body type (both object and array).


            4. Use `schema` to extract a large portion of the tool's response
            body.


            4.1. If you hit example.com and it returns `{"name": "John", "age":
            30}`, then you can specify the schema as:


            ```json

            {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "age": {
                    "type": "number"
                  }
                }
              }
            }

            ```


            4.2. If you hit example.com and it returns `{"name": {"first":
            "John", "last": "Doe"}}`, then you can specify the schema as:


            ```json

            {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "object",
                    "properties": {
                      "first": {
                        "type": "string"
                      },
                      "last": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }

            ```


            These will be extracted as `{{ name }}` and `{{ age }}`
            respectively. To emphasize, object properties are extracted as
            direct global variables.


            4.3. If you hit example.com and it returns `{"name": {"first":
            "John", "last": "Doe"}}`, then you can specify the schema as:


            ```json

            {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "object",
                    "properties": {
                      "first": {
                        "type": "string"
                      },
                      "last": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }

            ```


            These will be extracted as `{{ name }}`. And, `{{ name.first }}` and
            `{{ name.last }}` will be accessible.


            4.4. If you hit example.com and it returns `["94123", "94124"]`,
            then you can specify the schema as:


            ```json

            {
              "schema": {
                "type": "array",
                "title": "zipCodes",
                "items": {
                  "type": "string"
                }
              }
            }

            ```


            This will be extracted as `{{ zipCodes }}`. To access the array
            items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`.


            4.5. If you hit example.com and it returns `[{"name": "John", "age":
            30, "zipCodes": ["94123", "94124"]}, {"name": "Jane", "age": 25,
            "zipCodes": ["94125", "94126"]}]`, then you can specify the schema
            as:


            ```json

            {
              "schema": {
                "type": "array",
                "title": "people",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "age": {
                      "type": "number"
                    },
                    "zipCodes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }

            ```


            This will be extracted as `{{ people }}`. To access the array items,
            you can use `{{ people[n].name }}`, `{{ people[n].age }}`, `{{
            people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{
            people[n].zipCodes[1] }}`.


            Note: Both `aliases` and `schema` can be used together.
          allOf:
            - $ref: '#/components/schemas/VariableExtractionPlan'
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
        - method
        - url
    CreateBashToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - bash
          description: The type of tool. "bash" for Bash tool.
        subType:
          type: string
          enum:
            - bash_20241022
          description: The sub type of tool.
        server:
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
          allOf:
            - $ref: '#/components/schemas/Server'
        name:
          type: string
          description: The name of the tool, fixed to 'bash'
          default: bash
          enum:
            - bash
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
        - subType
        - name
    CreateComputerToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - computer
          description: The type of tool. "computer" for Computer tool.
        subType:
          type: string
          enum:
            - computer_20241022
          description: The sub type of tool.
        server:
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
          allOf:
            - $ref: '#/components/schemas/Server'
        name:
          type: string
          description: The name of the tool, fixed to 'computer'
          default: computer
          enum:
            - computer
        displayWidthPx:
          type: number
          description: The display width in pixels
        displayHeightPx:
          type: number
          description: The display height in pixels
        displayNumber:
          type: number
          description: Optional display number
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
        - subType
        - name
        - displayWidthPx
        - displayHeightPx
    CreateDtmfToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - dtmf
          description: The type of tool. "dtmf" for DTMF tool.
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateEndCallToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - endCall
          description: The type of tool. "endCall" for End Call tool.
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateFunctionToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - function
          description: The type of tool. "function" for Function tool.
        async:
          type: boolean
          example: false
          description: |-
            This determines if the tool is async.

              If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.

              If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.

              Defaults to synchronous (`false`).
        server:
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
          allOf:
            - $ref: '#/components/schemas/Server'
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateGoHighLevelCalendarAvailabilityToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - gohighlevel.calendar.availability.check
          description: >-
            The type of tool. "gohighlevel.calendar.availability.check" for
            GoHighLevel Calendar availability check tool.
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateGoHighLevelCalendarEventCreateToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - gohighlevel.calendar.event.create
          description: >-
            The type of tool. "gohighlevel.calendar.event.create" for
            GoHighLevel Calendar event create tool.
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateGoHighLevelContactCreateToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - gohighlevel.contact.create
          description: >-
            The type of tool. "gohighlevel.contact.create" for GoHighLevel
            contact create tool.
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateGoHighLevelContactGetToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - gohighlevel.contact.get
          description: >-
            The type of tool. "gohighlevel.contact.get" for GoHighLevel contact
            get tool.
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateGoogleCalendarCheckAvailabilityToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - google.calendar.availability.check
          description: >-
            The type of tool. "google.calendar.availability.check" for Google
            Calendar availability check tool.
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateGoogleCalendarCreateEventToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - google.calendar.event.create
          description: >-
            The type of tool. "google.calendar.event.create" for Google Calendar
            tool.
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateGoogleSheetsRowAppendToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - google.sheets.row.append
          description: The type of tool. "google.sheets.row.append" for Google Sheets tool.
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateMcpToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - mcp
          description: The type of tool. "mcp" for MCP tool.
        server:
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
          allOf:
            - $ref: '#/components/schemas/Server'
        metadata:
          $ref: '#/components/schemas/McpToolMetadata'
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateQueryToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - query
          description: The type of tool. "query" for Query tool.
        knowledgeBases:
          description: The knowledge bases to query
          type: array
          items:
            $ref: '#/components/schemas/KnowledgeBase'
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateSlackSendMessageToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - slack.message.send
          description: The type of tool. "slack.message.send" for Slack send message tool.
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateSmsToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - sms
          description: The type of tool. "sms" for Twilio SMS sending tool.
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateTextEditorToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - textEditor
          description: The type of tool. "textEditor" for Text Editor tool.
        subType:
          type: string
          enum:
            - text_editor_20241022
          description: The sub type of tool.
        server:
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
          allOf:
            - $ref: '#/components/schemas/Server'
        name:
          type: string
          description: The name of the tool, fixed to 'str_replace_editor'
          default: str_replace_editor
          enum:
            - str_replace_editor
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
        - subType
        - name
    CreateTransferCallToolDTO:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - transferCall
        destinations:
          type: array
          description: >-
            These are the destinations that the call can be transferred to. If
            no destinations are provided, server.url will be used to get the
            transfer destination once the tool is called.
          items:
            oneOf:
              - $ref: '#/components/schemas/TransferDestinationAssistant'
                title: Assistant
              - $ref: '#/components/schemas/TransferDestinationNumber'
                title: Number
              - $ref: '#/components/schemas/TransferDestinationSip'
                title: Sip
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    CreateCustomKnowledgeBaseDTO:
      type: object
      properties:
        provider:
          type: string
          description: This knowledge base is bring your own knowledge base implementation.
          enum:
            - custom-knowledge-base
        server:
          description: |-
            This is where the knowledge base request will be sent.

            Request Example:

            POST https://{server.url}
            Content-Type: application/json

            {
              "messsage": {
                "type": "knowledge-base-request",
                "messages": [
                  {
                    "role": "user",
                    "content": "Why is ocean blue?"
                  }
                ],
                ...other metadata about the call...
              }
            }

            Response Expected:
            ```
            {
              "message": {
                 "role": "assistant",
                 "content": "The ocean is blue because water absorbs everything but blue.",
              }, // YOU CAN RETURN THE EXACT RESPONSE TO SPEAK
              "documents": [
                {
                  "content": "The ocean is blue primarily because water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible to our eyes.",
                  "similarity": 1
                },
                {
                  "content": "Blue light is scattered more by the water molecules than other colors, enhancing the blue appearance of the ocean.",
                  "similarity": .5
                }
              ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL
            }
            ```
          allOf:
            - $ref: '#/components/schemas/Server'
      required:
        - provider
        - server
    AnthropicThinkingConfig:
      type: object
      properties:
        type:
          type: string
          enum:
            - enabled
        budgetTokens:
          type: number
          description: |-
            The maximum number of tokens to allocate for thinking.
            Must be between 1024 and 100000 tokens.
          minimum: 1024
          maximum: 100000
      required:
        - type
        - budgetTokens
    GoogleRealtimeConfig:
      type: object
      properties:
        topP:
          type: number
          description: >-
            This is the nucleus sampling parameter that controls the cumulative
            probability of tokens considered during text generation.

            Only applicable with the Gemini Flash 2.0 Multimodal Live API.
        topK:
          type: number
          description: >-
            This is the top-k sampling parameter that limits the number of
            highest probability tokens considered during text generation.

            Only applicable with the Gemini Flash 2.0 Multimodal Live API.
        presencePenalty:
          type: number
          description: >-
            This is the presence penalty parameter that influences the model's
            likelihood to repeat information by penalizing tokens based on their
            presence in the text.

            Only applicable with the Gemini Flash 2.0 Multimodal Live API.
        frequencyPenalty:
          type: number
          description: >-
            This is the frequency penalty parameter that influences the model's
            likelihood to repeat tokens by penalizing them based on their
            frequency in the text.

            Only applicable with the Gemini Flash 2.0 Multimodal Live API.
        speechConfig:
          description: >-
            This is the speech configuration object that defines the voice
            settings to be used for the model's speech output.

            Only applicable with the Gemini Flash 2.0 Multimodal Live API.
          allOf:
            - $ref: '#/components/schemas/GeminiMultimodalLiveSpeechConfig'
    ChunkPlan:
      type: object
      properties:
        enabled:
          type: boolean
          description: >-
            This determines whether the model output is chunked before being
            sent to the voice provider. Default `true`.


            Usage:

            - To rely on the voice provider's audio generation logic, set this
            to `false`.

            - If seeing issues with quality, set this to `true`.


            If disabled, cozmox-provided audio control tokens like <flush />
            will not work.


            @default true
          example: true
        minCharacters:
          type: number
          description: |-
            This is the minimum number of characters in a chunk.

            Usage:
            - To increase quality, set this to a higher value.
            - To decrease latency, set this to a lower value.

            @default 30
          minimum: 1
          maximum: 80
          example: 30
        punctuationBoundaries:
          type: array
          description: >-
            These are the punctuations that are considered valid boundaries for
            a chunk to be created.


            Usage:

            - To increase quality, constrain to fewer boundaries.

            - To decrease latency, enable all.


            Default is automatically set to balance the trade-off between
            quality and latency based on the provider.
          enum:
            - 。
            - ，
            - .
            - '!'
            - '?'
            - ;
            - )
            - ،
            - ۔
            - ।
            - ॥
            - '|'
            - '||'
            - ','
            - ':'
          example:
            - 。
            - ，
            - .
            - '!'
            - '?'
            - ;
            - ،
            - ۔
            - ।
            - ॥
            - '|'
            - '||'
            - ','
            - ':'
          items:
            type: string
            enum:
              - 。
              - ，
              - .
              - '!'
              - '?'
              - ;
              - )
              - ،
              - ۔
              - ।
              - ॥
              - '|'
              - '||'
              - ','
              - ':'
        formatPlan:
          description: >-
            This is the plan for formatting the chunk before it is sent to the
            voice provider.
          allOf:
            - $ref: '#/components/schemas/FormatPlan'
    FallbackPlan:
      type: object
      properties:
        voices:
          type: array
          description: >-
            This is the list of voices to fallback to in the event that the
            primary voice provider fails.
          items:
            oneOf:
              - $ref: '#/components/schemas/FallbackAzureVoice'
                title: Azure
              - $ref: '#/components/schemas/FallbackCartesiaVoice'
                title: Cartesia
              - $ref: '#/components/schemas/FallbackHumeVoice'
                title: Hume
              - $ref: '#/components/schemas/FallbackCustomVoice'
                title: CustomVoice
              - $ref: '#/components/schemas/FallbackDeepgramVoice'
                title: Deepgram
              - $ref: '#/components/schemas/FallbackElevenLabsVoice'
                title: ElevenLabs
              - $ref: '#/components/schemas/FallbackcozmoxVoice'
                title: cozmox
              - $ref: '#/components/schemas/FallbackLMNTVoice'
                title: LMNT
              - $ref: '#/components/schemas/FallbackOpenAIVoice'
                title: OpenAI
              - $ref: '#/components/schemas/FallbackPlayHTVoice'
                title: PlayHT
              - $ref: '#/components/schemas/FallbackRimeAIVoice'
                title: RimeAI
              - $ref: '#/components/schemas/FallbackSmallestAIVoice'
                title: Smallest AI
              - $ref: '#/components/schemas/FallbackTavusVoice'
                title: TavusVoice
              - $ref: '#/components/schemas/FallbackNeuphonicVoice'
                title: Neuphonic
              - $ref: '#/components/schemas/FallbackSesameVoice'
                title: Sesame
              - $ref: '#/components/schemas/FallbackInworldVoice'
                title: Inworld
      required:
        - voices
    CartesiaExperimentalControls:
      type: object
      properties:
        speed:
          oneOf:
            - type: string
              enum:
                - slowest
                - slow
                - normal
                - fast
                - fastest
              example: normal
            - type: number
              minimum: -1
              maximum: 1
              example: 0.5
        emotion:
          type: string
          enum:
            - anger:lowest
            - anger:low
            - anger:high
            - anger:highest
            - positivity:lowest
            - positivity:low
            - positivity:high
            - positivity:highest
            - surprise:lowest
            - surprise:low
            - surprise:high
            - surprise:highest
            - sadness:lowest
            - sadness:low
            - sadness:high
            - sadness:highest
            - curiosity:lowest
            - curiosity:low
            - curiosity:high
            - curiosity:highest
          example:
            - happiness:high
    TavusConversationProperties:
      type: object
      properties:
        maxCallDuration:
          type: number
          description: >-
            The maximum duration of the call in seconds. The default
            `maxCallDuration` is 3600 seconds (1 hour).

            Once the time limit specified by this parameter has been reached,
            the conversation will automatically shut down.
        participantLeftTimeout:
          type: number
          description: >-
            The duration in seconds after which the call will be automatically
            shut down once the last participant leaves.
        participantAbsentTimeout:
          type: number
          description: >-
            Starting from conversation creation, the duration in seconds after
            which the call will be automatically shut down if no participant
            joins the call.

            Default is 300 seconds (5 minutes).
        enableRecording:
          type: boolean
          description: If true, the user will be able to record the conversation.
        enableTranscription:
          type: boolean
          description: >-
            If true, the user will be able to transcribe the conversation.

            You can find more instructions on displaying transcriptions if you
            are using your custom DailyJS components here.

            You need to have an event listener on Daily that listens for
            `app-messages`.
        applyGreenscreen:
          type: boolean
          description: >-
            If true, the background will be replaced with a greenscreen (RGB
            values: `[0, 255, 155]`).

            You can use WebGL on the frontend to make the greenscreen
            transparent or change its color.
        language:
          type: string
          description: >-
            The language of the conversation. Please provide the **full language
            name**, not the two-letter code.

            If you are using your own TTS voice, please ensure it supports the
            language you provide.

            If you are using a stock replica or default persona, please note
            that only ElevenLabs and Cartesia supported languages are available.

            You can find a full list of supported languages for Cartesia here,
            for ElevenLabs here, and for PlayHT here.
        recordingS3BucketName:
          type: string
          description: The name of the S3 bucket where the recording will be stored.
        recordingS3BucketRegion:
          type: string
          description: The region of the S3 bucket where the recording will be stored.
        awsAssumeRoleArn:
          type: string
          description: The ARN of the role that will be assumed to access the S3 bucket.
    VoicemailDetectionBackoffPlan:
      type: object
      properties:
        startAtSeconds:
          type: number
          description: >-
            This is the number of seconds to wait before starting the first
            retry attempt.
          minimum: 0
          default: 5
        frequencySeconds:
          type: number
          description: This is the interval in seconds between retry attempts.
          minimum: 2.5
          default: 5
        maxRetries:
          type: number
          description: This is the maximum number of retry attempts before giving up.
          minimum: 1
          maximum: 10
          default: 6
    AzureBlobStorageBucketPlan:
      type: object
      properties:
        connectionString:
          type: string
          description: This is the blob storage connection string for the Azure resource.
        containerName:
          type: string
          description: This is the container name for the Azure blob storage.
        path:
          type: string
          description: >-
            This is the path where call artifacts will be stored.


            Usage:

            - To store call artifacts in a specific folder, set this to the full
            path. Eg. "/folder-name1/folder-name2".

            - To store call artifacts in the root of the bucket, leave this
            blank.


            @default "/"
      required:
        - connectionString
        - containerName
    SipTrunkGateway:
      type: object
      properties:
        ip:
          type: string
          description: >-
            This is the address of the gateway. It can be an IPv4 address like
            1.1.1.1 or a fully qualified domain name like
            my-sip-trunk.pstn.twilio.com.
        port:
          type: number
          description: |-
            This is the port number of the gateway. Default is 5060.

            @default 5060
          minimum: 1
          maximum: 65535
        netmask:
          type: number
          description: |-
            This is the netmask of the gateway. Defaults to 32.

            @default 32
          minimum: 24
          maximum: 32
        inboundEnabled:
          type: boolean
          description: >-
            This is whether inbound calls are allowed from this gateway. Default
            is true.


            @default true
        outboundEnabled:
          type: boolean
          description: >-
            This is whether outbound calls should be sent to this gateway.
            Default is true.


            Note, if netmask is less than 32, it doesn't affect the outbound IPs
            that are tried. 1 attempt is made to `ip:port`.


            @default true
        outboundProtocol:
          type: string
          description: >-
            This is the protocol to use for SIP signaling outbound calls.
            Default is udp.


            @default udp
          enum:
            - tls/srtp
            - tcp
            - tls
            - udp
        optionsPingEnabled:
          type: boolean
          description: >-
            This is whether to send options ping to the gateway. This can be
            used to check if the gateway is reachable. Default is false.


            This is useful for high availability setups where you want to check
            if the gateway is reachable before routing calls to it. Note, if no
            gateway for a trunk is reachable, outbound calls will be rejected.


            @default false
      required:
        - ip
    SipTrunkOutboundAuthenticationPlan:
      type: object
      properties:
        authPassword:
          type: string
          description: This is not returned in the API.
        authUsername:
          type: string
        sipRegisterPlan:
          description: >-
            This can be used to configure if SIP register is required by the SIP
            trunk. If not provided, no SIP registration will be attempted.
          allOf:
            - $ref: '#/components/schemas/SipTrunkOutboundSipRegisterPlan'
    SbcConfiguration:
      type: object
      properties: {}
    CloudflareR2BucketPlan:
      type: object
      properties:
        accessKeyId:
          type: string
          description: Cloudflare R2 Access key ID.
        secretAccessKey:
          type: string
          description: Cloudflare R2 access key secret. This is not returned in the API.
        url:
          type: string
          description: Cloudflare R2 base url.
        name:
          type: string
          description: This is the name of the bucket.
        path:
          type: string
          description: >-
            This is the path where call artifacts will be stored.


            Usage:

            - To store call artifacts in a specific folder, set this to the full
            path. Eg. "/folder-name1/folder-name2".

            - To store call artifacts in the root of the bucket, leave this
            blank.


            @default "/"
      required:
        - name
    OAuth2AuthenticationPlan:
      type: object
      properties:
        type:
          type: string
          enum:
            - oauth2
        url:
          type: string
          description: This is the OAuth2 URL.
        clientId:
          type: string
          description: This is the OAuth2 client ID.
        clientSecret:
          type: string
          description: This is the OAuth2 client secret.
        scope:
          type: string
          description: This is the scope of the OAuth2 token.
          maxLength: 1000
      required:
        - type
        - url
        - clientId
        - clientSecret
    GcpKey:
      type: object
      properties:
        type:
          type: string
          description: This is the type of the key. Most likely, this is "service_account".
        projectId:
          type: string
          description: This is the ID of the Google Cloud project associated with this key.
        privateKeyId:
          type: string
          description: This is the unique identifier for the private key.
        privateKey:
          type: string
          description: |-
            This is the private key in PEM format.

            Note: This is not returned in the API.
        clientEmail:
          type: string
          description: This is the email address associated with the service account.
        clientId:
          type: string
          description: This is the unique identifier for the client.
        authUri:
          type: string
          description: This is the URI for the auth provider's authorization endpoint.
        tokenUri:
          type: string
          description: This is the URI for the auth provider's token endpoint.
        authProviderX509CertUrl:
          type: string
          description: >-
            This is the URL of the public x509 certificate for the auth
            provider.
        clientX509CertUrl:
          type: string
          description: This is the URL of the public x509 certificate for the client.
        universeDomain:
          type: string
          description: >-
            This is the domain associated with the universe this service account
            belongs to.
      required:
        - type
        - projectId
        - privateKeyId
        - privateKey
        - clientEmail
        - clientId
        - authUri
        - tokenUri
        - authProviderX509CertUrl
        - clientX509CertUrl
        - universeDomain
    BucketPlan:
      type: object
      properties:
        name:
          type: string
          description: This is the name of the bucket.
        region:
          type: string
          description: >-
            This is the region of the bucket.


            Usage:

            - If `credential.type` is `aws`, then this is required.

            - If `credential.type` is `gcp`, then this is optional since GCP
            allows buckets to be accessed without a region but region is
            required for data residency requirements. Read here:
            https://cloud.google.com/storage/docs/request-endpoints


            This overrides the `credential.region` field if it is provided.
        path:
          type: string
          description: >-
            This is the path where call artifacts will be stored.


            Usage:

            - To store call artifacts in a specific folder, set this to the full
            path. Eg. "/folder-name1/folder-name2".

            - To store call artifacts in the root of the bucket, leave this
            blank.


            @default "/"
        hmacAccessKey:
          type: string
          description: >-
            This is the HMAC access key offered by GCP for interoperability with
            S3 clients. Here is the guide on how to create:
            https://cloud.google.com/storage/docs/authentication/managing-hmackeys#console


            Usage:

            - If `credential.type` is `gcp`, then this is required.

            - If `credential.type` is `aws`, then this is not required since
            credential.awsAccessKeyId is used instead.
        hmacSecret:
          type: string
          description: >-
            This is the secret for the HMAC access key. Here is the guide on how
            to create:
            https://cloud.google.com/storage/docs/authentication/managing-hmackeys#console


            Usage:

            - If `credential.type` is `gcp`, then this is required.

            - If `credential.type` is `aws`, then this is not required since
            credential.awsSecretAccessKey is used instead.


            Note: This is not returned in the API.
      required:
        - name
    SupabaseBucketPlan:
      type: object
      properties:
        region:
          type: string
          description: >-
            This is the S3 Region. It should look like us-east-1

            It should be one of the supabase regions defined in the
            SUPABASE_REGION enum

            Check https://supabase.com/docs/guides/platform/regions for up to
            date regions
          enum:
            - us-west-1
            - us-east-1
            - us-east-2
            - ca-central-1
            - eu-west-1
            - eu-west-2
            - eu-west-3
            - eu-central-1
            - eu-central-2
            - eu-north-1
            - ap-south-1
            - ap-southeast-1
            - ap-northeast-1
            - ap-northeast-2
            - ap-southeast-2
            - sa-east-1
        url:
          type: string
          description: |-
            This is the S3 compatible URL for Supabase S3
            This should look like https://<project-ID>.supabase.co/storage/v1/s3
        accessKeyId:
          type: string
          description: |-
            This is the Supabase S3 Access Key ID.
            The user creates this in the Supabase project Storage settings
        secretAccessKey:
          type: string
          description: >-
            This is the Supabase S3 Secret Access Key.

            The user creates this in the Supabase project Storage settings along
            with the access key id
        name:
          type: string
          description: >-
            This is the Supabase S3 Bucket Name.

            The user must create this in Supabase under Storage > Buckets

            A bucket that does not exist will not be checked now, but file
            uploads will fail
        path:
          type: string
          description: >-
            This is the Supabase S3 Bucket Folder Path.

            The user can create this in Supabase under Storage > Buckets

            A path that does not exist will not be checked now, but file uploads
            will fail

            A Path is like a folder in the bucket

            Eg. If the bucket is called "my-bucket" and the path is "my-folder",
            the full path is "my-bucket/my-folder"
      required:
        - region
        - url
        - accessKeyId
        - secretAccessKey
        - name
    HMACAuthenticationPlan:
      type: object
      properties:
        type:
          type: string
          enum:
            - hmac
        secretKey:
          type: string
          description: This is the HMAC secret key used to sign requests.
        algorithm:
          type: string
          enum:
            - sha256
            - sha512
            - sha1
          description: This is the HMAC algorithm to use for signing.
        signatureHeader:
          type: string
          description: >-
            This is the header name where the signature will be sent. Defaults
            to 'x-signature'.
        timestampHeader:
          type: string
          description: >-
            This is the header name where the timestamp will be sent. Defaults
            to 'x-timestamp'.
        signaturePrefix:
          type: string
          description: >-
            This is the prefix for the signature. For example, 'sha256=' for
            GitHub-style signatures.
        includeTimestamp:
          type: boolean
          description: >-
            Whether to include a timestamp in the signature payload. Defaults to
            true.
        payloadFormat:
          type: string
          description: >-
            Custom payload format. Use {body} for request body, {timestamp} for
            timestamp, {method} for HTTP method, {url} for URL, {svix-id} for
            unique message ID. Defaults to '{timestamp}.{body}'.
        messageIdHeader:
          type: string
          description: >-
            This is the header name where the unique message ID will be sent.
            Used for Svix-style webhooks.
        signatureEncoding:
          type: string
          enum:
            - hex
            - base64
          description: The encoding format for the signature. Defaults to 'hex'.
        secretIsBase64:
          type: boolean
          description: >-
            Whether the secret key is base64-encoded and should be decoded
            before use. Defaults to false.
      required:
        - type
        - secretKey
        - algorithm
    Oauth2AuthenticationSession:
      type: object
      properties:
        accessToken:
          type: string
          description: This is the OAuth2 access token.
        expiresAt:
          format: date-time
          type: string
          description: This is the OAuth2 access token expiration.
        refreshToken:
          type: string
          description: This is the OAuth2 refresh token.
    TransferAssistantHookAction:
      type: object
      properties:
        type:
          type: string
          description: This is the type of action - must be "transfer"
          enum:
            - transfer
        destination:
          description: >-
            This is the destination details for the transfer - can be a phone
            number or SIP URI
          oneOf:
            - $ref: '#/components/schemas/TransferDestinationNumber'
              title: NumberTransferDestination
            - $ref: '#/components/schemas/TransferDestinationSip'
              title: SipTransferDestination
      required:
        - type
    FunctionCallAssistantHookAction:
      type: object
      properties:
        messages:
          type: array
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
          items:
            oneOf:
              - $ref: '#/components/schemas/ToolMessageStart'
                title: ToolMessageStart
              - $ref: '#/components/schemas/ToolMessageComplete'
                title: ToolMessageComplete
              - $ref: '#/components/schemas/ToolMessageFailed'
                title: ToolMessageFailed
              - $ref: '#/components/schemas/ToolMessageDelayed'
                title: ToolMessageDelayed
        type:
          type: string
          enum:
            - function
          description: The type of tool. "function" for Function tool.
        async:
          type: boolean
          example: false
          description: |-
            This determines if the tool is async.

              If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.

              If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.

              Defaults to synchronous (`false`).
        server:
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
          allOf:
            - $ref: '#/components/schemas/Server'
        function:
          description: >-
            This is the function definition of the tool.


            For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled
            based on tool-specific fields like `tool.destinations`. But, even in
            those cases, you can provide a custom function definition for
            advanced use cases.


            An example of an advanced use case is if you want to customize the
            message that's spoken for `endCall` tool. You can specify a function
            where it returns an argument "reason". Then, in `messages` array,
            you can have many "request-complete" messages. One of these messages
            will be triggered if the `messages[].conditions` matches the
            "reason" argument.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunction'
      required:
        - type
    AssistantHookFilter:
      type: object
      properties:
        type:
          type: string
          description: This is the type of filter - currently only "oneOf" is supported
          enum:
            - oneOf
          maxLength: 1000
        key:
          type: string
          description: This is the key to filter on (e.g. "call.endedReason")
          maxLength: 1000
        oneOf:
          description: This is the array of possible values to match against
          type: array
          items:
            type: string
            maxLength: 1000
      required:
        - type
        - key
        - oneOf
    SayAssistantHookAction:
      type: object
      properties:
        type:
          type: string
          description: This is the type of action - must be "say"
          enum:
            - say
        exact:
          type: object
          description: This is the message to say
      required:
        - type
        - exact
    SmartDenoisingPlan:
      type: object
      properties:
        enabled:
          type: boolean
          description: Whether smart denoising using Krisp is enabled.
          default: false
    FourierDenoisingPlan:
      type: object
      properties:
        enabled:
          type: boolean
          description: >-
            Whether Fourier denoising is enabled. Note that this is experimental
            and may not work as expected.
          default: false
        mediaDetectionEnabled:
          type: boolean
          description: >-
            Whether automatic media detection is enabled. When enabled, the
            filter will automatically

            detect consistent background TV/music/radio and switch to more
            aggressive filtering settings.

            Only applies when enabled is true.
          example: true
          default: true
        staticThreshold:
          type: number
          description: >-
            Static threshold in dB used as fallback when no baseline is
            established.
          example: -35
          minimum: -80
          maximum: 0
          default: -35
        baselineOffsetDb:
          type: number
          description: >-
            How far below the rolling baseline to filter audio, in dB.

            Lower values (e.g., -10) are more aggressive, higher values (e.g.,
            -20) are more conservative.
          example: -15
          minimum: -30
          maximum: -5
          default: -15
        windowSizeMs:
          type: number
          description: >-
            Rolling window size in milliseconds for calculating the audio
            baseline.

            Larger windows adapt more slowly but are more stable.
          example: 3000
          minimum: 1000
          maximum: 30000
          default: 3000
        baselinePercentile:
          type: number
          description: >-
            Percentile to use for baseline calculation (1-99).

            Higher percentiles (e.g., 85) focus on louder speech, lower
            percentiles (e.g., 50) include quieter speech.
          example: 85
          minimum: 1
          maximum: 99
          default: 85
    SummaryPlan:
      type: object
      properties:
        messages:
          description: >-
            These are the messages used to generate the summary.


            @default: ```

            [
              {
                "role": "system",
                "content": "You are an expert note-taker. You will be given a transcript of a call. Summarize the call in 2-3 sentences. DO NOT return anything except the summary."
              },
              {
                "role": "user",
                "content": "Here is the transcript:\n\n{{transcript}}\n\n. Here is the ended reason of the call:\n\n{{endedReason}}\n\n"
              }
            ]```


            You can customize by providing any messages you want.


            Here are the template variables available:

            - {{transcript}}: The transcript of the call from
            `call.artifact.transcript` 

            - {{systemPrompt}}: The system prompt of the call from
            `assistant.model.messages[type=system].content` 

            - {{endedReason}}: The ended reason of the call from
            `call.endedReason`
          type: array
          items:
            type: object
        enabled:
          type: boolean
          description: >-
            This determines whether a summary is generated and stored in
            `call.analysis.summary`. Defaults to true.


            Usage:

            - If you want to disable the summary, set this to false.


            @default true
        timeoutSeconds:
          type: number
          description: >-
            This is how long the request is tried before giving up. When request
            times out, `call.analysis.summary` will be empty.


            Usage:

            - To guarantee the summary is generated, set this value high. Note,
            this will delay the end of call report in cases where model is slow
            to respond.


            @default 5 seconds
          minimum: 1
          maximum: 60
    StructuredDataPlan:
      type: object
      properties:
        messages:
          description: >-
            These are the messages used to generate the structured data.


            @default: ```

            [
              {
                "role": "system",
                "content": "You are an expert data extractor. You will be given a transcript of a call. Extract structured data per the JSON Schema. DO NOT return anything except the structured data.\n\nJson Schema:\\n{{schema}}\n\nOnly respond with the JSON."
              },
              {
                "role": "user",
                "content": "Here is the transcript:\n\n{{transcript}}\n\n. Here is the ended reason of the call:\n\n{{endedReason}}\n\n"
              }
            ]```


            You can customize by providing any messages you want.


            Here are the template variables available:

            - {{transcript}}: the transcript of the call from
            `call.artifact.transcript`- {{systemPrompt}}: the system prompt of
            the call from `assistant.model.messages[type=system].content`-
            {{schema}}: the schema of the structured data from
            `structuredDataPlan.schema`- {{endedReason}}: the ended reason of
            the call from `call.endedReason`
          type: array
          items:
            type: object
        enabled:
          type: boolean
          description: >-
            This determines whether structured data is generated and stored in
            `call.analysis.structuredData`. Defaults to false.


            Usage:

            - If you want to extract structured data, set this to true and
            provide a `schema`.


            @default false
        schema:
          description: >-
            This is the schema of the structured data. The output is stored in
            `call.analysis.structuredData`.


            Complete guide on JSON Schema can be found
            [here](https://ajv.js.org/json-schema.html#json-data-type).
          allOf:
            - $ref: '#/components/schemas/JsonSchema'
        timeoutSeconds:
          type: number
          description: >-
            This is how long the request is tried before giving up. When request
            times out, `call.analysis.structuredData` will be empty.


            Usage:

            - To guarantee the structured data is generated, set this value
            high. Note, this will delay the end of call report in cases where
            model is slow to respond.


            @default 5 seconds
          minimum: 1
          maximum: 60
    StructuredDataMultiPlan:
      type: object
      properties:
        key:
          type: string
          description: This is the key of the structured data plan in the catalog.
        plan:
          description: This is an individual structured data plan in the catalog.
          allOf:
            - $ref: '#/components/schemas/StructuredDataPlan'
      required:
        - key
        - plan
    SuccessEvaluationPlan:
      type: object
      properties:
        rubric:
          type: string
          enum:
            - NumericScale
            - DescriptiveScale
            - Checklist
            - Matrix
            - PercentageScale
            - LikertScale
            - AutomaticRubric
            - PassFail
          description: >-
            This enforces the rubric of the evaluation. The output is stored in
            `call.analysis.successEvaluation`.


            Options include:

            - 'NumericScale': A scale of 1 to 10.

            - 'DescriptiveScale': A scale of Excellent, Good, Fair, Poor.

            - 'Checklist': A checklist of criteria and their status.

            - 'Matrix': A grid that evaluates multiple criteria across different
            performance levels.

            - 'PercentageScale': A scale of 0% to 100%.

            - 'LikertScale': A scale of Strongly Agree, Agree, Neutral,
            Disagree, Strongly Disagree.

            - 'AutomaticRubric': Automatically break down evaluation into
            several criteria, each with its own score.

            - 'PassFail': A simple 'true' if call passed, 'false' if not.


            Default is 'PassFail'.
        messages:
          description: >-
            These are the messages used to generate the success evaluation.


            @default: ```

            [
              {
                "role": "system",
                "content": "You are an expert call evaluator. You will be given a transcript of a call and the system prompt of the AI participant. Determine if the call was successful based on the objectives inferred from the system prompt. DO NOT return anything except the result.\n\nRubric:\\n{{rubric}}\n\nOnly respond with the result."
              },
              {
                "role": "user",
                "content": "Here is the transcript:\n\n{{transcript}}\n\n"
              },
              {
                "role": "user",
                "content": "Here was the system prompt of the call:\n\n{{systemPrompt}}\n\n. Here is the ended reason of the call:\n\n{{endedReason}}\n\n"
              }
            ]```


            You can customize by providing any messages you want.


            Here are the template variables available:

            - {{transcript}}: the transcript of the call from
            `call.artifact.transcript`- {{systemPrompt}}: the system prompt of
            the call from `assistant.model.messages[type=system].content`-
            {{rubric}}: the rubric of the success evaluation from
            `successEvaluationPlan.rubric`- {{endedReason}}: the ended reason of
            the call from `call.endedReason`
          type: array
          items:
            type: object
        enabled:
          type: boolean
          description: >-
            This determines whether a success evaluation is generated and stored
            in `call.analysis.successEvaluation`. Defaults to true.


            Usage:

            - If you want to disable the success evaluation, set this to false.


            @default true
        timeoutSeconds:
          type: number
          description: >-
            This is how long the request is tried before giving up. When request
            times out, `call.analysis.successEvaluation` will be empty.


            Usage:

            - To guarantee the success evaluation is generated, set this value
            high. Note, this will delay the end of call report in cases where
            model is slow to respond.


            @default 5 seconds
          minimum: 1
          maximum: 60
    TranscriptPlan:
      type: object
      properties:
        enabled:
          type: boolean
          description: >-
            This determines whether the transcript is stored in
            `call.artifact.transcript`. Defaults to true.


            @default true
          example: true
        assistantName:
          type: string
          description: >-
            This is the name of the assistant in the transcript. Defaults to
            'AI'.


            Usage:

            - If you want to change the name of the assistant in the transcript,
            set this. Example, here is what the transcript would look like with
            `assistantName` set to 'Buyer':

            ```

            User: Hello, how are you?

            Buyer: I'm fine.

            User: Do you want to buy a car?

            Buyer: No.

            ```


            @default 'AI'
        userName:
          type: string
          description: >-
            This is the name of the user in the transcript. Defaults to 'User'.


            Usage:

            - If you want to change the name of the user in the transcript, set
            this. Example, here is what the transcript would look like with
            `userName` set to 'Seller':

            ```

            Seller: Hello, how are you?

            AI: I'm fine.

            Seller: Do you want to buy a car?

            AI: No.

            ```


            @default 'User'
    cozmoxSmartEndpointingPlan:
      type: object
      properties:
        provider:
          type: string
          description: This is the provider for the smart endpointing plan.
          enum:
            - cozmox
            - livekit
            - custom-endpointing-model
          example: cozmox
      required:
        - provider
    LivekitSmartEndpointingPlan:
      type: object
      properties:
        provider:
          type: string
          description: This is the provider for the smart endpointing plan.
          enum:
            - cozmox
            - livekit
            - custom-endpointing-model
          example: livekit
        waitFunction:
          type: string
          description: >-
            This expression describes how long the bot will wait to start
            speaking based on the likelihood that the user has reached an
            endpoint.


            This is a millisecond valued function. It maps probabilities (real
            numbers on [0,1]) to milliseconds that the bot should wait before
            speaking ([0, \infty]). Any negative values that are returned are
            set to zero (the bot can't start talking in the past).


            A probability of zero represents very high confidence that the
            caller has stopped speaking, and would like the bot to speak to
            them. A probability of one represents very high confidence that the
            caller is still speaking.


            Under the hood, this is parsed into a mathjs expression. Whatever
            you use to write your expression needs to be valid with respect to
            mathjs


            @default "20 + 500 * sqrt(x) + 2500 * x^3"
          example:
            - 70 + 4000 * x
            - 200 + 8000 * x
            - 4000 * (1 - cos(pi * x))
      required:
        - provider
    CustomEndpointingModelSmartEndpointingPlan:
      type: object
      properties:
        provider:
          type: string
          description: >-
            This is the provider for the smart endpointing plan. Use
            `custom-endpointing-model` for custom endpointing providers that are
            not natively supported.
          enum:
            - cozmox
            - livekit
            - custom-endpointing-model
          example: custom-endpointing-model
        server:
          description: >-
            This is where the endpointing request will be sent. If not provided,
            will be sent to `assistant.server`. If that does not exist either,
            will be sent to `org.server`.


            Request Example:


            POST https://{server.url}

            Content-Type: application/json


            {
              "message": {
                "type": "call.endpointing.request",
                "messages": [
                  {
                    "role": "user",
                    "message": "Hello, how are you?",
                    "time": 1234567890,
                    "secondsFromStart": 0
                  }
                ],
                ...other metadata about the call...
              }
            }


            Response Expected:

            {
              "timeoutSeconds": 0.5
            }


            The timeout is the number of seconds to wait before considering the
            user's speech as finished. The endpointing timeout is automatically
            reset each time a new transcript is received (and another
            `call.endpointing.request` is sent).
          allOf:
            - $ref: '#/components/schemas/Server'
      required:
        - provider
    AssistantCustomEndpointingRule:
      type: object
      properties:
        type:
          type: string
          description: >-
            This endpointing rule is based on the last assistant message before
            customer started speaking.


            Flow:

            - Assistant speaks

            - Customer starts speaking

            - Customer transcription comes in

            - This rule is evaluated on the last assistant message

            - If a match is found based on `regex`, the endpointing timeout is
            set to `timeoutSeconds`


            Usage:

            - If you have yes/no questions in your use case like "are you
            interested in a loan?", you can set a shorter timeout.

            - If you have questions where the customer may pause to look up
            information like "what's my account number?", you can set a longer
            timeout.
          enum:
            - assistant
        regex:
          type: string
          description: >-
            This is the regex pattern to match.


            Note:

            - This works by using the `RegExp.test` method in Node.JS. Eg.
            `/hello/.test("hello there")` will return `true`.


            Hot tip:

            - In JavaScript, escape `\` when sending the regex pattern. Eg.
            `"hello\sthere"` will be sent over the wire as `"hellosthere"`. Send
            `"hello\\sthere"` instead.

            - `RegExp.test` does substring matching, so `/cat/.test("I love
            cats")` will return `true`. To do full string matching, send
            "^cat$".
        regexOptions:
          description: |-
            These are the options for the regex match. Defaults to all disabled.

            @default []
          type: array
          items:
            $ref: '#/components/schemas/RegexOption'
        timeoutSeconds:
          type: number
          description: This is the endpointing timeout in seconds, if the rule is matched.
          minimum: 0
          maximum: 15
      required:
        - type
        - regex
        - timeoutSeconds
    CustomerCustomEndpointingRule:
      type: object
      properties:
        type:
          type: string
          description: >-
            This endpointing rule is based on current customer message as they
            are speaking.


            Flow:

            - Assistant speaks

            - Customer starts speaking

            - Customer transcription comes in

            - This rule is evaluated on the current customer transcription

            - If a match is found based on `regex`, the endpointing timeout is
            set to `timeoutSeconds`


            Usage:

            - If you want to wait longer while customer is speaking numbers, you
            can set a longer timeout.
          enum:
            - customer
        regex:
          type: string
          description: >-
            This is the regex pattern to match.


            Note:

            - This works by using the `RegExp.test` method in Node.JS. Eg.
            `/hello/.test("hello there")` will return `true`.


            Hot tip:

            - In JavaScript, escape `\` when sending the regex pattern. Eg.
            `"hello\sthere"` will be sent over the wire as `"hellosthere"`. Send
            `"hello\\sthere"` instead.

            - `RegExp.test` does substring matching, so `/cat/.test("I love
            cats")` will return `true`. To do full string matching, send
            "^cat$".
        regexOptions:
          description: |-
            These are the options for the regex match. Defaults to all disabled.

            @default []
          type: array
          items:
            $ref: '#/components/schemas/RegexOption'
        timeoutSeconds:
          type: number
          description: This is the endpointing timeout in seconds, if the rule is matched.
          minimum: 0
          maximum: 15
      required:
        - type
        - regex
        - timeoutSeconds
    BothCustomEndpointingRule:
      type: object
      properties:
        type:
          type: string
          description: >-
            This endpointing rule is based on both the last assistant message
            and the current customer message as they are speaking.


            Flow:

            - Assistant speaks

            - Customer starts speaking

            - Customer transcription comes in

            - This rule is evaluated on the last assistant message and the
            current customer transcription

            - If assistant message matches `assistantRegex` AND customer message
            matches `customerRegex`, the endpointing timeout is set to
            `timeoutSeconds`


            Usage:

            - If you want to wait longer while customer is speaking numbers, you
            can set a longer timeout.
          enum:
            - both
        assistantRegex:
          type: string
          description: >-
            This is the regex pattern to match the assistant's message.


            Note:

            - This works by using the `RegExp.test` method in Node.JS. Eg.
            `/hello/.test("hello there")` will return `true`.


            Hot tip:

            - In JavaScript, escape `\` when sending the regex pattern. Eg.
            `"hello\sthere"` will be sent over the wire as `"hellosthere"`. Send
            `"hello\\sthere"` instead.

            - `RegExp.test` does substring matching, so `/cat/.test("I love
            cats")` will return `true`. To do full string matching, send
            "^cat$".
        assistantRegexOptions:
          description: >-
            These are the options for the assistant's message regex match.
            Defaults to all disabled.


            @default []
          type: array
          items:
            $ref: '#/components/schemas/RegexOption'
        customerRegex:
          type: string
        customerRegexOptions:
          description: >-
            These are the options for the customer's message regex match.
            Defaults to all disabled.


            @default []
          type: array
          items:
            $ref: '#/components/schemas/RegexOption'
        timeoutSeconds:
          type: number
          description: This is the endpointing timeout in seconds, if the rule is matched.
          minimum: 0
          maximum: 15
      required:
        - type
        - assistantRegex
        - customerRegex
        - timeoutSeconds
    TranscriptionEndpointingPlan:
      type: object
      properties:
        onPunctuationSeconds:
          type: number
          description: >-
            The minimum number of seconds to wait after transcription ending
            with punctuation before sending a request to the model. Defaults to
            0.1.


            This setting exists because the transcriber punctuates the
            transcription when it's more confident that customer has completed a
            thought.


            @default 0.1
          minimum: 0
          maximum: 3
          example: 0.1
        onNoPunctuationSeconds:
          type: number
          description: >-
            The minimum number of seconds to wait after transcription ending
            without punctuation before sending a request to the model. Defaults
            to 1.5.


            This setting exists to catch the cases where the transcriber was not
            confident enough to punctuate the transcription, but the customer is
            done and has been silent for a long time.


            @default 1.5
          minimum: 0
          maximum: 3
          example: 1.5
        onNumberSeconds:
          type: number
          description: >-
            The minimum number of seconds to wait after transcription ending
            with a number before sending a request to the model. Defaults to
            0.4.


            This setting exists because the transcriber will sometimes punctuate
            the transcription ending with a number, even though the customer
            hasn't uttered the full number. This happens commonly for long
            numbers when the customer reads the number in chunks.


            @default 0.5
          minimum: 0
          maximum: 3
          example: 0.5
    BackoffPlan:
      type: object
      properties:
        type:
          type: object
          description: |-
            This is the type of backoff plan to use. Defaults to fixed.

            @default fixed
          enum:
            - fixed
            - exponential
          example: fixed
        maxRetries:
          type: number
          description: >-
            This is the maximum number of retries to attempt if the request
            fails. Defaults to 0 (no retries).


            @default 0
          minimum: 0
          maximum: 10
          example: 0
        baseDelaySeconds:
          type: number
          description: >-
            This is the base delay in seconds. For linear backoff, this is the
            delay between each retry. For exponential backoff, this is the
            initial delay.
          minimum: 0
          maximum: 10
          example: 1
      required:
        - type
        - maxRetries
        - baseDelaySeconds
    FallbackAssemblyAITranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - assembly-ai
        language:
          type: string
          description: This is the language that will be set for the transcription.
          enum:
            - en
        confidenceThreshold:
          type: number
          description: |-
            Transcripts below this confidence threshold will be discarded.

            @default 0.4
          minimum: 0
          maximum: 1
          example: 0.4
        enableUniversalStreamingApi:
          type: boolean
          description: >-
            Uses Assembly AI's new Universal Streaming API. See:
            https://www.assemblyai.com/docs/speech-to-text/universal-streaming


            @default false
          example: false
        formatTurns:
          type: boolean
          description: >-
            This enables formatting of transcripts. Only used when
            `enableUniversalStreamingApi` is true.


            @default false
          example: false
        endOfTurnConfidenceThreshold:
          type: number
          description: >-
            The confidence threshold to use when determining if the end of a
            turn has been reached. Only used when `enableUniversalStreamingApi`
            is true.


            @default 0.7
          minimum: 0
          maximum: 1
          example: 0.7
        minEndOfTurnSilenceWhenConfident:
          type: number
          description: >-
            The minimum amount of silence in milliseconds required to detect end
            of turn when confident. Only used when `enableUniversalStreamingApi`
            is true.


            @default 160
          minimum: 0
          example: 160
        wordFinalizationMaxWaitTime:
          type: number
          description: >-
            The maximum wait time for word finalization. Only used when
            `enableUniversalStreamingApi` is true.


            @default 160
          minimum: 0
          example: 160
        maxTurnSilence:
          type: number
          description: >-
            The maximum amount of silence in milliseconds allowed in a turn
            before end of turn is triggered. Only used when
            `enableUniversalStreamingApi` is true.


            @default 400
          minimum: 0
          example: 400
        realtimeUrl:
          type: string
          description: The WebSocket URL that the transcriber connects to.
        wordBoost:
          description: Add up to 2500 characters of custom vocabulary.
          type: array
          items:
            type: string
            maxLength: 2500
        endUtteranceSilenceThreshold:
          type: number
          description: The duration of the end utterance silence threshold in milliseconds.
        disablePartialTranscripts:
          type: boolean
          description: >-
            Disable partial transcripts.

            Set to `true` to not receive partial transcripts. Defaults to
            `false`.
      required:
        - provider
    FallbackAzureSpeechTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - azure
        language:
          type: string
          description: >-
            This is the language that will be set for the transcription. The
            list of languages Azure supports can be found here:
            https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt
          enum:
            - af-ZA
            - am-ET
            - ar-AE
            - ar-BH
            - ar-DZ
            - ar-EG
            - ar-IL
            - ar-IQ
            - ar-JO
            - ar-KW
            - ar-LB
            - ar-LY
            - ar-MA
            - ar-OM
            - ar-PS
            - ar-QA
            - ar-SA
            - ar-SY
            - ar-TN
            - ar-YE
            - az-AZ
            - bg-BG
            - bn-IN
            - bs-BA
            - ca-ES
            - cs-CZ
            - cy-GB
            - da-DK
            - de-AT
            - de-CH
            - de-DE
            - el-GR
            - en-AU
            - en-CA
            - en-GB
            - en-GH
            - en-HK
            - en-IE
            - en-IN
            - en-KE
            - en-NG
            - en-NZ
            - en-PH
            - en-SG
            - en-TZ
            - en-US
            - en-ZA
            - es-AR
            - es-BO
            - es-CL
            - es-CO
            - es-CR
            - es-CU
            - es-DO
            - es-EC
            - es-ES
            - es-GQ
            - es-GT
            - es-HN
            - es-MX
            - es-NI
            - es-PA
            - es-PE
            - es-PR
            - es-PY
            - es-SV
            - es-US
            - es-UY
            - es-VE
            - et-EE
            - eu-ES
            - fa-IR
            - fi-FI
            - fil-PH
            - fr-BE
            - fr-CA
            - fr-CH
            - fr-FR
            - ga-IE
            - gl-ES
            - gu-IN
            - he-IL
            - hi-IN
            - hr-HR
            - hu-HU
            - hy-AM
            - id-ID
            - is-IS
            - it-CH
            - it-IT
            - ja-JP
            - jv-ID
            - ka-GE
            - kk-KZ
            - km-KH
            - kn-IN
            - ko-KR
            - lo-LA
            - lt-LT
            - lv-LV
            - mk-MK
            - ml-IN
            - mn-MN
            - mr-IN
            - ms-MY
            - mt-MT
            - my-MM
            - nb-NO
            - ne-NP
            - nl-BE
            - nl-NL
            - pa-IN
            - pl-PL
            - ps-AF
            - pt-BR
            - pt-PT
            - ro-RO
            - ru-RU
            - si-LK
            - sk-SK
            - sl-SI
            - so-SO
            - sq-AL
            - sr-RS
            - sv-SE
            - sw-KE
            - sw-TZ
            - ta-IN
            - te-IN
            - th-TH
            - tr-TR
            - uk-UA
            - ur-IN
            - uz-UZ
            - vi-VN
            - wuu-CN
            - yue-CN
            - zh-CN
            - zh-CN-shandong
            - zh-CN-sichuan
            - zh-HK
            - zh-TW
            - zu-ZA
      required:
        - provider
    FallbackCustomTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: >-
            This is the transcription provider that will be used. Use
            `custom-transcriber` for providers that are not natively supported.
          enum:
            - custom-transcriber
        server:
          description: >-
            This is where the transcription request will be sent.


            Usage:

            1. cozmox will initiate a websocket connection with `server.url`.


            2. cozmox will send an initial text frame with the sample rate.
            Format:

            ```
                {
                  "type": "start",
                  "encoding": "linear16", // 16-bit raw PCM format
                  "container": "raw",
                  "sampleRate": {{sampleRate}},
                  "channels": 2 // customer is channel 0, assistant is channel 1
                }
            ```


            3. cozmox will send the audio data in 16-bit raw PCM format as
            binary frames.


            4. You can read the messages something like this:

            ```

            ws.on('message', (data, isBinary) => {
              if (isBinary) {
                pcmBuffer = Buffer.concat([pcmBuffer, data]);
                console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`);
              } else {
                console.log('Received message:', JSON.parse(data.toString()));
              }
            });

            ```


            5. You will respond with transcriptions as you have them. Format:

            ```
             {
                "type": "transcriber-response",
                "transcription": "Hello, world!",
                "channel": "customer" | "assistant"
             }
            ```
          allOf:
            - $ref: '#/components/schemas/Server'
      required:
        - provider
        - server
    FallbackDeepgramTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - deepgram
        model:
          description: >-
            This is the Deepgram model that will be used. A list of models can
            be found here:
            https://developers.deepgram.com/docs/models-languages-overview
          oneOf:
            - type: string
              enum:
                - nova-3
                - nova-3-general
                - nova-3-medical
                - nova-2
                - nova-2-general
                - nova-2-meeting
                - nova-2-phonecall
                - nova-2-finance
                - nova-2-conversationalai
                - nova-2-voicemail
                - nova-2-video
                - nova-2-medical
                - nova-2-drivethru
                - nova-2-automotive
                - nova
                - nova-general
                - nova-phonecall
                - nova-medical
                - enhanced
                - enhanced-general
                - enhanced-meeting
                - enhanced-phonecall
                - enhanced-finance
                - base
                - base-general
                - base-meeting
                - base-phonecall
                - base-finance
                - base-conversationalai
                - base-voicemail
                - base-video
                - whisper
            - type: string
        language:
          type: string
          description: >-
            This is the language that will be set for the transcription. The
            list of languages Deepgram supports can be found here:
            https://developers.deepgram.com/docs/models-languages-overview
          enum:
            - ar
            - az
            - ba
            - bg
            - br
            - ca
            - cs
            - da
            - da-DK
            - de
            - de-CH
            - el
            - en
            - en-AU
            - en-GB
            - en-IN
            - en-NZ
            - en-US
            - es
            - es-419
            - es-LATAM
            - et
            - eu
            - fi
            - fr
            - fr-CA
            - ha
            - haw
            - he
            - hi
            - hi-Latn
            - hu
            - id
            - is
            - it
            - ja
            - jw
            - kn
            - ko
            - ko-KR
            - ln
            - lt
            - lv
            - mk
            - ms
            - multi
            - nl
            - nl-BE
            - 'no'
            - pl
            - pt
            - pt-BR
            - ro
            - ru
            - sk
            - sl
            - sn
            - so
            - sr
            - su
            - sv
            - sv-SE
            - ta
            - taq
            - th
            - th-TH
            - tr
            - tt
            - uk
            - ur
            - vi
            - yo
            - zh
            - zh-CN
            - zh-HK
            - zh-Hans
            - zh-Hant
            - zh-TW
        smartFormat:
          type: boolean
          description: >-
            This will be use smart format option provided by Deepgram. It's
            default disabled because it can sometimes format numbers as times
            but it's getting better.
          example: false
        mipOptOut:
          type: boolean
          description: >-
            If set to true, this will add mip_opt_out=true as a query parameter
            of all API requests. See
            https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out


            This will only be used if you are using your own Deepgram API key.


            @default false
          example: false
          default: false
        numerals:
          type: boolean
          description: >-
            If set to true, this will cause deepgram to convert spoken numbers
            to literal numerals. For example, "my phone number is
            nine-seven-two..." would become "my phone number is 972..."


            @default false
          example: false
        confidenceThreshold:
          type: number
          description: |-
            Transcripts below this confidence threshold will be discarded.

            @default 0.4
          minimum: 0
          maximum: 1
          example: 0.4
        keywords:
          description: >-
            These keywords are passed to the transcription model to help it pick
            up use-case specific words. Anything that may not be a common word,
            like your company name, should be added here.
          type: array
          items:
            type: string
            pattern: /^\p{L}[\p{L}\d]*(?::[+-]?\d+)?$/u
        keyterm:
          description: >-
            Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for
            important keyterms or phrases up to 90%.
          type: array
          items:
            type: string
        endpointing:
          type: number
          description: >-
            This is the timeout after which Deepgram will send transcription on
            user silence. You can read in-depth documentation here:
            https://developers.deepgram.com/docs/endpointing.


            Here are the most important bits:

            - Defaults to 10. This is recommended for most use cases to optimize
            for latency.

            - 10 can cause some missing transcriptions since because of the
            shorter context. This mostly happens for one-word utterances. For
            those uses cases, it's recommended to try 300. It will add a bit of
            latency but the quality and reliability of the experience will be
            better.

            - If neither 10 nor 300 work, contact support@cozmox.ai and we'll
            find another solution.


            @default 10
          minimum: 10
          maximum: 500
      required:
        - provider
    FallbackElevenLabsTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - 11labs
        model:
          type: string
          description: This is the model that will be used for the transcription.
          enum:
            - scribe_v1
        language:
          type: string
          enum:
            - aa
            - ab
            - ae
            - af
            - ak
            - am
            - an
            - ar
            - as
            - av
            - ay
            - az
            - ba
            - be
            - bg
            - bh
            - bi
            - bm
            - bn
            - bo
            - br
            - bs
            - ca
            - ce
            - ch
            - co
            - cr
            - cs
            - cu
            - cv
            - cy
            - da
            - de
            - dv
            - dz
            - ee
            - el
            - en
            - eo
            - es
            - et
            - eu
            - fa
            - ff
            - fi
            - fj
            - fo
            - fr
            - fy
            - ga
            - gd
            - gl
            - gn
            - gu
            - gv
            - ha
            - he
            - hi
            - ho
            - hr
            - ht
            - hu
            - hy
            - hz
            - ia
            - id
            - ie
            - ig
            - ii
            - ik
            - io
            - is
            - it
            - iu
            - ja
            - jv
            - ka
            - kg
            - ki
            - kj
            - kk
            - kl
            - km
            - kn
            - ko
            - kr
            - ks
            - ku
            - kv
            - kw
            - ky
            - la
            - lb
            - lg
            - li
            - ln
            - lo
            - lt
            - lu
            - lv
            - mg
            - mh
            - mi
            - mk
            - ml
            - mn
            - mr
            - ms
            - mt
            - my
            - na
            - nb
            - nd
            - ne
            - ng
            - nl
            - nn
            - 'no'
            - nr
            - nv
            - ny
            - oc
            - oj
            - om
            - or
            - os
            - pa
            - pi
            - pl
            - ps
            - pt
            - qu
            - rm
            - rn
            - ro
            - ru
            - rw
            - sa
            - sc
            - sd
            - se
            - sg
            - si
            - sk
            - sl
            - sm
            - sn
            - so
            - sq
            - sr
            - ss
            - st
            - su
            - sv
            - sw
            - ta
            - te
            - tg
            - th
            - ti
            - tk
            - tl
            - tn
            - to
            - tr
            - ts
            - tt
            - tw
            - ty
            - ug
            - uk
            - ur
            - uz
            - ve
            - vi
            - vo
            - wa
            - wo
            - xh
            - yi
            - yue
            - yo
            - za
            - zh
            - zu
      required:
        - provider
    FallbackGladiaTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - gladia
        model:
          description: This is the Gladia model that will be used. Default is 'fast'
          oneOf:
            - enum:
                - fast
                - accurate
                - solaria-1
        languageBehaviour:
          description: >-
            Defines how the transcription model detects the audio language.
            Default value is 'automatic single language'.
          oneOf:
            - type: string
              enum:
                - manual
                - automatic single language
                - automatic multiple languages
        language:
          type: string
          description: >-
            Defines the language to use for the transcription. Required when
            languageBehaviour is 'manual'.
          enum:
            - af
            - sq
            - am
            - ar
            - hy
            - as
            - az
            - ba
            - eu
            - be
            - bn
            - bs
            - br
            - bg
            - ca
            - zh
            - hr
            - cs
            - da
            - nl
            - en
            - et
            - fo
            - fi
            - fr
            - gl
            - ka
            - de
            - el
            - gu
            - ht
            - ha
            - haw
            - he
            - hi
            - hu
            - is
            - id
            - it
            - ja
            - jv
            - kn
            - kk
            - km
            - ko
            - lo
            - la
            - lv
            - ln
            - lt
            - lb
            - mk
            - mg
            - ms
            - ml
            - mt
            - mi
            - mr
            - mn
            - my
            - ne
            - 'no'
            - nn
            - oc
            - ps
            - fa
            - pl
            - pt
            - pa
            - ro
            - ru
            - sa
            - sr
            - sn
            - sd
            - si
            - sk
            - sl
            - so
            - es
            - su
            - sw
            - sv
            - tl
            - tg
            - ta
            - tt
            - te
            - th
            - bo
            - tr
            - tk
            - uk
            - ur
            - uz
            - vi
            - cy
            - yi
            - yo
        languages:
          type: string
          description: >-
            Defines the languages to use for the transcription. Required when
            languageBehaviour is 'manual'.
          enum:
            - af
            - sq
            - am
            - ar
            - hy
            - as
            - az
            - ba
            - eu
            - be
            - bn
            - bs
            - br
            - bg
            - ca
            - zh
            - hr
            - cs
            - da
            - nl
            - en
            - et
            - fo
            - fi
            - fr
            - gl
            - ka
            - de
            - el
            - gu
            - ht
            - ha
            - haw
            - he
            - hi
            - hu
            - is
            - id
            - it
            - ja
            - jv
            - kn
            - kk
            - km
            - ko
            - lo
            - la
            - lv
            - ln
            - lt
            - lb
            - mk
            - mg
            - ms
            - ml
            - mt
            - mi
            - mr
            - mn
            - my
            - ne
            - 'no'
            - nn
            - oc
            - ps
            - fa
            - pl
            - pt
            - pa
            - ro
            - ru
            - sa
            - sr
            - sn
            - sd
            - si
            - sk
            - sl
            - so
            - es
            - su
            - sw
            - sv
            - tl
            - tg
            - ta
            - tt
            - te
            - th
            - bo
            - tr
            - tk
            - uk
            - ur
            - uz
            - vi
            - cy
            - yi
            - yo
        transcriptionHint:
          type: string
          description: >-
            Provides a custom vocabulary to the model to improve accuracy of
            transcribing context specific words, technical terms, names, etc. If
            empty, this argument is ignored.

            ⚠️ Warning ⚠️: Please be aware that the transcription_hint field has
            a character limit of 600. If you provide a transcription_hint longer
            than 600 characters, it will be automatically truncated to meet this
            limit.
          maxLength: 600
          example: custom vocabulary
        prosody:
          type: boolean
          description: >-
            If prosody is true, you will get a transcription that can contain
            prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)…
            Default value is false.
          example: false
        audioEnhancer:
          type: boolean
          description: >-
            If true, audio will be pre-processed to improve accuracy but latency
            will increase. Default value is false.
          example: false
        confidenceThreshold:
          type: number
          description: |-
            Transcripts below this confidence threshold will be discarded.

            @default 0.4
          minimum: 0
          maximum: 1
          example: 0.4
      required:
        - provider
    FallbackGoogleTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - google
        model:
          type: string
          description: This is the model that will be used for the transcription.
          enum:
            - gemini-2.5-pro
            - gemini-2.5-flash
            - gemini-2.5-flash-lite
            - gemini-2.5-pro-preview-05-06
            - gemini-2.5-flash-preview-05-20
            - gemini-2.5-flash-preview-04-17
            - gemini-2.0-flash-thinking-exp
            - gemini-2.0-pro-exp-02-05
            - gemini-2.0-flash
            - gemini-2.0-flash-lite
            - gemini-2.0-flash-lite-preview-02-05
            - gemini-2.0-flash-exp
            - gemini-2.0-flash-realtime-exp
            - gemini-1.5-flash
            - gemini-1.5-flash-002
            - gemini-1.5-pro
            - gemini-1.5-pro-002
            - gemini-1.0-pro
        language:
          type: string
          description: This is the language that will be set for the transcription.
          enum:
            - Multilingual
            - Arabic
            - Bengali
            - Bulgarian
            - Chinese
            - Croatian
            - Czech
            - Danish
            - Dutch
            - English
            - Estonian
            - Finnish
            - French
            - German
            - Greek
            - Hebrew
            - Hindi
            - Hungarian
            - Indonesian
            - Italian
            - Japanese
            - Korean
            - Latvian
            - Lithuanian
            - Norwegian
            - Polish
            - Portuguese
            - Romanian
            - Russian
            - Serbian
            - Slovak
            - Slovenian
            - Spanish
            - Swahili
            - Swedish
            - Thai
            - Turkish
            - Ukrainian
            - Vietnamese
      required:
        - provider
    FallbackTalkscriberTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - talkscriber
        model:
          type: string
          description: This is the model that will be used for the transcription.
          enum:
            - whisper
        language:
          type: string
          description: >-
            This is the language that will be set for the transcription. The
            list of languages Whisper supports can be found here:
            https://github.com/openai/whisper/blob/main/whisper/tokenizer.py
          enum:
            - en
            - zh
            - de
            - es
            - ru
            - ko
            - fr
            - ja
            - pt
            - tr
            - pl
            - ca
            - nl
            - ar
            - sv
            - it
            - id
            - hi
            - fi
            - vi
            - he
            - uk
            - el
            - ms
            - cs
            - ro
            - da
            - hu
            - ta
            - 'no'
            - th
            - ur
            - hr
            - bg
            - lt
            - la
            - mi
            - ml
            - cy
            - sk
            - te
            - fa
            - lv
            - bn
            - sr
            - az
            - sl
            - kn
            - et
            - mk
            - br
            - eu
            - is
            - hy
            - ne
            - mn
            - bs
            - kk
            - sq
            - sw
            - gl
            - mr
            - pa
            - si
            - km
            - sn
            - yo
            - so
            - af
            - oc
            - ka
            - be
            - tg
            - sd
            - gu
            - am
            - yi
            - lo
            - uz
            - fo
            - ht
            - ps
            - tk
            - nn
            - mt
            - sa
            - lb
            - my
            - bo
            - tl
            - mg
            - as
            - tt
            - haw
            - ln
            - ha
            - ba
            - jw
            - su
            - yue
      required:
        - provider
    FallbackSpeechmaticsTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - speechmatics
        model:
          type: string
          description: This is the model that will be used for the transcription.
          enum:
            - default
        language:
          type: string
          enum:
            - auto
            - ar
            - ba
            - eu
            - be
            - bn
            - bg
            - yue
            - ca
            - hr
            - cs
            - da
            - nl
            - en
            - eo
            - et
            - fi
            - fr
            - gl
            - de
            - el
            - he
            - hi
            - hu
            - id
            - ia
            - ga
            - it
            - ja
            - ko
            - lv
            - lt
            - ms
            - mt
            - cmn
            - mr
            - mn
            - 'no'
            - fa
            - pl
            - pt
            - ro
            - ru
            - sk
            - sl
            - es
            - sw
            - sv
            - ta
            - th
            - tr
            - uk
            - ur
            - ug
            - vi
            - cy
      required:
        - provider
    FallbackOpenAITranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
            - openai
        model:
          type: string
          description: This is the model that will be used for the transcription.
          enum:
            - gpt-4o-transcribe
            - gpt-4o-mini-transcribe
        language:
          type: string
          description: This is the language that will be set for the transcription.
          enum:
            - af
            - ar
            - hy
            - az
            - be
            - bs
            - bg
            - ca
            - zh
            - hr
            - cs
            - da
            - nl
            - en
            - et
            - fi
            - fr
            - gl
            - de
            - el
            - he
            - hi
            - hu
            - is
            - id
            - it
            - ja
            - kn
            - kk
            - ko
            - lv
            - lt
            - mk
            - ms
            - mr
            - mi
            - ne
            - 'no'
            - fa
            - pl
            - pt
            - ro
            - ru
            - sr
            - sk
            - sl
            - es
            - sw
            - sv
            - tl
            - ta
            - th
            - tr
            - uk
            - ur
            - vi
            - cy
      required:
        - provider
        - model
    FallbackCartesiaTranscriber:
      type: object
      properties:
        provider:
          type: string
          enum:
            - cartesia
        model:
          type: string
          enum:
            - ink-whisper
        language:
          type: string
          enum:
            - aa
            - ab
            - ae
            - af
            - ak
            - am
            - an
            - ar
            - as
            - av
            - ay
            - az
            - ba
            - be
            - bg
            - bh
            - bi
            - bm
            - bn
            - bo
            - br
            - bs
            - ca
            - ce
            - ch
            - co
            - cr
            - cs
            - cu
            - cv
            - cy
            - da
            - de
            - dv
            - dz
            - ee
            - el
            - en
            - eo
            - es
            - et
            - eu
            - fa
            - ff
            - fi
            - fj
            - fo
            - fr
            - fy
            - ga
            - gd
            - gl
            - gn
            - gu
            - gv
            - ha
            - he
            - hi
            - ho
            - hr
            - ht
            - hu
            - hy
            - hz
            - ia
            - id
            - ie
            - ig
            - ii
            - ik
            - io
            - is
            - it
            - iu
            - ja
            - jv
            - ka
            - kg
            - ki
            - kj
            - kk
            - kl
            - km
            - kn
            - ko
            - kr
            - ks
            - ku
            - kv
            - kw
            - ky
            - la
            - lb
            - lg
            - li
            - ln
            - lo
            - lt
            - lu
            - lv
            - mg
            - mh
            - mi
            - mk
            - ml
            - mn
            - mr
            - ms
            - mt
            - my
            - na
            - nb
            - nd
            - ne
            - ng
            - nl
            - nn
            - 'no'
            - nr
            - nv
            - ny
            - oc
            - oj
            - om
            - or
            - os
            - pa
            - pi
            - pl
            - ps
            - pt
            - qu
            - rm
            - rn
            - ro
            - ru
            - rw
            - sa
            - sc
            - sd
            - se
            - sg
            - si
            - sk
            - sl
            - sm
            - sn
            - so
            - sq
            - sr
            - ss
            - st
            - su
            - sv
            - sw
            - ta
            - te
            - tg
            - th
            - ti
            - tk
            - tl
            - tn
            - to
            - tr
            - ts
            - tt
            - tw
            - ty
            - ug
            - uk
            - ur
            - uz
            - ve
            - vi
            - vo
            - wa
            - wo
            - xh
            - yi
            - yue
            - yo
            - za
            - zh
            - zu
      required:
        - provider
    ToolMessageStart:
      type: object
      properties:
        contents:
          type: array
          description: >-
            This is an alternative to the `content` property. It allows to
            specify variants of the same content, one per language.


            Usage:

            - If your assistants are multilingual, you can provide content for
            each language.

            - If you don't provide content for a language, the first item in the
            array will be automatically translated to the active language at
            that moment.


            This will override the `content` property.
          items:
            oneOf:
              - $ref: '#/components/schemas/TextContent'
                title: Text
        type:
          type: string
          enum:
            - request-start
          description: >-
            This message is triggered when the tool call starts.


            This message is never triggered for async tools.


            If this message is not provided, one of the default filler messages
            "Hold on a sec", "One moment", "Just a sec", "Give me a moment" or
            "This'll just take a sec" will be used.
        blocking:
          type: boolean
          description: >-
            This is an optional boolean that if true, the tool call will only
            trigger after the message is spoken. Default is false.


            @default false
          example: false
          default: false
        content:
          type: string
          description: >-
            This is the content that the assistant says when this message is
            triggered.
          maxLength: 1000
        conditions:
          description: >-
            This is an optional array of conditions that the tool call arguments
            must meet in order for this message to be triggered.
          type: array
          items:
            $ref: '#/components/schemas/Condition'
      required:
        - type
    ToolMessageComplete:
      type: object
      properties:
        contents:
          type: array
          description: >-
            This is an alternative to the `content` property. It allows to
            specify variants of the same content, one per language.


            Usage:

            - If your assistants are multilingual, you can provide content for
            each language.

            - If you don't provide content for a language, the first item in the
            array will be automatically translated to the active language at
            that moment.


            This will override the `content` property.
          items:
            oneOf:
              - $ref: '#/components/schemas/TextContent'
                title: Text
        type:
          type: string
          description: >-
            This message is triggered when the tool call is complete.


            This message is triggered immediately without waiting for your
            server to respond for async tool calls.


            If this message is not provided, the model will be requested to
            respond.


            If this message is provided, only this message will be spoken and
            the model will not be requested to come up with a response. It's an
            exclusive OR.
          enum:
            - request-complete
        role:
          type: string
          description: >-
            This is optional and defaults to "assistant".


            When role=assistant, `content` is said out loud.


            When role=system, `content` is passed to the model in a system
            message. Example:
                system: default one
                assistant:
                user:
                assistant:
                user:
                assistant:
                user:
                assistant: tool called
                tool: your server response
                <--- system prompt as hint
                ---> model generates response which is spoken
            This is useful when you want to provide a hint to the model about
            what to say next.
          enum:
            - assistant
            - system
        endCallAfterSpokenEnabled:
          type: boolean
          description: >-
            This is an optional boolean that if true, the call will end after
            the message is spoken. Default is false.


            This is ignored if `role` is set to `system`.


            @default false
          example: false
        content:
          type: string
          description: >-
            This is the content that the assistant says when this message is
            triggered.
          maxLength: 1000
        conditions:
          description: >-
            This is an optional array of conditions that the tool call arguments
            must meet in order for this message to be triggered.
          type: array
          items:
            $ref: '#/components/schemas/Condition'
      required:
        - type
    ToolMessageFailed:
      type: object
      properties:
        contents:
          type: array
          description: >-
            This is an alternative to the `content` property. It allows to
            specify variants of the same content, one per language.


            Usage:

            - If your assistants are multilingual, you can provide content for
            each language.

            - If you don't provide content for a language, the first item in the
            array will be automatically translated to the active language at
            that moment.


            This will override the `content` property.
          items:
            oneOf:
              - $ref: '#/components/schemas/TextContent'
                title: Text
        type:
          type: string
          description: >-
            This message is triggered when the tool call fails.


            This message is never triggered for async tool calls.


            If this message is not provided, the model will be requested to
            respond.


            If this message is provided, only this message will be spoken and
            the model will not be requested to come up with a response. It's an
            exclusive OR.
          enum:
            - request-failed
        endCallAfterSpokenEnabled:
          type: boolean
          description: >-
            This is an optional boolean that if true, the call will end after
            the message is spoken. Default is false.


            @default false
          example: false
        content:
          type: string
          description: >-
            This is the content that the assistant says when this message is
            triggered.
          maxLength: 1000
        conditions:
          description: >-
            This is an optional array of conditions that the tool call arguments
            must meet in order for this message to be triggered.
          type: array
          items:
            $ref: '#/components/schemas/Condition'
      required:
        - type
    ToolMessageDelayed:
      type: object
      properties:
        contents:
          type: array
          description: >-
            This is an alternative to the `content` property. It allows to
            specify variants of the same content, one per language.


            Usage:

            - If your assistants are multilingual, you can provide content for
            each language.

            - If you don't provide content for a language, the first item in the
            array will be automatically translated to the active language at
            that moment.


            This will override the `content` property.
          items:
            oneOf:
              - $ref: '#/components/schemas/TextContent'
                title: Text
        type:
          type: string
          description: >-
            This message is triggered when the tool call is delayed.


            There are the two things that can trigger this message:

            1. The user talks with the assistant while your server is processing
            the request. Default is "Sorry, a few more seconds."

            2. The server doesn't respond within `timingMilliseconds`.


            This message is never triggered for async tool calls.
          enum:
            - request-response-delayed
        timingMilliseconds:
          type: number
          minimum: 100
          maximum: 120000
          example: 1000
          description: >-
            The number of milliseconds to wait for the server response before
            saying this message.
        content:
          type: string
          description: >-
            This is the content that the assistant says when this message is
            triggered.
          maxLength: 1000
        conditions:
          description: >-
            This is an optional array of conditions that the tool call arguments
            must meet in order for this message to be triggered.
          type: array
          items:
            $ref: '#/components/schemas/Condition'
      required:
        - type
    JsonSchema:
      type: object
      properties:
        type:
          type: string
          description: >-
            This is the type of output you'd like.


            `string`, `number`, `integer`, `boolean` are the primitive types and
            should be obvious.


            `array` and `object` are more interesting and quite powerful. They
            allow you to define nested structures.


            For `array`, you can define the schema of the items in the array
            using the `items` property.


            For `object`, you can define the properties of the object using the
            `properties` property.
          enum:
            - string
            - number
            - integer
            - boolean
            - array
            - object
        items:
          type: object
          description: >-
            This is required if the type is "array". This is the schema of the
            items in the array.


            This is of type JsonSchema. However, Swagger doesn't support
            circular references.
        properties:
          type: object
          description: >-
            This is required if the type is "object". This specifies the
            properties of the object.


            This is a map of string to JsonSchema. However, Swagger doesn't
            support circular references.
        description:
          type: string
          description: >-
            This is the description to help the model understand what it needs
            to output.
        pattern:
          type: string
          description: >-
            This is the pattern of the string. This is a regex that will be used
            to validate the data in question. To use a common format, use the
            `format` property instead.


            OpenAI documentation:
            https://platform.openai.com/docs/guides/structured-outputs#supported-properties
        format:
          type: string
          description: >-
            This is the format of the string. To pass a regex, use the `pattern`
            property instead.


            OpenAI documentation:
            https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat&type-restrictions=string-restrictions
          enum:
            - date-time
            - time
            - date
            - duration
            - email
            - hostname
            - ipv4
            - ipv6
            - uuid
        required:
          description: |-
            This is a list of properties that are required.

            This only makes sense if the type is "object".
          type: array
          items:
            type: string
        enum:
          description: >-
            This array specifies the allowed values that can be used to restrict
            the output of the model.
          type: array
          items:
            type: string
        title:
          type: string
          description: This is the title of the schema.
      required:
        - type
    VariableExtractionPlan:
      type: object
      properties:
        schema:
          description: >-
            This is the schema to extract.


            Examples:

            1. To extract object properties, you can use the following schema:

            ```json

            {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "age": {
                  "type": "number"
                }
              }
            }

            ```


            These will be extracted as `{{ name }}` and `{{ age }}`
            respectively. To emphasize, object properties are extracted as
            direct global variables.


            2. To extract nested properties, you can use the following schema:

            ```json

            {
              "type": "object",
              "properties": {
                "name": {
                  "type": "object",
                  "properties": {
                    "first": {
                      "type": "string"
                    },
                    "last": {
                      "type": "string"
                    }
                  }
                }
              }
            }

            ```


            These will be extracted as `{{ name }}`. And, `{{ name.first }}` and
            `{{ name.last }}` will be accessible.


            3. To extract array items, you can use the following schema:

            ```json

            {
              "type": "array",
              "title": "zipCodes",
              "items": {
                "type": "string"
              }
            }

            ```


            This will be extracted as `{{ zipCodes }}`. To access the array
            items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`.


            4. To extract array of objects, you can use the following schema:


            ```json

            {
              "type": "array",
              "name": "people",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "age": {
                    "type": "number"
                  },
                  "zipCodes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }

            ```


            This will be extracted as `{{ people }}`. To access the array items,
            you can use `{{ people[n].name }}`, `{{ people[n].age }}`, `{{
            people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{
            people[n].zipCodes[1] }}`.
          allOf:
            - $ref: '#/components/schemas/JsonSchema'
        aliases:
          description: >-
            These are additional variables to create.


            These will be accessible during the call as `{{key}}` and stored in
            `call.artifact.variableValues` after the call.


            Example:

            ```json

            {
              "aliases": [
                {
                  "key": "customerName",
                  "value": "{{name}}"
                },
                {
                  "key": "fullName",
                  "value": "{{firstName}} {{lastName}}"
                },
                {
                  "key": "greeting",
                  "value": "Hello {{name}}, welcome to {{company}}!"
                },
                {
                  "key": "customerEmail",
                  "value": "{{addresses[0].city}}"
                },
                {
                  "key": "something",
                  "value": "{{any liquid}}"
                }
              ]
            }

            ```


            This will create variables `customerName`, `fullName`,
            `customerEmail`, `greeting`, and `something`. To access these
            variables, you can reference them as `{{customerName}}`,
            `{{fullName}}`, `{{customerEmail}}`, `{{greeting}}`, and
            `{{something}}`.
          type: array
          items:
            $ref: '#/components/schemas/VariableExtractionAlias'
    OpenAIFunction:
      type: object
      properties:
        strict:
          type: boolean
          description: >-
            This is a boolean that controls whether to enable strict schema
            adherence when generating the function call. If set to true, the
            model will follow the exact schema defined in the parameters field.
            Only a subset of JSON Schema is supported when strict is true. Learn
            more about Structured Outputs in the [OpenAI
            guide](https://openai.com/index/introducing-structured-outputs-in-the-api/).


            @default false
          default: false
        name:
          type: string
          description: >-
            This is the the name of the function to be called.


            Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a
            maximum length of 64.
          maxLength: 64
          pattern: /^[a-zA-Z0-9_-]{1,64}$/
        description:
          type: string
          description: >-
            This is the description of what the function does, used by the AI to
            choose when and how to call the function.
          maxLength: 1000
        parameters:
          description: >-
            These are the parameters the functions accepts, described as a JSON
            Schema object.


            See the [OpenAI
            guide](https://platform.openai.com/docs/guides/function-calling) for
            examples, and the [JSON Schema
            reference](https://json-schema.org/understanding-json-schema) for
            documentation about the format.


            Omitting parameters defines a function with an empty parameter list.
          allOf:
            - $ref: '#/components/schemas/OpenAIFunctionParameters'
      required:
        - name
    McpToolMetadata:
      type: object
      properties:
        protocol:
          type: string
          enum:
            - sse
            - shttp
          description: >-
            This is the protocol used for MCP communication. Defaults to
            Streamable HTTP.
    KnowledgeBase:
      type: object
      properties:
        name:
          type: string
          description: The name of the knowledge base
          example: My Knowledge Base
        provider:
          type: string
          description: The provider of the knowledge base
          enum:
            - google
          example: google
        model:
          type: string
          description: The model to use for the knowledge base
          enum:
            - gemini-2.5-pro
            - gemini-2.5-flash
            - gemini-2.5-flash-lite
            - gemini-2.5-pro-preview-05-06
            - gemini-2.5-flash-preview-05-20
            - gemini-2.5-flash-preview-04-17
            - gemini-2.0-flash-thinking-exp
            - gemini-2.0-pro-exp-02-05
            - gemini-2.0-flash
            - gemini-2.0-flash-lite
            - gemini-2.0-flash-lite-preview-02-05
            - gemini-2.0-flash-exp
            - gemini-2.0-flash-realtime-exp
            - gemini-1.5-flash
            - gemini-1.5-flash-002
            - gemini-1.5-pro
            - gemini-1.5-pro-002
            - gemini-1.0-pro
        description:
          type: string
          description: A description of the knowledge base
        fileIds:
          description: The file IDs associated with this knowledge base
          type: array
          items:
            type: string
      required:
        - name
        - provider
        - description
        - fileIds
    TransferDestinationAssistant:
      type: object
      properties:
        message:
          description: >-
            This is spoken to the customer before connecting them to the
            destination.


            Usage:

            - If this is not provided and transfer tool messages is not
            provided, default is "Transferring the call now".

            - If set to "", nothing is spoken. This is useful when you want to
            silently transfer. This is especially useful when transferring
            between assistants in a squad. In this scenario, you likely also
            want to set
            `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message`
            for the destination assistant.


            This accepts a string or a ToolMessageStart class. Latter is useful
            if you want to specify multiple messages for different languages
            through the `contents` field.
          oneOf:
            - type: string
            - $ref: '#/components/schemas/CustomMessage'
        type:
          type: string
          enum:
            - assistant
        transferMode:
          type: string
          description: >-
            This is the mode to use for the transfer. Defaults to
            `rolling-history`.


            - `rolling-history`: This is the default mode. It keeps the entire
            conversation history and appends the new assistant's system message
            on transfer.

              Example:

              Pre-transfer:
                system: assistant1 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                assistant: (destination.message)

              Post-transfer:
                system: assistant1 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                assistant: (destination.message)
                system: assistant2 system message
                assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)

            - `swap-system-message-in-history`: This replaces the original
            system message with the new assistant's system message on transfer.

              Example:

              Pre-transfer:
                system: assistant1 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                assistant: (destination.message)

              Post-transfer:
                system: assistant2 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                assistant: (destination.message)
                assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)

            - `delete-history`: This deletes the entire conversation history on
            transfer.

              Example:

              Pre-transfer:
                system: assistant1 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                assistant: (destination.message)

              Post-transfer:
                system: assistant2 system message
                assistant: assistant2 first message
                user: Yes, please
                assistant: how can i help?
                user: i need help with my account

            -
            `swap-system-message-in-history-and-remove-transfer-tool-messages`:
            This replaces the original system message with the new assistant's
            system message on transfer and removes transfer tool messages from
            conversation history sent to the LLM.

              Example:

              Pre-transfer:
                system: assistant1 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                transfer-tool
                transfer-tool-result
                assistant: (destination.message)

              Post-transfer:
                system: assistant2 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                assistant: (destination.message)
                assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)

            @default 'rolling-history'
          enum:
            - rolling-history
            - swap-system-message-in-history
            - swap-system-message-in-history-and-remove-transfer-tool-messages
            - delete-history
        assistantName:
          type: string
          description: This is the assistant to transfer the call to.
        description:
          type: string
          description: >-
            This is the description of the destination, used by the AI to choose
            when and how to transfer the call.
      required:
        - type
        - assistantName
    TransferDestinationNumber:
      type: object
      properties:
        message:
          description: >-
            This is spoken to the customer before connecting them to the
            destination.


            Usage:

            - If this is not provided and transfer tool messages is not
            provided, default is "Transferring the call now".

            - If set to "", nothing is spoken. This is useful when you want to
            silently transfer. This is especially useful when transferring
            between assistants in a squad. In this scenario, you likely also
            want to set
            `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message`
            for the destination assistant.


            This accepts a string or a ToolMessageStart class. Latter is useful
            if you want to specify multiple messages for different languages
            through the `contents` field.
          oneOf:
            - type: string
            - $ref: '#/components/schemas/CustomMessage'
        type:
          type: string
          enum:
            - number
        numberE164CheckEnabled:
          type: boolean
          description: >-
            This is the flag to toggle the E164 check for the `number` field.
            This is an advanced property which should be used if you know your
            use case requires it.


            Use cases:

            - `false`: To allow non-E164 numbers like `+001234567890`, `1234`,
            or `abc`. This is useful for dialing out to non-E164 numbers on your
            SIP trunks.

            - `true` (default): To allow only E164 numbers like `+14155551234`.
            This is standard for PSTN calls.


            If `false`, the `number` is still required to only contain
            alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`).


            @default true (E164 check is enabled)
          default: true
        number:
          type: string
          description: This is the phone number to transfer the call to.
          minLength: 3
          maxLength: 40
        extension:
          type: string
          description: >-
            This is the extension to dial after transferring the call to the
            `number`.
          minLength: 1
          maxLength: 10
        callerId:
          type: string
          description: >-
            This is the caller ID to use when transferring the call to the
            `number`.


            Usage:

            - If not provided, the caller ID will be the number the call is
            coming from. Example, +14151111111 calls in to and the assistant
            transfers out to +16470000000. +16470000000 will see +14151111111 as
            the caller.

            - To change this behavior, provide a `callerId`.

            - Set to '{{customer.number}}' to always use the customer's number
            as the caller ID.

            - Set to '{{phoneNumber.number}}' to always use the phone number of
            the assistant as the caller ID.

            - Set to any E164 number to always use that number as the caller ID.
            This needs to be a number that is owned or verified by your
            Transport provider like Twilio.


            For Twilio, you can read up more here:
            https://www.twilio.com/docs/voice/twiml/dial#callerid
          maxLength: 40
        transferPlan:
          description: >-
            This configures how transfer is executed and the experience of the
            destination party receiving the call. Defaults to `blind-transfer`.


            @default `transferPlan.mode='blind-transfer'`
          allOf:
            - $ref: '#/components/schemas/TransferPlan'
        description:
          type: string
          description: >-
            This is the description of the destination, used by the AI to choose
            when and how to transfer the call.
      required:
        - type
        - number
    TransferDestinationSip:
      type: object
      properties:
        message:
          description: >-
            This is spoken to the customer before connecting them to the
            destination.


            Usage:

            - If this is not provided and transfer tool messages is not
            provided, default is "Transferring the call now".

            - If set to "", nothing is spoken. This is useful when you want to
            silently transfer. This is especially useful when transferring
            between assistants in a squad. In this scenario, you likely also
            want to set
            `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message`
            for the destination assistant.


            This accepts a string or a ToolMessageStart class. Latter is useful
            if you want to specify multiple messages for different languages
            through the `contents` field.
          oneOf:
            - type: string
            - $ref: '#/components/schemas/CustomMessage'
        type:
          type: string
          enum:
            - sip
        sipUri:
          type: string
          description: This is the SIP URI to transfer the call to.
        transferPlan:
          description: >-
            This configures how transfer is executed and the experience of the
            destination party receiving the call. Defaults to `blind-transfer`.


            @default `transferPlan.mode='blind-transfer'`
          allOf:
            - $ref: '#/components/schemas/TransferPlan'
        sipHeaders:
          type: object
          description: >-
            These are custom headers to be added to SIP refer during transfer
            call.
        description:
          type: string
          description: >-
            This is the description of the destination, used by the AI to choose
            when and how to transfer the call.
      required:
        - type
        - sipUri
    GeminiMultimodalLiveSpeechConfig:
      type: object
      properties:
        voiceConfig:
          $ref: '#/components/schemas/GeminiMultimodalLiveVoiceConfig'
      required:
        - voiceConfig
    FormatPlan:
      type: object
      properties:
        enabled:
          type: boolean
          description: >-
            This determines whether the chunk is formatted before being sent to
            the voice provider. This helps with enunciation. This includes phone
            numbers, emails and addresses. Default `true`.


            Usage:

            - To rely on the voice provider's formatting logic, set this to
            `false`.


            If `voice.chunkPlan.enabled` is `false`, this is automatically
            `false` since there's no chunk to format.


            @default true
          example: true
        numberToDigitsCutoff:
          type: number
          description: >-
            This is the cutoff after which a number is converted to individual
            digits instead of being spoken as words.


            Example:

            - If cutoff 2025, "12345" is converted to "1 2 3 4 5" while "1200"
            is converted to "twelve hundred".


            Usage:

            - If your use case doesn't involve IDs like zip codes, set this to a
            high value.

            - If your use case involves IDs that are shorter than 5 digits, set
            this to a lower value.


            @default 2025
          minimum: 0
          example: 2025
        replacements:
          type: array
          description: >-
            These are the custom replacements you can make to the chunk before
            it is sent to the voice provider.


            Usage:

            - To replace a specific word or phrase with a different word or
            phrase, use the `ExactReplacement` type. Eg. `{ type: 'exact', key:
            'hello', value: 'hi' }`

            - To replace a word or phrase that matches a pattern, use the
            `RegexReplacement` type. Eg. `{ type: 'regex', regex:
            '\\b[a-zA-Z]{5}\\b', value: 'hi' }`


            @default []
          items:
            oneOf:
              - $ref: '#/components/schemas/ExactReplacement'
                title: ExactReplacement
              - $ref: '#/components/schemas/RegexReplacement'
                title: RegexReplacement
        formattersEnabled:
          type: array
          description: >-
            List of formatters to apply. If not provided, all default formatters
            will be applied.

            If provided, only the specified formatters will be applied.

            Note: Some essential formatters like angle bracket removal will
            always be applied.

            @default undefined
          enum:
            - markdown
            - asterisk
            - quote
            - dash
            - newline
            - colon
            - acronym
            - dollarAmount
            - email
            - date
            - time
            - distance
            - unit
            - percentage
            - phoneNumber
            - number
            - stripAsterisk
          items:
            type: string
            enum:
              - markdown
              - asterisk
              - quote
              - dash
              - newline
              - colon
              - acronym
              - dollarAmount
              - email
              - date
              - time
              - distance
              - unit
              - percentage
              - phoneNumber
              - number
              - stripAsterisk
    FallbackAzureVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - azure
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - andrew
                - brian
                - emma
              title: Preset Voice Options
            - type: string
              title: Azure Voice ID
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          minimum: 0.5
          maximum: 2
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
    FallbackCartesiaVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - cartesia
        voiceId:
          type: string
          description: The ID of the particular voice you want to use.
        model:
          type: string
          description: >-
            This is the model that will be used. This is optional and will
            default to the correct model for the voiceId.
          enum:
            - sonic-2
            - sonic-english
            - sonic-multilingual
            - sonic-preview
            - sonic
          example: sonic-english
        language:
          type: string
          description: >-
            This is the language that will be used. This is optional and will
            default to the correct language for the voiceId.
          enum:
            - en
            - de
            - es
            - fr
            - ja
            - pt
            - zh
            - hi
            - it
            - ko
            - nl
            - pl
            - ru
            - sv
            - tr
          example: en
        experimentalControls:
          description: Experimental controls for Cartesia voice generation
          allOf:
            - $ref: '#/components/schemas/CartesiaExperimentalControls'
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
    FallbackHumeVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - hume
        model:
          type: string
          description: This is the model that will be used.
          enum:
            - octave
          example: octave
        voiceId:
          type: string
          description: The ID of the particular voice you want to use.
        isCustomHumeVoice:
          type: boolean
          description: >-
            Indicates whether the chosen voice is a preset Hume AI voice or a
            custom voice.
          example: false
        description:
          type: string
          description: >-
            Natural language instructions describing how the synthesized speech
            should sound, including but not limited to tone, intonation, pacing,
            and accent (e.g., 'a soft, gentle voice with a strong British
            accent').


            If a Voice is specified in the request, this description serves as
            acting instructions.

            If no Voice is specified, a new voice is generated based on this
            description.
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
    FallbackCustomVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: >-
            This is the voice provider that will be used. Use `custom-voice` for
            providers that are not natively supported.
          enum:
            - custom-voice
        server:
          description: >-
            This is where the voice request will be sent.


            Request Example:


            POST https://{server.url}

            Content-Type: application/json


            {
              "message": {
                "type": "voice-request",
                "text": "Hello, world!",
                "sampleRate": 24000,
                ...other metadata about the call...
              }
            }


            Response Expected: 1-channel 16-bit raw PCM audio at the sample rate
            specified in the request. Here is how the response will be piped to
            the transport:

            ```

            response.on('data', (chunk: Buffer) => {
              outputStream.write(chunk);
            });

            ```
          allOf:
            - $ref: '#/components/schemas/Server'
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - server
    FallbackDeepgramVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - deepgram
        voiceId:
          type: string
          description: This is the provider-specific ID that will be used.
          enum:
            - asteria
            - luna
            - stella
            - athena
            - hera
            - orion
            - arcas
            - perseus
            - angus
            - orpheus
            - helios
            - zeus
            - thalia
            - andromeda
            - helena
            - apollo
            - arcas
            - aries
            - amalthea
            - asteria
            - athena
            - atlas
            - aurora
            - callista
            - cora
            - cordelia
            - delia
            - draco
            - electra
            - harmonia
            - hera
            - hermes
            - hyperion
            - iris
            - janus
            - juno
            - jupiter
            - luna
            - mars
            - minerva
            - neptune
            - odysseus
            - ophelia
            - orion
            - orpheus
            - pandora
            - phoebe
            - pluto
            - saturn
            - selene
            - theia
            - vesta
            - zeus
          title: This is the Deepgram Voice ID
        model:
          type: string
          description: >-
            This is the model that will be used. Defaults to 'aura-2' when not
            specified.
          enum:
            - aura
            - aura-2
          example: aura-2
        mipOptOut:
          type: boolean
          description: >-
            If set to true, this will add mip_opt_out=true as a query parameter
            of all API requests. See
            https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out


            This will only be used if you are using your own Deepgram API key.


            @default false
          example: false
          default: false
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
    FallbackElevenLabsVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - 11labs
        voiceId:
          description: >-
            This is the provider-specific ID that will be used. Ensure the Voice
            is present in your 11Labs Voice Library.
          oneOf:
            - type: string
              enum:
                - burt
                - marissa
                - andrea
                - sarah
                - phillip
                - steve
                - joseph
                - myra
                - paula
                - ryan
                - drew
                - paul
                - mrb
                - matilda
                - mark
              title: Preset Voice Options
            - type: string
              title: 11Labs Voice ID
        stability:
          type: number
          description: Defines the stability for voice settings.
          minimum: 0
          maximum: 1
          example: 0.5
        similarityBoost:
          type: number
          description: Defines the similarity boost for voice settings.
          minimum: 0
          maximum: 1
          example: 0.75
        style:
          type: number
          description: Defines the style for voice settings.
          minimum: 0
          maximum: 1
          example: 0
        useSpeakerBoost:
          type: boolean
          description: Defines the use speaker boost for voice settings.
          example: false
        speed:
          type: number
          description: Defines the speed for voice settings.
          minimum: 0.7
          maximum: 1.2
          example: 0.9
        optimizeStreamingLatency:
          type: number
          description: >-
            Defines the optimize streaming latency for voice settings. Defaults
            to 3.
          minimum: 0
          maximum: 4
          example: 3
        enableSsmlParsing:
          type: boolean
          description: >-
            This enables the use of
            https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation.
            Defaults to false to save latency.


            @default false
          example: false
        autoMode:
          type: boolean
          description: Defines the auto mode for voice settings. Defaults to false.
          example: false
        model:
          type: string
          description: >-
            This is the model that will be used. Defaults to 'eleven_turbo_v2'
            if not specified.
          enum:
            - eleven_multilingual_v2
            - eleven_turbo_v2
            - eleven_turbo_v2_5
            - eleven_flash_v2
            - eleven_flash_v2_5
            - eleven_monolingual_v1
          example: eleven_turbo_v2_5
        language:
          type: string
          description: >-
            This is the language (ISO 639-1) that is enforced for the model.
            Currently only Turbo v2.5 supports language enforcement. For other
            models, an error will be returned if language code is provided.
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
    FallbackcozmoxVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - cozmox
        voiceId:
          type: string
          description: The voices provided by cozmox
          enum:
            - Elliot
            - Kylie
            - Rohan
            - Lily
            - Savannah
            - Hana
            - Neha
            - Cole
            - Harry
            - Paige
            - Spencer
        speed:
          type: number
          description: |-
            This is the speed multiplier that will be used.

            @default 1
          minimum: 0.25
          maximum: 2
          default: 1
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
    FallbackLMNTVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - lmnt
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - amy
                - ansel
                - autumn
                - ava
                - brandon
                - caleb
                - cassian
                - chloe
                - dalton
                - daniel
                - dustin
                - elowen
                - evander
                - huxley
                - james
                - juniper
                - kennedy
                - lauren
                - leah
                - lily
                - lucas
                - magnus
                - miles
                - morgan
                - natalie
                - nathan
                - noah
                - nyssa
                - oliver
                - paige
                - ryan
                - sadie
                - sophie
                - stella
                - terrence
                - tyler
                - vesper
                - violet
                - warrick
                - zain
                - zeke
                - zoe
              title: Preset Voice Options
            - type: string
              title: LMNT Voice ID
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          minimum: 0.25
          maximum: 2
          example: null
        language:
          description: Two letter ISO 639-1 language code. Use "auto" for auto-detection.
          enum:
            - aa
            - ab
            - ae
            - af
            - ak
            - am
            - an
            - ar
            - as
            - av
            - ay
            - az
            - ba
            - be
            - bg
            - bh
            - bi
            - bm
            - bn
            - bo
            - br
            - bs
            - ca
            - ce
            - ch
            - co
            - cr
            - cs
            - cu
            - cv
            - cy
            - da
            - de
            - dv
            - dz
            - ee
            - el
            - en
            - eo
            - es
            - et
            - eu
            - fa
            - ff
            - fi
            - fj
            - fo
            - fr
            - fy
            - ga
            - gd
            - gl
            - gn
            - gu
            - gv
            - ha
            - he
            - hi
            - ho
            - hr
            - ht
            - hu
            - hy
            - hz
            - ia
            - id
            - ie
            - ig
            - ii
            - ik
            - io
            - is
            - it
            - iu
            - ja
            - jv
            - ka
            - kg
            - ki
            - kj
            - kk
            - kl
            - km
            - kn
            - ko
            - kr
            - ks
            - ku
            - kv
            - kw
            - ky
            - la
            - lb
            - lg
            - li
            - ln
            - lo
            - lt
            - lu
            - lv
            - mg
            - mh
            - mi
            - mk
            - ml
            - mn
            - mr
            - ms
            - mt
            - my
            - na
            - nb
            - nd
            - ne
            - ng
            - nl
            - nn
            - 'no'
            - nr
            - nv
            - ny
            - oc
            - oj
            - om
            - or
            - os
            - pa
            - pi
            - pl
            - ps
            - pt
            - qu
            - rm
            - rn
            - ro
            - ru
            - rw
            - sa
            - sc
            - sd
            - se
            - sg
            - si
            - sk
            - sl
            - sm
            - sn
            - so
            - sq
            - sr
            - ss
            - st
            - su
            - sv
            - sw
            - ta
            - te
            - tg
            - th
            - ti
            - tk
            - tl
            - tn
            - to
            - tr
            - ts
            - tt
            - tw
            - ty
            - ug
            - uk
            - ur
            - uz
            - ve
            - vi
            - vo
            - wa
            - wo
            - xh
            - yi
            - yue
            - yo
            - za
            - zh
            - zu
            - auto
          example: en
          oneOf:
            - type: string
              enum:
                - aa
                - ab
                - ae
                - af
                - ak
                - am
                - an
                - ar
                - as
                - av
                - ay
                - az
                - ba
                - be
                - bg
                - bh
                - bi
                - bm
                - bn
                - bo
                - br
                - bs
                - ca
                - ce
                - ch
                - co
                - cr
                - cs
                - cu
                - cv
                - cy
                - da
                - de
                - dv
                - dz
                - ee
                - el
                - en
                - eo
                - es
                - et
                - eu
                - fa
                - ff
                - fi
                - fj
                - fo
                - fr
                - fy
                - ga
                - gd
                - gl
                - gn
                - gu
                - gv
                - ha
                - he
                - hi
                - ho
                - hr
                - ht
                - hu
                - hy
                - hz
                - ia
                - id
                - ie
                - ig
                - ii
                - ik
                - io
                - is
                - it
                - iu
                - ja
                - jv
                - ka
                - kg
                - ki
                - kj
                - kk
                - kl
                - km
                - kn
                - ko
                - kr
                - ks
                - ku
                - kv
                - kw
                - ky
                - la
                - lb
                - lg
                - li
                - ln
                - lo
                - lt
                - lu
                - lv
                - mg
                - mh
                - mi
                - mk
                - ml
                - mn
                - mr
                - ms
                - mt
                - my
                - na
                - nb
                - nd
                - ne
                - ng
                - nl
                - nn
                - 'no'
                - nr
                - nv
                - ny
                - oc
                - oj
                - om
                - or
                - os
                - pa
                - pi
                - pl
                - ps
                - pt
                - qu
                - rm
                - rn
                - ro
                - ru
                - rw
                - sa
                - sc
                - sd
                - se
                - sg
                - si
                - sk
                - sl
                - sm
                - sn
                - so
                - sq
                - sr
                - ss
                - st
                - su
                - sv
                - sw
                - ta
                - te
                - tg
                - th
                - ti
                - tk
                - tl
                - tn
                - to
                - tr
                - ts
                - tt
                - tw
                - ty
                - ug
                - uk
                - ur
                - uz
                - ve
                - vi
                - vo
                - wa
                - wo
                - xh
                - yi
                - yue
                - yo
                - za
                - zh
                - zu
              title: ISO 639-1 Language Code
            - type: string
              enum:
                - auto
              title: Auto-detect
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
    FallbackOpenAIVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - openai
        voiceId:
          description: >-
            This is the provider-specific ID that will be used.

            Please note that ash, ballad, coral, sage, and verse may only be
            used with realtime models.
          oneOf:
            - type: string
              enum:
                - alloy
                - echo
                - fable
                - onyx
                - nova
                - shimmer
              title: Preset Voice Options
            - type: string
              title: OpenAI Voice ID
        model:
          type: string
          description: This is the model that will be used for text-to-speech.
          enum:
            - tts-1
            - tts-1-hd
            - gpt-4o-mini-tts
        instructions:
          type: string
          description: >-
            This is a prompt that allows you to control the voice of your
            generated audio.

            Does not work with 'tts-1' or 'tts-1-hd' models.
          maxLength: 10000
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          minimum: 0.25
          maximum: 4
          example: null
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
    FallbackPlayHTVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - playht
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - jennifer
                - melissa
                - will
                - chris
                - matt
                - jack
                - ruby
                - davis
                - donna
                - michael
              title: Preset Voice Options
            - type: string
              title: PlayHT Voice ID
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          minimum: 0.1
          maximum: 5
          example: null
        temperature:
          type: number
          description: >-
            A floating point number between 0, exclusive, and 2, inclusive. If
            equal to null or not provided, the model's default temperature will
            be used. The temperature parameter controls variance. Lower
            temperatures result in more predictable results, higher temperatures
            allow each run to vary more, so the voice may sound less like the
            baseline voice.
          minimum: 0.1
          maximum: 2
          example: null
        emotion:
          type: string
          description: An emotion to be applied to the speech.
          enum:
            - female_happy
            - female_sad
            - female_angry
            - female_fearful
            - female_disgust
            - female_surprised
            - male_happy
            - male_sad
            - male_angry
            - male_fearful
            - male_disgust
            - male_surprised
          example: null
        voiceGuidance:
          type: number
          description: >-
            A number between 1 and 6. Use lower numbers to reduce how unique
            your chosen voice will be compared to other voices.
          minimum: 1
          maximum: 6
          example: null
        styleGuidance:
          type: number
          description: >-
            A number between 1 and 30. Use lower numbers to to reduce how strong
            your chosen emotion will be. Higher numbers will create a very
            emotional performance.
          minimum: 1
          maximum: 30
          example: null
        textGuidance:
          type: number
          description: >-
            A number between 1 and 2. This number influences how closely the
            generated speech adheres to the input text. Use lower values to
            create more fluid speech, but with a higher chance of deviating from
            the input text. Higher numbers will make the generated speech more
            accurate to the input text, ensuring that the words spoken align
            closely with the provided text.
          minimum: 1
          maximum: 2
          example: null
        model:
          type: string
          description: Playht voice model/engine to use.
          enum:
            - PlayHT2.0
            - PlayHT2.0-turbo
            - Play3.0-mini
            - PlayDialog
        language:
          type: string
          description: The language to use for the speech.
          enum:
            - afrikaans
            - albanian
            - amharic
            - arabic
            - bengali
            - bulgarian
            - catalan
            - croatian
            - czech
            - danish
            - dutch
            - english
            - french
            - galician
            - german
            - greek
            - hebrew
            - hindi
            - hungarian
            - indonesian
            - italian
            - japanese
            - korean
            - malay
            - mandarin
            - polish
            - portuguese
            - russian
            - serbian
            - spanish
            - swedish
            - tagalog
            - thai
            - turkish
            - ukrainian
            - urdu
            - xhosa
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
    FallbackRimeAIVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - rime-ai
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - abbie
                - allison
                - ally
                - alona
                - amber
                - ana
                - antoine
                - armon
                - brenda
                - brittany
                - carol
                - colin
                - courtney
                - elena
                - elliot
                - eva
                - geoff
                - gerald
                - hank
                - helen
                - hera
                - jen
                - joe
                - joy
                - juan
                - kendra
                - kendrick
                - kenneth
                - kevin
                - kris
                - linda
                - madison
                - marge
                - marina
                - marissa
                - marta
                - maya
                - nicholas
                - nyles
                - phil
                - reba
                - rex
                - rick
                - ritu
                - rob
                - rodney
                - rohan
                - rosco
                - samantha
                - sandy
                - selena
                - seth
                - sharon
                - stan
                - tamra
                - tanya
                - tibur
                - tj
                - tyler
                - viv
                - yadira
                - marsh
                - bayou
                - creek
                - brook
                - flower
                - spore
                - glacier
                - gulch
                - alpine
                - cove
                - lagoon
                - tundra
                - steppe
                - mesa
                - grove
                - rainforest
                - moraine
                - wildflower
                - peak
                - boulder
                - gypsum
                - zest
                - luna
                - celeste
                - orion
                - ursa
                - astra
                - esther
                - estelle
                - andromeda
              title: Preset Voice Options
            - type: string
              title: RimeAI Voice ID
        model:
          type: string
          description: >-
            This is the model that will be used. Defaults to 'mistv2' when not
            specified.
          enum:
            - mist
            - mistv2
            - arcana
          example: mistv2
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          minimum: 0.1
          example: null
        pauseBetweenBrackets:
          type: boolean
          description: >-
            This is a flag that controls whether to add slight pauses using
            angle brackets. Example: "Hi. <200> I'd love to have a conversation
            with you." adds a 200ms pause between the first and second
            sentences.
          example: false
        phonemizeBetweenBrackets:
          type: boolean
          description: >-
            This is a flag that controls whether text inside brackets should be
            phonemized (converted to phonetic pronunciation) - Example:
            "{h'El.o} World" will pronounce "Hello" as expected.
          example: false
        reduceLatency:
          type: boolean
          description: >-
            This is a flag that controls whether to optimize for reduced latency
            in streaming.
            https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency
          example: false
        inlineSpeedAlpha:
          type: string
          description: >-
            This is a string that allows inline speed control using alpha
            notation.
            https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha
          example: null
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
    FallbackSmallestAIVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - smallest-ai
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - emily
                - jasmine
                - arman
                - james
                - mithali
                - aravind
                - raj
                - diya
                - raman
                - ananya
                - isha
                - william
                - aarav
                - monika
                - niharika
                - deepika
                - raghav
                - kajal
                - radhika
                - mansi
                - nisha
                - saurabh
                - pooja
                - saina
                - sanya
              title: Preset Voice Options
            - type: string
              title: Smallest AI Voice ID
        model:
          type: string
          description: >-
            Smallest AI voice model to use. Defaults to 'lightning' when not
            specified.
          enum:
            - lightning
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          example: null
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
    FallbackTavusVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - tavus
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - r52da2535a
              title: Preset Voice Options
            - type: string
              title: Tavus Voice ID
        personaId:
          type: string
          description: >-
            This is the unique identifier for the persona that the replica will
            use in the conversation.
        callbackUrl:
          type: string
          description: >-
            This is the url that will receive webhooks with updates regarding
            the conversation state.
        conversationName:
          type: string
          description: This is the name for the conversation.
        conversationalContext:
          type: string
          description: >-
            This is the context that will be appended to any context provided in
            the persona, if one is provided.
        customGreeting:
          type: string
          description: >-
            This is the custom greeting that the replica will give once a
            participant joines the conversation.
        properties:
          description: These are optional properties used to customize the conversation.
          allOf:
            - $ref: '#/components/schemas/TavusConversationProperties'
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
    FallbackNeuphonicVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - neuphonic
        voiceId:
          description: This is the provider-specific ID that will be used.
          oneOf:
            - type: string
              enum:
                - test
              title: Preset Voice Options
            - type: string
              title: Neuphonic Voice ID
        model:
          type: string
          description: >-
            This is the model that will be used. Defaults to 'neu_fast' if not
            specified.
          enum:
            - neu_hq
            - neu_fast
          example: neu_fast
        language:
          type: object
          description: This is the language (ISO 639-1) that is enforced for the model.
          example: en
        speed:
          type: number
          description: This is the speed multiplier that will be used.
          minimum: 0.25
          maximum: 2
          example: null
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
        - language
    FallbackSesameVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - sesame
        voiceId:
          type: string
          description: This is the provider-specific ID that will be used.
          title: >-
            Sesame Voice ID. This should be either a name (a built-in voice) or
            a UUID (a custom voice).
        model:
          type: string
          description: This is the model that will be used.
          enum:
            - csm-1b
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
        - model
    FallbackInworldVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          description: This is the flag to toggle voice caching for the assistant.
          example: true
          default: true
        provider:
          type: string
          description: This is the voice provider that will be used.
          enum:
            - inworld
        voiceId:
          type: string
          description: >-
            Available voices by language:

            • en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth,
            Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun,
            Theodore, Timothy, Wendy, Dominus

            • zh: Yichen, Xiaoyin, Xinyi, Jing

            • nl: Erik, Katrien, Lennart, Lore

            • fr: Alain, Hélène, Mathieu, Étienne

            • de: Johanna, Josef

            • it: Gianni, Orietta

            • ja: Asuka, Satoshi

            • ko: Hyunwoo, Minji, Seojun, Yoona

            • pl: Szymon, Wojciech

            • pt: Heitor, Maitê

            • es: Diego, Lupita, Miguel, Rafael
          maxLength: 120
          title: Inworld Voice ID
          enum:
            - Alex
            - Ashley
            - Craig
            - Deborah
            - Dennis
            - Edward
            - Elizabeth
            - Hades
            - Julia
            - Pixie
            - Mark
            - Olivia
            - Priya
            - Ronald
            - Sarah
            - Shaun
            - Theodore
            - Timothy
            - Wendy
            - Dominus
            - Yichen
            - Xiaoyin
            - Xinyi
            - Jing
            - Erik
            - Katrien
            - Lennart
            - Lore
            - Alain
            - Hélène
            - Mathieu
            - Étienne
            - Johanna
            - Josef
            - Gianni
            - Orietta
            - Asuka
            - Satoshi
            - Hyunwoo
            - Minji
            - Seojun
            - Yoona
            - Szymon
            - Wojciech
            - Heitor
            - Maitê
            - Diego
            - Lupita
            - Miguel
            - Rafael
          example: Alex
        model:
          type: string
          description: This is the model that will be used.
          enum:
            - inworld-tts-1
          default: inworld-tts-1
        languageCode:
          type: string
          description: Language code for Inworld TTS synthesis
          default: en
          enum:
            - en
            - zh
            - ko
            - nl
            - fr
            - es
            - ja
            - de
            - it
            - pl
            - pt
        chunkPlan:
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
          allOf:
            - $ref: '#/components/schemas/ChunkPlan'
      required:
        - provider
        - voiceId
    SipTrunkOutboundSipRegisterPlan:
      type: object
      properties:
        domain:
          type: string
        username:
          type: string
        realm:
          type: string
    RegexOption:
      type: object
      properties:
        type:
          type: string
          description: |-
            This is the type of the regex option. Options are:
            - `ignore-case`: Ignores the case of the text being matched. Add
            - `whole-word`: Matches whole words only.
            - `multi-line`: Matches across multiple lines.
          enum:
            - ignore-case
            - whole-word
            - multi-line
        enabled:
          type: boolean
          description: |-
            This is whether to enable the option.

            @default false
      required:
        - type
        - enabled
    TextContent:
      type: object
      properties:
        type:
          type: string
          enum:
            - text
        text:
          type: string
        language:
          type: string
          enum:
            - aa
            - ab
            - ae
            - af
            - ak
            - am
            - an
            - ar
            - as
            - av
            - ay
            - az
            - ba
            - be
            - bg
            - bh
            - bi
            - bm
            - bn
            - bo
            - br
            - bs
            - ca
            - ce
            - ch
            - co
            - cr
            - cs
            - cu
            - cv
            - cy
            - da
            - de
            - dv
            - dz
            - ee
            - el
            - en
            - eo
            - es
            - et
            - eu
            - fa
            - ff
            - fi
            - fj
            - fo
            - fr
            - fy
            - ga
            - gd
            - gl
            - gn
            - gu
            - gv
            - ha
            - he
            - hi
            - ho
            - hr
            - ht
            - hu
            - hy
            - hz
            - ia
            - id
            - ie
            - ig
            - ii
            - ik
            - io
            - is
            - it
            - iu
            - ja
            - jv
            - ka
            - kg
            - ki
            - kj
            - kk
            - kl
            - km
            - kn
            - ko
            - kr
            - ks
            - ku
            - kv
            - kw
            - ky
            - la
            - lb
            - lg
            - li
            - ln
            - lo
            - lt
            - lu
            - lv
            - mg
            - mh
            - mi
            - mk
            - ml
            - mn
            - mr
            - ms
            - mt
            - my
            - na
            - nb
            - nd
            - ne
            - ng
            - nl
            - nn
            - 'no'
            - nr
            - nv
            - ny
            - oc
            - oj
            - om
            - or
            - os
            - pa
            - pi
            - pl
            - ps
            - pt
            - qu
            - rm
            - rn
            - ro
            - ru
            - rw
            - sa
            - sc
            - sd
            - se
            - sg
            - si
            - sk
            - sl
            - sm
            - sn
            - so
            - sq
            - sr
            - ss
            - st
            - su
            - sv
            - sw
            - ta
            - te
            - tg
            - th
            - ti
            - tk
            - tl
            - tn
            - to
            - tr
            - ts
            - tt
            - tw
            - ty
            - ug
            - uk
            - ur
            - uz
            - ve
            - vi
            - vo
            - wa
            - wo
            - xh
            - yi
            - yue
            - yo
            - za
            - zh
            - zu
      required:
        - type
        - text
        - language
    Condition:
      type: object
      properties:
        operator:
          type: string
          description: >-
            This is the operator you want to use to compare the parameter and
            value.
          enum:
            - eq
            - neq
            - gt
            - gte
            - lt
            - lte
        param:
          type: string
          description: This is the name of the parameter that you want to check.
          maxLength: 1000
        value:
          type: string
          description: This is the value you want to compare against the parameter.
          maxLength: 1000
      required:
        - operator
        - param
        - value
    VariableExtractionAlias:
      type: object
      properties:
        key:
          type: string
          description: >-
            This is the key of the variable.


            This variable will be accessible during the call as `{{key}}` and
            stored in `call.artifact.variableValues` after the call.


            Rules:

            - Must start with a letter (a-z, A-Z).

            - Subsequent characters can be letters, numbers, or underscores.

            - Minimum length of 1 and maximum length of 40.
          minLength: 1
          maxLength: 40
          pattern: /^[a-zA-Z][a-zA-Z0-9_]*$/
        value:
          type: string
          description: >-
            This is the value of the variable.


            This can reference existing variables, use filters, and perform
            transformations.


            Examples: "{{name}}", "{{customer.email}}", "Hello {{name |
            upcase}}"
          maxLength: 10000
      required:
        - key
        - value
    OpenAIFunctionParameters:
      type: object
      properties:
        type:
          type: string
          description: >-
            This must be set to 'object'. It instructs the model to return a
            JSON object containing the function call properties.
          enum:
            - object
        properties:
          type: object
          description: >-
            This provides a description of the properties required by the
            function.

            JSON Schema can be used to specify expectations for each property.

            Refer to [this
            doc](https://ajv.js.org/json-schema.html#json-data-type) for a
            comprehensive guide on JSON Schema.
          additionalProperties:
            $ref: '#/components/schemas/JsonSchema'
        required:
          description: This specifies the properties that are required by the function.
          type: array
          items:
            type: string
      required:
        - type
        - properties
    CustomMessage:
      type: object
      properties:
        contents:
          type: array
          description: >-
            This is an alternative to the `content` property. It allows to
            specify variants of the same content, one per language.


            Usage:

            - If your assistants are multilingual, you can provide content for
            each language.

            - If you don't provide content for a language, the first item in the
            array will be automatically translated to the active language at
            that moment.


            This will override the `content` property.
          items:
            oneOf:
              - $ref: '#/components/schemas/TextContent'
                title: Text
        type:
          type: string
          description: This is a custom message.
          enum:
            - custom-message
        content:
          type: string
          description: >-
            This is the content that the assistant will say when this message is
            triggered.
          maxLength: 1000
      required:
        - type
    TransferPlan:
      type: object
      properties:
        mode:
          type: string
          description: >-
            This configures how transfer is executed and the experience of the
            destination party receiving the call.


            Usage:

            - `blind-transfer`: The assistant forwards the call to the
            destination without any message or summary.

            - `blind-transfer-add-summary-to-sip-header`: The assistant forwards
            the call to the destination and adds a SIP header X-Transfer-Summary
            to the call to include the summary.

            - `warm-transfer-say-message`: The assistant dials the destination,
            delivers the `message` to the destination party, connects the
            customer, and leaves the call.

            - `warm-transfer-say-summary`: The assistant dials the destination,
            provides a summary of the call to the destination party, connects
            the customer, and leaves the call.

            -
            `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`:
            The assistant dials the destination, waits for the operator to
            speak, delivers the `message` to the destination party, and then
            connects the customer.

            -
            `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`:
            The assistant dials the destination, waits for the operator to
            speak, provides a summary of the call to the destination party, and
            then connects the customer.

            - `warm-transfer-twiml`: The assistant dials the destination,
            executes the twiml instructions on the destination call leg,
            connects the customer, and leaves the call.

            - `warm-transfer-experimental`: The assistant puts the customer on
            hold, dials the destination, and if the destination answers (and is
            human), delivers a message or summary before connecting the
            customer. If the destination is unreachable or not human (e.g., with
            voicemail detection), the assistant delivers the `fallbackMessage`
            to the customer and optionally ends the call.


            @default 'blind-transfer'
          enum:
            - blind-transfer
            - blind-transfer-add-summary-to-sip-header
            - warm-transfer-say-message
            - warm-transfer-say-summary
            - warm-transfer-twiml
            - >-
              warm-transfer-wait-for-operator-to-speak-first-and-then-say-message
            - >-
              warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary
            - warm-transfer-experimental
        message:
          description: >-
            This is the message the assistant will deliver to the destination
            party before connecting the customer.


            Usage:

            - Used only when `mode` is
            `blind-transfer-add-summary-to-sip-header`,
            `warm-transfer-say-message`,
            `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`,
            or `warm-transfer-experimental`.
          oneOf:
            - type: string
            - $ref: '#/components/schemas/CustomMessage'
        timeout:
          type: number
          description: >-
            This is the timeout in seconds for the
            warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary


            @default 60
          minimum: 1
          maximum: 600
          default: 60
        sipVerb:
          type: object
          description: |-
            This specifies the SIP verb to use while transferring the call.
            - 'refer': Uses SIP REFER to transfer the call (default)
            - 'bye': Ends current call with SIP BYE
            - 'dial': Uses SIP DIAL to transfer the call
          default: refer
          enum:
            - refer
            - bye
            - dial
        holdAudioUrl:
          type: string
          description: >-
            This is the URL to an audio file played while the customer is on
            hold during transfer.


            Usage:

            - Used only when `mode` is `warm-transfer-experimental`.

            - Used when transferring calls to play hold audio for the customer.

            - Must be a publicly accessible URL to an audio file.

            - Supported formats: MP3 and WAV.

            - If not provided, the default hold audio will be used.
        transferCompleteAudioUrl:
          type: string
          description: >-
            This is the URL to an audio file played after the warm transfer
            message or summary is delivered to the destination party.

            It can be used to play a custom sound like 'beep' to notify that the
            transfer is complete.


            Usage:

            - Used only when `mode` is `warm-transfer-experimental`.

            - Used when transferring calls to play hold audio for the
            destination party.

            - Must be a publicly accessible URL to an audio file.

            - Supported formats: MP3 and WAV.
        twiml:
          type: string
          description: >-
            This is the TwiML instructions to execute on the destination call
            leg before connecting the customer.


            Usage:

            - Used only when `mode` is `warm-transfer-twiml`.

            - Supports only `Play`, `Say`, `Gather`, `Hangup` and `Pause` verbs.

            - Maximum length is 4096 characters.


            Example:

            ```

            <Say voice="alice" language="en-US">Hello, transferring a customer
            to you.</Say>

            <Pause length="2"/>

            <Say>They called about billing questions.</Say>

            ```
          maxLength: 4096
        summaryPlan:
          description: >-
            This is the plan for generating a summary of the call to present to
            the destination party.


            Usage:

            - Used only when `mode` is
            `blind-transfer-add-summary-to-sip-header` or
            `warm-transfer-say-summary` or
            `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`
            or `warm-transfer-experimental`.
          allOf:
            - $ref: '#/components/schemas/SummaryPlan'
        sipHeadersInReferToEnabled:
          type: boolean
          description: >-
            This flag includes the sipHeaders from above in the refer to sip uri
            as url encoded query params.


            @default false
        fallbackPlan:
          description: >-
            This configures the fallback plan when the transfer fails
            (destination unreachable, busy, or not human).


            Usage:

            - Used only when `mode` is `warm-transfer-experimental`.

            - If not provided when using `warm-transfer-experimental`, a default
            message will be used.
          allOf:
            - $ref: '#/components/schemas/TransferFallbackPlan'
      required:
        - mode
    GeminiMultimodalLiveVoiceConfig:
      type: object
      properties:
        prebuiltVoiceConfig:
          $ref: '#/components/schemas/GeminiMultimodalLivePrebuiltVoiceConfig'
      required:
        - prebuiltVoiceConfig
    ExactReplacement:
      type: object
      properties:
        type:
          type: string
          description: >-
            This is the exact replacement type. You can use this to replace a
            specific word or phrase with a different word or phrase.


            Usage:

            - Replace "hello" with "hi": { type: 'exact', key: 'hello', value:
            'hi' }

            - Replace "good morning" with "good day": { type: 'exact', key:
            'good morning', value: 'good day' }

            - Replace a specific name: { type: 'exact', key: 'John Doe', value:
            'Jane Smith' }

            - Replace an acronym: { type: 'exact', key: 'AI', value: 'Artificial
            Intelligence' }

            - Replace a company name with its phonetic pronunciation: { type:
            'exact', key: 'cozmox', value: 'Vappy' }
          enum:
            - exact
        replaceAllEnabled:
          type: boolean
          description: >-
            This option let's you control whether to replace all instances of
            the key or only the first one. By default, it only replaces the
            first instance.

            Examples:

            - For { type: 'exact', key: 'hello', value: 'hi', replaceAllEnabled:
            false }. Before: "hello world, hello universe" | After: "hi world,
            hello universe"

            - For { type: 'exact', key: 'hello', value: 'hi', replaceAllEnabled:
            true }. Before: "hello world, hello universe" | After: "hi world, hi
            universe"

            @default false
          default: false
        key:
          type: string
          description: This is the key to replace.
        value:
          type: string
          description: This is the value that will replace the match.
          maxLength: 1000
      required:
        - type
        - key
        - value
    RegexReplacement:
      type: object
      properties:
        type:
          type: string
          description: >-
            This is the regex replacement type. You can use this to replace a
            word or phrase that matches a pattern.


            Usage:

            - Replace all numbers with "some number": { type: 'regex', regex:
            '\\d+', value: 'some number' }

            - Replace email addresses with "[EMAIL]": { type: 'regex', regex:
            '\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b', value:
            '[EMAIL]' }

            - Replace phone numbers with a formatted version: { type: 'regex',
            regex: '(\\d{3})(\\d{3})(\\d{4})', value: '($1) $2-$3' }

            - Replace all instances of "color" or "colour" with "hue": { type:
            'regex', regex: 'colou?r', value: 'hue' }

            - Capitalize the first letter of every sentence: { type: 'regex',
            regex: '(?<=\\. |^)[a-z]', value: (match) => match.toUpperCase() }
          enum:
            - regex
        regex:
          type: string
          description: >-
            This is the regex pattern to replace.


            Note:

            - This works by using the `string.replace` method in Node.JS. Eg.
            `"hello there".replace(/hello/g, "hi")` will return `"hi there"`.


            Hot tip:

            - In JavaScript, escape `\` when sending the regex pattern. Eg.
            `"hello\sthere"` will be sent over the wire as `"hellosthere"`. Send
            `"hello\\sthere"` instead.
        options:
          description: >-
            These are the options for the regex replacement. Defaults to all
            disabled.


            @default []
          type: array
          items:
            $ref: '#/components/schemas/RegexOption'
        value:
          type: string
          description: This is the value that will replace the match.
          maxLength: 1000
      required:
        - type
        - regex
        - value
    TransferFallbackPlan:
      type: object
      properties:
        message:
          description: >-
            This is the message the assistant will deliver to the customer if
            the transfer fails.
          oneOf:
            - type: string
            - $ref: '#/components/schemas/CustomMessage'
        endCallEnabled:
          type: boolean
          description: >-
            This controls what happens after delivering the failure message to
            the customer.

            - true: End the call after delivering the failure message (default)

            - false: Keep the assistant on the call to continue handling the
            customer's request


            @default true
          default: true
      required:
        - message
    GeminiMultimodalLivePrebuiltVoiceConfig:
      type: object
      properties:
        voiceName:
          type: string
          enum:
            - Puck
            - Charon
            - Kore
            - Fenrir
            - Aoede
      required:
        - voiceName
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: Bearer
      type: http
      description: Retrieve your API Key from [Dashboard](dashboard.cozmox.ai).

````