---
title: "Create Call"
method: POST
path: "/call"
tags: ["Calls"]
---

# Create Call

`POST /call`

## Request body

- CreateCallDTO
  - `customers` CreateCustomerDTO[] — This is used to issue batch calls to multiple customers. Only relevant for `outboundPhoneCall`. To call a single customer, use `customer` instead.
    - `numberE164CheckEnabled` boolean — 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)
    - `extension` string — This is the extension that will be dialed after the call is answered.
    - `assistantOverrides` AssistantOverrides
      - `transcriber` union — These are the options for the assistant's transcriber.
        - AssemblyAITranscriber
          - `provider` 'assembly-ai', required — This is the transcription provider that will be used.
          - `language` 'en' — This is the language that will be set for the transcription.
          - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
          - `formatTurns` boolean — This enables formatting of transcripts. @default true
          - `endOfTurnConfidenceThreshold` number — This is the end of turn confidence threshold. The minimum confidence that the end of turn is detected. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @min 0 @max 1 @default 0.7
          - `minEndOfTurnSilenceWhenConfident` number — This is the minimum end of turn silence when confident in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 160
          - `wordFinalizationMaxWaitTime` number
          - `maxTurnSilence` number — This is the maximum turn silence time in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 400
          - `realtimeUrl` string — The WebSocket URL that the transcriber connects to.
          - `wordBoost` string[] — Add up to 2500 characters of custom vocabulary.
          - `keytermsPrompt` string[] — Keyterms prompting improves recognition accuracy for specific words and phrases. Can include up to 100 keyterms, each up to 50 characters. Costs an additional $0.04/hour when enabled.
          - `endUtteranceSilenceThreshold` number — The duration of the end utterance silence threshold in milliseconds.
          - `disablePartialTranscripts` boolean — Disable partial transcripts. Set to `true` to not receive partial transcripts. Defaults to `false`.
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - AzureSpeechTranscriber
          - `provider` 'azure', required — This is the transcription provider that will be used.
          - `language` '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' — 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
          - `segmentationStrategy` 'Default' | 'Time' | 'Semantic' — Controls how phrase boundaries are detected, enabling either simple time/silence heuristics or more advanced semantic segmentation.
          - `segmentationSilenceTimeoutMs` number — Duration of detected silence after which the service finalizes a phrase. Configure to adjust sensitivity to pauses in speech.
          - `segmentationMaximumTimeMs` number — Maximum duration a segment can reach before being cut off when using time-based segmentation.
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - CustomTranscriber
          - `provider` 'custom-transcriber', required — This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported.
          - `server` Server, required
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - DeepgramTranscriber
          - `provider` 'deepgram', required — This is the transcription provider that will be used.
          - `model` union — 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
            - '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'
            - string
          - `language` 'ar' | 'az' | 'ba' | 'bg' | 'br' | 'ca' | 'cs' | 'da' | 'da-DK' | 'de' | 'de-CH' | 'el' | 'en' | 'en-AU' | 'en-CA' | 'en-GB' | 'en-IE' | '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' | 'pt-PT' | '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' — 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
          - `smartFormat` boolean — 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.
          - `mipOptOut` boolean — 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
          - `numerals` boolean — 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
          - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
          - `eagerEotThreshold` number
          - `eotThreshold` number
          - `eotTimeoutMs` number
          - `keywords` string[] — 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.
          - `keyterm` string[] — Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%.
          - `endpointing` number — 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@vapi.ai and we'll find another solution. @default 10
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - ElevenLabsTranscriber
          - `provider` '11labs', required — This is the transcription provider that will be used.
          - `model` 'scribe_v1' — This is the model that will be used for the transcription.
          - `language` '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` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - GladiaTranscriber
          - `provider` 'gladia', required — This is the transcription provider that will be used.
          - `model` 'fast' | 'accurate' | 'solaria-1' — This is the Gladia model that will be used. Default is 'fast'
          - `languageBehaviour` 'manual' | 'automatic single language' | 'automatic multiple languages' — Defines how the transcription model detects the audio language. Default value is 'automatic single language'.
          - `language` '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' — Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.
          - `languages` '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' — Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'.
          - `transcriptionHint` string — 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.
          - `prosody` boolean — 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.
          - `audioEnhancer` boolean — If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false.
          - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
          - `endpointing` number — Endpointing time in seconds - time to wait before considering speech ended
          - `speechThreshold` number — Speech threshold - sensitivity configuration for speech detection (0.0 to 1.0)
          - `customVocabularyEnabled` boolean — Enable custom vocabulary for improved accuracy
          - `customVocabularyConfig` GladiaCustomVocabularyConfigDTO
            - `vocabulary` union[], required — Array of vocabulary items (strings or objects with value, pronunciations, intensity, language)
              - …
            - `defaultIntensity` number — Default intensity for vocabulary items (0.0 to 1.0)
          - `region` 'us-west' | 'eu-west' — Region for processing audio (us-west or eu-west)
          - `receivePartialTranscripts` boolean — Enable partial transcripts for low-latency streaming transcription
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - GoogleTranscriber
          - `provider` 'google', required — This is the transcription provider that will be used.
          - `model` 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-lite' | '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-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' — This is the model that will be used for the transcription.
          - `language` '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' — This is the language that will be set for the transcription.
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - SpeechmaticsTranscriber
          - `provider` 'speechmatics', required — This is the transcription provider that will be used.
          - `model` 'default' — This is the model that will be used for the transcription.
          - `language` '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'
          - `operatingPoint` 'standard' | 'enhanced' — This is the operating point for the transcription. Choose between `standard` for faster turnaround with strong accuracy or `enhanced` for highest accuracy when precision is critical. @default 'enhanced'
          - `region` 'eu' | 'us' — This is the region for the Speechmatics API. Choose between EU (Europe) and US (United States) regions for lower latency and data sovereignty compliance. @default 'eu'
          - `enableDiarization` boolean — This enables speaker diarization, which identifies and separates speakers in the transcription. Essential for multi-speaker conversations and conference calls. @default false
          - `maxSpeakers` number — This sets the maximum number of speakers to detect when diarization is enabled. Only used when enableDiarization is true. @default 2
          - `enablePartials` boolean — This enables partial transcripts during speech recognition. When false, only final transcripts are returned. @default true
          - `maxDelay` number — This sets the maximum delay in milliseconds for partial transcripts. Balances latency and accuracy. @default 3000
          - `customVocabulary` SpeechmaticsCustomVocabularyItem[], required
            - `content` string, required — The word or phrase to add to the custom vocabulary.
            - `soundsLike` string[] — Alternative phonetic representations of how the word might sound. This helps recognition when the word might be pronounced differently.
          - `numeralStyle` 'written' | 'spoken' — This controls how numbers are formatted in the transcription output. @default 'written'
          - `enableEntities` boolean — This enables detection of non-speech audio events like music, applause, and laughter. @default false
          - `enablePunctuation` boolean — This enables automatic punctuation in the transcription output. @default true
          - `enableCapitalization` boolean — This enables automatic capitalization in the transcription output. @default true
          - `endOfTurnSensitivity` number — This is the sensitivity level for end-of-turn detection, which determines when a speaker has finished talking. Higher values are more sensitive. @default 0.5
          - `removeDisfluencies` boolean — This enables removal of disfluencies (um, uh) from the transcript to create cleaner, more professional output. @default false
          - `minimumSpeechDuration` number — This is the minimum duration in seconds for speech segments. Shorter segments will be filtered out. Helps remove noise and improve accuracy. @default 0.0
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - TalkscriberTranscriber
          - `provider` 'talkscriber', required — This is the transcription provider that will be used.
          - `model` 'whisper' — This is the model that will be used for the transcription.
          - `language` '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' — 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
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - OpenAITranscriber
          - `provider` 'openai', required — This is the transcription provider that will be used.
          - `model` 'gpt-4o-transcribe' | 'gpt-4o-mini-transcribe', required — This is the model that will be used for the transcription.
          - `language` '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' — This is the language that will be set for the transcription.
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - CartesiaTranscriber
          - `provider` 'cartesia', required
          - `model` 'ink-whisper'
          - `language` '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` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
      - `model` union — These are the options for the assistant's LLM.
        - AnthropicModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` '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' | 'claude-sonnet-4-5-20250929', required — The specific Anthropic/Claude model that will be used.
          - `provider` 'anthropic', required — The provider identifier for Anthropic.
          - `thinking` AnthropicThinkingConfig
            - `type` 'enabled', required
            - `budgetTokens` number, required — The maximum number of tokens to allocate for thinking. Must be between 1024 and 100000 tokens.
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - AnyscaleModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'anyscale', required
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - CerebrasModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'llama3.1-8b' | 'llama-3.3-70b', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `provider` 'cerebras', required
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - CustomLLMModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'custom-llm', required — This is the provider that will be used for the model. Any service, including your own server, that is compatible with the OpenAI API can be used.
          - `metadataSendMode` 'off' | 'variable' | 'destructured' — 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`.
          - `headers` object — Custom headers to send with requests. These headers can override default OpenAI headers except for Authorization (which should be specified using a custom-llm credential).
          - `url` string, required — These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1
          - `wordLevelConfidenceEnabled` boolean — This determines whether the transcriber's word level confidence is sent in requests to the custom provider. Default is false. This only works for Deepgram transcribers.
          - `timeoutSeconds` number — This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds.
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - DeepInfraModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'deepinfra', required
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - DeepSeekModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'deepseek-chat' | 'deepseek-reasoner', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `provider` 'deep-seek', required
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - GoogleModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-lite' | '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-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', required — This is the Google model that will be used.
          - `provider` 'google', required
          - `realtimeConfig` GoogleRealtimeConfig
            - `topP` number — This is the nucleus sampling parameter that controls the cumulative probability of tokens considered during text generation. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
            - `topK` number — This is the top-k sampling parameter that limits the number of highest probability tokens considered during text generation. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
            - `presencePenalty` number — This is the presence penalty parameter that influences the model's likelihood to repeat information by penalizing tokens based on their presence in the text. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
            - `frequencyPenalty` number — This is the frequency penalty parameter that influences the model's likelihood to repeat tokens by penalizing them based on their frequency in the text. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
            - `speechConfig` GeminiMultimodalLiveSpeechConfig
              - …
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - GroqModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'openai/gpt-oss-20b' | 'openai/gpt-oss-120b' | 'deepseek-r1-distill-llama-70b' | 'llama-3.3-70b-versatile' | 'llama-3.1-405b-reasoning' | 'llama-3.1-8b-instant' | 'llama3-8b-8192' | 'llama3-70b-8192' | 'gemma2-9b-it' | 'moonshotai/kimi-k2-instruct-0905' | 'meta-llama/llama-4-maverick-17b-128e-instruct' | 'meta-llama/llama-4-scout-17b-16e-instruct' | 'mistral-saba-24b' | 'compound-beta' | 'compound-beta-mini', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `provider` 'groq', required
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - InflectionAIModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'inflection_3_pi', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `provider` 'inflection-ai', required
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - OpenAIModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'openai', required — This is the provider that will be used for the model.
          - `model` 'gpt-5' | 'gpt-5-mini' | 'gpt-5-nano' | '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' | 'chatgpt-4o-latest' | 'o3' | 'o3-mini' | 'o4-mini' | 'o1-mini' | 'o1-mini-2024-09-12' | 'gpt-4o-realtime-preview-2024-10-01' | 'gpt-4o-realtime-preview-2024-12-17' | 'gpt-4o-mini-realtime-preview-2024-12-17' | 'gpt-realtime-2025-08-28' | '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', required — This is the OpenAI model that will be used. When using Vapi 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. Vapi will automatically find the fastest region that make sense. This is helpful when you are required to comply with Data Residency rules. Learn more about Azure regions here https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/. @default undefined
          - `fallbackModels` string[] — These are the fallback models that will be used if the primary model fails. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest fallbacks that make sense.
          - `toolStrictCompatibilityMode` 'strip-parameters-with-unsupported-validation' | 'strip-unsupported-validation' — Azure OpenAI doesn't support `maxLength` right now https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs?tabs=python-secure%2Cdotnet-entra-id&pivots=programming-language-csharp#unsupported-type-specific-keywords. Need to strip. - `strip-parameters-with-unsupported-validation` will strip parameters with unsupported validation. - `strip-unsupported-validation` will keep the parameters but strip unsupported validation. @default `strip-unsupported-validation`
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - OpenRouterModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'openrouter', required
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - PerplexityAIModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'perplexity-ai', required
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - TogetherAIModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'together-ai', required
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - XaiModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'grok-beta' | 'grok-2' | 'grok-3', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `provider` 'xai', required
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - `voice` union — These are the options for the assistant's voice.
        - AzureVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'azure', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - 'andrew' | 'brian' | 'emma'
            - string
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `speed` number — This is the speed multiplier that will be used.
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - CartesiaVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'cartesia', required — This is the voice provider that will be used.
          - `voiceId` string, required — The ID of the particular voice you want to use.
          - `model` 'sonic-2' | 'sonic-english' | 'sonic-multilingual' | 'sonic-preview' | 'sonic' — This is the model that will be used. This is optional and will default to the correct model for the voiceId.
          - `language` 'en' | 'de' | 'es' | 'fr' | 'ja' | 'pt' | 'zh' | 'hi' | 'it' | 'ko' | 'nl' | 'pl' | 'ru' | 'sv' | 'tr' — This is the language that will be used. This is optional and will default to the correct language for the voiceId.
          - `experimentalControls` CartesiaExperimentalControls
            - `speed` union
              - …
            - `emotion` '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'
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - CustomVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'custom-voice', required — This is the voice provider that will be used. Use `custom-voice` for providers that are not natively supported.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `server` Server, required
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - DeepgramVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'deepgram', required — This is the voice provider that will be used.
          - `voiceId` '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' | 'celeste' | 'estrella' | 'nestor' | 'sirio' | 'carina' | 'alvaro' | 'diana' | 'aquila' | 'selena' | 'javier', required — This is the provider-specific ID that will be used.
          - `model` 'aura' | 'aura-2' — This is the model that will be used. Defaults to 'aura-2' when not specified.
          - `mipOptOut` boolean — 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
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - ElevenLabsVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` '11labs', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice Library.
            - 'burt' | 'marissa' | 'andrea' | 'sarah' | 'phillip' | 'steve' | 'joseph' | 'myra' | 'paula' | 'ryan' | 'drew' | 'paul' | 'mrb' | 'matilda' | 'mark'
            - string
          - `stability` number — Defines the stability for voice settings.
          - `similarityBoost` number — Defines the similarity boost for voice settings.
          - `style` number — Defines the style for voice settings.
          - `useSpeakerBoost` boolean — Defines the use speaker boost for voice settings.
          - `speed` number — Defines the speed for voice settings.
          - `optimizeStreamingLatency` number — Defines the optimize streaming latency for voice settings. Defaults to 3.
          - `enableSsmlParsing` boolean — This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency. @default false
          - `autoMode` boolean — Defines the auto mode for voice settings. Defaults to false.
          - `model` 'eleven_multilingual_v2' | 'eleven_turbo_v2' | 'eleven_turbo_v2_5' | 'eleven_flash_v2' | 'eleven_flash_v2_5' | 'eleven_monolingual_v1' — This is the model that will be used. Defaults to 'eleven_turbo_v2' if not specified.
          - `language` string — 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` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `pronunciationDictionaryLocators` ElevenLabsPronunciationDictionaryLocator[] — This is the pronunciation dictionary locators to use.
            - `pronunciationDictionaryId` string, required — This is the ID of the pronunciation dictionary to use.
            - `versionId` string, required — This is the version ID of the pronunciation dictionary to use.
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - HumeVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'hume', required — This is the voice provider that will be used.
          - `model` 'octave' — This is the model that will be used.
          - `voiceId` string, required — The ID of the particular voice you want to use.
          - `isCustomHumeVoice` boolean — Indicates whether the chosen voice is a preset Hume AI voice or a custom voice.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `description` string — 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` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - LMNTVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'lmnt', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - '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'
            - string
          - `speed` number — This is the speed multiplier that will be used.
          - `language` union — Two letter ISO 639-1 language code. Use "auto" for auto-detection.
            - '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'
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - NeuphonicVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'neuphonic', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - string
            - string
          - `model` 'neu_hq' | 'neu_fast' — This is the model that will be used. Defaults to 'neu_fast' if not specified.
          - `language` object, required — This is the language (ISO 639-1) that is enforced for the model.
          - `speed` number — This is the speed multiplier that will be used.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - OpenAIVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'openai', required — This is the voice provider that will be used.
          - `voiceId` union, required — 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.
            - 'alloy' | 'echo' | 'fable' | 'onyx' | 'nova' | 'shimmer' | 'marin' | 'cedar'
            - string
          - `model` 'tts-1' | 'tts-1-hd' | 'gpt-4o-mini-tts' — This is the model that will be used for text-to-speech.
          - `instructions` string — 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.
          - `speed` number — This is the speed multiplier that will be used.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - PlayHTVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'playht', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - 'jennifer' | 'melissa' | 'will' | 'chris' | 'matt' | 'jack' | 'ruby' | 'davis' | 'donna' | 'michael'
            - string
          - `speed` number — This is the speed multiplier that will be used.
          - `temperature` number — 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.
          - `emotion` 'female_happy' | 'female_sad' | 'female_angry' | 'female_fearful' | 'female_disgust' | 'female_surprised' | 'male_happy' | 'male_sad' | 'male_angry' | 'male_fearful' | 'male_disgust' | 'male_surprised' — An emotion to be applied to the speech.
          - `voiceGuidance` number — A number between 1 and 6. Use lower numbers to reduce how unique your chosen voice will be compared to other voices.
          - `styleGuidance` number — 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.
          - `textGuidance` number — 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.
          - `model` 'PlayHT2.0' | 'PlayHT2.0-turbo' | 'Play3.0-mini' | 'PlayDialog' — Playht voice model/engine to use.
          - `language` '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' — The language to use for the speech.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - RimeAIVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'rime-ai', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - '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'
            - string
          - `model` 'arcana' | 'mistv2' | 'mist' — This is the model that will be used. Defaults to 'arcana' when not specified.
          - `speed` number — This is the speed multiplier that will be used.
          - `pauseBetweenBrackets` boolean — 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.
          - `phonemizeBetweenBrackets` boolean — 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.
          - `reduceLatency` boolean — 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
          - `inlineSpeedAlpha` string — This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - SmallestAIVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'smallest-ai', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - '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'
            - string
          - `model` 'lightning' — Smallest AI voice model to use. Defaults to 'lightning' when not specified.
          - `speed` number — This is the speed multiplier that will be used.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - TavusVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'tavus', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - 'r52da2535a'
            - string
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `personaId` string — This is the unique identifier for the persona that the replica will use in the conversation.
          - `callbackUrl` string — This is the url that will receive webhooks with updates regarding the conversation state.
          - `conversationName` string — This is the name for the conversation.
          - `conversationalContext` string — This is the context that will be appended to any context provided in the persona, if one is provided.
          - `customGreeting` string — This is the custom greeting that the replica will give once a participant joines the conversation.
          - `properties` TavusConversationProperties
            - `maxCallDuration` number — 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` number — The duration in seconds after which the call will be automatically shut down once the last participant leaves.
            - `participantAbsentTimeout` number — 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` boolean — If true, the user will be able to record the conversation.
            - `enableTranscription` boolean — 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` boolean — 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` string — 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` string — The name of the S3 bucket where the recording will be stored.
            - `recordingS3BucketRegion` string — The region of the S3 bucket where the recording will be stored.
            - `awsAssumeRoleArn` string — The ARN of the role that will be assumed to access the S3 bucket.
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - VapiVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'vapi', required — This is the voice provider that will be used.
          - `voiceId` 'Elliot' | 'Kylie' | 'Rohan' | 'Lily' | 'Savannah' | 'Hana' | 'Neha' | 'Cole' | 'Harry' | 'Paige' | 'Spencer', required — The voices provided by Vapi
          - `speed` number — This is the speed multiplier that will be used. @default 1
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - SesameVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'sesame', required — This is the voice provider that will be used.
          - `voiceId` string, required — This is the provider-specific ID that will be used.
          - `model` 'csm-1b', required — This is the model that will be used.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - InworldVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'inworld', required — This is the voice provider that will be used.
          - `voiceId` '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', required — 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
          - `model` 'inworld-tts-1' — This is the model that will be used.
          - `languageCode` 'en' | 'zh' | 'ko' | 'nl' | 'fr' | 'es' | 'ja' | 'de' | 'it' | 'pl' | 'pt' — Language code for Inworld TTS synthesis
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - MinimaxVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'minimax', required — This is the voice provider that will be used.
          - `voiceId` string, required — This is the provider-specific ID that will be used. Use a voice from MINIMAX_PREDEFINED_VOICES or a custom cloned voice ID.
          - `model` 'speech-02-hd' | 'speech-02-turbo' | 'speech-2.5-turbo-preview' — This is the model that will be used. Options are 'speech-02-hd' and 'speech-02-turbo'. speech-02-hd is optimized for high-fidelity applications like voiceovers and audiobooks. speech-02-turbo is designed for real-time applications with low latency. @default "speech-02-turbo"
          - `emotion` string — The emotion to use for the voice. If not provided, will use auto-detect mode. Options include: 'happy', 'sad', 'angry', 'fearful', 'surprised', 'disgusted', 'neutral'
          - `pitch` number — Voice pitch adjustment. Range from -12 to 12 semitones. @default 0
          - `speed` number — Voice speed adjustment. Range from 0.5 to 2.0. @default 1.0
          - `volume` number — Voice volume adjustment. Range from 0.5 to 2.0. @default 1.0
          - `region` 'worldwide' | 'china' — The region for Minimax API. Defaults to "worldwide".
          - `languageBoost` 'Chinese' | 'Chinese,Yue' | 'English' | 'Arabic' | 'Russian' | 'Spanish' | 'French' | 'Portuguese' | 'German' | 'Turkish' | 'Dutch' | 'Ukrainian' | 'Vietnamese' | 'Indonesian' | 'Japanese' | 'Italian' | 'Korean' | 'Thai' | 'Polish' | 'Romanian' | 'Greek' | 'Czech' | 'Finnish' | 'Hindi' | 'Bulgarian' | 'Danish' | 'Hebrew' | 'Malay' | 'Persian' | 'Slovak' | 'Swedish' | 'Croatian' | 'Filipino' | 'Hungarian' | 'Norwegian' | 'Slovenian' | 'Catalan' | 'Nynorsk' | 'Tamil' | 'Afrikaans' | 'auto' — Language hint for MiniMax T2A. Example: yue (Cantonese), zh (Chinese), en (English).
          - `textNormalizationEnabled` boolean — Enable MiniMax text normalization to improve number reading and formatting.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
      - `firstMessage` string — This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If unspecified, assistant will wait for user to speak and use the model to respond once they speak.
      - `firstMessageInterruptionsEnabled` boolean
      - `firstMessageMode` 'assistant-speaks-first' | 'assistant-speaks-first-with-model-generated-message' | 'assistant-waits-for-user' — This is the mode for the first message. Default is 'assistant-speaks-first'. Use: - 'assistant-speaks-first' to have the assistant speak first. - 'assistant-waits-for-user' to have the assistant wait for the user to speak first. - 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points). @default 'assistant-speaks-first'
      - `voicemailDetection` union — These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool]. This uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached. You can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.
        - GoogleVoicemailDetectionPlan
          - `beepMaxAwaitSeconds` number — This is the maximum duration from the start of the call that we will wait for a voicemail beep, before speaking our message - If we detect a voicemail beep before this, we will speak the message at that point. - Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so before the actual beep, it will get cut off. You should definitely tune this to your use case. @default 30 @min 0 @max 60
          - `provider` 'google', required — This is the provider to use for voicemail detection.
          - `backoffPlan` VoicemailDetectionBackoffPlan
            - `startAtSeconds` number — This is the number of seconds to wait before starting the first retry attempt.
            - `frequencySeconds` number — This is the interval in seconds between retry attempts.
            - `maxRetries` number — This is the maximum number of retry attempts before giving up.
          - `type` 'audio' | 'transcript' — This is the detection type to use for voicemail detection. - 'audio': Uses native audio models (default) - 'transcript': Uses ASR/transcript-based detection @default 'audio' (audio detection)
        - OpenAIVoicemailDetectionPlan
          - `beepMaxAwaitSeconds` number — This is the maximum duration from the start of the call that we will wait for a voicemail beep, before speaking our message - If we detect a voicemail beep before this, we will speak the message at that point. - Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so before the actual beep, it will get cut off. You should definitely tune this to your use case. @default 30 @min 0 @max 60
          - `provider` 'openai', required — This is the provider to use for voicemail detection.
          - `backoffPlan` VoicemailDetectionBackoffPlan
            - `startAtSeconds` number — This is the number of seconds to wait before starting the first retry attempt.
            - `frequencySeconds` number — This is the interval in seconds between retry attempts.
            - `maxRetries` number — This is the maximum number of retry attempts before giving up.
          - `type` 'audio' | 'transcript' — This is the detection type to use for voicemail detection. - 'audio': Uses native audio models (default) - 'transcript': Uses ASR/transcript-based detection @default 'audio' (audio detection)
        - TwilioVoicemailDetectionPlan
          - `provider` 'twilio', required — This is the provider to use for voicemail detection.
          - `voicemailDetectionTypes` string[] — These are the AMD messages from Twilio that are considered as voicemail. Default is ['machine_end_beep', 'machine_end_silence']. @default {Array} ['machine_end_beep', 'machine_end_silence']
          - `enabled` boolean — This sets whether the assistant should detect voicemail. Defaults to true. @default true
          - `machineDetectionTimeout` number — The number of seconds that Twilio should attempt to perform answering machine detection before timing out and returning AnsweredBy as unknown. Default is 30 seconds. Increasing this value will provide the engine more time to make a determination. This can be useful when DetectMessageEnd is provided in the MachineDetection parameter and there is an expectation of long answering machine greetings that can exceed 30 seconds. Decreasing this value will reduce the amount of time the engine has to make a determination. This can be particularly useful when the Enable option is provided in the MachineDetection parameter and you want to limit the time for initial detection. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 30
          - `machineDetectionSpeechThreshold` number — The number of milliseconds that is used as the measuring stick for the length of the speech activity. Durations lower than this value will be interpreted as a human, longer as a machine. Default is 2400 milliseconds. Increasing this value will reduce the chance of a False Machine (detected machine, actually human) for a long human greeting (e.g., a business greeting) but increase the time it takes to detect a machine. Decreasing this value will reduce the chances of a False Human (detected human, actually machine) for short voicemail greetings. The value of this parameter may need to be reduced by more than 1000ms to detect very short voicemail greetings. A reduction of that significance can result in increased False Machine detections. Adjusting the MachineDetectionSpeechEndThreshold is likely the better approach for short voicemails. Decreasing MachineDetectionSpeechThreshold will also reduce the time it takes to detect a machine. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 2400
          - `machineDetectionSpeechEndThreshold` number — The number of milliseconds of silence after speech activity at which point the speech activity is considered complete. Default is 1200 milliseconds. Increasing this value will typically be used to better address the short voicemail greeting scenarios. For short voicemails, there is typically 1000-2000ms of audio followed by 1200-2400ms of silence and then additional audio before the beep. Increasing the MachineDetectionSpeechEndThreshold to ~2500ms will treat the 1200-2400ms of silence as a gap in the greeting but not the end of the greeting and will result in a machine detection. The downsides of such a change include: - Increasing the delay for human detection by the amount you increase this parameter, e.g., a change of 1200ms to 2500ms increases human detection delay by 1300ms. - Cases where a human has two utterances separated by a period of silence (e.g. a "Hello", then 2000ms of silence, and another "Hello") may be interpreted as a machine. Decreasing this value will result in faster human detection. The consequence is that it can lead to increased False Human (detected human, actually machine) detections because a silence gap in a voicemail greeting (not necessarily just in short voicemail scenarios) can be incorrectly interpreted as the end of speech. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 1200
          - `machineDetectionSilenceTimeout` number — The number of milliseconds of initial silence after which an unknown AnsweredBy result will be returned. Default is 5000 milliseconds. Increasing this value will result in waiting for a longer period of initial silence before returning an 'unknown' AMD result. Decreasing this value will result in waiting for a shorter period of initial silence before returning an 'unknown' AMD result. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 5000
        - VapiVoicemailDetectionPlan
          - `beepMaxAwaitSeconds` number — This is the maximum duration from the start of the call that we will wait for a voicemail beep, before speaking our message - If we detect a voicemail beep before this, we will speak the message at that point. - Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so before the actual beep, it will get cut off. You should definitely tune this to your use case. @default 30 @min 0 @max 60
          - `provider` 'vapi', required — This is the provider to use for voicemail detection.
          - `backoffPlan` VoicemailDetectionBackoffPlan
            - `startAtSeconds` number — This is the number of seconds to wait before starting the first retry attempt.
            - `frequencySeconds` number — This is the interval in seconds between retry attempts.
            - `maxRetries` number — This is the maximum number of retry attempts before giving up.
          - `type` 'audio' | 'transcript' — This is the detection type to use for voicemail detection. - 'audio': Uses native audio models (default) - 'transcript': Uses ASR/transcript-based detection @default 'audio' (audio detection)
      - `clientMessages` string[] — These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.
      - `serverMessages` string[] — These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted. You can check the shape of the messages in ServerMessage schema.
      - `maxDurationSeconds` number — This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes)
      - `backgroundSound` string, uri — 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.
      - `modelOutputInMessagesEnabled` boolean — This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. Default `false` while in beta. @default false
      - `transportConfigurations` TransportConfigurationTwilio[] — These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.
        - `provider` 'twilio', required
        - `timeout` number — The integer number of seconds that we should allow the phone to ring before assuming there is no answer. The default is `60` seconds and the maximum is `600` seconds. For some call flows, we will add a 5-second buffer to the timeout value you provide. For this reason, a timeout value of 10 seconds could result in an actual timeout closer to 15 seconds. You can set this to a short time, such as `15` seconds, to hang up before reaching an answering machine or voicemail. @default 60
        - `record` boolean — Whether to record the call. Can be `true` to record the phone call, or `false` to not. The default is `false`. @default false
        - `recordingChannels` 'mono' | 'dual' — The number of channels in the final recording. Can be: `mono` or `dual`. The default is `mono`. `mono` records both legs of the call in a single channel of the recording file. `dual` records each leg to a separate channel of the recording file. The first channel of a dual-channel recording contains the parent call and the second channel contains the child call. @default 'mono'
      - `observabilityPlan` LangfuseObservabilityPlan
        - `provider` 'langfuse', required
        - `tags` string[], required — 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
        - `metadata` object — 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.
      - `credentials` union[] — These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.
        - union
          - CreateAnthropicCredentialDTO
            - `provider` 'anthropic', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateAnyscaleCredentialDTO
            - `provider` 'anyscale', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateAssemblyAICredentialDTO
            - `provider` 'assembly-ai', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateAzureCredentialDTO
            - `provider` 'azure', required
            - `service` 'speech' | 'blob_storage', required — This is the service being used in Azure.
            - `region` 'australia' | 'canadaeast' | 'canadacentral' | 'eastus2' | 'eastus' | 'france' | 'india' | 'japaneast' | 'japanwest' | 'uaenorth' | 'northcentralus' | 'norway' | 'southcentralus' | 'swedencentral' | 'switzerland' | 'uk' | 'westus' | 'westus3' — This is the region of the Azure resource.
            - `apiKey` string — This is not returned in the API.
            - `fallbackIndex` number — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.
            - `bucketPlan` AzureBlobStorageBucketPlan
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateAzureOpenAICredentialDTO
            - `provider` 'azure-openai', required
            - `region` 'australia' | 'canadaeast' | 'canadacentral' | 'eastus2' | 'eastus' | 'france' | 'india' | 'japaneast' | 'japanwest' | 'uaenorth' | 'northcentralus' | 'norway' | 'southcentralus' | 'swedencentral' | 'switzerland' | 'uk' | 'westus' | 'westus3', required
            - `models` string[], required
            - `openAIKey` string, required — This is not returned in the API.
            - `ocpApimSubscriptionKey` string — This is not returned in the API.
            - `openAIEndpoint` string, required
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateByoSipTrunkCredentialDTO
            - `provider` 'byo-sip-trunk' — This can be used to bring your own SIP trunks or to connect to a Carrier.
            - `gateways` SipTrunkGateway[], required — This is the list of SIP trunk's gateways.
              - …
            - `outboundAuthenticationPlan` SipTrunkOutboundAuthenticationPlan
              - …
            - `outboundLeadingPlusEnabled` boolean — 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` string — This can be used to configure the tech prefix on outbound calls. This is an advanced property.
            - `sipDiversionHeader` string — 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.
            - `sbcConfiguration` SbcConfiguration
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateCartesiaCredentialDTO
            - `provider` 'cartesia', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateCerebrasCredentialDTO
            - `provider` 'cerebras', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateCloudflareCredentialDTO
            - `provider` 'cloudflare', required — Credential provider. Only allowed value is cloudflare
            - `accountId` string — Cloudflare Account Id.
            - `apiKey` string — Cloudflare API Key / Token.
            - `accountEmail` string — Cloudflare Account Email.
            - `fallbackIndex` number — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.
            - `bucketPlan` CloudflareR2BucketPlan
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateCustomLLMCredentialDTO
            - `provider` 'custom-llm', required
            - `apiKey` string, required — This is not returned in the API.
            - `authenticationPlan` OAuth2AuthenticationPlan
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateDeepgramCredentialDTO
            - `provider` 'deepgram', required
            - `apiKey` string, required — This is not returned in the API.
            - `apiUrl` string — This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateDeepInfraCredentialDTO
            - `provider` 'deepinfra', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateDeepSeekCredentialDTO
            - `provider` 'deep-seek', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateElevenLabsCredentialDTO
            - `provider` '11labs', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGcpCredentialDTO
            - `provider` 'gcp', required
            - `fallbackIndex` number — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.
            - `gcpKey` GcpKey, required
              - …
            - `region` string — This is the region of the GCP resource.
            - `bucketPlan` BucketPlan
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGladiaCredentialDTO
            - `provider` 'gladia', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGoHighLevelCredentialDTO
            - `provider` 'gohighlevel', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGoogleCredentialDTO
            - `provider` 'google', required — This is the key for Gemini in Google AI Studio. Get it from here: https://aistudio.google.com/app/apikey
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGroqCredentialDTO
            - `provider` 'groq', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateHumeCredentialDTO
            - `provider` 'hume', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateInflectionAICredentialDTO
            - `provider` 'inflection-ai', required — 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
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateLangfuseCredentialDTO
            - `provider` 'langfuse', required
            - `publicKey` string, required — The public key for Langfuse project. Eg: pk-lf-...
            - `apiKey` string, required — The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API.
            - `apiUrl` string, required — The host URL for Langfuse project. Eg: https://cloud.langfuse.com
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateLmntCredentialDTO
            - `provider` 'lmnt', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateMakeCredentialDTO
            - `provider` 'make', required
            - `teamId` string, required — Team ID
            - `region` string, required — Region of your application. For example: eu1, eu2, us1, us2
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateMistralCredentialDTO
            - `provider` 'mistral', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateNeuphonicCredentialDTO
            - `provider` 'neuphonic', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateOpenAICredentialDTO
            - `provider` 'openai', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateOpenRouterCredentialDTO
            - `provider` 'openrouter', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreatePerplexityAICredentialDTO
            - `provider` 'perplexity-ai', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreatePlayHTCredentialDTO
            - `provider` 'playht', required
            - `apiKey` string, required — This is not returned in the API.
            - `userId` string, required
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateRimeAICredentialDTO
            - `provider` 'rime-ai', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateRunpodCredentialDTO
            - `provider` 'runpod', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateS3CredentialDTO
            - `provider` 's3', required — Credential provider. Only allowed value is s3
            - `awsAccessKeyId` string, required — AWS access key ID.
            - `awsSecretAccessKey` string, required — AWS access key secret. This is not returned in the API.
            - `region` string, required — AWS region in which the S3 bucket is located.
            - `s3BucketName` string, required — AWS S3 bucket name.
            - `s3PathPrefix` string, required — The path prefix for the uploaded recording. Ex. "recordings/"
            - `fallbackIndex` number — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateSmallestAICredentialDTO
            - `provider` 'smallest-ai', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateSpeechmaticsCredentialDTO
            - `provider` 'speechmatics', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateSupabaseCredentialDTO
            - `provider` 'supabase', required — This is for supabase storage.
            - `fallbackIndex` number — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.
            - `bucketPlan` SupabaseBucketPlan
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateTavusCredentialDTO
            - `provider` 'tavus', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateTogetherAICredentialDTO
            - `provider` 'together-ai', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateTrieveCredentialDTO
            - `provider` 'trieve', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateTwilioCredentialDTO
            - `provider` 'twilio', required
            - `authToken` string — This is not returned in the API.
            - `apiKey` string — This is not returned in the API.
            - `apiSecret` string — This is not returned in the API.
            - `accountSid` string, required
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateVonageCredentialDTO
            - `provider` 'vonage', required
            - `apiSecret` string, required — This is not returned in the API.
            - `apiKey` string, required
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateWebhookCredentialDTO
            - `provider` 'webhook', required
            - `authenticationPlan` union, required — This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication.
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateCustomCredentialDTO
            - `provider` 'custom-credential', required
            - `authenticationPlan` union, required — This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication.
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateXAiCredentialDTO
            - `provider` 'xai', required — This is the api key for Grok in XAi's console. Get it from here: https://console.x.ai
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGoogleCalendarOAuth2ClientCredentialDTO
            - `provider` 'google.calendar.oauth2-client', required
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGoogleCalendarOAuth2AuthorizationCredentialDTO
            - `provider` 'google.calendar.oauth2-authorization', required
            - `authorizationId` string, required — The authorization ID for the OAuth2 authorization
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGoogleSheetsOAuth2AuthorizationCredentialDTO
            - `provider` 'google.sheets.oauth2-authorization', required
            - `authorizationId` string, required — The authorization ID for the OAuth2 authorization
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateSlackOAuth2AuthorizationCredentialDTO
            - `provider` 'slack.oauth2-authorization', required
            - `authorizationId` string, required — The authorization ID for the OAuth2 authorization
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGoHighLevelMCPCredentialDTO
            - `provider` 'ghl.oauth2-authorization', required
            - `authenticationSession` Oauth2AuthenticationSession, required
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateInworldCredentialDTO
            - `provider` 'inworld', required
            - `apiKey` string, required — This is the Inworld Basic (Base64) authentication token. This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
      - `hooks` union[] — This is a set of actions that will be performed on certain events.
        - union
          - CallHookCallEnding
            - `on` 'call.ending', required — This is the event that triggers this hook
            - `do` ToolCallHookAction[], required — This is the set of actions to perform when the hook triggers
              - …
            - `filters` CallHookFilter[] — This is the set of filters that must match for the hook to trigger
              - …
          - CallHookAssistantSpeechInterrupted
            - `on` 'assistant.speech.interrupted', required — This is the event that triggers this hook
            - `do` union[], required — This is the set of actions to perform when the hook triggers
              - …
          - CallHookCustomerSpeechInterrupted
            - `on` 'customer.speech.interrupted', required — This is the event that triggers this hook
            - `do` union[], required — This is the set of actions to perform when the hook triggers
              - …
          - CallHookCustomerSpeechTimeout
            - `on` string, required — Must be either "customer.speech.timeout" or match the pattern "customer.speech.timeout[property=value]"
            - `do` union[], required — This is the set of actions to perform when the hook triggers
              - …
            - `options` CustomerSpeechTimeoutOptions
              - …
            - `name` string — This is the name of the hook, it can be set by the user to identify the hook. If no name is provided, the hook will be auto generated as UUID. @default UUID
      - `variableValues` object — These are values that will be used to replace the template variables in the assistant messages and other text-based fields. This uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html So for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`. `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will be replaced with the current date and time in New York. Some VAPI reserved defaults: - *customer* - the customer object
      - `name` string — This is the name of the assistant. This is required when you want to transfer between assistants in a call.
      - `voicemailMessage` string — This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up.
      - `endCallMessage` string — This is the message that the assistant will say if it ends the call. If unspecified, it will hang up without saying anything.
      - `endCallPhrases` string[] — This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.
      - `compliancePlan` CompliancePlan
        - `hipaaEnabled` boolean — 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.
        - `pciEnabled` boolean — 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.
        - `securityFilterPlan` SecurityFilterPlan
          - `enabled` boolean — Whether the security filter is enabled. @default false
          - `filters` SecurityFilterBase[] — Array of security filter types to apply. If array is not empty, only those security filters are run.
          - `mode` 'sanitize' | 'reject' | 'replace' — Mode of operation when a security threat is detected. - 'sanitize': Remove or replace the threatening content - 'reject': Replace the entire transcript with replacement text - 'replace': Replace threatening patterns with replacement text @default 'sanitize'
          - `replacementText` string — Text to use when replacing filtered content. @default '[FILTERED]'
        - `recordingConsentPlan` union
          - RecordingConsentPlanStayOnLine
            - `message` string, required — This is the message asking for consent to record the call. If the type is `stay-on-line`, the message should ask the user to hang up if they do not consent. If the type is `verbal`, the message should ask the user to verbally consent or decline.
            - `voice` union — This is the voice to use for the consent message. If not specified, inherits from the assistant's voice. Use a different voice for the consent message for a better user experience.
              - …
            - `type` 'stay-on-line', required — This is the type of recording consent plan. This type assumes consent is granted if the user stays on the line.
            - `waitSeconds` number — Number of seconds to wait before transferring to the assistant if user stays on the call
          - RecordingConsentPlanVerbal
            - `message` string, required — This is the message asking for consent to record the call. If the type is `stay-on-line`, the message should ask the user to hang up if they do not consent. If the type is `verbal`, the message should ask the user to verbally consent or decline.
            - `voice` union — This is the voice to use for the consent message. If not specified, inherits from the assistant's voice. Use a different voice for the consent message for a better user experience.
              - …
            - `type` 'verbal', required — This is the type of recording consent plan. This type assumes consent is granted if the user verbally consents or declines.
            - `declineTool` object — Tool to execute if user verbally declines recording consent
            - `declineToolId` string — ID of existing tool to execute if user verbally declines recording consent
      - `metadata` object — This is for metadata you want to store on the assistant.
      - `backgroundSpeechDenoisingPlan` BackgroundSpeechDenoisingPlan
        - `smartDenoisingPlan` SmartDenoisingPlan
          - `enabled` boolean — Whether smart denoising using Krisp is enabled.
        - `fourierDenoisingPlan` FourierDenoisingPlan
          - `enabled` boolean — Whether Fourier denoising is enabled. Note that this is experimental and may not work as expected.
          - `mediaDetectionEnabled` boolean — 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.
          - `staticThreshold` number — Static threshold in dB used as fallback when no baseline is established.
          - `baselineOffsetDb` number — 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.
          - `windowSizeMs` number — Rolling window size in milliseconds for calculating the audio baseline. Larger windows adapt more slowly but are more stable.
          - `baselinePercentile` number — 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.
      - `analysisPlan` AnalysisPlan
        - `minMessagesThreshold` number — 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
        - `summaryPlan` SummaryPlan
          - `messages` object[] — 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` - {{messages}}: The messages of the call from `assistant.model.messages` - {{endedReason}}: The ended reason of the call from `call.endedReason`
          - `enabled` boolean — 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` number — 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
        - `structuredDataPlan` StructuredDataPlan
          - `messages` object[] — 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`- {{messages}}: the messages of the call from `assistant.model.messages`- {{schema}}: the schema of the structured data from `structuredDataPlan.schema`- {{endedReason}}: the ended reason of the call from `call.endedReason`
          - `enabled` boolean — 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` JsonSchema
            - `type` 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object', required — 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.
            - `items` object — 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` object — 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` string — This is the description to help the model understand what it needs to output.
            - `pattern` string — 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` 'date-time' | 'time' | 'date' | 'duration' | 'email' | 'hostname' | 'ipv4' | 'ipv6' | 'uuid' — 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
            - `required` string[] — This is a list of properties that are required. This only makes sense if the type is "object".
            - `enum` string[] — This array specifies the allowed values that can be used to restrict the output of the model.
            - `title` string — This is the title of the schema.
          - `timeoutSeconds` number — 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
        - `structuredDataMultiPlan` StructuredDataMultiPlan[] — 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`.
          - `key` string, required — This is the key of the structured data plan in the catalog.
          - `plan` StructuredDataPlan, required
            - `messages` object[] — 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`- {{messages}}: the messages of the call from `assistant.model.messages`- {{schema}}: the schema of the structured data from `structuredDataPlan.schema`- {{endedReason}}: the ended reason of the call from `call.endedReason`
              - …
            - `enabled` boolean — 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` JsonSchema
              - …
            - `timeoutSeconds` number — 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
        - `successEvaluationPlan` SuccessEvaluationPlan
          - `rubric` 'NumericScale' | 'DescriptiveScale' | 'Checklist' | 'Matrix' | 'PercentageScale' | 'LikertScale' | 'AutomaticRubric' | 'PassFail' — 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` object[] — 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`- {{messages}}: the messages of the call from `assistant.model.messages`- {{rubric}}: the rubric of the success evaluation from `successEvaluationPlan.rubric`- {{endedReason}}: the ended reason of the call from `call.endedReason`
          - `enabled` boolean — 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` number — 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
        - `outcomeIds` string[] — This is an array of outcome UUIDs to be calculated during analysis. The outcomes will be calculated and stored in `call.analysis.outcomes`.
      - `artifactPlan` ArtifactPlan
        - `recordingEnabled` boolean — 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
        - `recordingFormat` 'wav;l16' | 'mp3' — This determines the format of the recording. Defaults to `wav;l16`. @default 'wav;l16'
        - `recordingUseCustomStorageEnabled` boolean — This determines whether to use custom storage (S3 or GCP) for call recordings when storage credentials are configured. When set to false, recordings will be stored on Vapi's storage instead of your custom storage, even if you have custom storage credentials configured. Usage: - Set to false if you have custom storage configured but want to store recordings on Vapi's storage for this assistant. - Set to true (or leave unset) to use your custom storage for recordings when available. @default true
        - `videoRecordingEnabled` boolean — 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
        - `fullMessageHistoryEnabled` boolean — This determines whether the artifact contains the full message history, even after handoff context engineering. Defaults to false.
        - `pcapEnabled` boolean — This determines whether the SIP packet capture is enabled. Defaults to true. Only relevant for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`. You can find the packet capture at `call.artifact.pcapUrl` after the call is ended. @default true
        - `pcapS3PathPrefix` string — 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 '/'
        - `pcapUseCustomStorageEnabled` boolean — This determines whether to use custom storage (S3 or GCP) for SIP packet captures when storage credentials are configured. When set to false, packet captures will be stored on Vapi's storage instead of your custom storage, even if you have custom storage credentials configured. Usage: - Set to false if you have custom storage configured but want to store packet captures on Vapi's storage for this assistant. - Set to true (or leave unset) to use your custom storage for packet captures when available. @default true
        - `loggingEnabled` boolean — This determines whether the call logs are enabled. Defaults to true. @default true
        - `loggingUseCustomStorageEnabled` boolean — This determines whether to use custom storage (S3 or GCP) for call logs when storage credentials are configured. When set to false, logs will be stored on Vapi's storage instead of your custom storage, even if you have custom storage credentials configured. Usage: - Set to false if you have custom storage configured but want to store logs on Vapi's storage for this assistant. - Set to true (or leave unset) to use your custom storage for logs when available. @default true
        - `transcriptPlan` TranscriptPlan
          - `enabled` boolean — This determines whether the transcript is stored in `call.artifact.transcript`. Defaults to true. @default true
          - `assistantName` string — 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` string — 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'
        - `recordingPath` string — 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 '/'
        - `structuredOutputIds` string[] — This is an array of structured output IDs to be calculated during the call. The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended.
        - `loggingPath` string — This is the path where the call logs 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 call logs to a specific path, set this to the path. Example: `/my-assistant-logs`. - If you want to upload the call logs to the root of the bucket, set this to `/`. @default '/'
      - `startSpeakingPlan` StartSpeakingPlan
        - `waitSeconds` number — 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
        - `smartEndpointingEnabled` union
          - boolean
          - 'livekit'
        - `smartEndpointingPlan` union — This is the plan for smart endpointing. Pick between Vapi smart endpointing, LiveKit, or custom endpointing model (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`. If this is not set, the system will automatically use the transcriber's built-in endpointing capabilities if available.
          - VapiSmartEndpointingPlan
            - `provider` 'vapi' | 'livekit' | 'custom-endpointing-model', required — This is the provider for the smart endpointing plan.
          - LivekitSmartEndpointingPlan
            - `provider` 'vapi' | 'livekit' | 'custom-endpointing-model', required — This is the provider for the smart endpointing plan.
            - `waitFunction` string — 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"
          - CustomEndpointingModelSmartEndpointingPlan
            - `provider` 'vapi' | 'livekit' | 'custom-endpointing-model', required — This is the provider for the smart endpointing plan. Use `custom-endpointing-model` for custom endpointing providers that are not natively supported.
            - `server` Server
              - …
        - `customEndpointingRules` union[] — 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 []
          - union
            - AssistantCustomEndpointingRule
              - …
            - CustomerCustomEndpointingRule
              - …
            - BothCustomEndpointingRule
              - …
        - `transcriptionEndpointingPlan` TranscriptionEndpointingPlan
          - `onPunctuationSeconds` number — 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
          - `onNoPunctuationSeconds` number — 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
          - `onNumberSeconds` number — 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
      - `stopSpeakingPlan` StopSpeakingPlan
        - `numWords` number — 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
        - `voiceSeconds` number — 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
        - `backoffSeconds` number — This is the seconds to wait before the assistant will start talking again after being interrupted. Defaults to 1. @default 1
        - `acknowledgementPhrases` string[] — These are the phrases that will never interrupt the assistant, even if numWords threshold is met. These are typically acknowledgement or backchanneling phrases.
        - `interruptionPhrases` string[] — These are the phrases that will always interrupt the assistant immediately, regardless of numWords. These are typically phrases indicating disagreement or desire to stop.
      - `monitorPlan` MonitorPlan
        - `listenEnabled` boolean — 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
        - `listenAuthenticationEnabled` boolean — This enables authentication on the `call.monitor.listenUrl`. If `listenAuthenticationEnabled` is `true`, the `call.monitor.listenUrl` will require an `Authorization: Bearer <vapi-public-api-key>` header. @default false
        - `controlEnabled` boolean — 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.vapi.ai/api-reference/messages/client-inbound-message @default true
        - `controlAuthenticationEnabled` boolean — This enables authentication on the `call.monitor.controlUrl`. If `controlAuthenticationEnabled` is `true`, the `call.monitor.controlUrl` will require an `Authorization: Bearer <vapi-public-api-key>` header. @default false
      - `credentialIds` string[] — These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.
      - `server` Server
        - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
        - `credentialId` string — The credential ID for server authentication
        - `url` string — This is where the request will be sent.
        - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
        - `backoffPlan` BackoffPlan
          - `type` object, required — This is the type of backoff plan to use. Defaults to fixed. @default fixed
          - `maxRetries` number, required — This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries). @default 0
          - `baseDelaySeconds` number, required — 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.
          - `excludedStatusCodes` object[] — This is the excluded status codes. If the response status code is in this list, the request will not be retried. By default, the request will be retried for any non-2xx status code.
      - `keypadInputPlan` KeypadInputPlan
        - `enabled` boolean — This keeps track of whether the user has enabled keypad input. By default, it is off. @default false
        - `timeoutSeconds` number — This is the time in seconds to wait before processing the input. If the input is not received within this time, the input will be ignored. If set to "off", the input will be processed when the user enters a delimiter or immediately if no delimiter is used. @default 2
        - `delimiters` '#' | '*' | '' — This is the delimiter(s) that will be used to process the input. Can be '#', '*', or an empty array.
    - `number` string — This is the number of the customer.
    - `sipUri` string — This is the SIP URI of the customer.
    - `name` string — This is the name of the customer. This is just for your own reference. For SIP inbound calls, this is extracted from the `From` SIP header with format `"Display Name" <sip:username@domain>`.
    - `email` string — This is the email of the customer.
    - `externalId` string — This is the external ID of the customer.
  - `name` string — This is the name of the call. This is just for your own reference.
  - `schedulePlan` SchedulePlan
    - `earliestAt` string, date-time, required — This is the ISO 8601 date-time string of the earliest time the call can be scheduled.
    - `latestAt` string, date-time — This is the ISO 8601 date-time string of the latest time the call can be scheduled.
  - `transport` object — This is the transport of the call.
  - `assistantId` string — This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead. To start a call with: - Assistant, use `assistantId` or `assistant` - Squad, use `squadId` or `squad` - Workflow, use `workflowId` or `workflow`
  - `assistant` CreateAssistantDTO
    - `transcriber` union — These are the options for the assistant's transcriber.
      - AssemblyAITranscriber
        - `provider` 'assembly-ai', required — This is the transcription provider that will be used.
        - `language` 'en' — This is the language that will be set for the transcription.
        - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
        - `formatTurns` boolean — This enables formatting of transcripts. @default true
        - `endOfTurnConfidenceThreshold` number — This is the end of turn confidence threshold. The minimum confidence that the end of turn is detected. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @min 0 @max 1 @default 0.7
        - `minEndOfTurnSilenceWhenConfident` number — This is the minimum end of turn silence when confident in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 160
        - `wordFinalizationMaxWaitTime` number
        - `maxTurnSilence` number — This is the maximum turn silence time in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 400
        - `realtimeUrl` string — The WebSocket URL that the transcriber connects to.
        - `wordBoost` string[] — Add up to 2500 characters of custom vocabulary.
        - `keytermsPrompt` string[] — Keyterms prompting improves recognition accuracy for specific words and phrases. Can include up to 100 keyterms, each up to 50 characters. Costs an additional $0.04/hour when enabled.
        - `endUtteranceSilenceThreshold` number — The duration of the end utterance silence threshold in milliseconds.
        - `disablePartialTranscripts` boolean — Disable partial transcripts. Set to `true` to not receive partial transcripts. Defaults to `false`.
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[], required
            - union
              - …
      - AzureSpeechTranscriber
        - `provider` 'azure', required — This is the transcription provider that will be used.
        - `language` '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' — 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
        - `segmentationStrategy` 'Default' | 'Time' | 'Semantic' — Controls how phrase boundaries are detected, enabling either simple time/silence heuristics or more advanced semantic segmentation.
        - `segmentationSilenceTimeoutMs` number — Duration of detected silence after which the service finalizes a phrase. Configure to adjust sensitivity to pauses in speech.
        - `segmentationMaximumTimeMs` number — Maximum duration a segment can reach before being cut off when using time-based segmentation.
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[], required
            - union
              - …
      - CustomTranscriber
        - `provider` 'custom-transcriber', required — This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported.
        - `server` Server, required
          - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
          - `credentialId` string — The credential ID for server authentication
          - `url` string — This is where the request will be sent.
          - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
          - `backoffPlan` BackoffPlan
            - `type` object, required — This is the type of backoff plan to use. Defaults to fixed. @default fixed
            - `maxRetries` number, required — This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries). @default 0
            - `baseDelaySeconds` number, required — 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.
            - `excludedStatusCodes` object[] — This is the excluded status codes. If the response status code is in this list, the request will not be retried. By default, the request will be retried for any non-2xx status code.
              - …
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[], required
            - union
              - …
      - DeepgramTranscriber
        - `provider` 'deepgram', required — This is the transcription provider that will be used.
        - `model` union — 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
          - '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'
          - string
        - `language` 'ar' | 'az' | 'ba' | 'bg' | 'br' | 'ca' | 'cs' | 'da' | 'da-DK' | 'de' | 'de-CH' | 'el' | 'en' | 'en-AU' | 'en-CA' | 'en-GB' | 'en-IE' | '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' | 'pt-PT' | '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' — 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
        - `smartFormat` boolean — 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.
        - `mipOptOut` boolean — 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
        - `numerals` boolean — 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
        - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
        - `eagerEotThreshold` number
        - `eotThreshold` number
        - `eotTimeoutMs` number
        - `keywords` string[] — 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.
        - `keyterm` string[] — Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%.
        - `endpointing` number — 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@vapi.ai and we'll find another solution. @default 10
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[], required
            - union
              - …
      - ElevenLabsTranscriber
        - `provider` '11labs', required — This is the transcription provider that will be used.
        - `model` 'scribe_v1' — This is the model that will be used for the transcription.
        - `language` '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` FallbackTranscriberPlan
          - `transcribers` union[], required
            - union
              - …
      - GladiaTranscriber
        - `provider` 'gladia', required — This is the transcription provider that will be used.
        - `model` 'fast' | 'accurate' | 'solaria-1' — This is the Gladia model that will be used. Default is 'fast'
        - `languageBehaviour` 'manual' | 'automatic single language' | 'automatic multiple languages' — Defines how the transcription model detects the audio language. Default value is 'automatic single language'.
        - `language` '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' — Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.
        - `languages` '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' — Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'.
        - `transcriptionHint` string — 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.
        - `prosody` boolean — 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.
        - `audioEnhancer` boolean — If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false.
        - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
        - `endpointing` number — Endpointing time in seconds - time to wait before considering speech ended
        - `speechThreshold` number — Speech threshold - sensitivity configuration for speech detection (0.0 to 1.0)
        - `customVocabularyEnabled` boolean — Enable custom vocabulary for improved accuracy
        - `customVocabularyConfig` GladiaCustomVocabularyConfigDTO
          - `vocabulary` union[], required — Array of vocabulary items (strings or objects with value, pronunciations, intensity, language)
            - union
              - …
          - `defaultIntensity` number — Default intensity for vocabulary items (0.0 to 1.0)
        - `region` 'us-west' | 'eu-west' — Region for processing audio (us-west or eu-west)
        - `receivePartialTranscripts` boolean — Enable partial transcripts for low-latency streaming transcription
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[], required
            - union
              - …
      - GoogleTranscriber
        - `provider` 'google', required — This is the transcription provider that will be used.
        - `model` 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-lite' | '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-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' — This is the model that will be used for the transcription.
        - `language` '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' — This is the language that will be set for the transcription.
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[], required
            - union
              - …
      - SpeechmaticsTranscriber
        - `provider` 'speechmatics', required — This is the transcription provider that will be used.
        - `model` 'default' — This is the model that will be used for the transcription.
        - `language` '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'
        - `operatingPoint` 'standard' | 'enhanced' — This is the operating point for the transcription. Choose between `standard` for faster turnaround with strong accuracy or `enhanced` for highest accuracy when precision is critical. @default 'enhanced'
        - `region` 'eu' | 'us' — This is the region for the Speechmatics API. Choose between EU (Europe) and US (United States) regions for lower latency and data sovereignty compliance. @default 'eu'
        - `enableDiarization` boolean — This enables speaker diarization, which identifies and separates speakers in the transcription. Essential for multi-speaker conversations and conference calls. @default false
        - `maxSpeakers` number — This sets the maximum number of speakers to detect when diarization is enabled. Only used when enableDiarization is true. @default 2
        - `enablePartials` boolean — This enables partial transcripts during speech recognition. When false, only final transcripts are returned. @default true
        - `maxDelay` number — This sets the maximum delay in milliseconds for partial transcripts. Balances latency and accuracy. @default 3000
        - `customVocabulary` SpeechmaticsCustomVocabularyItem[], required
          - `content` string, required — The word or phrase to add to the custom vocabulary.
          - `soundsLike` string[] — Alternative phonetic representations of how the word might sound. This helps recognition when the word might be pronounced differently.
        - `numeralStyle` 'written' | 'spoken' — This controls how numbers are formatted in the transcription output. @default 'written'
        - `enableEntities` boolean — This enables detection of non-speech audio events like music, applause, and laughter. @default false
        - `enablePunctuation` boolean — This enables automatic punctuation in the transcription output. @default true
        - `enableCapitalization` boolean — This enables automatic capitalization in the transcription output. @default true
        - `endOfTurnSensitivity` number — This is the sensitivity level for end-of-turn detection, which determines when a speaker has finished talking. Higher values are more sensitive. @default 0.5
        - `removeDisfluencies` boolean — This enables removal of disfluencies (um, uh) from the transcript to create cleaner, more professional output. @default false
        - `minimumSpeechDuration` number — This is the minimum duration in seconds for speech segments. Shorter segments will be filtered out. Helps remove noise and improve accuracy. @default 0.0
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[], required
            - union
              - …
      - TalkscriberTranscriber
        - `provider` 'talkscriber', required — This is the transcription provider that will be used.
        - `model` 'whisper' — This is the model that will be used for the transcription.
        - `language` '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' — 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
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[], required
            - union
              - …
      - OpenAITranscriber
        - `provider` 'openai', required — This is the transcription provider that will be used.
        - `model` 'gpt-4o-transcribe' | 'gpt-4o-mini-transcribe', required — This is the model that will be used for the transcription.
        - `language` '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' — This is the language that will be set for the transcription.
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[], required
            - union
              - …
      - CartesiaTranscriber
        - `provider` 'cartesia', required
        - `model` 'ink-whisper'
        - `language` '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` FallbackTranscriberPlan
          - `transcribers` union[], required
            - union
              - …
    - `model` union — These are the options for the assistant's LLM.
      - AnthropicModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
        - `model` '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' | 'claude-sonnet-4-5-20250929', required — The specific Anthropic/Claude model that will be used.
        - `provider` 'anthropic', required — The provider identifier for Anthropic.
        - `thinking` AnthropicThinkingConfig
          - `type` 'enabled', required
          - `budgetTokens` number, required — The maximum number of tokens to allocate for thinking. Must be between 1024 and 100000 tokens.
        - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - AnyscaleModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
        - `provider` 'anyscale', required
        - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - CerebrasModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
        - `model` 'llama3.1-8b' | 'llama-3.3-70b', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `provider` 'cerebras', required
        - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - CustomLLMModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
        - `provider` 'custom-llm', required — This is the provider that will be used for the model. Any service, including your own server, that is compatible with the OpenAI API can be used.
        - `metadataSendMode` 'off' | 'variable' | 'destructured' — 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`.
        - `headers` object — Custom headers to send with requests. These headers can override default OpenAI headers except for Authorization (which should be specified using a custom-llm credential).
        - `url` string, required — These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1
        - `wordLevelConfidenceEnabled` boolean — This determines whether the transcriber's word level confidence is sent in requests to the custom provider. Default is false. This only works for Deepgram transcribers.
        - `timeoutSeconds` number — This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds.
        - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - DeepInfraModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
        - `provider` 'deepinfra', required
        - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - DeepSeekModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
        - `model` 'deepseek-chat' | 'deepseek-reasoner', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `provider` 'deep-seek', required
        - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - GoogleModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
        - `model` 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-lite' | '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-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', required — This is the Google model that will be used.
        - `provider` 'google', required
        - `realtimeConfig` GoogleRealtimeConfig
          - `topP` number — This is the nucleus sampling parameter that controls the cumulative probability of tokens considered during text generation. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
          - `topK` number — This is the top-k sampling parameter that limits the number of highest probability tokens considered during text generation. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
          - `presencePenalty` number — This is the presence penalty parameter that influences the model's likelihood to repeat information by penalizing tokens based on their presence in the text. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
          - `frequencyPenalty` number — This is the frequency penalty parameter that influences the model's likelihood to repeat tokens by penalizing them based on their frequency in the text. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
          - `speechConfig` GeminiMultimodalLiveSpeechConfig
            - `voiceConfig` GeminiMultimodalLiveVoiceConfig, required
              - …
        - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
- … truncated; see the full OpenAPI document linked below

## Response `201`

- union
  - Call
    - `type` 'inboundPhoneCall' | 'outboundPhoneCall' | 'webCall' | 'vapi.websocketCall' — This is the type of call.
    - `costs` union[] — These are the costs of individual components of the call in USD.
      - union
        - TransportCost
          - `type` 'transport', required — This is the type of cost, always 'transport' for this class.
          - `provider` 'daily' | 'vapi.websocket' | 'twilio' | 'vonage' | 'telnyx' | 'vapi.sip'
          - `minutes` number, required — This is the minutes of `transport` usage. This should match `call.endedAt` - `call.startedAt`.
          - `cost` number, required — This is the cost of the component in USD.
        - TranscriberCost
          - `type` 'transcriber', required — This is the type of cost, always 'transcriber' for this class.
          - `transcriber` object, required — This is the transcriber that was used during the call. This matches one of the below: - `call.assistant.transcriber`, - `call.assistantId->transcriber`, - `call.squad[n].assistant.transcriber`, - `call.squad[n].assistantId->transcriber`, - `call.squadId->[n].assistant.transcriber`, - `call.squadId->[n].assistantId->transcriber`.
          - `minutes` number, required — This is the minutes of `transcriber` usage. This should match `call.endedAt` - `call.startedAt` for single assistant calls, while squad calls will have multiple transcriber costs one for each assistant that was used.
          - `cost` number, required — This is the cost of the component in USD.
        - ModelCost
          - `type` 'model', required — This is the type of cost, always 'model' for this class.
          - `model` object, required — This is the model that was used during the call. This matches one of the following: - `call.assistant.model`, - `call.assistantId->model`, - `call.squad[n].assistant.model`, - `call.squad[n].assistantId->model`, - `call.squadId->[n].assistant.model`, - `call.squadId->[n].assistantId->model`.
          - `promptTokens` number, required — This is the number of prompt tokens used in the call. These should be total prompt tokens used in the call for single assistant calls, while squad calls will have multiple model costs one for each assistant that was used.
          - `completionTokens` number, required — This is the number of completion tokens generated in the call. These should be total completion tokens used in the call for single assistant calls, while squad calls will have multiple model costs one for each assistant that was used.
          - `cost` number, required — This is the cost of the component in USD.
        - VoiceCost
          - `type` 'voice', required — This is the type of cost, always 'voice' for this class.
          - `voice` object, required — This is the voice that was used during the call. This matches one of the following: - `call.assistant.voice`, - `call.assistantId->voice`, - `call.squad[n].assistant.voice`, - `call.squad[n].assistantId->voice`, - `call.squadId->[n].assistant.voice`, - `call.squadId->[n].assistantId->voice`.
          - `characters` number, required — This is the number of characters that were generated during the call. These should be total characters used in the call for single assistant calls, while squad calls will have multiple voice costs one for each assistant that was used.
          - `cost` number, required — This is the cost of the component in USD.
        - VapiCost
          - `type` 'vapi', required — This is the type of cost, always 'vapi' for this class.
          - `subType` 'normal' | 'overage', required — This is the sub type of the cost.
          - `minutes` number, required — This is the minutes of Vapi usage. This should match `call.endedAt` - `call.startedAt`.
          - `cost` number, required — This is the cost of the component in USD.
        - VoicemailDetectionCost
          - `type` 'voicemail-detection', required — This is the type of cost, always 'voicemail-detection' for this class.
          - `model` object, required — This is the model that was used to perform the analysis.
          - `provider` 'twilio' | 'google' | 'openai' | 'vapi', required — This is the provider that was used to detect the voicemail.
          - `promptTextTokens` number, required — This is the number of prompt text tokens used in the voicemail detection.
          - `promptAudioTokens` number, required — This is the number of prompt audio tokens used in the voicemail detection.
          - `completionTextTokens` number, required — This is the number of completion text tokens used in the voicemail detection.
          - `completionAudioTokens` number, required — This is the number of completion audio tokens used in the voicemail detection.
          - `cost` number, required — This is the cost of the component in USD.
        - AnalysisCost
          - `type` 'analysis', required — This is the type of cost, always 'analysis' for this class.
          - `analysisType` 'summary' | 'structuredData' | 'successEvaluation' | 'structuredOutput', required — This is the type of analysis performed.
          - `model` object, required — This is the model that was used to perform the analysis.
          - `promptTokens` number, required — This is the number of prompt tokens used in the analysis.
          - `completionTokens` number, required — This is the number of completion tokens generated in the analysis.
          - `cost` number, required — This is the cost of the component in USD.
        - KnowledgeBaseCost
          - `type` 'knowledge-base', required — This is the type of cost, always 'knowledge-base' for this class.
          - `model` object, required — This is the model that was used for processing the knowledge base.
          - `promptTokens` number, required — This is the number of prompt tokens used in the knowledge base query.
          - `completionTokens` number, required — This is the number of completion tokens generated in the knowledge base query.
          - `cost` number, required — This is the cost of the component in USD.
    - `messages` union[]
      - union
        - UserMessage
          - `role` string, required — The role of the user in the conversation.
          - `message` string, required — The message content from the user.
          - `time` number, required — The timestamp when the message was sent.
          - `endTime` number, required — The timestamp when the message ended.
          - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
          - `duration` number — The duration of the message in seconds.
          - `isFiltered` boolean — Indicates if the message was filtered for security reasons.
          - `detectedThreats` string[] — List of detected security threats if the message was filtered.
          - `originalMessage` string — The original message before filtering (only included if content was filtered).
          - `metadata` object — The metadata associated with the message. Currently used to store the transcriber's word level confidence.
        - SystemMessage
          - `role` string, required — The role of the system in the conversation.
          - `message` string, required — The message content from the system.
          - `time` number, required — The timestamp when the message was sent.
          - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
        - BotMessage
          - `role` string, required — The role of the bot in the conversation.
          - `message` string, required — The message content from the bot.
          - `time` number, required — The timestamp when the message was sent.
          - `endTime` number, required — The timestamp when the message ended.
          - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
          - `source` string — The source of the message.
          - `duration` number — The duration of the message in seconds.
          - `speakerLabel` string — Stable speaker label for diarized user speakers (e.g., "Speaker 1").
        - ToolCallMessage
          - `role` string, required — The role of the tool call in the conversation.
          - `toolCalls` object[], required — The list of tool calls made during the conversation.
          - `message` string, required — The message content for the tool call.
          - `time` number, required — The timestamp when the message was sent.
          - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
        - ToolCallResultMessage
          - `role` string, required — The role of the tool call result in the conversation.
          - `toolCallId` string, required — The ID of the tool call.
          - `name` string, required — The name of the tool that returned the result.
          - `result` string, required — The result of the tool call in JSON format.
          - `time` number, required — The timestamp when the message was sent.
          - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
          - `metadata` object — The metadata for the tool call result.
    - `phoneCallProvider` 'twilio' | 'vonage' | 'vapi' | 'telnyx' — This is the provider of the call. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
    - `phoneCallTransport` 'sip' | 'pstn' — This is the transport of the phone call. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
    - `status` 'scheduled' | 'queued' | 'ringing' | 'in-progress' | 'forwarding' | 'ended' | 'not-found' | 'deletion-failed' — This is the status of the call.
    - `endedReason` 'call-start-error-neither-assistant-nor-server-set' | 'assistant-request-failed' | 'assistant-request-returned-error' | 'assistant-request-returned-unspeakable-error' | 'assistant-request-returned-invalid-assistant' | 'assistant-request-returned-no-assistant' | 'assistant-request-returned-forwarding-phone-number' | 'scheduled-call-deleted' | 'call.start.error-vapifault-get-org' | 'call.start.error-vapifault-get-subscription' | 'call.start.error-get-assistant' | 'call.start.error-get-phone-number' | 'call.start.error-get-customer' | 'call.start.error-get-resources-validation' | 'call.start.error-vapi-number-international' | 'call.start.error-vapi-number-outbound-daily-limit' | 'call.start.error-get-transport' | 'call.start.error-subscription-wallet-does-not-exist' | 'call.start.error-fraud-check-failed' | 'call.start.error-subscription-frozen' | 'call.start.error-subscription-insufficient-credits' | 'call.start.error-subscription-upgrade-failed' | 'call.start.error-subscription-concurrency-limit-reached' | 'call.start.error-enterprise-feature-not-available-recording-consent' | 'assistant-not-valid' | 'database-error' | 'assistant-not-found' | 'pipeline-error-openai-voice-failed' | 'pipeline-error-cartesia-voice-failed' | 'pipeline-error-deepgram-voice-failed' | 'pipeline-error-eleven-labs-voice-failed' | 'pipeline-error-playht-voice-failed' | 'pipeline-error-lmnt-voice-failed' | 'pipeline-error-azure-voice-failed' | 'pipeline-error-rime-ai-voice-failed' | 'pipeline-error-smallest-ai-voice-failed' | 'pipeline-error-neuphonic-voice-failed' | 'pipeline-error-hume-voice-failed' | 'pipeline-error-sesame-voice-failed' | 'pipeline-error-inworld-voice-failed' | 'pipeline-error-minimax-voice-failed' | 'pipeline-error-tavus-video-failed' | 'call.in-progress.error-vapifault-openai-voice-failed' | 'call.in-progress.error-vapifault-cartesia-voice-failed' | 'call.in-progress.error-vapifault-deepgram-voice-failed' | 'call.in-progress.error-vapifault-eleven-labs-voice-failed' | 'call.in-progress.error-vapifault-playht-voice-failed' | 'call.in-progress.error-vapifault-lmnt-voice-failed' | 'call.in-progress.error-vapifault-azure-voice-failed' | 'call.in-progress.error-vapifault-rime-ai-voice-failed' | 'call.in-progress.error-vapifault-smallest-ai-voice-failed' | 'call.in-progress.error-vapifault-neuphonic-voice-failed' | 'call.in-progress.error-vapifault-hume-voice-failed' | 'call.in-progress.error-vapifault-sesame-voice-failed' | 'call.in-progress.error-vapifault-inworld-voice-failed' | 'call.in-progress.error-vapifault-minimax-voice-failed' | 'call.in-progress.error-vapifault-tavus-video-failed' | 'pipeline-error-vapi-llm-failed' | 'pipeline-error-vapi-400-bad-request-validation-failed' | 'pipeline-error-vapi-401-unauthorized' | 'pipeline-error-vapi-403-model-access-denied' | 'pipeline-error-vapi-429-exceeded-quota' | 'pipeline-error-vapi-500-server-error' | 'pipeline-error-vapi-503-server-overloaded-error' | 'call.in-progress.error-providerfault-vapi-llm-failed' | 'call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-vapi-401-unauthorized' | 'call.in-progress.error-vapifault-vapi-403-model-access-denied' | 'call.in-progress.error-vapifault-vapi-429-exceeded-quota' | 'call.in-progress.error-providerfault-vapi-500-server-error' | 'call.in-progress.error-providerfault-vapi-503-server-overloaded-error' | 'pipeline-error-deepgram-transcriber-failed' | 'pipeline-error-deepgram-transcriber-api-key-missing' | 'call.in-progress.error-vapifault-deepgram-transcriber-failed' | 'pipeline-error-gladia-transcriber-failed' | 'call.in-progress.error-vapifault-gladia-transcriber-failed' | 'pipeline-error-speechmatics-transcriber-failed' | 'call.in-progress.error-vapifault-speechmatics-transcriber-failed' | 'pipeline-error-assembly-ai-transcriber-failed' | 'pipeline-error-assembly-ai-returning-400-insufficent-funds' | 'pipeline-error-assembly-ai-returning-400-paid-only-feature' | 'pipeline-error-assembly-ai-returning-401-invalid-credentials' | 'pipeline-error-assembly-ai-returning-500-invalid-schema' | 'pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed' | 'call.in-progress.error-vapifault-assembly-ai-transcriber-failed' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature' | 'call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed' | 'pipeline-error-talkscriber-transcriber-failed' | 'call.in-progress.error-vapifault-talkscriber-transcriber-failed' | 'pipeline-error-azure-speech-transcriber-failed' | 'call.in-progress.error-vapifault-azure-speech-transcriber-failed' | 'call.in-progress.error-pipeline-no-available-llm-model' | 'worker-shutdown' | 'vonage-disconnected' | 'vonage-failed-to-connect-call' | 'vonage-completed' | 'phone-call-provider-bypass-enabled-but-no-call-received' | 'call.in-progress.error-providerfault-transport-never-connected' | 'call.in-progress.error-vapifault-worker-not-available' | 'call.in-progress.error-vapifault-transport-never-connected' | 'call.in-progress.error-vapifault-transport-connected-but-call-not-active' | 'call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing' | 'call.in-progress.error-vapifault-worker-died' | 'call.in-progress.twilio-completed-call' | 'call.in-progress.sip-completed-call' | 'call.in-progress.error-providerfault-openai-llm-failed' | 'call.in-progress.error-providerfault-azure-openai-llm-failed' | 'call.in-progress.error-providerfault-groq-llm-failed' | 'call.in-progress.error-providerfault-google-llm-failed' | 'call.in-progress.error-providerfault-xai-llm-failed' | 'call.in-progress.error-providerfault-mistral-llm-failed' | 'call.in-progress.error-providerfault-inflection-ai-llm-failed' | 'call.in-progress.error-providerfault-cerebras-llm-failed' | 'call.in-progress.error-providerfault-deep-seek-llm-failed' | 'call.in-progress.error-vapifault-chat-pipeline-failed-to-start' | 'pipeline-error-openai-400-bad-request-validation-failed' | 'pipeline-error-openai-401-unauthorized' | 'pipeline-error-openai-401-incorrect-api-key' | 'pipeline-error-openai-401-account-not-in-organization' | 'pipeline-error-openai-403-model-access-denied' | 'pipeline-error-openai-429-exceeded-quota' | 'pipeline-error-openai-429-rate-limit-reached' | 'pipeline-error-openai-500-server-error' | 'pipeline-error-openai-503-server-overloaded-error' | 'pipeline-error-openai-llm-failed' | 'call.in-progress.error-vapifault-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openai-401-unauthorized' | 'call.in-progress.error-vapifault-openai-401-incorrect-api-key' | 'call.in-progress.error-vapifault-openai-401-account-not-in-organization' | 'call.in-progress.error-vapifault-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-openai-429-exceeded-quota' | 'call.in-progress.error-vapifault-openai-429-rate-limit-reached' | 'call.in-progress.error-providerfault-openai-500-server-error' | 'call.in-progress.error-providerfault-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-400-bad-request-validation-failed' | 'pipeline-error-azure-openai-401-unauthorized' | 'pipeline-error-azure-openai-403-model-access-denied' | 'pipeline-error-azure-openai-429-exceeded-quota' | 'pipeline-error-azure-openai-500-server-error' | 'pipeline-error-azure-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-azure-openai-401-unauthorized' | 'call.in-progress.error-vapifault-azure-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-azure-openai-429-exceeded-quota' | 'call.in-progress.error-providerfault-azure-openai-500-server-error' | 'call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error' | 'pipeline-error-google-400-bad-request-validation-failed' | 'pipeline-error-google-401-unauthorized' | 'pipeline-error-google-403-model-access-denied' | 'pipeline-error-google-429-exceeded-quota' | 'pipeline-error-google-500-server-error' | 'pipeline-error-google-503-server-overloaded-error' | 'pipeline-error-google-llm-failed' | 'call.in-progress.error-vapifault-google-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-google-401-unauthorized' | 'call.in-progress.error-vapifault-google-403-model-access-denied' | 'call.in-progress.error-vapifault-google-429-exceeded-quota' | 'call.in-progress.error-providerfault-google-500-server-error' | 'call.in-progress.error-providerfault-google-503-server-overloaded-error' | 'pipeline-error-xai-400-bad-request-validation-failed' | 'pipeline-error-xai-401-unauthorized' | 'pipeline-error-xai-403-model-access-denied' | 'pipeline-error-xai-429-exceeded-quota' | 'pipeline-error-xai-500-server-error' | 'pipeline-error-xai-503-server-overloaded-error' | 'pipeline-error-xai-llm-failed' | 'call.in-progress.error-vapifault-xai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-xai-401-unauthorized' | 'call.in-progress.error-vapifault-xai-403-model-access-denied' | 'call.in-progress.error-vapifault-xai-429-exceeded-quota' | 'call.in-progress.error-providerfault-xai-500-server-error' | 'call.in-progress.error-providerfault-xai-503-server-overloaded-error' | 'pipeline-error-mistral-400-bad-request-validation-failed' | 'pipeline-error-mistral-401-unauthorized' | 'pipeline-error-mistral-403-model-access-denied' | 'pipeline-error-mistral-429-exceeded-quota' | 'pipeline-error-mistral-500-server-error' | 'pipeline-error-mistral-503-server-overloaded-error' | 'pipeline-error-mistral-llm-failed' | 'call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-mistral-401-unauthorized' | 'call.in-progress.error-vapifault-mistral-403-model-access-denied' | 'call.in-progress.error-vapifault-mistral-429-exceeded-quota' | 'call.in-progress.error-providerfault-mistral-500-server-error' | 'call.in-progress.error-providerfault-mistral-503-server-overloaded-error' | 'pipeline-error-inflection-ai-400-bad-request-validation-failed' | 'pipeline-error-inflection-ai-401-unauthorized' | 'pipeline-error-inflection-ai-403-model-access-denied' | 'pipeline-error-inflection-ai-429-exceeded-quota' | 'pipeline-error-inflection-ai-500-server-error' | 'pipeline-error-inflection-ai-503-server-overloaded-error' | 'pipeline-error-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-inflection-ai-401-unauthorized' | 'call.in-progress.error-vapifault-inflection-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-inflection-ai-500-server-error' | 'call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error' | 'pipeline-error-deep-seek-400-bad-request-validation-failed' | 'pipeline-error-deep-seek-401-unauthorized' | 'pipeline-error-deep-seek-403-model-access-denied' | 'pipeline-error-deep-seek-429-exceeded-quota' | 'pipeline-error-deep-seek-500-server-error' | 'pipeline-error-deep-seek-503-server-overloaded-error' | 'pipeline-error-deep-seek-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deep-seek-401-unauthorized' | 'call.in-progress.error-vapifault-deep-seek-403-model-access-denied' | 'call.in-progress.error-vapifault-deep-seek-429-exceeded-quota' | 'call.in-progress.error-providerfault-deep-seek-500-server-error' | 'call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error' | 'pipeline-error-groq-400-bad-request-validation-failed' | 'pipeline-error-groq-401-unauthorized' | 'pipeline-error-groq-403-model-access-denied' | 'pipeline-error-groq-429-exceeded-quota' | 'pipeline-error-groq-500-server-error' | 'pipeline-error-groq-503-server-overloaded-error' | 'pipeline-error-groq-llm-failed' | 'call.in-progress.error-vapifault-groq-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-groq-401-unauthorized' | 'call.in-progress.error-vapifault-groq-403-model-access-denied' | 'call.in-progress.error-vapifault-groq-429-exceeded-quota' | 'call.in-progress.error-providerfault-groq-500-server-error' | 'call.in-progress.error-providerfault-groq-503-server-overloaded-error' | 'pipeline-error-cerebras-400-bad-request-validation-failed' | 'pipeline-error-cerebras-401-unauthorized' | 'pipeline-error-cerebras-403-model-access-denied' | 'pipeline-error-cerebras-429-exceeded-quota' | 'pipeline-error-cerebras-500-server-error' | 'pipeline-error-cerebras-503-server-overloaded-error' | 'pipeline-error-cerebras-llm-failed' | 'call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-cerebras-401-unauthorized' | 'call.in-progress.error-vapifault-cerebras-403-model-access-denied' | 'call.in-progress.error-vapifault-cerebras-429-exceeded-quota' | 'call.in-progress.error-providerfault-cerebras-500-server-error' | 'call.in-progress.error-providerfault-cerebras-503-server-overloaded-error' | 'pipeline-error-anthropic-400-bad-request-validation-failed' | 'pipeline-error-anthropic-401-unauthorized' | 'pipeline-error-anthropic-403-model-access-denied' | 'pipeline-error-anthropic-429-exceeded-quota' | 'pipeline-error-anthropic-500-server-error' | 'pipeline-error-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-llm-failed' | 'call.in-progress.error-providerfault-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-500-server-error' | 'call.in-progress.error-providerfault-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-400-bad-request-validation-failed' | 'pipeline-error-anthropic-bedrock-401-unauthorized' | 'pipeline-error-anthropic-bedrock-403-model-access-denied' | 'pipeline-error-anthropic-bedrock-429-exceeded-quota' | 'pipeline-error-anthropic-bedrock-500-server-error' | 'pipeline-error-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-llm-failed' | 'call.in-progress.error-providerfault-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-bedrock-500-server-error' | 'call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-400-bad-request-validation-failed' | 'pipeline-error-anthropic-vertex-401-unauthorized' | 'pipeline-error-anthropic-vertex-403-model-access-denied' | 'pipeline-error-anthropic-vertex-429-exceeded-quota' | 'pipeline-error-anthropic-vertex-500-server-error' | 'pipeline-error-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-llm-failed' | 'call.in-progress.error-providerfault-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-vertex-500-server-error' | 'call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-together-ai-400-bad-request-validation-failed' | 'pipeline-error-together-ai-401-unauthorized' | 'pipeline-error-together-ai-403-model-access-denied' | 'pipeline-error-together-ai-429-exceeded-quota' | 'pipeline-error-together-ai-500-server-error' | 'pipeline-error-together-ai-503-server-overloaded-error' | 'pipeline-error-together-ai-llm-failed' | 'call.in-progress.error-providerfault-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-together-ai-401-unauthorized' | 'call.in-progress.error-vapifault-together-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-together-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-together-ai-500-server-error' | 'call.in-progress.error-providerfault-together-ai-503-server-overloaded-error' | 'pipeline-error-anyscale-400-bad-request-validation-failed' | 'pipeline-error-anyscale-401-unauthorized' | 'pipeline-error-anyscale-403-model-access-denied' | 'pipeline-error-anyscale-429-exceeded-quota' | 'pipeline-error-anyscale-500-server-error' | 'pipeline-error-anyscale-503-server-overloaded-error' | 'pipeline-error-anyscale-llm-failed' | 'call.in-progress.error-providerfault-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anyscale-401-unauthorized' | 'call.in-progress.error-vapifault-anyscale-403-model-access-denied' | 'call.in-progress.error-vapifault-anyscale-429-exceeded-quota' | 'call.in-progress.error-providerfault-anyscale-500-server-error' | 'call.in-progress.error-providerfault-anyscale-503-server-overloaded-error' | 'pipeline-error-openrouter-400-bad-request-validation-failed' | 'pipeline-error-openrouter-401-unauthorized' | 'pipeline-error-openrouter-403-model-access-denied' | 'pipeline-error-openrouter-429-exceeded-quota' | 'pipeline-error-openrouter-500-server-error' | 'pipeline-error-openrouter-503-server-overloaded-error' | 'pipeline-error-openrouter-llm-failed' | 'call.in-progress.error-providerfault-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openrouter-401-unauthorized' | 'call.in-progress.error-vapifault-openrouter-403-model-access-denied' | 'call.in-progress.error-vapifault-openrouter-429-exceeded-quota' | 'call.in-progress.error-providerfault-openrouter-500-server-error' | 'call.in-progress.error-providerfault-openrouter-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-400-bad-request-validation-failed' | 'pipeline-error-perplexity-ai-401-unauthorized' | 'pipeline-error-perplexity-ai-403-model-access-denied' | 'pipeline-error-perplexity-ai-429-exceeded-quota' | 'pipeline-error-perplexity-ai-500-server-error' | 'pipeline-error-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-llm-failed' | 'call.in-progress.error-providerfault-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-perplexity-ai-401-unauthorized' | 'call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-perplexity-ai-500-server-error' | 'call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-deepinfra-400-bad-request-validation-failed' | 'pipeline-error-deepinfra-401-unauthorized' | 'pipeline-error-deepinfra-403-model-access-denied' | 'pipeline-error-deepinfra-429-exceeded-quota' | 'pipeline-error-deepinfra-500-server-error' | 'pipeline-error-deepinfra-503-server-overloaded-error' | 'pipeline-error-deepinfra-llm-failed' | 'call.in-progress.error-providerfault-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deepinfra-401-unauthorized' | 'call.in-progress.error-vapifault-deepinfra-403-model-access-denied' | 'call.in-progress.error-vapifault-deepinfra-429-exceeded-quota' | 'call.in-progress.error-providerfault-deepinfra-500-server-error' | 'call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error' | 'pipeline-error-runpod-400-bad-request-validation-failed' | 'pipeline-error-runpod-401-unauthorized' | 'pipeline-error-runpod-403-model-access-denied' | 'pipeline-error-runpod-429-exceeded-quota' | 'pipeline-error-runpod-500-server-error' | 'pipeline-error-runpod-503-server-overloaded-error' | 'pipeline-error-runpod-llm-failed' | 'call.in-progress.error-providerfault-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-runpod-401-unauthorized' | 'call.in-progress.error-vapifault-runpod-403-model-access-denied' | 'call.in-progress.error-vapifault-runpod-429-exceeded-quota' | 'call.in-progress.error-providerfault-runpod-500-server-error' | 'call.in-progress.error-providerfault-runpod-503-server-overloaded-error' | 'pipeline-error-custom-llm-400-bad-request-validation-failed' | 'pipeline-error-custom-llm-401-unauthorized' | 'pipeline-error-custom-llm-403-model-access-denied' | 'pipeline-error-custom-llm-429-exceeded-quota' | 'pipeline-error-custom-llm-500-server-error' | 'pipeline-error-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-llm-llm-failed' | 'call.in-progress.error-providerfault-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-custom-llm-401-unauthorized' | 'call.in-progress.error-vapifault-custom-llm-403-model-access-denied' | 'call.in-progress.error-vapifault-custom-llm-429-exceeded-quota' | 'call.in-progress.error-providerfault-custom-llm-500-server-error' | 'call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-voice-failed' | 'pipeline-error-cartesia-socket-hang-up' | 'pipeline-error-cartesia-requested-payment' | 'pipeline-error-cartesia-500-server-error' | 'pipeline-error-cartesia-502-server-error' | 'pipeline-error-cartesia-503-server-error' | 'pipeline-error-cartesia-522-server-error' | 'call.in-progress.error-vapifault-cartesia-socket-hang-up' | 'call.in-progress.error-vapifault-cartesia-requested-payment' | 'call.in-progress.error-providerfault-cartesia-500-server-error' | 'call.in-progress.error-providerfault-cartesia-503-server-error' | 'call.in-progress.error-providerfault-cartesia-522-server-error' | 'pipeline-error-eleven-labs-voice-not-found' | 'pipeline-error-eleven-labs-quota-exceeded' | 'pipeline-error-eleven-labs-unauthorized-access' | 'pipeline-error-eleven-labs-unauthorized-to-access-model' | 'pipeline-error-eleven-labs-professional-voices-only-for-creator-plus' | 'pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'pipeline-error-eleven-labs-system-busy-and-requested-upgrade' | 'pipeline-error-eleven-labs-voice-not-fine-tuned' | 'pipeline-error-eleven-labs-invalid-api-key' | 'pipeline-error-eleven-labs-invalid-voice-samples' | 'pipeline-error-eleven-labs-voice-disabled-by-owner' | 'pipeline-error-eleven-labs-vapi-voice-disabled-by-owner' | 'pipeline-error-eleven-labs-blocked-account-in-probation' | 'pipeline-error-eleven-labs-blocked-content-against-their-policy' | 'pipeline-error-eleven-labs-missing-samples-for-voice-clone' | 'pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'pipeline-error-eleven-labs-voice-not-allowed-for-free-users' | 'pipeline-error-eleven-labs-max-character-limit-exceeded' | 'pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'pipeline-error-eleven-labs-500-server-error' | 'pipeline-error-eleven-labs-503-server-error' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-found' | 'call.in-progress.error-vapifault-eleven-labs-quota-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-access' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model' | 'call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus' | 'call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned' | 'call.in-progress.error-vapifault-eleven-labs-invalid-api-key' | 'call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples' | 'call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner' | 'call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation' | 'call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy' | 'call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users' | 'call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'call.in-progress.error-providerfault-eleven-labs-500-server-error' | 'call.in-progress.error-providerfault-eleven-labs-503-server-error' | 'pipeline-error-playht-request-timed-out' | 'pipeline-error-playht-invalid-voice' | 'pipeline-error-playht-unexpected-error' | 'pipeline-error-playht-out-of-credits' | 'pipeline-error-playht-invalid-emotion' | 'pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri' | 'pipeline-error-playht-401-unauthorized' | 'pipeline-error-playht-403-forbidden-out-of-characters' | 'pipeline-error-playht-403-forbidden-api-access-not-available' | 'pipeline-error-playht-429-exceeded-quota' | 'pipeline-error-playht-502-gateway-error' | 'pipeline-error-playht-504-gateway-error' | 'call.in-progress.error-vapifault-playht-request-timed-out' | 'call.in-progress.error-vapifault-playht-invalid-voice' | 'call.in-progress.error-vapifault-playht-unexpected-error' | 'call.in-progress.error-vapifault-playht-out-of-credits' | 'call.in-progress.error-vapifault-playht-invalid-emotion' | 'call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri' | 'call.in-progress.error-vapifault-playht-401-unauthorized' | 'call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters' | 'call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available' | 'call.in-progress.error-vapifault-playht-429-exceeded-quota' | 'call.in-progress.error-providerfault-playht-502-gateway-error' | 'call.in-progress.error-providerfault-playht-504-gateway-error' | 'pipeline-error-custom-transcriber-failed' | 'call.in-progress.error-vapifault-custom-transcriber-failed' | 'pipeline-error-eleven-labs-transcriber-failed' | 'call.in-progress.error-vapifault-eleven-labs-transcriber-failed' | 'pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination' | 'pipeline-error-deepgram-returning-401-invalid-credentials' | 'pipeline-error-deepgram-returning-403-model-access-denied' | 'pipeline-error-deepgram-returning-404-not-found' | 'pipeline-error-deepgram-returning-500-invalid-json' | 'pipeline-error-deepgram-returning-502-network-error' | 'pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach' | 'pipeline-error-deepgram-returning-econnreset' | 'call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination' | 'call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-deepgram-returning-404-not-found' | 'call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied' | 'call.in-progress.error-providerfault-deepgram-returning-500-invalid-json' | 'call.in-progress.error-providerfault-deepgram-returning-502-network-error' | 'call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach' | 'pipeline-error-google-transcriber-failed' | 'call.in-progress.error-vapifault-google-transcriber-failed' | 'pipeline-error-openai-transcriber-failed' | 'call.in-progress.error-vapifault-openai-transcriber-failed' | 'call.in-progress.error-warm-transfer-max-duration' | 'call.in-progress.error-warm-transfer-assistant-cancelled' | 'call.in-progress.error-warm-transfer-silence-timeout' | 'call.in-progress.error-warm-transfer-microphone-timeout' | 'call.in-progress.error-warm-transfer-hang-timeout' | 'call.in-progress.error-warm-transfer-idle-timeout' | 'assistant-ended-call' | 'assistant-said-end-call-phrase' | 'assistant-ended-call-with-hangup-task' | 'assistant-ended-call-after-message-spoken' | 'assistant-forwarded-call' | 'assistant-join-timed-out' | 'call.in-progress.error-assistant-did-not-receive-customer-audio' | 'call.in-progress.error-transfer-failed' | 'customer-busy' | 'customer-ended-call' | 'customer-ended-call-after-warm-transfer-attempt' | 'customer-did-not-answer' | 'customer-did-not-give-microphone-permission' | 'exceeded-max-duration' | 'manually-canceled' | 'phone-call-provider-closed-websocket' | 'call.forwarding.operator-busy' | 'silence-timed-out' | 'call.in-progress.error-sip-inbound-call-failed-to-connect' | 'call.in-progress.error-providerfault-outbound-sip-403-forbidden' | 'call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required' | 'call.in-progress.error-providerfault-outbound-sip-503-service-unavailable' | 'call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable' | 'call.in-progress.error-sip-outbound-call-failed-to-connect' | 'call.ringing.hook-executed-say' | 'call.ringing.hook-executed-transfer' | 'call.ending.hook-executed-say' | 'call.ending.hook-executed-transfer' | 'call.ringing.sip-inbound-caller-hungup-before-call-connect' | 'call.ringing.error-sip-inbound-call-failed-to-connect' | 'twilio-failed-to-connect-call' | 'twilio-reported-customer-misdialed' | 'vonage-rejected' | 'voicemail' | 'call-deleted' — This is the explanation for how the call ended.
    - `destination` union — This is the destination where the call ended up being transferred to. If the call was not transferred, this will be empty.
      - TransferDestinationNumber
        - `message` union — 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.
          - string
          - CustomMessage
            - `contents` TextContent[] — 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.
              - …
            - `type` 'custom-message', required — This is a custom message.
            - `content` string — This is the content that the assistant will say when this message is triggered.
        - `type` 'number', required
        - `numberE164CheckEnabled` boolean — 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)
        - `number` string, required — This is the phone number to transfer the call to.
        - `extension` string — This is the extension to dial after transferring the call to the `number`.
        - `callerId` string — 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
        - `transferPlan` TransferPlan
          - `mode` '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', required — 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'
          - `message` union — 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`.
            - string
            - CustomMessage
              - …
          - `timeout` number — This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary @default 60
          - `sipVerb` object — 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
          - `holdAudioUrl` string — 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` string — 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` string — 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> ```
          - `summaryPlan` SummaryPlan
            - `messages` object[] — 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` - {{messages}}: The messages of the call from `assistant.model.messages` - {{endedReason}}: The ended reason of the call from `call.endedReason`
              - …
            - `enabled` boolean — 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` number — 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
          - `sipHeadersInReferToEnabled` boolean — This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params. @default false
          - `fallbackPlan` TransferFallbackPlan
            - `message` union, required — This is the message the assistant will deliver to the customer if the transfer fails.
              - …
            - `endCallEnabled` boolean — 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
        - `description` string — This is the description of the destination, used by the AI to choose when and how to transfer the call.
      - TransferDestinationSip
        - `message` union — 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.
          - string
          - CustomMessage
            - `contents` TextContent[] — 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.
              - …
            - `type` 'custom-message', required — This is a custom message.
            - `content` string — This is the content that the assistant will say when this message is triggered.
        - `type` 'sip', required
        - `sipUri` string, required — This is the SIP URI to transfer the call to.
        - `transferPlan` TransferPlan
          - `mode` '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', required — 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'
          - `message` union — 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`.
            - string
            - CustomMessage
              - …
          - `timeout` number — This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary @default 60
          - `sipVerb` object — 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
          - `holdAudioUrl` string — 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` string — 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` string — 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> ```
          - `summaryPlan` SummaryPlan
            - `messages` object[] — 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` - {{messages}}: The messages of the call from `assistant.model.messages` - {{endedReason}}: The ended reason of the call from `call.endedReason`
              - …
            - `enabled` boolean — 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` number — 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
          - `sipHeadersInReferToEnabled` boolean — This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params. @default false
          - `fallbackPlan` TransferFallbackPlan
            - `message` union, required — This is the message the assistant will deliver to the customer if the transfer fails.
              - …
            - `endCallEnabled` boolean — 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
        - `sipHeaders` object — These are custom headers to be added to SIP refer during transfer call.
        - `description` string — This is the description of the destination, used by the AI to choose when and how to transfer the call.
    - `id` string, required — This is the unique identifier for the call.
    - `orgId` string, required — This is the unique identifier for the org that this call belongs to.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the call was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the call was last updated.
    - `startedAt` string, date-time — This is the ISO 8601 date-time string of when the call was started.
    - `endedAt` string, date-time — This is the ISO 8601 date-time string of when the call was ended.
    - `cost` number — This is the cost of the call in USD.
    - `costBreakdown` CostBreakdown
      - `transport` number — This is the cost of the transport provider, like Twilio or Vonage.
      - `stt` number — This is the cost of the speech-to-text service.
      - `llm` number — This is the cost of the language model.
      - `tts` number — This is the cost of the text-to-speech service.
      - `vapi` number — This is the cost of Vapi.
      - `chat` number — This is the cost of chat interactions.
      - `total` number — This is the total cost of the call.
      - `llmPromptTokens` number — This is the LLM prompt tokens used for the call.
      - `llmCompletionTokens` number — This is the LLM completion tokens used for the call.
      - `ttsCharacters` number — This is the TTS characters used for the call.
      - `analysisCostBreakdown` AnalysisCostBreakdown
        - `summary` number — This is the cost to summarize the call.
        - `summaryPromptTokens` number — This is the number of prompt tokens used to summarize the call.
        - `summaryCompletionTokens` number — This is the number of completion tokens used to summarize the call.
        - `structuredData` number — This is the cost to extract structured data from the call.
        - `structuredDataPromptTokens` number — This is the number of prompt tokens used to extract structured data from the call.
        - `structuredDataCompletionTokens` number — This is the number of completion tokens used to extract structured data from the call.
        - `successEvaluation` number — This is the cost to evaluate if the call was successful.
        - `successEvaluationPromptTokens` number — This is the number of prompt tokens used to evaluate if the call was successful.
        - `successEvaluationCompletionTokens` number — This is the number of completion tokens used to evaluate if the call was successful.
        - `structuredOutput` number — This is the cost to evaluate structuredOutputs from the call.
        - `structuredOutputPromptTokens` number — This is the number of prompt tokens used to evaluate structuredOutputs from the call.
        - `structuredOutputCompletionTokens` number — This is the number of completion tokens used to evaluate structuredOutputs from the call.
    - `artifactPlan` ArtifactPlan
      - `recordingEnabled` boolean — 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
      - `recordingFormat` 'wav;l16' | 'mp3' — This determines the format of the recording. Defaults to `wav;l16`. @default 'wav;l16'
      - `recordingUseCustomStorageEnabled` boolean — This determines whether to use custom storage (S3 or GCP) for call recordings when storage credentials are configured. When set to false, recordings will be stored on Vapi's storage instead of your custom storage, even if you have custom storage credentials configured. Usage: - Set to false if you have custom storage configured but want to store recordings on Vapi's storage for this assistant. - Set to true (or leave unset) to use your custom storage for recordings when available. @default true
      - `videoRecordingEnabled` boolean — 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
      - `fullMessageHistoryEnabled` boolean — This determines whether the artifact contains the full message history, even after handoff context engineering. Defaults to false.
      - `pcapEnabled` boolean — This determines whether the SIP packet capture is enabled. Defaults to true. Only relevant for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`. You can find the packet capture at `call.artifact.pcapUrl` after the call is ended. @default true
      - `pcapS3PathPrefix` string — 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 '/'
      - `pcapUseCustomStorageEnabled` boolean — This determines whether to use custom storage (S3 or GCP) for SIP packet captures when storage credentials are configured. When set to false, packet captures will be stored on Vapi's storage instead of your custom storage, even if you have custom storage credentials configured. Usage: - Set to false if you have custom storage configured but want to store packet captures on Vapi's storage for this assistant. - Set to true (or leave unset) to use your custom storage for packet captures when available. @default true
      - `loggingEnabled` boolean — This determines whether the call logs are enabled. Defaults to true. @default true
      - `loggingUseCustomStorageEnabled` boolean — This determines whether to use custom storage (S3 or GCP) for call logs when storage credentials are configured. When set to false, logs will be stored on Vapi's storage instead of your custom storage, even if you have custom storage credentials configured. Usage: - Set to false if you have custom storage configured but want to store logs on Vapi's storage for this assistant. - Set to true (or leave unset) to use your custom storage for logs when available. @default true
      - `transcriptPlan` TranscriptPlan
        - `enabled` boolean — This determines whether the transcript is stored in `call.artifact.transcript`. Defaults to true. @default true
        - `assistantName` string — 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` string — 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'
      - `recordingPath` string — 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 '/'
      - `structuredOutputIds` string[] — This is an array of structured output IDs to be calculated during the call. The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended.
      - `loggingPath` string — This is the path where the call logs 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 call logs to a specific path, set this to the path. Example: `/my-assistant-logs`. - If you want to upload the call logs to the root of the bucket, set this to `/`. @default '/'
    - `analysis` Analysis
      - `summary` string — This is the summary of the call. Customize by setting `assistant.analysisPlan.summaryPrompt`.
      - `structuredData` object — This is the structured data extracted from the call. Customize by setting `assistant.analysisPlan.structuredDataPrompt` and/or `assistant.analysisPlan.structuredDataSchema`.
      - `structuredDataMulti` object[] — This is the structured data catalog of the call. Customize by setting `assistant.analysisPlan.structuredDataMultiPlan`.
      - `successEvaluation` string — This is the evaluation of the call. Customize by setting `assistant.analysisPlan.successEvaluationPrompt` and/or `assistant.analysisPlan.successEvaluationRubric`.
    - `monitor` Monitor
      - `listenUrl` string — This is the URL where the assistant's calls can be listened to in real-time. To enable, set `assistant.monitorPlan.listenEnabled` to `true`.
      - `controlUrl` string — This is the URL where the assistant's calls can be controlled in real-time. To enable, set `assistant.monitorPlan.controlEnabled` to `true`.
    - `artifact` Artifact
      - `messages` union[] — These are the messages that were spoken during the call.
        - union
          - UserMessage
            - `role` string, required — The role of the user in the conversation.
            - `message` string, required — The message content from the user.
            - `time` number, required — The timestamp when the message was sent.
            - `endTime` number, required — The timestamp when the message ended.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
            - `duration` number — The duration of the message in seconds.
            - `isFiltered` boolean — Indicates if the message was filtered for security reasons.
            - `detectedThreats` string[] — List of detected security threats if the message was filtered.
            - `originalMessage` string — The original message before filtering (only included if content was filtered).
            - `metadata` object — The metadata associated with the message. Currently used to store the transcriber's word level confidence.
          - SystemMessage
            - `role` string, required — The role of the system in the conversation.
            - `message` string, required — The message content from the system.
            - `time` number, required — The timestamp when the message was sent.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
          - BotMessage
            - `role` string, required — The role of the bot in the conversation.
            - `message` string, required — The message content from the bot.
            - `time` number, required — The timestamp when the message was sent.
            - `endTime` number, required — The timestamp when the message ended.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
            - `source` string — The source of the message.
            - `duration` number — The duration of the message in seconds.
            - `speakerLabel` string — Stable speaker label for diarized user speakers (e.g., "Speaker 1").
          - ToolCallMessage
            - `role` string, required — The role of the tool call in the conversation.
            - `toolCalls` object[], required — The list of tool calls made during the conversation.
              - …
            - `message` string, required — The message content for the tool call.
            - `time` number, required — The timestamp when the message was sent.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
          - ToolCallResultMessage
            - `role` string, required — The role of the tool call result in the conversation.
            - `toolCallId` string, required — The ID of the tool call.
            - `name` string, required — The name of the tool that returned the result.
            - `result` string, required — The result of the tool call in JSON format.
            - `time` number, required — The timestamp when the message was sent.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
            - `metadata` object — The metadata for the tool call result.
      - `messagesOpenAIFormatted` OpenAIMessage[] — These are the messages that were spoken during the call, formatted for OpenAI.
        - `content` string, nullable, required
        - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
      - `recordingUrl` string — This is the recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.
      - `stereoRecordingUrl` string — This is the stereo recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.
      - `videoRecordingUrl` string — This is video recording url for the call. To enable, set `assistant.artifactPlan.videoRecordingEnabled`.
      - `videoRecordingStartDelaySeconds` number — This is video recording start delay in ms. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. This can be used to align the playback of the recording with artifact.messages timestamps.
      - `recording` Recording
        - `stereoUrl` string — This is the stereo recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.
        - `videoUrl` string — This is the video recording url for the call. To enable, set `assistant.artifactPlan.videoRecordingEnabled`.
        - `videoRecordingStartDelaySeconds` number — This is video recording start delay in ms. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. This can be used to align the playback of the recording with artifact.messages timestamps.
        - `mono` Mono
          - `combinedUrl` string — This is the combined recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.
          - `assistantUrl` string — This is the mono recording url for the assistant. To enable, set `assistant.artifactPlan.recordingEnabled`.
          - `customerUrl` string — This is the mono recording url for the customer. To enable, set `assistant.artifactPlan.recordingEnabled`.
      - `transcript` string — This is the transcript of the call. This is derived from `artifact.messages` but provided for convenience.
      - `pcapUrl` string — This is the packet capture url for the call. This is only available for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`.
      - `logUrl` string — This is the url for the call logs. This includes all logging output during the call for debugging purposes.
      - `nodes` NodeArtifact[] — This is the history of workflow nodes that were executed during the call.
        - `messages` union[] — These are the messages that were spoken during the node.
          - union
            - UserMessage
              - …
            - SystemMessage
              - …
            - BotMessage
              - …
            - ToolCallMessage
              - …
            - ToolCallResultMessage
              - …
        - `nodeName` string — This is the node name.
        - `variableValues` object — These are the variable values that were extracted from the node.
      - `variableValues` object — These are the variable values at the end of the workflow execution.
      - `performanceMetrics` PerformanceMetrics
        - `turnLatencies` TurnLatency[] — These are the individual latencies for each turn.
          - `modelLatency` number — This is the model latency for the first token.
          - `voiceLatency` number — This is the voice latency from the model output.
          - `transcriberLatency` number — This is the transcriber latency from the user speech.
          - `endpointingLatency` number — This is the endpointing latency.
          - `turnLatency` number — This is the latency for the whole turn.
        - `modelLatencyAverage` number — This is the average latency for the model to output the first token.
        - `voiceLatencyAverage` number — This is the average latency for the text to speech.
        - `transcriberLatencyAverage` number — This is the average latency for the transcriber.
        - `endpointingLatencyAverage` number — This is the average latency for the endpointing.
        - `turnLatencyAverage` number — This is the average latency for complete turns.
      - `structuredOutputs` object — These are the structured outputs that will be extracted from the call. To enable, set `assistant.artifactPlan.structuredOutputIds` with the IDs of the structured outputs you want to extract.
      - `transfers` string[] — These are the transfer records from warm transfers, including destinations, transcripts, and status.
    - `compliance` Compliance
      - `recordingConsent` RecordingConsent
        - `type` object, required — This is the type of recording consent.
        - `grantedAt` string, date-time — This is the date and time the recording consent was granted. If not specified, it means the recording consent was not granted.
    - `phoneCallProviderId` string — The ID of the call as provided by the phone number service. callSid in Twilio. conversationUuid in Vonage. callControlId in Telnyx. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
    - `campaignId` string — This is the campaign ID that the call belongs to.
    - `assistantId` string — This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead. To start a call with: - Assistant, use `assistantId` or `assistant` - Squad, use `squadId` or `squad` - Workflow, use `workflowId` or `workflow`
    - `assistant` CreateAssistantDTO
      - `transcriber` union — These are the options for the assistant's transcriber.
        - AssemblyAITranscriber
          - `provider` 'assembly-ai', required — This is the transcription provider that will be used.
          - `language` 'en' — This is the language that will be set for the transcription.
          - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
          - `formatTurns` boolean — This enables formatting of transcripts. @default true
          - `endOfTurnConfidenceThreshold` number — This is the end of turn confidence threshold. The minimum confidence that the end of turn is detected. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @min 0 @max 1 @default 0.7
          - `minEndOfTurnSilenceWhenConfident` number — This is the minimum end of turn silence when confident in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 160
          - `wordFinalizationMaxWaitTime` number
          - `maxTurnSilence` number — This is the maximum turn silence time in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 400
          - `realtimeUrl` string — The WebSocket URL that the transcriber connects to.
          - `wordBoost` string[] — Add up to 2500 characters of custom vocabulary.
          - `keytermsPrompt` string[] — Keyterms prompting improves recognition accuracy for specific words and phrases. Can include up to 100 keyterms, each up to 50 characters. Costs an additional $0.04/hour when enabled.
          - `endUtteranceSilenceThreshold` number — The duration of the end utterance silence threshold in milliseconds.
          - `disablePartialTranscripts` boolean — Disable partial transcripts. Set to `true` to not receive partial transcripts. Defaults to `false`.
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - AzureSpeechTranscriber
          - `provider` 'azure', required — This is the transcription provider that will be used.
          - `language` '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' — 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
          - `segmentationStrategy` 'Default' | 'Time' | 'Semantic' — Controls how phrase boundaries are detected, enabling either simple time/silence heuristics or more advanced semantic segmentation.
          - `segmentationSilenceTimeoutMs` number — Duration of detected silence after which the service finalizes a phrase. Configure to adjust sensitivity to pauses in speech.
          - `segmentationMaximumTimeMs` number — Maximum duration a segment can reach before being cut off when using time-based segmentation.
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - CustomTranscriber
          - `provider` 'custom-transcriber', required — This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported.
          - `server` Server, required
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - DeepgramTranscriber
          - `provider` 'deepgram', required — This is the transcription provider that will be used.
          - `model` union — 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
            - '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'
            - string
          - `language` 'ar' | 'az' | 'ba' | 'bg' | 'br' | 'ca' | 'cs' | 'da' | 'da-DK' | 'de' | 'de-CH' | 'el' | 'en' | 'en-AU' | 'en-CA' | 'en-GB' | 'en-IE' | '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' | 'pt-PT' | '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' — 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
          - `smartFormat` boolean — 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.
          - `mipOptOut` boolean — 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
          - `numerals` boolean — 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
          - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
          - `eagerEotThreshold` number
          - `eotThreshold` number
          - `eotTimeoutMs` number
          - `keywords` string[] — 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.
          - `keyterm` string[] — Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%.
          - `endpointing` number — 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@vapi.ai and we'll find another solution. @default 10
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - ElevenLabsTranscriber
          - `provider` '11labs', required — This is the transcription provider that will be used.
          - `model` 'scribe_v1' — This is the model that will be used for the transcription.
          - `language` '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` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - GladiaTranscriber
          - `provider` 'gladia', required — This is the transcription provider that will be used.
          - `model` 'fast' | 'accurate' | 'solaria-1' — This is the Gladia model that will be used. Default is 'fast'
          - `languageBehaviour` 'manual' | 'automatic single language' | 'automatic multiple languages' — Defines how the transcription model detects the audio language. Default value is 'automatic single language'.
          - `language` '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' — Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.
          - `languages` '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' — Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'.
          - `transcriptionHint` string — 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.
          - `prosody` boolean — 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.
          - `audioEnhancer` boolean — If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false.
          - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
          - `endpointing` number — Endpointing time in seconds - time to wait before considering speech ended
          - `speechThreshold` number — Speech threshold - sensitivity configuration for speech detection (0.0 to 1.0)
          - `customVocabularyEnabled` boolean — Enable custom vocabulary for improved accuracy
          - `customVocabularyConfig` GladiaCustomVocabularyConfigDTO
            - `vocabulary` union[], required — Array of vocabulary items (strings or objects with value, pronunciations, intensity, language)
              - …
            - `defaultIntensity` number — Default intensity for vocabulary items (0.0 to 1.0)
          - `region` 'us-west' | 'eu-west' — Region for processing audio (us-west or eu-west)
          - `receivePartialTranscripts` boolean — Enable partial transcripts for low-latency streaming transcription
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - GoogleTranscriber
          - `provider` 'google', required — This is the transcription provider that will be used.
          - `model` 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-lite' | '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-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' — This is the model that will be used for the transcription.
          - `language` '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' — This is the language that will be set for the transcription.
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - SpeechmaticsTranscriber
          - `provider` 'speechmatics', required — This is the transcription provider that will be used.
          - `model` 'default' — This is the model that will be used for the transcription.
          - `language` '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'
          - `operatingPoint` 'standard' | 'enhanced' — This is the operating point for the transcription. Choose between `standard` for faster turnaround with strong accuracy or `enhanced` for highest accuracy when precision is critical. @default 'enhanced'
          - `region` 'eu' | 'us' — This is the region for the Speechmatics API. Choose between EU (Europe) and US (United States) regions for lower latency and data sovereignty compliance. @default 'eu'
          - `enableDiarization` boolean — This enables speaker diarization, which identifies and separates speakers in the transcription. Essential for multi-speaker conversations and conference calls. @default false
          - `maxSpeakers` number — This sets the maximum number of speakers to detect when diarization is enabled. Only used when enableDiarization is true. @default 2
          - `enablePartials` boolean — This enables partial transcripts during speech recognition. When false, only final transcripts are returned. @default true
          - `maxDelay` number — This sets the maximum delay in milliseconds for partial transcripts. Balances latency and accuracy. @default 3000
          - `customVocabulary` SpeechmaticsCustomVocabularyItem[], required
            - `content` string, required — The word or phrase to add to the custom vocabulary.
            - `soundsLike` string[] — Alternative phonetic representations of how the word might sound. This helps recognition when the word might be pronounced differently.
          - `numeralStyle` 'written' | 'spoken' — This controls how numbers are formatted in the transcription output. @default 'written'
          - `enableEntities` boolean — This enables detection of non-speech audio events like music, applause, and laughter. @default false
          - `enablePunctuation` boolean — This enables automatic punctuation in the transcription output. @default true
          - `enableCapitalization` boolean — This enables automatic capitalization in the transcription output. @default true
          - `endOfTurnSensitivity` number — This is the sensitivity level for end-of-turn detection, which determines when a speaker has finished talking. Higher values are more sensitive. @default 0.5
          - `removeDisfluencies` boolean — This enables removal of disfluencies (um, uh) from the transcript to create cleaner, more professional output. @default false
          - `minimumSpeechDuration` number — This is the minimum duration in seconds for speech segments. Shorter segments will be filtered out. Helps remove noise and improve accuracy. @default 0.0
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - TalkscriberTranscriber
          - `provider` 'talkscriber', required — This is the transcription provider that will be used.
          - `model` 'whisper' — This is the model that will be used for the transcription.
          - `language` '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' — 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
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - OpenAITranscriber
          - `provider` 'openai', required — This is the transcription provider that will be used.
          - `model` 'gpt-4o-transcribe' | 'gpt-4o-mini-transcribe', required — This is the model that will be used for the transcription.
          - `language` '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' — This is the language that will be set for the transcription.
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - CartesiaTranscriber
          - `provider` 'cartesia', required
          - `model` 'ink-whisper'
          - `language` '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` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
      - `model` union — These are the options for the assistant's LLM.
        - AnthropicModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` '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' | 'claude-sonnet-4-5-20250929', required — The specific Anthropic/Claude model that will be used.
          - `provider` 'anthropic', required — The provider identifier for Anthropic.
          - `thinking` AnthropicThinkingConfig
            - `type` 'enabled', required
            - `budgetTokens` number, required — The maximum number of tokens to allocate for thinking. Must be between 1024 and 100000 tokens.
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - AnyscaleModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'anyscale', required
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - CerebrasModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'llama3.1-8b' | 'llama-3.3-70b', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `provider` 'cerebras', required
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - CustomLLMModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'custom-llm', required — This is the provider that will be used for the model. Any service, including your own server, that is compatible with the OpenAI API can be used.
          - `metadataSendMode` 'off' | 'variable' | 'destructured' — 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`.
          - `headers` object — Custom headers to send with requests. These headers can override default OpenAI headers except for Authorization (which should be specified using a custom-llm credential).
          - `url` string, required — These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1
          - `wordLevelConfidenceEnabled` boolean — This determines whether the transcriber's word level confidence is sent in requests to the custom provider. Default is false. This only works for Deepgram transcribers.
          - `timeoutSeconds` number — This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds.
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - DeepInfraModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'deepinfra', required
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - DeepSeekModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'deepseek-chat' | 'deepseek-reasoner', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `provider` 'deep-seek', required
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - GoogleModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-lite' | '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-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', required — This is the Google model that will be used.
          - `provider` 'google', required
          - `realtimeConfig` GoogleRealtimeConfig
            - `topP` number — This is the nucleus sampling parameter that controls the cumulative probability of tokens considered during text generation. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
            - `topK` number — This is the top-k sampling parameter that limits the number of highest probability tokens considered during text generation. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
            - `presencePenalty` number — This is the presence penalty parameter that influences the model's likelihood to repeat information by penalizing tokens based on their presence in the text. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
            - `frequencyPenalty` number — This is the frequency penalty parameter that influences the model's likelihood to repeat tokens by penalizing them based on their frequency in the text. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
            - `speechConfig` GeminiMultimodalLiveSpeechConfig
              - …
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - GroqModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'openai/gpt-oss-20b' | 'openai/gpt-oss-120b' | 'deepseek-r1-distill-llama-70b' | 'llama-3.3-70b-versatile' | 'llama-3.1-405b-reasoning' | 'llama-3.1-8b-instant' | 'llama3-8b-8192' | 'llama3-70b-8192' | 'gemma2-9b-it' | 'moonshotai/kimi-k2-instruct-0905' | 'meta-llama/llama-4-maverick-17b-128e-instruct' | 'meta-llama/llama-4-scout-17b-16e-instruct' | 'mistral-saba-24b' | 'compound-beta' | 'compound-beta-mini', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `provider` 'groq', required
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - InflectionAIModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'inflection_3_pi', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `provider` 'inflection-ai', required
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - OpenAIModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'openai', required — This is the provider that will be used for the model.
          - `model` 'gpt-5' | 'gpt-5-mini' | 'gpt-5-nano' | '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' | 'chatgpt-4o-latest' | 'o3' | 'o3-mini' | 'o4-mini' | 'o1-mini' | 'o1-mini-2024-09-12' | 'gpt-4o-realtime-preview-2024-10-01' | 'gpt-4o-realtime-preview-2024-12-17' | 'gpt-4o-mini-realtime-preview-2024-12-17' | 'gpt-realtime-2025-08-28' | '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', required — This is the OpenAI model that will be used. When using Vapi 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. Vapi will automatically find the fastest region that make sense. This is helpful when you are required to comply with Data Residency rules. Learn more about Azure regions here https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/. @default undefined
          - `fallbackModels` string[] — These are the fallback models that will be used if the primary model fails. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest fallbacks that make sense.
          - `toolStrictCompatibilityMode` 'strip-parameters-with-unsupported-validation' | 'strip-unsupported-validation' — Azure OpenAI doesn't support `maxLength` right now https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs?tabs=python-secure%2Cdotnet-entra-id&pivots=programming-language-csharp#unsupported-type-specific-keywords. Need to strip. - `strip-parameters-with-unsupported-validation` will strip parameters with unsupported validation. - `strip-unsupported-validation` will keep the parameters but strip unsupported validation. @default `strip-unsupported-validation`
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - OpenRouterModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'openrouter', required
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - PerplexityAIModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'perplexity-ai', required
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - TogetherAIModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'together-ai', required
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - XaiModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'grok-beta' | 'grok-2' | 'grok-3', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `provider` 'xai', required
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - `voice` union — These are the options for the assistant's voice.
        - AzureVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'azure', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - 'andrew' | 'brian' | 'emma'
            - string
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `speed` number — This is the speed multiplier that will be used.
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - CartesiaVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'cartesia', required — This is the voice provider that will be used.
          - `voiceId` string, required — The ID of the particular voice you want to use.
          - `model` 'sonic-2' | 'sonic-english' | 'sonic-multilingual' | 'sonic-preview' | 'sonic' — This is the model that will be used. This is optional and will default to the correct model for the voiceId.
          - `language` 'en' | 'de' | 'es' | 'fr' | 'ja' | 'pt' | 'zh' | 'hi' | 'it' | 'ko' | 'nl' | 'pl' | 'ru' | 'sv' | 'tr' — This is the language that will be used. This is optional and will default to the correct language for the voiceId.
          - `experimentalControls` CartesiaExperimentalControls
            - `speed` union
              - …
            - `emotion` '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'
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - CustomVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'custom-voice', required — This is the voice provider that will be used. Use `custom-voice` for providers that are not natively supported.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `server` Server, required
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - DeepgramVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'deepgram', required — This is the voice provider that will be used.
          - `voiceId` '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' | 'celeste' | 'estrella' | 'nestor' | 'sirio' | 'carina' | 'alvaro' | 'diana' | 'aquila' | 'selena' | 'javier', required — This is the provider-specific ID that will be used.
          - `model` 'aura' | 'aura-2' — This is the model that will be used. Defaults to 'aura-2' when not specified.
          - `mipOptOut` boolean — 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
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - ElevenLabsVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` '11labs', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice Library.
            - 'burt' | 'marissa' | 'andrea' | 'sarah' | 'phillip' | 'steve' | 'joseph' | 'myra' | 'paula' | 'ryan' | 'drew' | 'paul' | 'mrb' | 'matilda' | 'mark'
            - string
          - `stability` number — Defines the stability for voice settings.
          - `similarityBoost` number — Defines the similarity boost for voice settings.
          - `style` number — Defines the style for voice settings.
          - `useSpeakerBoost` boolean — Defines the use speaker boost for voice settings.
          - `speed` number — Defines the speed for voice settings.
          - `optimizeStreamingLatency` number — Defines the optimize streaming latency for voice settings. Defaults to 3.
          - `enableSsmlParsing` boolean — This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency. @default false
          - `autoMode` boolean — Defines the auto mode for voice settings. Defaults to false.
          - `model` 'eleven_multilingual_v2' | 'eleven_turbo_v2' | 'eleven_turbo_v2_5' | 'eleven_flash_v2' | 'eleven_flash_v2_5' | 'eleven_monolingual_v1' — This is the model that will be used. Defaults to 'eleven_turbo_v2' if not specified.
          - `language` string — 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` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `pronunciationDictionaryLocators` ElevenLabsPronunciationDictionaryLocator[] — This is the pronunciation dictionary locators to use.
            - `pronunciationDictionaryId` string, required — This is the ID of the pronunciation dictionary to use.
            - `versionId` string, required — This is the version ID of the pronunciation dictionary to use.
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - HumeVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'hume', required — This is the voice provider that will be used.
          - `model` 'octave' — This is the model that will be used.
          - `voiceId` string, required — The ID of the particular voice you want to use.
          - `isCustomHumeVoice` boolean — Indicates whether the chosen voice is a preset Hume AI voice or a custom voice.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `description` string — 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` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - LMNTVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'lmnt', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - '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'
            - string
          - `speed` number — This is the speed multiplier that will be used.
          - `language` union — Two letter ISO 639-1 language code. Use "auto" for auto-detection.
            - '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'
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - NeuphonicVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'neuphonic', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - string
            - string
          - `model` 'neu_hq' | 'neu_fast' — This is the model that will be used. Defaults to 'neu_fast' if not specified.
          - `language` object, required — This is the language (ISO 639-1) that is enforced for the model.
          - `speed` number — This is the speed multiplier that will be used.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - OpenAIVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'openai', required — This is the voice provider that will be used.
          - `voiceId` union, required — 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.
            - 'alloy' | 'echo' | 'fable' | 'onyx' | 'nova' | 'shimmer' | 'marin' | 'cedar'
            - string
          - `model` 'tts-1' | 'tts-1-hd' | 'gpt-4o-mini-tts' — This is the model that will be used for text-to-speech.
          - `instructions` string — 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.
          - `speed` number — This is the speed multiplier that will be used.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - PlayHTVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'playht', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - 'jennifer' | 'melissa' | 'will' | 'chris' | 'matt' | 'jack' | 'ruby' | 'davis' | 'donna' | 'michael'
            - string
          - `speed` number — This is the speed multiplier that will be used.
          - `temperature` number — 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.
          - `emotion` 'female_happy' | 'female_sad' | 'female_angry' | 'female_fearful' | 'female_disgust' | 'female_surprised' | 'male_happy' | 'male_sad' | 'male_angry' | 'male_fearful' | 'male_disgust' | 'male_surprised' — An emotion to be applied to the speech.
          - `voiceGuidance` number — A number between 1 and 6. Use lower numbers to reduce how unique your chosen voice will be compared to other voices.
          - `styleGuidance` number — 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.
          - `textGuidance` number — 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.
          - `model` 'PlayHT2.0' | 'PlayHT2.0-turbo' | 'Play3.0-mini' | 'PlayDialog' — Playht voice model/engine to use.
          - `language` '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' — The language to use for the speech.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - RimeAIVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'rime-ai', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - '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'
            - string
          - `model` 'arcana' | 'mistv2' | 'mist' — This is the model that will be used. Defaults to 'arcana' when not specified.
          - `speed` number — This is the speed multiplier that will be used.
          - `pauseBetweenBrackets` boolean — 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.
          - `phonemizeBetweenBrackets` boolean — 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.
          - `reduceLatency` boolean — 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
          - `inlineSpeedAlpha` string — This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - SmallestAIVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'smallest-ai', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - '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'
            - string
          - `model` 'lightning' — Smallest AI voice model to use. Defaults to 'lightning' when not specified.
          - `speed` number — This is the speed multiplier that will be used.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - TavusVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'tavus', required — This is the voice provider that will be used.
          - `voiceId` union, required — This is the provider-specific ID that will be used.
            - 'r52da2535a'
            - string
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `personaId` string — This is the unique identifier for the persona that the replica will use in the conversation.
          - `callbackUrl` string — This is the url that will receive webhooks with updates regarding the conversation state.
          - `conversationName` string — This is the name for the conversation.
          - `conversationalContext` string — This is the context that will be appended to any context provided in the persona, if one is provided.
          - `customGreeting` string — This is the custom greeting that the replica will give once a participant joines the conversation.
          - `properties` TavusConversationProperties
            - `maxCallDuration` number — 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` number — The duration in seconds after which the call will be automatically shut down once the last participant leaves.
            - `participantAbsentTimeout` number — 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` boolean — If true, the user will be able to record the conversation.
            - `enableTranscription` boolean — 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` boolean — 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` string — 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` string — The name of the S3 bucket where the recording will be stored.
            - `recordingS3BucketRegion` string — The region of the S3 bucket where the recording will be stored.
            - `awsAssumeRoleArn` string — The ARN of the role that will be assumed to access the S3 bucket.
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - VapiVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'vapi', required — This is the voice provider that will be used.
          - `voiceId` 'Elliot' | 'Kylie' | 'Rohan' | 'Lily' | 'Savannah' | 'Hana' | 'Neha' | 'Cole' | 'Harry' | 'Paige' | 'Spencer', required — The voices provided by Vapi
          - `speed` number — This is the speed multiplier that will be used. @default 1
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - SesameVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'sesame', required — This is the voice provider that will be used.
          - `voiceId` string, required — This is the provider-specific ID that will be used.
          - `model` 'csm-1b', required — This is the model that will be used.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - InworldVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'inworld', required — This is the voice provider that will be used.
          - `voiceId` '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', required — 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
          - `model` 'inworld-tts-1' — This is the model that will be used.
          - `languageCode` 'en' | 'zh' | 'ko' | 'nl' | 'fr' | 'es' | 'ja' | 'de' | 'it' | 'pl' | 'pt' — Language code for Inworld TTS synthesis
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
        - MinimaxVoice
          - `cachingEnabled` boolean — This is the flag to toggle voice caching for the assistant.
          - `provider` 'minimax', required — This is the voice provider that will be used.
          - `voiceId` string, required — This is the provider-specific ID that will be used. Use a voice from MINIMAX_PREDEFINED_VOICES or a custom cloned voice ID.
          - `model` 'speech-02-hd' | 'speech-02-turbo' | 'speech-2.5-turbo-preview' — This is the model that will be used. Options are 'speech-02-hd' and 'speech-02-turbo'. speech-02-hd is optimized for high-fidelity applications like voiceovers and audiobooks. speech-02-turbo is designed for real-time applications with low latency. @default "speech-02-turbo"
          - `emotion` string — The emotion to use for the voice. If not provided, will use auto-detect mode. Options include: 'happy', 'sad', 'angry', 'fearful', 'surprised', 'disgusted', 'neutral'
          - `pitch` number — Voice pitch adjustment. Range from -12 to 12 semitones. @default 0
          - `speed` number — Voice speed adjustment. Range from 0.5 to 2.0. @default 1.0
          - `volume` number — Voice volume adjustment. Range from 0.5 to 2.0. @default 1.0
          - `region` 'worldwide' | 'china' — The region for Minimax API. Defaults to "worldwide".
          - `languageBoost` 'Chinese' | 'Chinese,Yue' | 'English' | 'Arabic' | 'Russian' | 'Spanish' | 'French' | 'Portuguese' | 'German' | 'Turkish' | 'Dutch' | 'Ukrainian' | 'Vietnamese' | 'Indonesian' | 'Japanese' | 'Italian' | 'Korean' | 'Thai' | 'Polish' | 'Romanian' | 'Greek' | 'Czech' | 'Finnish' | 'Hindi' | 'Bulgarian' | 'Danish' | 'Hebrew' | 'Malay' | 'Persian' | 'Slovak' | 'Swedish' | 'Croatian' | 'Filipino' | 'Hungarian' | 'Norwegian' | 'Slovenian' | 'Catalan' | 'Nynorsk' | 'Tamil' | 'Afrikaans' | 'auto' — Language hint for MiniMax T2A. Example: yue (Cantonese), zh (Chinese), en (English).
          - `textNormalizationEnabled` boolean — Enable MiniMax text normalization to improve number reading and formatting.
          - `chunkPlan` ChunkPlan
            - `enabled` boolean — 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, Vapi-provided audio control tokens like <flush /> will not work. @default true
            - `minCharacters` number — 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
            - `punctuationBoundaries` string[] — 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.
            - `formatPlan` FormatPlan
              - …
          - `fallbackPlan` FallbackPlan
            - `voices` union[], required — This is the list of voices to fallback to in the event that the primary voice provider fails.
              - …
      - `firstMessage` string — This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If unspecified, assistant will wait for user to speak and use the model to respond once they speak.
      - `firstMessageInterruptionsEnabled` boolean
      - `firstMessageMode` 'assistant-speaks-first' | 'assistant-speaks-first-with-model-generated-message' | 'assistant-waits-for-user' — This is the mode for the first message. Default is 'assistant-speaks-first'. Use: - 'assistant-speaks-first' to have the assistant speak first. - 'assistant-waits-for-user' to have the assistant wait for the user to speak first. - 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points). @default 'assistant-speaks-first'
      - `voicemailDetection` union — These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool]. This uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached. You can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.
        - GoogleVoicemailDetectionPlan
          - `beepMaxAwaitSeconds` number — This is the maximum duration from the start of the call that we will wait for a voicemail beep, before speaking our message - If we detect a voicemail beep before this, we will speak the message at that point. - Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so before the actual beep, it will get cut off. You should definitely tune this to your use case. @default 30 @min 0 @max 60
          - `provider` 'google', required — This is the provider to use for voicemail detection.
          - `backoffPlan` VoicemailDetectionBackoffPlan
            - `startAtSeconds` number — This is the number of seconds to wait before starting the first retry attempt.
            - `frequencySeconds` number — This is the interval in seconds between retry attempts.
            - `maxRetries` number — This is the maximum number of retry attempts before giving up.
          - `type` 'audio' | 'transcript' — This is the detection type to use for voicemail detection. - 'audio': Uses native audio models (default) - 'transcript': Uses ASR/transcript-based detection @default 'audio' (audio detection)
        - OpenAIVoicemailDetectionPlan
          - `beepMaxAwaitSeconds` number — This is the maximum duration from the start of the call that we will wait for a voicemail beep, before speaking our message - If we detect a voicemail beep before this, we will speak the message at that point. - Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so before the actual beep, it will get cut off. You should definitely tune this to your use case. @default 30 @min 0 @max 60
          - `provider` 'openai', required — This is the provider to use for voicemail detection.
          - `backoffPlan` VoicemailDetectionBackoffPlan
            - `startAtSeconds` number — This is the number of seconds to wait before starting the first retry attempt.
            - `frequencySeconds` number — This is the interval in seconds between retry attempts.
            - `maxRetries` number — This is the maximum number of retry attempts before giving up.
          - `type` 'audio' | 'transcript' — This is the detection type to use for voicemail detection. - 'audio': Uses native audio models (default) - 'transcript': Uses ASR/transcript-based detection @default 'audio' (audio detection)
        - TwilioVoicemailDetectionPlan
          - `provider` 'twilio', required — This is the provider to use for voicemail detection.
          - `voicemailDetectionTypes` string[] — These are the AMD messages from Twilio that are considered as voicemail. Default is ['machine_end_beep', 'machine_end_silence']. @default {Array} ['machine_end_beep', 'machine_end_silence']
          - `enabled` boolean — This sets whether the assistant should detect voicemail. Defaults to true. @default true
          - `machineDetectionTimeout` number — The number of seconds that Twilio should attempt to perform answering machine detection before timing out and returning AnsweredBy as unknown. Default is 30 seconds. Increasing this value will provide the engine more time to make a determination. This can be useful when DetectMessageEnd is provided in the MachineDetection parameter and there is an expectation of long answering machine greetings that can exceed 30 seconds. Decreasing this value will reduce the amount of time the engine has to make a determination. This can be particularly useful when the Enable option is provided in the MachineDetection parameter and you want to limit the time for initial detection. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 30
          - `machineDetectionSpeechThreshold` number — The number of milliseconds that is used as the measuring stick for the length of the speech activity. Durations lower than this value will be interpreted as a human, longer as a machine. Default is 2400 milliseconds. Increasing this value will reduce the chance of a False Machine (detected machine, actually human) for a long human greeting (e.g., a business greeting) but increase the time it takes to detect a machine. Decreasing this value will reduce the chances of a False Human (detected human, actually machine) for short voicemail greetings. The value of this parameter may need to be reduced by more than 1000ms to detect very short voicemail greetings. A reduction of that significance can result in increased False Machine detections. Adjusting the MachineDetectionSpeechEndThreshold is likely the better approach for short voicemails. Decreasing MachineDetectionSpeechThreshold will also reduce the time it takes to detect a machine. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 2400
          - `machineDetectionSpeechEndThreshold` number — The number of milliseconds of silence after speech activity at which point the speech activity is considered complete. Default is 1200 milliseconds. Increasing this value will typically be used to better address the short voicemail greeting scenarios. For short voicemails, there is typically 1000-2000ms of audio followed by 1200-2400ms of silence and then additional audio before the beep. Increasing the MachineDetectionSpeechEndThreshold to ~2500ms will treat the 1200-2400ms of silence as a gap in the greeting but not the end of the greeting and will result in a machine detection. The downsides of such a change include: - Increasing the delay for human detection by the amount you increase this parameter, e.g., a change of 1200ms to 2500ms increases human detection delay by 1300ms. - Cases where a human has two utterances separated by a period of silence (e.g. a "Hello", then 2000ms of silence, and another "Hello") may be interpreted as a machine. Decreasing this value will result in faster human detection. The consequence is that it can lead to increased False Human (detected human, actually machine) detections because a silence gap in a voicemail greeting (not necessarily just in short voicemail scenarios) can be incorrectly interpreted as the end of speech. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 1200
          - `machineDetectionSilenceTimeout` number — The number of milliseconds of initial silence after which an unknown AnsweredBy result will be returned. Default is 5000 milliseconds. Increasing this value will result in waiting for a longer period of initial silence before returning an 'unknown' AMD result. Decreasing this value will result in waiting for a shorter period of initial silence before returning an 'unknown' AMD result. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 5000
        - VapiVoicemailDetectionPlan
          - `beepMaxAwaitSeconds` number — This is the maximum duration from the start of the call that we will wait for a voicemail beep, before speaking our message - If we detect a voicemail beep before this, we will speak the message at that point. - Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so before the actual beep, it will get cut off. You should definitely tune this to your use case. @default 30 @min 0 @max 60
          - `provider` 'vapi', required — This is the provider to use for voicemail detection.
          - `backoffPlan` VoicemailDetectionBackoffPlan
            - `startAtSeconds` number — This is the number of seconds to wait before starting the first retry attempt.
            - `frequencySeconds` number — This is the interval in seconds between retry attempts.
            - `maxRetries` number — This is the maximum number of retry attempts before giving up.
          - `type` 'audio' | 'transcript' — This is the detection type to use for voicemail detection. - 'audio': Uses native audio models (default) - 'transcript': Uses ASR/transcript-based detection @default 'audio' (audio detection)
      - `clientMessages` string[] — These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.
      - `serverMessages` string[] — These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted. You can check the shape of the messages in ServerMessage schema.
      - `maxDurationSeconds` number — This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes)
      - `backgroundSound` string, uri — 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.
      - `modelOutputInMessagesEnabled` boolean — This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. Default `false` while in beta. @default false
      - `transportConfigurations` TransportConfigurationTwilio[] — These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.
        - `provider` 'twilio', required
        - `timeout` number — The integer number of seconds that we should allow the phone to ring before assuming there is no answer. The default is `60` seconds and the maximum is `600` seconds. For some call flows, we will add a 5-second buffer to the timeout value you provide. For this reason, a timeout value of 10 seconds could result in an actual timeout closer to 15 seconds. You can set this to a short time, such as `15` seconds, to hang up before reaching an answering machine or voicemail. @default 60
        - `record` boolean — Whether to record the call. Can be `true` to record the phone call, or `false` to not. The default is `false`. @default false
        - `recordingChannels` 'mono' | 'dual' — The number of channels in the final recording. Can be: `mono` or `dual`. The default is `mono`. `mono` records both legs of the call in a single channel of the recording file. `dual` records each leg to a separate channel of the recording file. The first channel of a dual-channel recording contains the parent call and the second channel contains the child call. @default 'mono'
      - `observabilityPlan` LangfuseObservabilityPlan
        - `provider` 'langfuse', required
        - `tags` string[], required — 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
        - `metadata` object — 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.
      - `credentials` union[] — These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.
        - union
          - CreateAnthropicCredentialDTO
            - `provider` 'anthropic', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateAnyscaleCredentialDTO
            - `provider` 'anyscale', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateAssemblyAICredentialDTO
            - `provider` 'assembly-ai', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateAzureCredentialDTO
            - `provider` 'azure', required
            - `service` 'speech' | 'blob_storage', required — This is the service being used in Azure.
            - `region` 'australia' | 'canadaeast' | 'canadacentral' | 'eastus2' | 'eastus' | 'france' | 'india' | 'japaneast' | 'japanwest' | 'uaenorth' | 'northcentralus' | 'norway' | 'southcentralus' | 'swedencentral' | 'switzerland' | 'uk' | 'westus' | 'westus3' — This is the region of the Azure resource.
            - `apiKey` string — This is not returned in the API.
            - `fallbackIndex` number — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.
            - `bucketPlan` AzureBlobStorageBucketPlan
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateAzureOpenAICredentialDTO
            - `provider` 'azure-openai', required
            - `region` 'australia' | 'canadaeast' | 'canadacentral' | 'eastus2' | 'eastus' | 'france' | 'india' | 'japaneast' | 'japanwest' | 'uaenorth' | 'northcentralus' | 'norway' | 'southcentralus' | 'swedencentral' | 'switzerland' | 'uk' | 'westus' | 'westus3', required
            - `models` string[], required
            - `openAIKey` string, required — This is not returned in the API.
            - `ocpApimSubscriptionKey` string — This is not returned in the API.
            - `openAIEndpoint` string, required
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateByoSipTrunkCredentialDTO
            - `provider` 'byo-sip-trunk' — This can be used to bring your own SIP trunks or to connect to a Carrier.
            - `gateways` SipTrunkGateway[], required — This is the list of SIP trunk's gateways.
              - …
            - `outboundAuthenticationPlan` SipTrunkOutboundAuthenticationPlan
              - …
            - `outboundLeadingPlusEnabled` boolean — 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` string — This can be used to configure the tech prefix on outbound calls. This is an advanced property.
            - `sipDiversionHeader` string — 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.
            - `sbcConfiguration` SbcConfiguration
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateCartesiaCredentialDTO
            - `provider` 'cartesia', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateCerebrasCredentialDTO
            - `provider` 'cerebras', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateCloudflareCredentialDTO
            - `provider` 'cloudflare', required — Credential provider. Only allowed value is cloudflare
            - `accountId` string — Cloudflare Account Id.
            - `apiKey` string — Cloudflare API Key / Token.
            - `accountEmail` string — Cloudflare Account Email.
            - `fallbackIndex` number — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.
            - `bucketPlan` CloudflareR2BucketPlan
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateCustomLLMCredentialDTO
            - `provider` 'custom-llm', required
            - `apiKey` string, required — This is not returned in the API.
            - `authenticationPlan` OAuth2AuthenticationPlan
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateDeepgramCredentialDTO
            - `provider` 'deepgram', required
            - `apiKey` string, required — This is not returned in the API.
            - `apiUrl` string — This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateDeepInfraCredentialDTO
            - `provider` 'deepinfra', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateDeepSeekCredentialDTO
            - `provider` 'deep-seek', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateElevenLabsCredentialDTO
            - `provider` '11labs', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGcpCredentialDTO
            - `provider` 'gcp', required
            - `fallbackIndex` number — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.
            - `gcpKey` GcpKey, required
              - …
            - `region` string — This is the region of the GCP resource.
            - `bucketPlan` BucketPlan
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGladiaCredentialDTO
            - `provider` 'gladia', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGoHighLevelCredentialDTO
            - `provider` 'gohighlevel', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGoogleCredentialDTO
            - `provider` 'google', required — This is the key for Gemini in Google AI Studio. Get it from here: https://aistudio.google.com/app/apikey
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGroqCredentialDTO
            - `provider` 'groq', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateHumeCredentialDTO
            - `provider` 'hume', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateInflectionAICredentialDTO
            - `provider` 'inflection-ai', required — 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
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateLangfuseCredentialDTO
            - `provider` 'langfuse', required
            - `publicKey` string, required — The public key for Langfuse project. Eg: pk-lf-...
            - `apiKey` string, required — The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API.
            - `apiUrl` string, required — The host URL for Langfuse project. Eg: https://cloud.langfuse.com
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateLmntCredentialDTO
            - `provider` 'lmnt', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateMakeCredentialDTO
            - `provider` 'make', required
            - `teamId` string, required — Team ID
            - `region` string, required — Region of your application. For example: eu1, eu2, us1, us2
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateMistralCredentialDTO
            - `provider` 'mistral', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateNeuphonicCredentialDTO
            - `provider` 'neuphonic', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateOpenAICredentialDTO
            - `provider` 'openai', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateOpenRouterCredentialDTO
            - `provider` 'openrouter', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreatePerplexityAICredentialDTO
            - `provider` 'perplexity-ai', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreatePlayHTCredentialDTO
            - `provider` 'playht', required
            - `apiKey` string, required — This is not returned in the API.
            - `userId` string, required
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateRimeAICredentialDTO
            - `provider` 'rime-ai', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateRunpodCredentialDTO
            - `provider` 'runpod', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateS3CredentialDTO
            - `provider` 's3', required — Credential provider. Only allowed value is s3
            - `awsAccessKeyId` string, required — AWS access key ID.
            - `awsSecretAccessKey` string, required — AWS access key secret. This is not returned in the API.
            - `region` string, required — AWS region in which the S3 bucket is located.
            - `s3BucketName` string, required — AWS S3 bucket name.
            - `s3PathPrefix` string, required — The path prefix for the uploaded recording. Ex. "recordings/"
            - `fallbackIndex` number — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateSmallestAICredentialDTO
            - `provider` 'smallest-ai', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateSpeechmaticsCredentialDTO
            - `provider` 'speechmatics', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateSupabaseCredentialDTO
            - `provider` 'supabase', required — This is for supabase storage.
            - `fallbackIndex` number — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.
            - `bucketPlan` SupabaseBucketPlan
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateTavusCredentialDTO
            - `provider` 'tavus', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateTogetherAICredentialDTO
            - `provider` 'together-ai', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateTrieveCredentialDTO
            - `provider` 'trieve', required
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateTwilioCredentialDTO
            - `provider` 'twilio', required
            - `authToken` string — This is not returned in the API.
            - `apiKey` string — This is not returned in the API.
            - `apiSecret` string — This is not returned in the API.
            - `accountSid` string, required
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateVonageCredentialDTO
            - `provider` 'vonage', required
            - `apiSecret` string, required — This is not returned in the API.
            - `apiKey` string, required
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateWebhookCredentialDTO
            - `provider` 'webhook', required
            - `authenticationPlan` union, required — This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication.
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateCustomCredentialDTO
            - `provider` 'custom-credential', required
            - `authenticationPlan` union, required — This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication.
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateXAiCredentialDTO
            - `provider` 'xai', required — This is the api key for Grok in XAi's console. Get it from here: https://console.x.ai
            - `apiKey` string, required — This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGoogleCalendarOAuth2ClientCredentialDTO
            - `provider` 'google.calendar.oauth2-client', required
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGoogleCalendarOAuth2AuthorizationCredentialDTO
            - `provider` 'google.calendar.oauth2-authorization', required
            - `authorizationId` string, required — The authorization ID for the OAuth2 authorization
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGoogleSheetsOAuth2AuthorizationCredentialDTO
            - `provider` 'google.sheets.oauth2-authorization', required
            - `authorizationId` string, required — The authorization ID for the OAuth2 authorization
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateSlackOAuth2AuthorizationCredentialDTO
            - `provider` 'slack.oauth2-authorization', required
            - `authorizationId` string, required — The authorization ID for the OAuth2 authorization
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateGoHighLevelMCPCredentialDTO
            - `provider` 'ghl.oauth2-authorization', required
            - `authenticationSession` Oauth2AuthenticationSession, required
              - …
            - `name` string — This is the name of credential. This is just for your reference.
          - CreateInworldCredentialDTO
            - `provider` 'inworld', required
            - `apiKey` string, required — This is the Inworld Basic (Base64) authentication token. This is not returned in the API.
            - `name` string — This is the name of credential. This is just for your reference.
      - `hooks` union[] — This is a set of actions that will be performed on certain events.
        - union
          - CallHookCallEnding
            - `on` 'call.ending', required — This is the event that triggers this hook
            - `do` ToolCallHookAction[], required — This is the set of actions to perform when the hook triggers
              - …
            - `filters` CallHookFilter[] — This is the set of filters that must match for the hook to trigger
              - …
          - CallHookAssistantSpeechInterrupted
            - `on` 'assistant.speech.interrupted', required — This is the event that triggers this hook
            - `do` union[], required — This is the set of actions to perform when the hook triggers
              - …
          - CallHookCustomerSpeechInterrupted
            - `on` 'customer.speech.interrupted', required — This is the event that triggers this hook
            - `do` union[], required — This is the set of actions to perform when the hook triggers
              - …
          - CallHookCustomerSpeechTimeout
            - `on` string, required — Must be either "customer.speech.timeout" or match the pattern "customer.speech.timeout[property=value]"
            - `do` union[], required — This is the set of actions to perform when the hook triggers
              - …
            - `options` CustomerSpeechTimeoutOptions
              - …
            - `name` string — This is the name of the hook, it can be set by the user to identify the hook. If no name is provided, the hook will be auto generated as UUID. @default UUID
      - `name` string — This is the name of the assistant. This is required when you want to transfer between assistants in a call.
      - `voicemailMessage` string — This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up.
      - `endCallMessage` string — This is the message that the assistant will say if it ends the call. If unspecified, it will hang up without saying anything.
      - `endCallPhrases` string[] — This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.
      - `compliancePlan` CompliancePlan
        - `hipaaEnabled` boolean — 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.
        - `pciEnabled` boolean — 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.
        - `securityFilterPlan` SecurityFilterPlan
          - `enabled` boolean — Whether the security filter is enabled. @default false
          - `filters` SecurityFilterBase[] — Array of security filter types to apply. If array is not empty, only those security filters are run.
          - `mode` 'sanitize' | 'reject' | 'replace' — Mode of operation when a security threat is detected. - 'sanitize': Remove or replace the threatening content - 'reject': Replace the entire transcript with replacement text - 'replace': Replace threatening patterns with replacement text @default 'sanitize'
          - `replacementText` string — Text to use when replacing filtered content. @default '[FILTERED]'
        - `recordingConsentPlan` union
          - RecordingConsentPlanStayOnLine
            - `message` string, required — This is the message asking for consent to record the call. If the type is `stay-on-line`, the message should ask the user to hang up if they do not consent. If the type is `verbal`, the message should ask the user to verbally consent or decline.
            - `voice` union — This is the voice to use for the consent message. If not specified, inherits from the assistant's voice. Use a different voice for the consent message for a better user experience.
              - …
            - `type` 'stay-on-line', required — This is the type of recording consent plan. This type assumes consent is granted if the user stays on the line.
            - `waitSeconds` number — Number of seconds to wait before transferring to the assistant if user stays on the call
          - RecordingConsentPlanVerbal
            - `message` string, required — This is the message asking for consent to record the call. If the type is `stay-on-line`, the message should ask the user to hang up if they do not consent. If the type is `verbal`, the message should ask the user to verbally consent or decline.
            - `voice` union — This is the voice to use for the consent message. If not specified, inherits from the assistant's voice. Use a different voice for the consent message for a better user experience.
              - …
            - `type` 'verbal', required — This is the type of recording consent plan. This type assumes consent is granted if the user verbally consents or declines.
            - `declineTool` object — Tool to execute if user verbally declines recording consent
            - `declineToolId` string — ID of existing tool to execute if user verbally declines recording consent
      - `metadata` object — This is for metadata you want to store on the assistant.
      - `backgroundSpeechDenoisingPlan` BackgroundSpeechDenoisingPlan
        - `smartDenoisingPlan` SmartDenoisingPlan
          - `enabled` boolean — Whether smart denoising using Krisp is enabled.
        - `fourierDenoisingPlan` FourierDenoisingPlan
          - `enabled` boolean — Whether Fourier denoising is enabled. Note that this is experimental and may not work as expected.
          - `mediaDetectionEnabled` boolean — 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.
          - `staticThreshold` number — Static threshold in dB used as fallback when no baseline is established.
          - `baselineOffsetDb` number — 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.
          - `windowSizeMs` number — Rolling window size in milliseconds for calculating the audio baseline. Larger windows adapt more slowly but are more stable.
          - `baselinePercentile` number — 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.
      - `analysisPlan` AnalysisPlan
        - `minMessagesThreshold` number — 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
        - `summaryPlan` SummaryPlan
          - `messages` object[] — 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` - {{messages}}: The messages of the call from `assistant.model.messages` - {{endedReason}}: The ended reason of the call from `call.endedReason`
          - `enabled` boolean — 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` number — 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
        - `structuredDataPlan` StructuredDataPlan
          - `messages` object[] — 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`- {{messages}}: the messages of the call from `assistant.model.messages`- {{schema}}: the schema of the structured data from `structuredDataPlan.schema`- {{endedReason}}: the ended reason of the call from `call.endedReason`
          - `enabled` boolean — 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` JsonSchema
            - `type` 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object', required — 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.
            - `items` object — 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` object — 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` string — This is the description to help the model understand what it needs to output.
            - `pattern` string — 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` 'date-time' | 'time' | 'date' | 'duration' | 'email' | 'hostname' | 'ipv4' | 'ipv6' | 'uuid' — 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
            - `required` string[] — This is a list of properties that are required. This only makes sense if the type is "object".
            - `enum` string[] — This array specifies the allowed values that can be used to restrict the output of the model.
            - `title` string — This is the title of the schema.
          - `timeoutSeconds` number — 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
        - `structuredDataMultiPlan` StructuredDataMultiPlan[] — 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`.
          - `key` string, required — This is the key of the structured data plan in the catalog.
          - `plan` StructuredDataPlan, required
            - `messages` object[] — 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`- {{messages}}: the messages of the call from `assistant.model.messages`- {{schema}}: the schema of the structured data from `structuredDataPlan.schema`- {{endedReason}}: the ended reason of the call from `call.endedReason`
              - …
            - `enabled` boolean — 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` JsonSchema
              - …
            - `timeoutSeconds` number — 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
        - `successEvaluationPlan` SuccessEvaluationPlan
          - `rubric` 'NumericScale' | 'DescriptiveScale' | 'Checklist' | 'Matrix' | 'PercentageScale' | 'LikertScale' | 'AutomaticRubric' | 'PassFail' — 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` object[] — 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`- {{messages}}: the messages of the call from `assistant.model.messages`- {{rubric}}: the rubric of the success evaluation from `successEvaluationPlan.rubric`- {{endedReason}}: the ended reason of the call from `call.endedReason`
          - `enabled` boolean — 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` number — 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
        - `outcomeIds` string[] — This is an array of outcome UUIDs to be calculated during analysis. The outcomes will be calculated and stored in `call.analysis.outcomes`.
      - `artifactPlan` ArtifactPlan
        - `recordingEnabled` boolean — 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
        - `recordingFormat` 'wav;l16' | 'mp3' — This determines the format of the recording. Defaults to `wav;l16`. @default 'wav;l16'
        - `recordingUseCustomStorageEnabled` boolean — This determines whether to use custom storage (S3 or GCP) for call recordings when storage credentials are configured. When set to false, recordings will be stored on Vapi's storage instead of your custom storage, even if you have custom storage credentials configured. Usage: - Set to false if you have custom storage configured but want to store recordings on Vapi's storage for this assistant. - Set to true (or leave unset) to use your custom storage for recordings when available. @default true
        - `videoRecordingEnabled` boolean — 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
        - `fullMessageHistoryEnabled` boolean — This determines whether the artifact contains the full message history, even after handoff context engineering. Defaults to false.
        - `pcapEnabled` boolean — This determines whether the SIP packet capture is enabled. Defaults to true. Only relevant for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`. You can find the packet capture at `call.artifact.pcapUrl` after the call is ended. @default true
        - `pcapS3PathPrefix` string — 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 '/'
        - `pcapUseCustomStorageEnabled` boolean — This determines whether to use custom storage (S3 or GCP) for SIP packet captures when storage credentials are configured. When set to false, packet captures will be stored on Vapi's storage instead of your custom storage, even if you have custom storage credentials configured. Usage: - Set to false if you have custom storage configured but want to store packet captures on Vapi's storage for this assistant. - Set to true (or leave unset) to use your custom storage for packet captures when available. @default true
        - `loggingEnabled` boolean — This determines whether the call logs are enabled. Defaults to true. @default true
        - `loggingUseCustomStorageEnabled` boolean — This determines whether to use custom storage (S3 or GCP) for call logs when storage credentials are configured. When set to false, logs will be stored on Vapi's storage instead of your custom storage, even if you have custom storage credentials configured. Usage: - Set to false if you have custom storage configured but want to store logs on Vapi's storage for this assistant. - Set to true (or leave unset) to use your custom storage for logs when available. @default true
        - `transcriptPlan` TranscriptPlan
          - `enabled` boolean — This determines whether the transcript is stored in `call.artifact.transcript`. Defaults to true. @default true
          - `assistantName` string — 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` string — 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'
        - `recordingPath` string — 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 '/'
        - `structuredOutputIds` string[] — This is an array of structured output IDs to be calculated during the call. The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended.
        - `loggingPath` string — This is the path where the call logs 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 call logs to a specific path, set this to the path. Example: `/my-assistant-logs`. - If you want to upload the call logs to the root of the bucket, set this to `/`. @default '/'
      - `startSpeakingPlan` StartSpeakingPlan
        - `waitSeconds` number — 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
        - `smartEndpointingEnabled` union
          - boolean
          - 'livekit'
        - `smartEndpointingPlan` union — This is the plan for smart endpointing. Pick between Vapi smart endpointing, LiveKit, or custom endpointing model (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`. If this is not set, the system will automatically use the transcriber's built-in endpointing capabilities if available.
          - VapiSmartEndpointingPlan
            - `provider` 'vapi' | 'livekit' | 'custom-endpointing-model', required — This is the provider for the smart endpointing plan.
          - LivekitSmartEndpointingPlan
            - `provider` 'vapi' | 'livekit' | 'custom-endpointing-model', required — This is the provider for the smart endpointing plan.
            - `waitFunction` string — 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"
          - CustomEndpointingModelSmartEndpointingPlan
            - `provider` 'vapi' | 'livekit' | 'custom-endpointing-model', required — This is the provider for the smart endpointing plan. Use `custom-endpointing-model` for custom endpointing providers that are not natively supported.
            - `server` Server
              - …
        - `customEndpointingRules` union[] — 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 []
          - union
            - AssistantCustomEndpointingRule
              - …
            - CustomerCustomEndpointingRule
              - …
            - BothCustomEndpointingRule
              - …
        - `transcriptionEndpointingPlan` TranscriptionEndpointingPlan
          - `onPunctuationSeconds` number — 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
          - `onNoPunctuationSeconds` number — 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
          - `onNumberSeconds` number — 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
      - `stopSpeakingPlan` StopSpeakingPlan
        - `numWords` number — 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
        - `voiceSeconds` number — 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
        - `backoffSeconds` number — This is the seconds to wait before the assistant will start talking again after being interrupted. Defaults to 1. @default 1
        - `acknowledgementPhrases` string[] — These are the phrases that will never interrupt the assistant, even if numWords threshold is met. These are typically acknowledgement or backchanneling phrases.
        - `interruptionPhrases` string[] — These are the phrases that will always interrupt the assistant immediately, regardless of numWords. These are typically phrases indicating disagreement or desire to stop.
      - `monitorPlan` MonitorPlan
        - `listenEnabled` boolean — 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
        - `listenAuthenticationEnabled` boolean — This enables authentication on the `call.monitor.listenUrl`. If `listenAuthenticationEnabled` is `true`, the `call.monitor.listenUrl` will require an `Authorization: Bearer <vapi-public-api-key>` header. @default false
        - `controlEnabled` boolean — 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.vapi.ai/api-reference/messages/client-inbound-message @default true
        - `controlAuthenticationEnabled` boolean — This enables authentication on the `call.monitor.controlUrl`. If `controlAuthenticationEnabled` is `true`, the `call.monitor.controlUrl` will require an `Authorization: Bearer <vapi-public-api-key>` header. @default false
      - `credentialIds` string[] — These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.
      - `server` Server
        - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
        - `credentialId` string — The credential ID for server authentication
        - `url` string — This is where the request will be sent.
        - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
        - `backoffPlan` BackoffPlan
          - `type` object, required — This is the type of backoff plan to use. Defaults to fixed. @default fixed
          - `maxRetries` number, required — This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries). @default 0
          - `baseDelaySeconds` number, required — 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.
          - `excludedStatusCodes` object[] — This is the excluded status codes. If the response status code is in this list, the request will not be retried. By default, the request will be retried for any non-2xx status code.
      - `keypadInputPlan` KeypadInputPlan
        - `enabled` boolean — This keeps track of whether the user has enabled keypad input. By default, it is off. @default false
        - `timeoutSeconds` number — This is the time in seconds to wait before processing the input. If the input is not received within this time, the input will be ignored. If set to "off", the input will be processed when the user enters a delimiter or immediately if no delimiter is used. @default 2
        - `delimiters` '#' | '*' | '' — This is the delimiter(s) that will be used to process the input. Can be '#', '*', or an empty array.
    - `assistantOverrides` AssistantOverrides
      - `transcriber` union — These are the options for the assistant's transcriber.
        - AssemblyAITranscriber
          - `provider` 'assembly-ai', required — This is the transcription provider that will be used.
          - `language` 'en' — This is the language that will be set for the transcription.
          - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
          - `formatTurns` boolean — This enables formatting of transcripts. @default true
          - `endOfTurnConfidenceThreshold` number — This is the end of turn confidence threshold. The minimum confidence that the end of turn is detected. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @min 0 @max 1 @default 0.7
          - `minEndOfTurnSilenceWhenConfident` number — This is the minimum end of turn silence when confident in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 160
          - `wordFinalizationMaxWaitTime` number
          - `maxTurnSilence` number — This is the maximum turn silence time in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 400
          - `realtimeUrl` string — The WebSocket URL that the transcriber connects to.
          - `wordBoost` string[] — Add up to 2500 characters of custom vocabulary.
          - `keytermsPrompt` string[] — Keyterms prompting improves recognition accuracy for specific words and phrases. Can include up to 100 keyterms, each up to 50 characters. Costs an additional $0.04/hour when enabled.
          - `endUtteranceSilenceThreshold` number — The duration of the end utterance silence threshold in milliseconds.
          - `disablePartialTranscripts` boolean — Disable partial transcripts. Set to `true` to not receive partial transcripts. Defaults to `false`.
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - AzureSpeechTranscriber
          - `provider` 'azure', required — This is the transcription provider that will be used.
          - `language` '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' — 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
          - `segmentationStrategy` 'Default' | 'Time' | 'Semantic' — Controls how phrase boundaries are detected, enabling either simple time/silence heuristics or more advanced semantic segmentation.
          - `segmentationSilenceTimeoutMs` number — Duration of detected silence after which the service finalizes a phrase. Configure to adjust sensitivity to pauses in speech.
          - `segmentationMaximumTimeMs` number — Maximum duration a segment can reach before being cut off when using time-based segmentation.
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - CustomTranscriber
          - `provider` 'custom-transcriber', required — This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported.
          - `server` Server, required
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - DeepgramTranscriber
          - `provider` 'deepgram', required — This is the transcription provider that will be used.
          - `model` union — 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
            - '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'
            - string
          - `language` 'ar' | 'az' | 'ba' | 'bg' | 'br' | 'ca' | 'cs' | 'da' | 'da-DK' | 'de' | 'de-CH' | 'el' | 'en' | 'en-AU' | 'en-CA' | 'en-GB' | 'en-IE' | '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' | 'pt-PT' | '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' — 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
          - `smartFormat` boolean — 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.
          - `mipOptOut` boolean — 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
          - `numerals` boolean — 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
          - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
          - `eagerEotThreshold` number
          - `eotThreshold` number
          - `eotTimeoutMs` number
          - `keywords` string[] — 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.
          - `keyterm` string[] — Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%.
          - `endpointing` number — 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@vapi.ai and we'll find another solution. @default 10
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - ElevenLabsTranscriber
          - `provider` '11labs', required — This is the transcription provider that will be used.
          - `model` 'scribe_v1' — This is the model that will be used for the transcription.
          - `language` '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` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - GladiaTranscriber
          - `provider` 'gladia', required — This is the transcription provider that will be used.
          - `model` 'fast' | 'accurate' | 'solaria-1' — This is the Gladia model that will be used. Default is 'fast'
          - `languageBehaviour` 'manual' | 'automatic single language' | 'automatic multiple languages' — Defines how the transcription model detects the audio language. Default value is 'automatic single language'.
          - `language` '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' — Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.
          - `languages` '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' — Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'.
          - `transcriptionHint` string — 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.
          - `prosody` boolean — 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.
          - `audioEnhancer` boolean — If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false.
          - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
          - `endpointing` number — Endpointing time in seconds - time to wait before considering speech ended
          - `speechThreshold` number — Speech threshold - sensitivity configuration for speech detection (0.0 to 1.0)
          - `customVocabularyEnabled` boolean — Enable custom vocabulary for improved accuracy
          - `customVocabularyConfig` GladiaCustomVocabularyConfigDTO
            - `vocabulary` union[], required — Array of vocabulary items (strings or objects with value, pronunciations, intensity, language)
              - …
            - `defaultIntensity` number — Default intensity for vocabulary items (0.0 to 1.0)
          - `region` 'us-west' | 'eu-west' — Region for processing audio (us-west or eu-west)
          - `receivePartialTranscripts` boolean — Enable partial transcripts for low-latency streaming transcription
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - GoogleTranscriber
          - `provider` 'google', required — This is the transcription provider that will be used.
          - `model` 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-lite' | '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-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' — This is the model that will be used for the transcription.
          - `language` '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' — This is the language that will be set for the transcription.
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - SpeechmaticsTranscriber
          - `provider` 'speechmatics', required — This is the transcription provider that will be used.
          - `model` 'default' — This is the model that will be used for the transcription.
          - `language` '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'
          - `operatingPoint` 'standard' | 'enhanced' — This is the operating point for the transcription. Choose between `standard` for faster turnaround with strong accuracy or `enhanced` for highest accuracy when precision is critical. @default 'enhanced'
          - `region` 'eu' | 'us' — This is the region for the Speechmatics API. Choose between EU (Europe) and US (United States) regions for lower latency and data sovereignty compliance. @default 'eu'
          - `enableDiarization` boolean — This enables speaker diarization, which identifies and separates speakers in the transcription. Essential for multi-speaker conversations and conference calls. @default false
          - `maxSpeakers` number — This sets the maximum number of speakers to detect when diarization is enabled. Only used when enableDiarization is true. @default 2
          - `enablePartials` boolean — This enables partial transcripts during speech recognition. When false, only final transcripts are returned. @default true
          - `maxDelay` number — This sets the maximum delay in milliseconds for partial transcripts. Balances latency and accuracy. @default 3000
          - `customVocabulary` SpeechmaticsCustomVocabularyItem[], required
            - `content` string, required — The word or phrase to add to the custom vocabulary.
            - `soundsLike` string[] — Alternative phonetic representations of how the word might sound. This helps recognition when the word might be pronounced differently.
          - `numeralStyle` 'written' | 'spoken' — This controls how numbers are formatted in the transcription output. @default 'written'
          - `enableEntities` boolean — This enables detection of non-speech audio events like music, applause, and laughter. @default false
          - `enablePunctuation` boolean — This enables automatic punctuation in the transcription output. @default true
          - `enableCapitalization` boolean — This enables automatic capitalization in the transcription output. @default true
          - `endOfTurnSensitivity` number — This is the sensitivity level for end-of-turn detection, which determines when a speaker has finished talking. Higher values are more sensitive. @default 0.5
          - `removeDisfluencies` boolean — This enables removal of disfluencies (um, uh) from the transcript to create cleaner, more professional output. @default false
          - `minimumSpeechDuration` number — This is the minimum duration in seconds for speech segments. Shorter segments will be filtered out. Helps remove noise and improve accuracy. @default 0.0
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - TalkscriberTranscriber
          - `provider` 'talkscriber', required — This is the transcription provider that will be used.
          - `model` 'whisper' — This is the model that will be used for the transcription.
          - `language` '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' — 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
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - OpenAITranscriber
          - `provider` 'openai', required — This is the transcription provider that will be used.
          - `model` 'gpt-4o-transcribe' | 'gpt-4o-mini-transcribe', required — This is the model that will be used for the transcription.
          - `language` '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' — This is the language that will be set for the transcription.
          - `fallbackPlan` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
        - CartesiaTranscriber
          - `provider` 'cartesia', required
          - `model` 'ink-whisper'
          - `language` '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` FallbackTranscriberPlan
            - `transcribers` union[], required
              - …
      - `model` union — These are the options for the assistant's LLM.
        - AnthropicModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` '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' | 'claude-sonnet-4-5-20250929', required — The specific Anthropic/Claude model that will be used.
          - `provider` 'anthropic', required — The provider identifier for Anthropic.
          - `thinking` AnthropicThinkingConfig
            - `type` 'enabled', required
            - `budgetTokens` number, required — The maximum number of tokens to allocate for thinking. Must be between 1024 and 100000 tokens.
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - AnyscaleModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'anyscale', required
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - CerebrasModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'llama3.1-8b' | 'llama-3.3-70b', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `provider` 'cerebras', required
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - CustomLLMModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'custom-llm', required — This is the provider that will be used for the model. Any service, including your own server, that is compatible with the OpenAI API can be used.
          - `metadataSendMode` 'off' | 'variable' | 'destructured' — 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`.
          - `headers` object — Custom headers to send with requests. These headers can override default OpenAI headers except for Authorization (which should be specified using a custom-llm credential).
          - `url` string, required — These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1
          - `wordLevelConfidenceEnabled` boolean — This determines whether the transcriber's word level confidence is sent in requests to the custom provider. Default is false. This only works for Deepgram transcribers.
          - `timeoutSeconds` number — This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds.
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - DeepInfraModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `provider` 'deepinfra', required
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - DeepSeekModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'deepseek-chat' | 'deepseek-reasoner', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `provider` 'deep-seek', required
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
        - GoogleModel
          - `messages` OpenAIMessage[] — This is the starting state for the conversation.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
            - union
              - …
          - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
          - `knowledgeBase` CreateCustomKnowledgeBaseDTO
            - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
            - `server` Server, required
              - …
          - `model` 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-lite' | '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-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', required — This is the Google model that will be used.
          - `provider` 'google', required
          - `realtimeConfig` GoogleRealtimeConfig
            - `topP` number — This is the nucleus sampling parameter that controls the cumulative probability of tokens considered during text generation. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
            - `topK` number — This is the top-k sampling parameter that limits the number of highest probability tokens considered during text generation. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
            - `presencePenalty` number — This is the presence penalty parameter that influences the model's likelihood to repeat information by penalizing tokens based on their presence in the text. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
            - `frequencyPenalty` number — This is the frequency penalty parameter that influences the model's likelihood to repeat tokens by penalizing them based on their frequency in the text. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
            - `speechConfig` GeminiMultimodalLiveSpeechConfig
              - …
          - `temperature` number — This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
          - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
          - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
          - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
- … truncated; see the full OpenAPI document linked below

## Changes

> 20 revisions in range; 4 could not be searched.

- **2025-10-03** `b66bf0e7c5d0` — 714 breaking, 435 warning, 5514 info
  - added the new required request property `assistant/allOf[#/components/schemas/CreateAssistantDTO]/transcriber/oneOf[subschema #10: OpenAITranscriber]/fallbackPlan/allOf[#/components/schemas/FallbackTranscriberPlan]/transcribers/items/oneOf[subschema #9: Speechmatics]/customVocabulary`
  - added the new required request property `assistant/allOf[#/components/schemas/CreateAssistantDTO]/transcriber/oneOf[subschema #11: CartesiaTranscriber]/fallbackPlan/allOf[#/components/schemas/FallbackTranscriberPlan]/transcribers/items/oneOf[subschema #9: Speechmatics]/customVocabulary`
  - added the new required request property `assistant/allOf[#/components/schemas/CreateAssistantDTO]/transcriber/oneOf[subschema #1: AssemblyAITranscriber]/fallbackPlan/allOf[#/components/schemas/FallbackTranscriberPlan]/transcribers/items/oneOf[subschema #9: Speechmatics]/customVocabulary`
  - added the new required request property `assistant/allOf[#/components/schemas/CreateAssistantDTO]/transcriber/oneOf[subschema #2: AzureSpeechTranscriber]/fallbackPlan/allOf[#/components/schemas/FallbackTranscriberPlan]/transcribers/items/oneOf[subschema #9: Speechmatics]/customVocabulary`
  - …6659 more
  - …this revision’s changelog is incomplete

[Full history](https://skmtc.dev/vapiai/apis/vapi-api/changes/call/post.md)

---

[API](https://skmtc.dev/vapiai/apis/vapi-api.md) · [All operations](https://skmtc.dev/vapiai/apis/vapi-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/vapiai/vapi-api/revisions/b66bf0e7c5d0/schema)
