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

# Create Workflow



## OpenAPI

````yaml post /workflow
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:
  /workflow:
    post:
      tags:
        - Workflow
      summary: Create Workflow
      operationId: WorkflowController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateWorkflowDTO'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workflow'
      security:
        - bearer: []
components:
  schemas:
    CreateWorkflowDTO:
      type: object
      properties:
        nodes:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/ConversationNode'
                title: ConversationNode
              - $ref: '#/components/schemas/ToolNode'
                title: ToolNode
        transcriber:
          description: |-
            This is the transcriber for the workflow.

            This can be overridden at node level using `nodes[n].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
        voice:
          description: |-
            This is the voice for the workflow.

            This can be overridden at node level using `nodes[n].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
        observabilityPlan:
          description: |-
            This is the plan for observability of workflow's calls.

            Currently, only Langfuse is supported.
          oneOf:
            - $ref: '#/components/schemas/LangfuseObservabilityPlan'
              title: Langfuse
          allOf:
            - $ref: '#/components/schemas/LangfuseObservabilityPlan'
        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
        credentials:
          type: array
          description: >-
            These are dynamic credentials that will be used for the workflow
            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'
        name:
          type: string
          maxLength: 80
        edges:
          type: array
          items:
            $ref: '#/components/schemas/Edge'
        globalPrompt:
          type: string
          maxLength: 5000
        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. tool.server

            2. workflow.server / assistant.server

            3. phoneNumber.server

            4. org.server
          allOf:
            - $ref: '#/components/schemas/Server'
        compliancePlan:
          description: >-
            This is the compliance plan for the workflow. It allows you to
            configure HIPAA and other compliance settings.
          allOf:
            - $ref: '#/components/schemas/CompliancePlan'
        analysisPlan:
          description: >-
            This is the plan for analysis of workflow's calls. Stored in
            `call.analysis`.
          allOf:
            - $ref: '#/components/schemas/AnalysisPlan'
        artifactPlan:
          description: >-
            This is the plan for artifacts generated during workflow's calls.
            Stored in `call.artifact`.
          allOf:
            - $ref: '#/components/schemas/ArtifactPlan'
        startSpeakingPlan:
          description: >-
            This is the plan for when the workflow nodes 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 workflow nodes 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 workflow's calls.


            Usage:

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

            - To enable live control of the workflow's calls, set
            `monitorPlan.controlEnabled` to `true`.
          allOf:
            - $ref: '#/components/schemas/MonitorPlan'
        backgroundSpeechDenoisingPlan:
          description: >-
            This enables filtering of noise and background speech while the user
            is talking.


            Features:

            - Smart denoising using Krisp

            - Fourier denoising


            Both can be used together. Order of precedence:

            - Smart denoising

            - Fourier denoising
          allOf:
            - $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan'
        credentialIds:
          description: >-
            These are the credentials that will be used for the workflow 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
      required:
        - nodes
        - name
        - edges
    Workflow:
      type: object
      properties:
        nodes:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/ConversationNode'
                title: ConversationNode
              - $ref: '#/components/schemas/ToolNode'
                title: ToolNode
        transcriber:
          description: |-
            This is the transcriber for the workflow.

            This can be overridden at node level using `nodes[n].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
        voice:
          description: |-
            This is the voice for the workflow.

            This can be overridden at node level using `nodes[n].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
        observabilityPlan:
          description: |-
            This is the plan for observability of workflow's calls.

            Currently, only Langfuse is supported.
          oneOf:
            - $ref: '#/components/schemas/LangfuseObservabilityPlan'
              title: Langfuse
          allOf:
            - $ref: '#/components/schemas/LangfuseObservabilityPlan'
        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
        credentials:
          type: array
          description: >-
            These are dynamic credentials that will be used for the workflow
            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'
        id:
          type: string
        orgId:
          type: string
        createdAt:
          format: date-time
          type: string
        updatedAt:
          format: date-time
          type: string
        name:
          type: string
          maxLength: 80
        edges:
          type: array
          items:
            $ref: '#/components/schemas/Edge'
        globalPrompt:
          type: string
          maxLength: 5000
        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. tool.server

            2. workflow.server / assistant.server

            3. phoneNumber.server

            4. org.server
          allOf:
            - $ref: '#/components/schemas/Server'
        compliancePlan:
          description: >-
            This is the compliance plan for the workflow. It allows you to
            configure HIPAA and other compliance settings.
          allOf:
            - $ref: '#/components/schemas/CompliancePlan'
        analysisPlan:
          description: >-
            This is the plan for analysis of workflow's calls. Stored in
            `call.analysis`.
          allOf:
            - $ref: '#/components/schemas/AnalysisPlan'
        artifactPlan:
          description: >-
            This is the plan for artifacts generated during workflow's calls.
            Stored in `call.artifact`.
          allOf:
            - $ref: '#/components/schemas/ArtifactPlan'
        startSpeakingPlan:
          description: >-
            This is the plan for when the workflow nodes 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 workflow nodes 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 workflow's calls.


            Usage:

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

            - To enable live control of the workflow's calls, set
            `monitorPlan.controlEnabled` to `true`.
          allOf:
            - $ref: '#/components/schemas/MonitorPlan'
        backgroundSpeechDenoisingPlan:
          description: >-
            This enables filtering of noise and background speech while the user
            is talking.


            Features:

            - Smart denoising using Krisp

            - Fourier denoising


            Both can be used together. Order of precedence:

            - Smart denoising

            - Fourier denoising
          allOf:
            - $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan'
        credentialIds:
          description: >-
            These are the credentials that will be used for the workflow 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
      required:
        - nodes
        - id
        - orgId
        - createdAt
        - updatedAt
        - name
        - edges
    ConversationNode:
      type: object
      properties:
        type:
          type: string
          description: >-
            This is the Conversation node. This can be used to start a
            conversation with the customer.


            The flow is:

            - Workflow starts the conversation node

            - Model is active with the `prompt` and global context.

            - Model will call a tool to exit this node.

            - Workflow will extract variables from the conversation.

            - Workflow continues.
          enum:
            - conversation
        model:
          description: |-
            This is the model for the node.

            This overrides `workflow.model`.
          oneOf:
            - $ref: '#/components/schemas/WorkflowOpenAIModel'
              title: WorkflowOpenAIModel
            - $ref: '#/components/schemas/WorkflowAnthropicModel'
              title: WorkflowAnthropicModel
            - $ref: '#/components/schemas/WorkflowGoogleModel'
              title: WorkflowGoogleModel
            - $ref: '#/components/schemas/WorkflowCustomModel'
              title: WorkflowCustomModel
        transcriber:
          description: |-
            This is the transcriber for the node.

            This overrides `workflow.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
        voice:
          description: |-
            This is the voice for the node.

            This overrides `workflow.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
        prompt:
          type: string
          maxLength: 5000
        globalNodePlan:
          description: This is the plan for the global node.
          allOf:
            - $ref: '#/components/schemas/GlobalNodePlan'
        variableExtractionPlan:
          description: >-
            This is the plan that controls the variable extraction from the
            user's responses.


            Usage:

            Use `schema` to specify what you want to extract from the user's
            responses.

            ```json

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

            ```


            This will be extracted as `{{ user.name }}` and `{{ user.age }}`
            respectively.


            (Optional) Use `aliases` to create new variables.


            ```json

            {
              "aliases": [
                {
                  "key": "userAge",
                  "value": "{{user.age}}"
                },
                {
                  "key": "userName",
                  "value": "{{user.name}}"
                }
              ]
            }

            ```


            This will be extracted as `{{ userAge }}` and `{{ userName }}`
            respectively.


            Note: The `schema` field is required for Conversation nodes if you
            want to extract variables from the user's responses. `aliases` is
            just a convenience.
          allOf:
            - $ref: '#/components/schemas/VariableExtractionPlan'
        name:
          type: string
          maxLength: 80
        isStart:
          type: boolean
          description: This is whether or not the node is the start of the workflow.
        metadata:
          type: object
          description: This is for metadata you want to store on the task.
      required:
        - type
        - name
    ToolNode:
      type: object
      properties:
        type:
          type: string
          description: >-
            This is the Tool node. This can be used to call a tool in your
            workflow.


            The flow is:

            - Workflow starts the tool node

            - Model is called to extract parameters needed by the tool from the
            conversation history

            - Tool is called with the parameters

            - Server returns a response

            - Workflow continues with the response
          enum:
            - tool
        tool:
          description: >-
            This is the tool to call. To use an existing tool, send `toolId`
            instead.
          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
        toolId:
          type: string
          description: >-
            This is the tool to call. To use a transient tool, send `tool`
            instead.
        name:
          type: string
          maxLength: 80
        isStart:
          type: boolean
          description: This is whether or not the node is the start of the workflow.
        metadata:
          type: object
          description: This is for metadata you want to store on the task.
      required:
        - type
        - name
    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
    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
    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
    Edge:
      type: object
      properties:
        condition:
          oneOf:
            - $ref: '#/components/schemas/AIEdgeCondition'
              title: AIEdgeCondition
        from:
          type: string
          maxLength: 80
        to:
          type: string
          maxLength: 80
        metadata:
          type: object
          description: This is for metadata you want to store on the edge.
      required:
        - from
        - to
    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'
    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
    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 '/'
    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
    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'
    WorkflowOpenAIModel:
      type: object
      properties:
        provider:
          type: string
          description: This is the provider of the model (`openai`).
          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/.
          maxLength: 100
          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-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
        temperature:
          type: number
          description: This is the temperature of the model.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: This is the max tokens of the model.
          minimum: 50
          maximum: 10000
      required:
        - provider
        - model
    WorkflowAnthropicModel:
      type: object
      properties:
        provider:
          type: string
          description: This is the provider of the model (`anthropic`).
          enum:
            - anthropic
        model:
          type: string
          description: This is the specific model that will be used.
          maxLength: 100
          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
        thinking:
          description: >-
            This is the 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 of the model.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: This is the max tokens of the model.
          minimum: 50
          maximum: 10000
      required:
        - provider
        - model
    WorkflowGoogleModel:
      type: object
      properties:
        provider:
          type: string
          description: This is the provider of the model (`google`).
          enum:
            - google
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
          maxLength: 100
          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
        temperature:
          type: number
          description: This is the temperature of the model.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: This is the max tokens of the model.
          minimum: 50
          maximum: 10000
      required:
        - provider
        - model
    WorkflowCustomModel:
      type: object
      properties:
        provider:
          type: string
          description: This is the provider of the model (`custom-llm`).
          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
          maxLength: 100
        temperature:
          type: number
          description: This is the temperature of the model.
          minimum: 0
          maximum: 2
        maxTokens:
          type: number
          description: This is the max tokens of the model.
          minimum: 50
          maximum: 10000
      required:
        - provider
        - url
        - model
    GlobalNodePlan:
      type: object
      properties:
        enabled:
          type: boolean
          description: |-
            This is the flag to determine if this node is a global node

            @default false
          default: false
        enterCondition:
          type: string
          description: >-
            This is the condition that will be checked to determine if the
            global node should be executed.


            @default ''
          maxLength: 1000
          default: ''
    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'
    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
    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
    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.
    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.
    AIEdgeCondition:
      type: object
      properties:
        type:
          type: string
          enum:
            - ai
        prompt:
          type: string
          description: >-
            This is the prompt for the AI edge condition. It should evaluate to
            a boolean.
          maxLength: 1000
      required:
        - type
        - prompt
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: Bearer
      type: http
      description: Retrieve your API Key from [Dashboard](dashboard.cozmox.ai).

````