openapi: 3.0.0
info:
title: Vapi Squads API
description: Vapi API — Squads resource. Voice AI for developers.
version: '1.0'
contact:
name: Vapi
url: https://vapi.ai
servers:
- url: https://api.vapi.ai
security:
- bearer: []
tags:
- name: Squads
description: Squads endpoints.
paths:
/squad:
post:
operationId: SquadController_create
summary: Create Squad
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSquadDTO'
responses:
'201':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Squad'
tags:
- Squads
security:
- bearer: []
get:
operationId: SquadController_findAll
summary: List Squads
parameters:
- name: limit
required: false
in: query
description: This is the maximum number of items to return. Defaults to 100.
schema:
minimum: 0
maximum: 1000
type: number
- name: createdAtGt
required: false
in: query
description: This will return items where the createdAt is greater than the specified value.
schema:
format: date-time
type: string
- name: createdAtLt
required: false
in: query
description: This will return items where the createdAt is less than the specified value.
schema:
format: date-time
type: string
- name: createdAtGe
required: false
in: query
description: This will return items where the createdAt is greater than or equal to the specified value.
schema:
format: date-time
type: string
- name: createdAtLe
required: false
in: query
description: This will return items where the createdAt is less than or equal to the specified value.
schema:
format: date-time
type: string
- name: updatedAtGt
required: false
in: query
description: This will return items where the updatedAt is greater than the specified value.
schema:
format: date-time
type: string
- name: updatedAtLt
required: false
in: query
description: This will return items where the updatedAt is less than the specified value.
schema:
format: date-time
type: string
- name: updatedAtGe
required: false
in: query
description: This will return items where the updatedAt is greater than or equal to the specified value.
schema:
format: date-time
type: string
- name: updatedAtLe
required: false
in: query
description: This will return items where the updatedAt is less than or equal to the specified value.
schema:
format: date-time
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Squad'
tags:
- Squads
security:
- bearer: []
/squad/{id}:
get:
operationId: SquadController_findOne
summary: Get Squad
parameters:
- name: id
required: true
in: path
description: The unique identifier for the resource.
schema:
format: uuid
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Squad'
tags:
- Squads
security:
- bearer: []
patch:
operationId: SquadController_update
summary: Update Squad
parameters:
- name: id
required: true
in: path
description: The unique identifier for the resource.
schema:
format: uuid
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateSquadDTO'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Squad'
tags:
- Squads
security:
- bearer: []
delete:
operationId: SquadController_remove
summary: Delete Squad
parameters:
- name: id
required: true
in: path
description: The unique identifier for the resource.
schema:
format: uuid
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Squad'
tags:
- Squads
security:
- bearer: []
components:
securitySchemes:
bearer:
scheme: bearer
bearerFormat: Bearer
type: http
description: Retrieve your API Key from [Dashboard](dashboard.vapi.ai).
schemas:
AWSIAMCredentialsAuthenticationPlan:
type: object
properties:
type:
type: string
enum:
- aws-iam
awsAccessKeyId:
type: string
description: AWS Access Key ID. This is not returned in the API.
maxLength: 128
awsSecretAccessKey:
type: string
description: AWS Secret Access Key. This is not returned in the API.
maxLength: 256
required:
- type
- awsAccessKeyId
- awsSecretAccessKey
AWSStsAuthenticationPlan:
type: object
properties:
type:
type: string
description: This is the type of authentication plan
enum:
- aws-sts
roleArn:
type: string
description: This is the role ARN for the AWS credential
externalId:
type: string
description: Optional external ID for additional security in the role trust policy.
maxLength: 256
required:
- type
- roleArn
AnalysisPlan:
type: object
properties:
minMessagesThreshold:
type: number
description: 'The minimum number of messages required to run the analysis plan.
If the number of messages is less than this, analysis will be skipped.
@default 2'
deprecated: true
minimum: 0
summaryPlan:
description: This is the plan for generating the summary of the call. This outputs to `call.analysis.summary`.
deprecated: true
allOf:
- $ref: '#/components/schemas/SummaryPlan'
structuredDataPlan:
description: This is the plan for generating the structured data from the call. This outputs to `call.analysis.structuredData`.
deprecated: true
allOf:
- $ref: '#/components/schemas/StructuredDataPlan'
structuredDataMultiPlan:
description: This is an array of structured data plan catalogs. Each entry includes a `key` and a `plan` for generating
the structured data from the call. This outputs to `call.analysis.structuredDataMulti`.
deprecated: true
type: array
items:
$ref: '#/components/schemas/StructuredDataMultiPlan'
successEvaluationPlan:
description: This is the plan for generating the success evaluation of the call. This outputs to `call.analysis.successEvaluation`.
deprecated: true
allOf:
- $ref: '#/components/schemas/SuccessEvaluationPlan'
outcomeIds:
description: 'This is an array of outcome UUIDs to be calculated during analysis.
The outcomes will be calculated and stored in `call.analysis.outcomes`.'
deprecated: true
type: array
items:
type: string
AnthropicBedrockModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
provider:
type: string
description: The provider identifier for Anthropic via AWS Bedrock.
enum:
- anthropic-bedrock
model:
type: string
description: The specific Anthropic/Claude model that will be used via Bedrock.
enum:
- claude-3-opus-20240229
- claude-3-sonnet-20240229
- claude-3-haiku-20240307
- claude-3-5-sonnet-20240620
- claude-3-5-sonnet-20241022
- claude-3-5-haiku-20241022
- claude-3-7-sonnet-20250219
- claude-opus-4-20250514
- claude-opus-4-5-20251101
- claude-opus-4-6
- claude-sonnet-4-20250514
- claude-sonnet-4-5-20250929
- claude-sonnet-4-6
- claude-haiku-4-5-20251001
thinking:
description: 'Optional configuration for Anthropic''s thinking feature.
Only applicable for claude-3-7-sonnet-20250219 model.
If provided, maxTokens must be greater than thinking.budgetTokens.'
allOf:
- $ref: '#/components/schemas/AnthropicThinkingConfig'
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- provider
- model
AnthropicModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
model:
type: string
description: The specific Anthropic/Claude model that will be used.
enum:
- claude-3-opus-20240229
- claude-3-sonnet-20240229
- claude-3-haiku-20240307
- claude-3-5-sonnet-20240620
- claude-3-5-sonnet-20241022
- claude-3-5-haiku-20241022
- claude-3-7-sonnet-20250219
- claude-opus-4-20250514
- claude-opus-4-5-20251101
- claude-opus-4-6
- claude-sonnet-4-20250514
- claude-sonnet-4-5-20250929
- claude-sonnet-4-6
- claude-haiku-4-5-20251001
provider:
type: string
description: The provider identifier for Anthropic.
enum:
- anthropic
thinking:
description: 'Optional configuration for Anthropic''s thinking feature.
Only applicable for claude-3-7-sonnet-20250219 model.
If provided, maxTokens must be greater than thinking.budgetTokens.'
allOf:
- $ref: '#/components/schemas/AnthropicThinkingConfig'
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- model
- provider
AnthropicThinkingConfig:
type: object
properties:
type:
type: string
enum:
- enabled
budgetTokens:
type: number
description: 'The maximum number of tokens to allocate for thinking.
Must be between 1024 and 100000 tokens.'
minimum: 1024
maximum: 100000
required:
- type
- budgetTokens
AnyscaleModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
provider:
type: string
enum:
- anyscale
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- provider
- model
ArtifactPlan:
type: object
properties:
recordingEnabled:
type: boolean
description: 'This determines whether assistant''s calls are recorded. Defaults to true.
Usage:
- If you don''t want to record the calls, set this to false.
- If you want to record the calls when `assistant.hipaaEnabled` (deprecated) or `assistant.compliancePlan.hipaaEnabled`
explicity set this to true and make sure to provide S3 or GCP credentials on the Provider Credentials page in
the Dashboard.
You can find the recording at `call.artifact.recordingUrl` and `call.artifact.stereoRecordingUrl` after the call
is ended.
@default true'
example: true
recordingFormat:
type: string
description: 'This determines the format of the recording. Defaults to `wav;l16`.
@default ''wav;l16'''
enum:
- wav;l16
- mp3
recordingUseCustomStorageEnabled:
type: boolean
description: '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'
example: true
videoRecordingEnabled:
type: boolean
description: 'This determines whether the video is recorded during the call. Defaults to false. Only relevant for
`webCall` type.
You can find the video recording at `call.artifact.videoRecordingUrl` after the call is ended.
@default false'
example: false
fullMessageHistoryEnabled:
type: boolean
description: This determines whether the artifact contains the full message history, even after handoff context
engineering. Defaults to false.
example: false
pcapEnabled:
type: boolean
description: 'This determines whether the SIP packet capture is enabled. Defaults to true. Only relevant for `phone`
type calls where phone number''s provider is `vapi` or `byo-phone-number`.
You can find the packet capture at `call.artifact.pcapUrl` after the call is ended.
@default true'
example: true
pcapS3PathPrefix:
type: string
description: 'This is the path where the SIP packet capture will be uploaded. This is only used if you have provided
S3 or GCP credentials on the Provider Credentials page in the Dashboard.
If credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it.
Usage:
- If you want to upload the packet capture to a specific path, set this to the path. Example: `/my-assistant-captures`.
- If you want to upload the packet capture to the root of the bucket, set this to `/`.
@default ''/'''
example: /pcaps
pcapUseCustomStorageEnabled:
type: boolean
description: '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'
example: true
loggingEnabled:
type: boolean
description: 'This determines whether the call logs are enabled. Defaults to true.
@default true'
example: true
loggingUseCustomStorageEnabled:
type: boolean
description: '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'
example: true
transcriptPlan:
description: This is the plan for `call.artifact.transcript`. To disable, set `transcriptPlan.enabled` to false.
allOf:
- $ref: '#/components/schemas/TranscriptPlan'
recordingPath:
type: string
description: 'This is the path where the recording will be uploaded. This is only used if you have provided S3 or
GCP credentials on the Provider Credentials page in the Dashboard.
If credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it.
Usage:
- If you want to upload the recording to a specific path, set this to the path. Example: `/my-assistant-recordings`.
- If you want to upload the recording to the root of the bucket, set this to `/`.
@default ''/'''
structuredOutputIds:
description: '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.'
type: array
items:
type: string
structuredOutputs:
description: 'This is an array of transient structured outputs to be calculated during the call.
The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended.
Use this to provide inline structured output configurations instead of referencing existing ones via structuredOutputIds.'
type: array
items:
$ref: '#/components/schemas/CreateStructuredOutputDTO'
scorecardIds:
description: 'This is an array of scorecard IDs that will be evaluated based on the structured outputs extracted
during the call.
The scorecards will be evaluated and the results will be stored in `call.artifact.scorecards` after the call has
ended.'
type: array
items:
type: string
scorecards:
description: 'This is the array of scorecards that will be evaluated based on the structured outputs extracted during
the call.
The scorecards will be evaluated and the results will be stored in `call.artifact.scorecards` after the call has
ended.'
type: array
items:
$ref: '#/components/schemas/CreateScorecardDTO'
loggingPath:
type: string
description: '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 ''/'''
AssemblyAITranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- assembly-ai
language:
type: string
description: This is the language that will be set for the transcription.
enum:
- multi
- en
confidenceThreshold:
type: number
description: 'Transcripts below this confidence threshold will be discarded.
@default 0.4'
minimum: 0
maximum: 1
example: 0.4
formatTurns:
type: boolean
description: 'This enables formatting of transcripts.
@default true'
example: true
endOfTurnConfidenceThreshold:
type: number
description: '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'
minimum: 0
maximum: 1
example: 0.7
minEndOfTurnSilenceWhenConfident:
type: number
description: 'This is the minimum end of turn silence when confident in milliseconds.
Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set.
@default 160'
minimum: 0
example: 160
wordFinalizationMaxWaitTime:
type: number
deprecated: true
minimum: 0
example: 160
maxTurnSilence:
type: number
description: 'This is the maximum turn silence time in milliseconds.
Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set.
@default 400'
minimum: 0
example: 400
vadAssistedEndpointingEnabled:
type: boolean
description: 'Use VAD to assist with endpointing decisions from the transcriber.
When enabled, transcriber endpointing will be buffered if VAD detects the user is still speaking, preventing premature
turn-taking.
When disabled, transcriber endpointing will be used immediately regardless of VAD state, allowing for quicker
but more aggressive turn-taking.
Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set.
@default true'
example: true
speechModel:
type: string
description: 'This is the speech model used for the streaming session.
Note: Keyterms prompting is not supported with multilingual streaming.
@default ''universal-streaming-english'''
enum:
- universal-streaming-english
- universal-streaming-multilingual
realtimeUrl:
type: string
description: The WebSocket URL that the transcriber connects to.
wordBoost:
description: Add up to 2500 characters of custom vocabulary.
type: array
items:
type: string
maxLength: 2500
keytermsPrompt:
description: '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.'
type: array
items:
type: string
maxLength: 50
endUtteranceSilenceThreshold:
type: number
description: The duration of the end utterance silence threshold in milliseconds.
disablePartialTranscripts:
type: boolean
description: 'Disable partial transcripts.
Set to `true` to not receive partial transcripts. Defaults to `false`.'
fallbackPlan:
description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider
fails.
allOf:
- $ref: '#/components/schemas/FallbackTranscriberPlan'
required:
- provider
AssistantCustomEndpointingRule:
type: object
properties:
type:
type: string
description: 'This endpointing rule is based on the last assistant message before customer started speaking.
Flow:
- Assistant speaks
- Customer starts speaking
- Customer transcription comes in
- This rule is evaluated on the last assistant message
- If a match is found based on `regex`, the endpointing timeout is set to `timeoutSeconds`
Usage:
- If you have yes/no questions in your use case like "are you interested in a loan?", you can set a shorter timeout.
- If you have questions where the customer may pause to look up information like "what''s my account number?",
you can set a longer timeout.'
enum:
- assistant
regex:
type: string
description: 'This is the regex pattern to match.
Note:
- This works by using the `RegExp.test` method in Node.JS. Eg. `/hello/.test("hello there")` will return `true`.
Hot tip:
- In JavaScript, escape `\` when sending the regex pattern. Eg. `"hello\sthere"` will be sent over the wire as
`"hellosthere"`. Send `"hello\\sthere"` instead.
- `RegExp.test` does substring matching, so `/cat/.test("I love cats")` will return `true`. To do full string
matching, send "^cat$".'
regexOptions:
description: 'These are the options for the regex match. Defaults to all disabled.
@default []'
type: array
items:
$ref: '#/components/schemas/RegexOption'
timeoutSeconds:
type: number
description: This is the endpointing timeout in seconds, if the rule is matched.
minimum: 0
maximum: 15
required:
- type
- regex
- timeoutSeconds
AssistantMessage:
type: object
properties:
role:
type: string
description: This is the role of the message author
default: assistant
enum:
- assistant
content:
type: string
description: This is the content of the assistant message
maxLength: 10000
refusal:
type: string
description: This is the refusal message generated by the model
maxLength: 10000
tool_calls:
description: This is the tool calls generated by the model
type: array
items:
$ref: '#/components/schemas/ToolCall'
name:
type: string
description: This is an optional name for the participant
maxLength: 40
metadata:
type: object
description: This is an optional metadata for the message
required:
- role
AssistantOverrides:
type: object
properties:
transcriber:
description: These are the options for the assistant's transcriber.
oneOf:
- $ref: '#/components/schemas/AssemblyAITranscriber'
title: AssemblyAITranscriber
- $ref: '#/components/schemas/AzureSpeechTranscriber'
title: AzureSpeechTranscriber
- $ref: '#/components/schemas/CustomTranscriber'
title: CustomTranscriber
- $ref: '#/components/schemas/DeepgramTranscriber'
title: DeepgramTranscriber
- $ref: '#/components/schemas/ElevenLabsTranscriber'
title: ElevenLabsTranscriber
- $ref: '#/components/schemas/GladiaTranscriber'
title: GladiaTranscriber
- $ref: '#/components/schemas/GoogleTranscriber'
title: GoogleTranscriber
- $ref: '#/components/schemas/SpeechmaticsTranscriber'
title: SpeechmaticsTranscriber
- $ref: '#/components/schemas/TalkscriberTranscriber'
title: TalkscriberTranscriber
- $ref: '#/components/schemas/OpenAITranscriber'
title: OpenAITranscriber
- $ref: '#/components/schemas/CartesiaTranscriber'
title: CartesiaTranscriber
- $ref: '#/components/schemas/SonioxTranscriber'
title: SonioxTranscriber
- $ref: '#/components/schemas/XaiTranscriber'
title: XaiTranscriber
model:
description: These are the options for the assistant's LLM.
oneOf:
- $ref: '#/components/schemas/AnthropicModel'
title: Anthropic
- $ref: '#/components/schemas/AnthropicBedrockModel'
title: AnthropicBedrock
- $ref: '#/components/schemas/AnyscaleModel'
title: Anyscale
- $ref: '#/components/schemas/CerebrasModel'
title: Cerebras
- $ref: '#/components/schemas/CustomLLMModel'
title: CustomLLM
- $ref: '#/components/schemas/DeepInfraModel'
title: DeepInfra
- $ref: '#/components/schemas/DeepSeekModel'
title: DeepSeek
- $ref: '#/components/schemas/GoogleModel'
title: Google
- $ref: '#/components/schemas/GroqModel'
title: Groq
- $ref: '#/components/schemas/InflectionAIModel'
title: InflectionAI
- $ref: '#/components/schemas/MinimaxLLMModel'
title: MiniMaxLLM
- $ref: '#/components/schemas/OpenAIModel'
title: OpenAI
- $ref: '#/components/schemas/OpenRouterModel'
title: OpenRouter
- $ref: '#/components/schemas/PerplexityAIModel'
title: PerplexityAI
- $ref: '#/components/schemas/TogetherAIModel'
title: Together
- $ref: '#/components/schemas/XaiModel'
title: XAI
voice:
description: These are the options for the assistant's voice.
oneOf:
- $ref: '#/components/schemas/AzureVoice'
title: AzureVoice
- $ref: '#/components/schemas/CartesiaVoice'
title: CartesiaVoice
- $ref: '#/components/schemas/CustomVoice'
title: CustomVoice
- $ref: '#/components/schemas/DeepgramVoice'
title: DeepgramVoice
- $ref: '#/components/schemas/ElevenLabsVoice'
title: ElevenLabsVoice
- $ref: '#/components/schemas/HumeVoice'
title: HumeVoice
- $ref: '#/components/schemas/LMNTVoice'
title: LMNTVoice
- $ref: '#/components/schemas/NeuphonicVoice'
title: NeuphonicVoice
- $ref: '#/components/schemas/OpenAIVoice'
title: OpenAIVoice
- $ref: '#/components/schemas/PlayHTVoice'
title: PlayHTVoice
- $ref: '#/components/schemas/WellSaidVoice'
title: WellSaidVoice
- $ref: '#/components/schemas/RimeAIVoice'
title: RimeAIVoice
- $ref: '#/components/schemas/SmallestAIVoice'
title: SmallestAIVoice
- $ref: '#/components/schemas/TavusVoice'
title: TavusVoice
- $ref: '#/components/schemas/VapiVoice'
title: VapiVoice
- $ref: '#/components/schemas/SesameVoice'
title: SesameVoice
- $ref: '#/components/schemas/InworldVoice'
title: InworldVoice
- $ref: '#/components/schemas/MinimaxVoice'
title: MinimaxVoice
- $ref: '#/components/schemas/XaiVoice'
title: XaiVoice
firstMessage:
type: string
description: 'This is the first message that the assistant will say. This can also be a URL to a containerized audio
file (mp3, wav, etc.).
If unspecified, assistant will wait for user to speak and use the model to respond once they speak.'
example: Hello! How can I help you today?
firstMessageInterruptionsEnabled:
type: boolean
default: false
firstMessageMode:
type: string
description: 'This is the mode for the first message. Default is ''assistant-speaks-first''.
Use:
- ''assistant-speaks-first'' to have the assistant speak first.
- ''assistant-waits-for-user'' to have the assistant wait for the user to speak first.
- ''assistant-speaks-first-with-model-generated-message'' to have the assistant speak first with a message generated
by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad
transfer points).
@default ''assistant-speaks-first'''
enum:
- assistant-speaks-first
- assistant-speaks-first-with-model-generated-message
- assistant-waits-for-user
example: assistant-speaks-first
voicemailDetection:
description: 'These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection
can be configured using the model.tools=[VoicemailTool].
By default, voicemail detection is disabled.'
oneOf:
- type: string
enum:
- 'off'
- $ref: '#/components/schemas/GoogleVoicemailDetectionPlan'
title: Google
- $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan'
title: OpenAI
- $ref: '#/components/schemas/TwilioVoicemailDetectionPlan'
title: Twilio
- $ref: '#/components/schemas/VapiVoicemailDetectionPlan'
title: Vapi
clientMessages:
type: array
enum:
- conversation-update
- assistant.speechStarted
- function-call
- function-call-result
- hang
- language-changed
- metadata
- model-output
- speech-update
- status-update
- transcript
- tool-calls
- tool-calls-result
- tool.completed
- transfer-update
- user-interrupted
- voice-input
- workflow.node.started
- assistant.started
example:
- conversation-update
- function-call
- hang
- model-output
- speech-update
- status-update
- transfer-update
- transcript
- tool-calls
- user-interrupted
- voice-input
- workflow.node.started
- assistant.started
description: These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started.
You can check the shape of the messages in ClientMessage schema.
items:
type: string
enum:
- conversation-update
- assistant.speechStarted
- function-call
- function-call-result
- hang
- language-changed
- metadata
- model-output
- speech-update
- status-update
- transcript
- tool-calls
- tool-calls-result
- tool.completed
- transfer-update
- user-interrupted
- voice-input
- workflow.node.started
- assistant.started
serverMessages:
type: array
enum:
- assistant.started
- assistant.speechStarted
- conversation-update
- end-of-call-report
- function-call
- hang
- language-changed
- language-change-detected
- model-output
- phone-call-control
- speech-update
- status-update
- transcript
- transcript[transcriptType="final"]
- tool-calls
- transfer-destination-request
- handoff-destination-request
- transfer-update
- user-interrupted
- voice-input
- chat.created
- chat.deleted
- session.created
- session.updated
- session.deleted
- call.deleted
- call.delete.failed
example:
- conversation-update
- end-of-call-report
- function-call
- hang
- speech-update
- status-update
- tool-calls
- transfer-destination-request
- handoff-destination-request
- user-interrupted
- assistant.started
description: These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started.
You can check the shape of the messages in ServerMessage schema.
items:
type: string
enum:
- assistant.started
- assistant.speechStarted
- conversation-update
- end-of-call-report
- function-call
- hang
- language-changed
- language-change-detected
- model-output
- phone-call-control
- speech-update
- status-update
- transcript
- transcript[transcriptType="final"]
- tool-calls
- transfer-destination-request
- handoff-destination-request
- transfer-update
- user-interrupted
- voice-input
- chat.created
- chat.deleted
- session.created
- session.updated
- session.deleted
- call.deleted
- call.delete.failed
maxDurationSeconds:
type: number
description: 'This is the maximum number of seconds that the call will last. When the call reaches this duration,
it will be ended.
@default 600 (10 minutes)'
minimum: 10
maximum: 43200
example: 600
backgroundSound:
description: 'This is the background sound in the call. Default for phone calls is ''office'' and default for web
calls is ''off''.
You can also provide a custom sound by providing a URL to an audio file.'
oneOf:
- type: string
enum:
- 'off'
- office
example: office
- type: string
format: uri
example: https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3
modelOutputInMessagesEnabled:
type: boolean
description: 'This determines whether the model''s output is used in conversation history rather than the transcription
of assistant''s speech.
@default false'
example: false
transportConfigurations:
type: array
description: These are the configurations to be passed to the transport providers of assistant's calls, like Twilio.
You can store multiple configurations for different transport providers. For a call, only the configuration matching
the call transport provider is used.
items:
oneOf:
- $ref: '#/components/schemas/TransportConfigurationTwilio'
title: Twilio
observabilityPlan:
description: 'This is the plan for observability of assistant''s calls.
Currently, only Langfuse is supported.'
oneOf:
- $ref: '#/components/schemas/LangfuseObservabilityPlan'
title: Langfuse
allOf:
- $ref: '#/components/schemas/LangfuseObservabilityPlan'
credentials:
type: array
description: These are dynamic credentials that will be used for the assistant calls. By default, all the credentials
are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials
override existing credentials.
items:
oneOf:
- $ref: '#/components/schemas/CreateAnthropicCredentialDTO'
title: AnthropicCredential
- $ref: '#/components/schemas/CreateAnthropicBedrockCredentialDTO'
title: AnthropicBedrockCredential
- $ref: '#/components/schemas/CreateAnyscaleCredentialDTO'
title: AnyscaleCredential
- $ref: '#/components/schemas/CreateAssemblyAICredentialDTO'
title: AssemblyAICredential
- $ref: '#/components/schemas/CreateAzureCredentialDTO'
title: AzureCredential
- $ref: '#/components/schemas/CreateAzureOpenAICredentialDTO'
title: AzureOpenAICredential
- $ref: '#/components/schemas/CreateByoSipTrunkCredentialDTO'
title: ByoSipTrunkCredential
- $ref: '#/components/schemas/CreateCartesiaCredentialDTO'
title: CartesiaCredential
- $ref: '#/components/schemas/CreateCerebrasCredentialDTO'
title: CerebrasCredential
- $ref: '#/components/schemas/CreateCloudflareCredentialDTO'
title: CloudflareCredential
- $ref: '#/components/schemas/CreateCustomLLMCredentialDTO'
title: CustomLLMCredential
- $ref: '#/components/schemas/CreateDeepgramCredentialDTO'
title: DeepgramCredential
- $ref: '#/components/schemas/CreateDeepInfraCredentialDTO'
title: DeepInfraCredential
- $ref: '#/components/schemas/CreateDeepSeekCredentialDTO'
title: DeepSeekCredential
- $ref: '#/components/schemas/CreateElevenLabsCredentialDTO'
title: ElevenLabsCredential
- $ref: '#/components/schemas/CreateGcpCredentialDTO'
title: GcpCredential
- $ref: '#/components/schemas/CreateGladiaCredentialDTO'
title: GladiaCredential
- $ref: '#/components/schemas/CreateGoHighLevelCredentialDTO'
title: GhlCredential
- $ref: '#/components/schemas/CreateGoogleCredentialDTO'
title: GoogleCredential
- $ref: '#/components/schemas/CreateGroqCredentialDTO'
title: GroqCredential
- $ref: '#/components/schemas/CreateHumeCredentialDTO'
title: HumeCredential
- $ref: '#/components/schemas/CreateInflectionAICredentialDTO'
title: InflectionAICredential
- $ref: '#/components/schemas/CreateLangfuseCredentialDTO'
title: LangfuseCredential
- $ref: '#/components/schemas/CreateLmntCredentialDTO'
title: LmntCredential
- $ref: '#/components/schemas/CreateMakeCredentialDTO'
title: MakeCredential
- $ref: '#/components/schemas/CreateMistralCredentialDTO'
title: MistralCredential
- $ref: '#/components/schemas/CreateNeuphonicCredentialDTO'
title: NeuphonicCredential
- $ref: '#/components/schemas/CreateOpenAICredentialDTO'
title: OpenAICredential
- $ref: '#/components/schemas/CreateOpenRouterCredentialDTO'
title: OpenRouterCredential
- $ref: '#/components/schemas/CreatePerplexityAICredentialDTO'
title: PerplexityAICredential
- $ref: '#/components/schemas/CreatePlayHTCredentialDTO'
title: PlayHTCredential
- $ref: '#/components/schemas/CreateRimeAICredentialDTO'
title: RimeAICredential
- $ref: '#/components/schemas/CreateRunpodCredentialDTO'
title: RunpodCredential
- $ref: '#/components/schemas/CreateS3CredentialDTO'
title: S3Credential
- $ref: '#/components/schemas/CreateSmallestAICredentialDTO'
title: SmallestAICredential
- $ref: '#/components/schemas/CreateSpeechmaticsCredentialDTO'
title: SpeechmaticsCredential
- $ref: '#/components/schemas/CreateSonioxCredentialDTO'
title: SonioxCredential
- $ref: '#/components/schemas/CreateSupabaseCredentialDTO'
title: SupabaseCredential
- $ref: '#/components/schemas/CreateTavusCredentialDTO'
title: TavusCredential
- $ref: '#/components/schemas/CreateTogetherAICredentialDTO'
title: TogetherAICredential
- $ref: '#/components/schemas/CreateTwilioCredentialDTO'
title: TwilioCredential
- $ref: '#/components/schemas/CreateVonageCredentialDTO'
title: VonageCredential
- $ref: '#/components/schemas/CreateWebhookCredentialDTO'
title: WebhookCredential
- $ref: '#/components/schemas/CreateCustomCredentialDTO'
title: CustomCredential
- $ref: '#/components/schemas/CreateXAiCredentialDTO'
title: XAiCredential
- $ref: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO'
title: GoogleCalendarOAuth2ClientCredential
- $ref: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO'
title: GoogleCalendarOAuth2AuthorizationCredential
- $ref: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO'
title: GoogleSheetsOAuth2AuthorizationCredential
- $ref: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO'
title: SlackOAuth2AuthorizationCredential
- $ref: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO'
title: GoHighLevelMCPCredential
- $ref: '#/components/schemas/CreateInworldCredentialDTO'
title: InworldCredential
- $ref: '#/components/schemas/CreateMinimaxCredentialDTO'
title: MinimaxCredential
- $ref: '#/components/schemas/CreateWellSaidCredentialDTO'
title: WellSaidCredential
- $ref: '#/components/schemas/CreateEmailCredentialDTO'
title: EmailCredential
- $ref: '#/components/schemas/CreateSlackWebhookCredentialDTO'
title: SlackWebhookCredential
discriminator:
propertyName: provider
mapping:
11labs: '#/components/schemas/CreateElevenLabsCredentialDTO'
anthropic: '#/components/schemas/CreateAnthropicCredentialDTO'
anthropic-bedrock: '#/components/schemas/CreateAnthropicBedrockCredentialDTO'
anyscale: '#/components/schemas/CreateAnyscaleCredentialDTO'
assembly-ai: '#/components/schemas/CreateAssemblyAICredentialDTO'
azure-openai: '#/components/schemas/CreateAzureOpenAICredentialDTO'
azure: '#/components/schemas/CreateAzureCredentialDTO'
byo-sip-trunk: '#/components/schemas/CreateByoSipTrunkCredentialDTO'
cartesia: '#/components/schemas/CreateCartesiaCredentialDTO'
cerebras: '#/components/schemas/CreateCerebrasCredentialDTO'
cloudflare: '#/components/schemas/CreateCloudflareCredentialDTO'
custom-llm: '#/components/schemas/CreateCustomLLMCredentialDTO'
deepgram: '#/components/schemas/CreateDeepgramCredentialDTO'
deepinfra: '#/components/schemas/CreateDeepInfraCredentialDTO'
deep-seek: '#/components/schemas/CreateDeepSeekCredentialDTO'
gcp: '#/components/schemas/CreateGcpCredentialDTO'
gladia: '#/components/schemas/CreateGladiaCredentialDTO'
gohighlevel: '#/components/schemas/CreateGoHighLevelCredentialDTO'
google: '#/components/schemas/CreateGoogleCredentialDTO'
groq: '#/components/schemas/CreateGroqCredentialDTO'
inflection-ai: '#/components/schemas/CreateInflectionAICredentialDTO'
langfuse: '#/components/schemas/CreateLangfuseCredentialDTO'
lmnt: '#/components/schemas/CreateLmntCredentialDTO'
make: '#/components/schemas/CreateMakeCredentialDTO'
openai: '#/components/schemas/CreateOpenAICredentialDTO'
openrouter: '#/components/schemas/CreateOpenRouterCredentialDTO'
perplexity-ai: '#/components/schemas/CreatePerplexityAICredentialDTO'
playht: '#/components/schemas/CreatePlayHTCredentialDTO'
rime-ai: '#/components/schemas/CreateRimeAICredentialDTO'
runpod: '#/components/schemas/CreateRunpodCredentialDTO'
s3: '#/components/schemas/CreateS3CredentialDTO'
supabase: '#/components/schemas/CreateSupabaseCredentialDTO'
smallest-ai: '#/components/schemas/CreateSmallestAICredentialDTO'
tavus: '#/components/schemas/CreateTavusCredentialDTO'
together-ai: '#/components/schemas/CreateTogetherAICredentialDTO'
twilio: '#/components/schemas/CreateTwilioCredentialDTO'
vonage: '#/components/schemas/CreateVonageCredentialDTO'
webhook: '#/components/schemas/CreateWebhookCredentialDTO'
custom-credential: '#/components/schemas/CreateCustomCredentialDTO'
xai: '#/components/schemas/CreateXAiCredentialDTO'
neuphonic: '#/components/schemas/CreateNeuphonicCredentialDTO'
hume: '#/components/schemas/CreateHumeCredentialDTO'
mistral: '#/components/schemas/CreateMistralCredentialDTO'
speechmatics: '#/components/schemas/CreateSpeechmaticsCredentialDTO'
soniox: '#/components/schemas/CreateSonioxCredentialDTO'
google.calendar.oauth2-client: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO'
google.calendar.oauth2-authorization: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO'
google.sheets.oauth2-authorization: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO'
slack.oauth2-authorization: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO'
ghl.oauth2-authorization: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO'
inworld: '#/components/schemas/CreateInworldCredentialDTO'
minimax: '#/components/schemas/CreateMinimaxCredentialDTO'
wellsaid: '#/components/schemas/CreateWellSaidCredentialDTO'
email: '#/components/schemas/CreateEmailCredentialDTO'
slack-webhook: '#/components/schemas/CreateSlackWebhookCredentialDTO'
hooks:
type: array
description: This is a set of actions that will be performed on certain events.
items:
oneOf:
- $ref: '#/components/schemas/CallHookCallEnding'
title: CallHookCallEnding
- $ref: '#/components/schemas/CallHookAssistantSpeechInterrupted'
title: CallHookAssistantSpeechInterrupted
- $ref: '#/components/schemas/CallHookCustomerSpeechInterrupted'
title: CallHookCustomerSpeechInterrupted
- $ref: '#/components/schemas/CallHookCustomerSpeechTimeout'
title: CallHookCustomerSpeechTimeout
- $ref: '#/components/schemas/SessionCreatedHook'
title: SessionCreatedHook
tools:append:
type: array
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
variableValues:
type: object
description: "These are values that will be used to replace the template variables in the assistant messages and\
\ other text-based fields.\nThis uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html\n\n\
So for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`.\n`{{\"now\" | date:\
\ \"%b %d, %Y, %I:%M %p\", \"America/New_York\"}}` will be replaced with the current date and time in New York.\n\
\ Some VAPI reserved defaults:\n - *customer* - the customer object"
name:
type: string
description: 'This is the name of the assistant.
This is required when you want to transfer between assistants in a call.'
maxLength: 40
voicemailMessage:
type: string
description: 'This is the message that the assistant will say if the call is forwarded to voicemail.
If unspecified, it will hang up.'
maxLength: 1000
endCallMessage:
type: string
description: 'This is the message that the assistant will say if it ends the call.
If unspecified, it will hang up without saying anything.'
maxLength: 1000
endCallPhrases:
description: This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case
insensitive.
type: array
items:
type: string
maxLength: 140
minLength: 2
compliancePlan:
$ref: '#/components/schemas/CompliancePlan'
metadata:
type: object
description: This is for metadata you want to store on the assistant.
backgroundSpeechDenoisingPlan:
description: 'This enables filtering of noise and background speech while the user is talking.
Features:
- Smart denoising using Krisp
- Fourier denoising
Smart denoising can be combined with or used independently of Fourier denoising.
Order of precedence:
- Smart denoising
- Fourier denoising'
allOf:
- $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan'
analysisPlan:
description: This is the plan for analysis of assistant's calls. Stored in `call.analysis`.
deprecated: true
allOf:
- $ref: '#/components/schemas/AnalysisPlan'
artifactPlan:
description: This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`.
allOf:
- $ref: '#/components/schemas/ArtifactPlan'
startSpeakingPlan:
description: 'This is the plan for when the assistant should start talking.
You should configure this if you''re running into these issues:
- The assistant is too slow to start talking after the customer is done speaking.
- The assistant is too fast to start talking after the customer is done speaking.
- The assistant is so fast that it''s actually interrupting the customer.'
allOf:
- $ref: '#/components/schemas/StartSpeakingPlan'
stopSpeakingPlan:
description: 'This is the plan for when assistant should stop talking on customer interruption.
You should configure this if you''re running into these issues:
- The assistant is too slow to recognize customer''s interruption.
- The assistant is too fast to recognize customer''s interruption.
- The assistant is getting interrupted by phrases that are just acknowledgments.
- The assistant is getting interrupted by background noises.
- The assistant is not properly stopping -- it starts talking right after getting interrupted.'
allOf:
- $ref: '#/components/schemas/StopSpeakingPlan'
monitorPlan:
description: 'This is the plan for real-time monitoring of the assistant''s calls.
Usage:
- To enable live listening of the assistant''s calls, set `monitorPlan.listenEnabled` to `true`.
- To enable live control of the assistant''s calls, set `monitorPlan.controlEnabled` to `true`.
- To attach monitors to the assistant, set `monitorPlan.monitorIds` to the set of monitor ids.'
allOf:
- $ref: '#/components/schemas/MonitorPlan'
credentialIds:
description: These are the credentials that will be used for the assistant calls. By default, all the credentials
are available for use in the call but you can provide a subset using this.
type: array
items:
type: string
server:
description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape
in ServerMessage schema.
The order of precedence is:
1. assistant.server.url
2. phoneNumber.serverUrl
3. org.serverUrl'
allOf:
- $ref: '#/components/schemas/Server'
keypadInputPlan:
$ref: '#/components/schemas/KeypadInputPlan'
AzureBlobStorageBucketPlan:
type: object
properties:
connectionString:
type: string
description: This is the blob storage connection string for the Azure resource.
containerName:
type: string
description: This is the container name for the Azure blob storage.
path:
type: string
description: 'This is the path where call artifacts will be stored.
Usage:
- To store call artifacts in a specific folder, set this to the full path. Eg. "/folder-name1/folder-name2".
- To store call artifacts in the root of the bucket, leave this blank.
@default "/"'
required:
- connectionString
- containerName
AzureSpeechTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- azure
language:
type: string
description: 'This is the language that will be set for the transcription. The list of languages Azure supports
can be found here: https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt'
enum:
- af-ZA
- am-ET
- ar-AE
- ar-BH
- ar-DZ
- ar-EG
- ar-IL
- ar-IQ
- ar-JO
- ar-KW
- ar-LB
- ar-LY
- ar-MA
- ar-OM
- ar-PS
- ar-QA
- ar-SA
- ar-SY
- ar-TN
- ar-YE
- az-AZ
- bg-BG
- bn-IN
- bs-BA
- ca-ES
- cs-CZ
- cy-GB
- da-DK
- de-AT
- de-CH
- de-DE
- el-GR
- en-AU
- en-CA
- en-GB
- en-GH
- en-HK
- en-IE
- en-IN
- en-KE
- en-NG
- en-NZ
- en-PH
- en-SG
- en-TZ
- en-US
- en-ZA
- es-AR
- es-BO
- es-CL
- es-CO
- es-CR
- es-CU
- es-DO
- es-EC
- es-ES
- es-GQ
- es-GT
- es-HN
- es-MX
- es-NI
- es-PA
- es-PE
- es-PR
- es-PY
- es-SV
- es-US
- es-UY
- es-VE
- et-EE
- eu-ES
- fa-IR
- fi-FI
- fil-PH
- fr-BE
- fr-CA
- fr-CH
- fr-FR
- ga-IE
- gl-ES
- gu-IN
- he-IL
- hi-IN
- hr-HR
- hu-HU
- hy-AM
- id-ID
- is-IS
- it-CH
- it-IT
- ja-JP
- jv-ID
- ka-GE
- kk-KZ
- km-KH
- kn-IN
- ko-KR
- lo-LA
- lt-LT
- lv-LV
- mk-MK
- ml-IN
- mn-MN
- mr-IN
- ms-MY
- mt-MT
- my-MM
- nb-NO
- ne-NP
- nl-BE
- nl-NL
- pa-IN
- pl-PL
- ps-AF
- pt-BR
- pt-PT
- ro-RO
- ru-RU
- si-LK
- sk-SK
- sl-SI
- so-SO
- sq-AL
- sr-RS
- sv-SE
- sw-KE
- sw-TZ
- ta-IN
- te-IN
- th-TH
- tr-TR
- uk-UA
- ur-IN
- uz-UZ
- vi-VN
- wuu-CN
- yue-CN
- zh-CN
- zh-CN-shandong
- zh-CN-sichuan
- zh-HK
- zh-TW
- zu-ZA
segmentationStrategy:
type: string
description: Controls how phrase boundaries are detected, enabling either simple time/silence heuristics or more
advanced semantic segmentation.
enum:
- Default
- Time
- Semantic
segmentationSilenceTimeoutMs:
type: number
description: Duration of detected silence after which the service finalizes a phrase. Configure to adjust sensitivity
to pauses in speech.
minimum: 100
maximum: 5000
segmentationMaximumTimeMs:
type: number
description: Maximum duration a segment can reach before being cut off when using time-based segmentation.
minimum: 20000
maximum: 70000
fallbackPlan:
description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider
fails.
allOf:
- $ref: '#/components/schemas/FallbackTranscriberPlan'
required:
- provider
AzureVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- azure
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum:
- andrew
- brian
- emma
title: Preset Voice Options
- type: string
title: Azure Voice ID
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
speed:
type: number
description: This is the speed multiplier that will be used.
minimum: 0.5
maximum: 2
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
BackgroundSpeechDenoisingPlan:
type: object
properties:
smartDenoisingPlan:
description: Whether smart denoising using Krisp is enabled.
allOf:
- $ref: '#/components/schemas/SmartDenoisingPlan'
fourierDenoisingPlan:
description: 'Whether Fourier denoising is enabled. Note that this is experimental and may not work as expected.
This can be combined with smart denoising, and will be run afterwards.'
allOf:
- $ref: '#/components/schemas/FourierDenoisingPlan'
BackoffPlan:
type: object
properties:
type:
type: object
description: 'This is the type of backoff plan to use. Defaults to fixed.
@default fixed'
enum:
- fixed
- exponential
example: fixed
maxRetries:
type: number
description: 'This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries).
@default 0'
minimum: 0
maximum: 10
example: 0
baseDelaySeconds:
type: number
description: This is the base delay in seconds. For linear backoff, this is the delay between each retry. For exponential
backoff, this is the initial delay.
minimum: 0
maximum: 10
example: 1
excludedStatusCodes:
description: '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.'
example:
- 400
- 401
- 403
- 404
type: array
items:
type: object
required:
- type
- maxRetries
- baseDelaySeconds
BearerAuthenticationPlan:
type: object
properties:
type:
type: string
enum:
- bearer
token:
type: string
description: This is the bearer token value.
headerName:
type: string
description: This is the header name where the bearer token will be sent. Defaults to 'Authorization'.
bearerPrefixEnabled:
type: boolean
description: Whether to include the 'Bearer ' prefix in the header value. Defaults to true.
required:
- type
- token
BothCustomEndpointingRule:
type: object
properties:
type:
type: string
description: 'This endpointing rule is based on both the last assistant message and the current customer message
as they are speaking.
Flow:
- Assistant speaks
- Customer starts speaking
- Customer transcription comes in
- This rule is evaluated on the last assistant message and the current customer transcription
- If assistant message matches `assistantRegex` AND customer message matches `customerRegex`, the endpointing
timeout is set to `timeoutSeconds`
Usage:
- If you want to wait longer while customer is speaking numbers, you can set a longer timeout.'
enum:
- both
assistantRegex:
type: string
description: 'This is the regex pattern to match the assistant''s message.
Note:
- This works by using the `RegExp.test` method in Node.JS. Eg. `/hello/.test("hello there")` will return `true`.
Hot tip:
- In JavaScript, escape `\` when sending the regex pattern. Eg. `"hello\sthere"` will be sent over the wire as
`"hellosthere"`. Send `"hello\\sthere"` instead.
- `RegExp.test` does substring matching, so `/cat/.test("I love cats")` will return `true`. To do full string
matching, send "^cat$".'
assistantRegexOptions:
description: 'These are the options for the assistant''s message regex match. Defaults to all disabled.
@default []'
type: array
items:
$ref: '#/components/schemas/RegexOption'
customerRegex:
type: string
customerRegexOptions:
description: 'These are the options for the customer''s message regex match. Defaults to all disabled.
@default []'
type: array
items:
$ref: '#/components/schemas/RegexOption'
timeoutSeconds:
type: number
description: This is the endpointing timeout in seconds, if the rule is matched.
minimum: 0
maximum: 15
required:
- type
- assistantRegex
- customerRegex
- timeoutSeconds
BucketPlan:
type: object
properties:
name:
type: string
description: This is the name of the bucket.
region:
type: string
description: 'This is the region of the bucket.
Usage:
- If `credential.type` is `aws`, then this is required.
- If `credential.type` is `gcp`, then this is optional since GCP allows buckets to be accessed without a region
but region is required for data residency requirements. Read here: https://cloud.google.com/storage/docs/request-endpoints
This overrides the `credential.region` field if it is provided.'
path:
type: string
description: 'This is the path where call artifacts will be stored.
Usage:
- To store call artifacts in a specific folder, set this to the full path. Eg. "/folder-name1/folder-name2".
- To store call artifacts in the root of the bucket, leave this blank.
@default "/"'
hmacAccessKey:
type: string
description: 'This is the HMAC access key offered by GCP for interoperability with S3 clients. Here is the guide
on how to create: https://cloud.google.com/storage/docs/authentication/managing-hmackeys#console
Usage:
- If `credential.type` is `gcp`, then this is required.
- If `credential.type` is `aws`, then this is not required since credential.awsAccessKeyId is used instead.'
hmacSecret:
type: string
description: 'This is the secret for the HMAC access key. Here is the guide on how to create: https://cloud.google.com/storage/docs/authentication/managing-hmackeys#console
Usage:
- If `credential.type` is `gcp`, then this is required.
- If `credential.type` is `aws`, then this is not required since credential.awsSecretAccessKey is used instead.
Note: This is not returned in the API.'
required:
- name
CallHookAssistantSpeechInterrupted:
type: object
properties:
'on':
type: string
description: This is the event that triggers this hook
enum:
- assistant.speech.interrupted
maxLength: 1000
do:
type: array
description: This is the set of actions to perform when the hook triggers
items:
oneOf:
- $ref: '#/components/schemas/SayHookAction'
title: SayHookAction
- $ref: '#/components/schemas/ToolCallHookAction'
title: ToolCallHookAction
- $ref: '#/components/schemas/MessageAddHookAction'
title: MessageAddHookAction
required:
- 'on'
- do
CallHookCallEnding:
type: object
properties:
'on':
type: string
description: This is the event that triggers this hook
enum:
- call.ending
maxLength: 1000
do:
type: array
description: This is the set of actions to perform when the hook triggers
items:
oneOf:
- $ref: '#/components/schemas/ToolCallHookAction'
title: ToolCallHookAction
- $ref: '#/components/schemas/MessageAddHookAction'
title: MessageAddHookAction
filters:
description: This is the set of filters that must match for the hook to trigger
type: array
items:
$ref: '#/components/schemas/CallHookFilter'
required:
- 'on'
- do
CallHookCustomerSpeechInterrupted:
type: object
properties:
'on':
type: string
description: This is the event that triggers this hook
enum:
- customer.speech.interrupted
maxLength: 1000
do:
type: array
description: This is the set of actions to perform when the hook triggers
items:
oneOf:
- $ref: '#/components/schemas/SayHookAction'
title: SayHookAction
- $ref: '#/components/schemas/ToolCallHookAction'
title: ToolCallHookAction
- $ref: '#/components/schemas/MessageAddHookAction'
title: MessageAddHookAction
required:
- 'on'
- do
CallHookCustomerSpeechTimeout:
type: object
properties:
'on':
type: string
description: Must be either "customer.speech.timeout" or match the pattern "customer.speech.timeout[property=value]"
maxLength: 1000
do:
type: array
description: This is the set of actions to perform when the hook triggers
items:
oneOf:
- $ref: '#/components/schemas/SayHookAction'
title: SayHookAction
- $ref: '#/components/schemas/ToolCallHookAction'
title: ToolCallHookAction
- $ref: '#/components/schemas/MessageAddHookAction'
title: MessageAddHookAction
options:
description: This is the set of filters that must match for the hook to trigger
allOf:
- $ref: '#/components/schemas/CustomerSpeechTimeoutOptions'
name:
type: string
description: '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'
maxLength: 1000
required:
- 'on'
- do
CallHookFilter:
type: object
properties:
type:
type: string
description: This is the type of filter - currently only "oneOf" is supported
enum:
- oneOf
maxLength: 1000
key:
type: string
description: This is the key to filter on (e.g. "call.endedReason")
maxLength: 1000
oneOf:
description: This is the array of possible values to match against
type: array
items:
type: string
maxLength: 1000
required:
- type
- key
- oneOf
CartesiaExperimentalControls:
type: object
properties:
speed:
oneOf:
- type: string
enum:
- slowest
- slow
- normal
- fast
- fastest
example: normal
- type: number
minimum: -1
maximum: 1
example: 0.5
emotion:
type: string
enum:
- anger:lowest
- anger:low
- anger:high
- anger:highest
- positivity:lowest
- positivity:low
- positivity:high
- positivity:highest
- surprise:lowest
- surprise:low
- surprise:high
- surprise:highest
- sadness:lowest
- sadness:low
- sadness:high
- sadness:highest
- curiosity:lowest
- curiosity:low
- curiosity:high
- curiosity:highest
example:
- happiness:high
CartesiaGenerationConfig:
type: object
properties:
speed:
type: number
description: Fine-grained speed control for sonic-3. Only available for sonic-3 model.
example: 1
minimum: 0.6
maximum: 1.5
default: 1
volume:
type: number
description: Fine-grained volume control for sonic-3. Only available for sonic-3 model.
example: 1
minimum: 0.5
maximum: 2
default: 1
experimental:
description: Experimental model controls for sonic-3. These are subject to breaking changes.
allOf:
- $ref: '#/components/schemas/CartesiaGenerationConfigExperimental'
CartesiaGenerationConfigExperimental:
type: object
properties:
accentLocalization:
type: integer
description: 'Toggle accent localization for sonic-3: 0 (disabled, default) or 1 (enabled). When enabled, the voice
adapts to match the transcript language accent while preserving vocal characteristics.'
example: 0
minimum: 0
maximum: 1
default: 0
CartesiaTranscriber:
type: object
properties:
provider:
type: string
enum:
- cartesia
model:
type: string
enum:
- ink-whisper
language:
type: string
enum:
- aa
- ab
- ae
- af
- ak
- am
- an
- ar
- as
- av
- ay
- az
- ba
- be
- bg
- bh
- bi
- bm
- bn
- bo
- br
- bs
- ca
- ce
- ch
- co
- cr
- cs
- cu
- cv
- cy
- da
- de
- dv
- dz
- ee
- el
- en
- eo
- es
- et
- eu
- fa
- ff
- fi
- fj
- fo
- fr
- fy
- ga
- gd
- gl
- gn
- gu
- gv
- ha
- he
- hi
- ho
- hr
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- io
- is
- it
- iu
- ja
- jv
- ka
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ku
- kv
- kw
- ky
- la
- lb
- lg
- li
- ln
- lo
- lt
- lu
- lv
- mg
- mh
- mi
- mk
- ml
- mn
- mr
- ms
- mt
- my
- na
- nb
- nd
- ne
- ng
- nl
- nn
- 'no'
- nr
- nv
- ny
- oc
- oj
- om
- or
- os
- pa
- pi
- pl
- ps
- pt
- qu
- rm
- rn
- ro
- ru
- rw
- sa
- sc
- sd
- se
- sg
- si
- sk
- sl
- sm
- sn
- so
- sq
- sr
- ss
- st
- su
- sv
- sw
- ta
- te
- tg
- th
- ti
- tk
- tl
- tn
- to
- tr
- ts
- tt
- tw
- ty
- ug
- uk
- ur
- uz
- ve
- vi
- vo
- wa
- wo
- xh
- yi
- yue
- yo
- za
- zh
- zu
fallbackPlan:
description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider
fails.
allOf:
- $ref: '#/components/schemas/FallbackTranscriberPlan'
required:
- provider
CartesiaVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- cartesia
voiceId:
type: string
description: The ID of the particular voice you want to use.
model:
type: string
description: This is the model that will be used. This is optional and will default to the correct model for the
voiceId.
enum:
- sonic-3.5
- sonic-3.5-2026-05-04
- sonic-3
- sonic-3-2026-01-12
- sonic-3-2025-10-27
- sonic-2
- sonic-2-2025-06-11
- sonic-english
- sonic-multilingual
- sonic-preview
- sonic
example: sonic-english
language:
type: string
description: This is the language that will be used. This is optional and will default to the correct language for
the voiceId.
enum:
- ar
- bg
- bn
- cs
- da
- de
- el
- en
- es
- fi
- fr
- gu
- he
- hi
- hr
- hu
- id
- it
- ja
- ka
- kn
- ko
- ml
- mr
- ms
- nl
- 'no'
- pa
- pl
- pt
- ro
- ru
- sk
- sv
- ta
- te
- th
- tl
- tr
- uk
- vi
- zh
example: en
experimentalControls:
description: Experimental controls for Cartesia voice generation
allOf:
- $ref: '#/components/schemas/CartesiaExperimentalControls'
generationConfig:
description: Generation config for fine-grained control of sonic-3 voice output (speed, volume, and experimental
controls). Only available for sonic-3 model.
allOf:
- $ref: '#/components/schemas/CartesiaGenerationConfig'
pronunciationDictId:
type: string
description: Pronunciation dictionary ID for sonic-3. Allows custom pronunciations for specific words. Only available
for sonic-3 model.
example: dict_abc123
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
CerebrasModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
enum:
- llama3.1-8b
- llama-3.3-70b
provider:
type: string
enum:
- cerebras
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- model
- provider
ChunkPlan:
type: object
properties:
enabled:
type: boolean
description: 'This determines whether the model output is chunked before being sent to the voice provider. Default
`true`.
Usage:
- To rely on the voice provider''s audio generation logic, set this to `false`.
- If seeing issues with quality, set this to `true`.
If disabled, Vapi-provided audio control tokens like will not work.
@default true'
example: true
minCharacters:
type: number
description: 'This is the minimum number of characters in a chunk.
Usage:
- To increase quality, set this to a higher value.
- To decrease latency, set this to a lower value.
@default 30'
minimum: 1
maximum: 80
example: 30
punctuationBoundaries:
type: array
description: 'These are the punctuations that are considered valid boundaries for a chunk to be created.
Usage:
- To increase quality, constrain to fewer boundaries.
- To decrease latency, enable all.
Default is automatically set to balance the trade-off between quality and latency based on the provider.'
enum:
- 。
- ,
- .
- '!'
- '?'
- ;
- )
- ،
- ۔
- ।
- ॥
- '|'
- '||'
- ','
- ':'
example:
- 。
- ,
- .
- '!'
- '?'
- ;
- ،
- ۔
- ।
- ॥
- '|'
- '||'
- ','
- ':'
items:
type: string
enum:
- 。
- ,
- .
- '!'
- '?'
- ;
- )
- ،
- ۔
- ।
- ॥
- '|'
- '||'
- ','
- ':'
formatPlan:
description: This is the plan for formatting the chunk before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/FormatPlan'
CloudflareR2BucketPlan:
type: object
properties:
accessKeyId:
type: string
description: Cloudflare R2 Access key ID.
secretAccessKey:
type: string
description: Cloudflare R2 access key secret. This is not returned in the API.
url:
type: string
description: Cloudflare R2 base url.
name:
type: string
description: This is the name of the bucket.
path:
type: string
description: 'This is the path where call artifacts will be stored.
Usage:
- To store call artifacts in a specific folder, set this to the full path. Eg. "/folder-name1/folder-name2".
- To store call artifacts in the root of the bucket, leave this blank.
@default "/"'
required:
- name
CodeToolEnvironmentVariable:
type: object
properties:
name:
type: string
description: Name of the environment variable
maxLength: 64
pattern: /^[A-Z][A-Z0-9_]*$/
example: API_KEY
value:
type: string
description: Value of the environment variable. Supports Liquid templates.
maxLength: 10000
example: '{{apiKey}}'
required:
- name
- value
ComplianceOverride:
type: object
properties:
forceStoreOnHipaaEnabled:
type: boolean
description: Force storage for this output under HIPAA. Only enable if output contains no sensitive data.
example: false
CompliancePlan:
type: object
properties:
hipaaEnabled:
type: boolean
description: When this is enabled, logs, recordings, and transcriptions will be stored in HIPAA-compliant storage.
Defaults to false. Only HIPAA-compliant providers will be available for LLM, Voice, and Transcriber respectively.
This setting is only honored if the organization is on an Enterprise subscription or has purchased the HIPAA add-on.
pciEnabled:
type: boolean
description: 'When this is enabled, the user will be restricted to use PCI-compliant providers, and no logs or transcripts
are stored.
At the end of the call, you will receive an end-of-call-report message to store on your server. Defaults to false.'
example:
pciEnabled: false
securityFilterPlan:
description: This is the security filter plan for the assistant. It allows filtering of transcripts for security
threats before sending to LLM.
allOf:
- $ref: '#/components/schemas/SecurityFilterPlan'
recordingConsentPlan:
oneOf:
- $ref: '#/components/schemas/RecordingConsentPlanStayOnLine'
title: RecordingConsentStayOnLinePlan
- $ref: '#/components/schemas/RecordingConsentPlanVerbal'
title: RecordingConsentPlanVerbal
discriminator:
propertyName: type
mapping:
stay-on-line: '#/components/schemas/RecordingConsentPlanStayOnLine'
verbal: '#/components/schemas/RecordingConsentPlanVerbal'
Condition:
type: object
properties:
operator:
type: string
description: This is the operator you want to use to compare the parameter and value.
enum:
- eq
- neq
- gt
- gte
- lt
- lte
param:
type: string
description: This is the name of the parameter that you want to check.
maxLength: 1000
value:
type: string
description: This is the value you want to compare against the parameter.
maxLength: 1000
required:
- operator
- param
- value
ContextEngineeringPlanAll:
type: object
properties:
type:
type: string
enum:
- all
required:
- type
ContextEngineeringPlanLastNMessages:
type: object
properties:
type:
type: string
enum:
- lastNMessages
maxMessages:
type: number
description: This is the maximum number of messages to include in the context engineering plan.
minimum: 0
required:
- type
- maxMessages
ContextEngineeringPlanNone:
type: object
properties:
type:
type: string
enum:
- none
required:
- type
ContextEngineeringPlanPreviousAssistantMessages:
type: object
properties:
type:
type: string
enum:
- previousAssistantMessages
required:
- type
ContextEngineeringPlanUserAndAssistantMessages:
type: object
properties:
type:
type: string
enum:
- userAndAssistantMessages
required:
- type
CreateAnthropicBedrockCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- anthropic-bedrock
region:
type: string
description: AWS region where Bedrock is configured.
enum:
- us-east-1
- us-west-2
- eu-west-1
- eu-west-3
- ap-northeast-1
- ap-southeast-2
authenticationPlan:
description: Authentication method - either direct IAM credentials or cross-account role assumption.
oneOf:
- $ref: '#/components/schemas/AWSIAMCredentialsAuthenticationPlan'
- $ref: '#/components/schemas/AWSStsAuthenticationPlan'
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- region
- authenticationPlan
CreateAnthropicCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- anthropic
apiKey:
type: string
maxLength: 10000
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateAnyscaleCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- anyscale
apiKey:
type: string
maxLength: 10000
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateApiRequestToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- apiRequest
description: The type of tool. "apiRequest" for API request tool.
method:
type: string
enum:
- POST
- GET
- PUT
- PATCH
- DELETE
timeoutSeconds:
type: number
description: 'This is the timeout in seconds for the request. Defaults to 20 seconds.
@default 20'
minimum: 1
maximum: 300
example: 20
credentialId:
type: string
description: The credential ID for API request authentication
example: 550e8400-e29b-41d4-a716-446655440000
encryptedPaths:
type: array
description: This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined.
items:
type: string
parameters:
description: Static key-value pairs merged into the request body. Values support Liquid templates.
type: array
items:
$ref: '#/components/schemas/ToolParameter'
name:
type: string
description: 'This is the name of the tool. This will be passed to the model.
Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 40.'
maxLength: 40
pattern: /^[a-zA-Z0-9_-]{1,40}$/
description:
type: string
description: This is the description of the tool. This will be passed to the model.
url:
type: string
description: This is where the request will be sent.
body:
description: This is the body of the request.
allOf:
- $ref: '#/components/schemas/JsonSchema'
headers:
description: These are the headers to send with the request.
allOf:
- $ref: '#/components/schemas/JsonSchema'
backoffPlan:
description: 'This is the backoff plan if the request fails. Defaults to undefined (the request will not be retried).
@default undefined (the request will not be retried)'
allOf:
- $ref: '#/components/schemas/BackoffPlan'
variableExtractionPlan:
description: "This is the plan to extract variables from the tool's response. These will be accessible during the\
\ call and stored in `call.artifact.variableValues` after the call.\n\nUsage:\n1. Use `aliases` to extract variables\
\ from the tool's response body. (Most common case)\n\n```json\n{\n \"aliases\": [\n {\n \"key\": \"\
customerName\",\n \"value\": \"{{customer.name}}\"\n },\n {\n \"key\": \"customerAge\",\n \
\ \"value\": \"{{customer.age}}\"\n }\n ]\n}\n```\n\nThe tool response body is made available to the liquid\
\ template.\n\n2. Use `aliases` to extract variables from the tool's response body if the response is an array.\n\
\n```json\n{\n \"aliases\": [\n {\n \"key\": \"customerName\",\n \"value\": \"{{$[0].name}}\"\n\
\ },\n {\n \"key\": \"customerAge\",\n \"value\": \"{{$[0].age}}\"\n }\n ]\n}\n```\n\n$ is\
\ a shorthand for the tool's response body. `$[0]` is the first item in the array. `$[n]` is the nth item in the\
\ array. Note, $ is available regardless of the response body type (both object and array).\n\n3. Use `aliases`\
\ to extract variables from the tool's response headers.\n\n```json\n{\n \"aliases\": [\n {\n \"key\"\
: \"customerName\",\n \"value\": \"{{tool.response.headers.customer-name}}\"\n },\n {\n \"key\"\
: \"customerAge\",\n \"value\": \"{{tool.response.headers.customer-age}}\"\n }\n ]\n}\n```\n\n`tool.response`\
\ is made available to the liquid template. Particularly, both `tool.response.headers` and `tool.response.body`\
\ are available. Note, `tool.response` is available regardless of the response body type (both object and array).\n\
\n4. Use `schema` to extract a large portion of the tool's response body.\n\n4.1. If you hit example.com and it\
\ returns `{\"name\": \"John\", \"age\": 30}`, then you can specify the schema as:\n\n```json\n{\n \"schema\"\
: {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n \
\ },\n \"age\": {\n \"type\": \"number\"\n }\n }\n }\n}\n```\nThese will be extracted as\
\ `{{ name }}` and `{{ age }}` respectively. To emphasize, object properties are extracted as direct global variables.\n\
\n4.2. If you hit example.com and it returns `{\"name\": {\"first\": \"John\", \"last\": \"Doe\"}}`, then you\
\ can specify the schema as:\n\n```json\n{\n \"schema\": {\n \"type\": \"object\",\n \"properties\": {\n\
\ \"name\": {\n \"type\": \"object\",\n \"properties\": {\n \"first\": {\n \
\ \"type\": \"string\"\n },\n \"last\": {\n \"type\": \"string\"\n }\n\
\ }\n }\n }\n }\n}\n```\n\nThese will be extracted as `{{ name }}`. And, `{{ name.first }}` and\
\ `{{ name.last }}` will be accessible.\n\n4.3. If you hit example.com and it returns `[\"94123\", \"94124\"]`,\
\ then you can specify the schema as:\n\n```json\n{\n \"schema\": {\n \"type\": \"array\",\n \"title\"\
: \"zipCodes\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n}\n```\n\nThis will be extracted as\
\ `{{ zipCodes }}`. To access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`.\n\n4.4.\
\ If you hit example.com and it returns `[{\"name\": \"John\", \"age\": 30, \"zipCodes\": [\"94123\", \"94124\"\
]}, {\"name\": \"Jane\", \"age\": 25, \"zipCodes\": [\"94125\", \"94126\"]}]`, then you can specify the schema\
\ as:\n\n```json\n{\n \"schema\": {\n \"type\": \"array\",\n \"title\": \"people\",\n \"items\": {\n\
\ \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n \
\ },\n \"age\": {\n \"type\": \"number\"\n },\n \"zipCodes\": {\n \
\ \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n \
\ }\n }\n }\n}\n```\n\nThis will be extracted as `{{ people }}`. To access the array items, you can use\
\ `{{ people[n].name }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and\
\ `{{ people[n].zipCodes[1] }}`.\n\nNote: Both `aliases` and `schema` can be used together."
allOf:
- $ref: '#/components/schemas/VariableExtractionPlan'
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
- method
- url
CreateAssemblyAICredentialDTO:
type: object
properties:
provider:
type: string
enum:
- assembly-ai
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateAssistantDTO:
type: object
properties:
transcriber:
description: These are the options for the assistant's transcriber.
oneOf:
- $ref: '#/components/schemas/AssemblyAITranscriber'
title: AssemblyAITranscriber
- $ref: '#/components/schemas/AzureSpeechTranscriber'
title: AzureSpeechTranscriber
- $ref: '#/components/schemas/CustomTranscriber'
title: CustomTranscriber
- $ref: '#/components/schemas/DeepgramTranscriber'
title: DeepgramTranscriber
- $ref: '#/components/schemas/ElevenLabsTranscriber'
title: ElevenLabsTranscriber
- $ref: '#/components/schemas/GladiaTranscriber'
title: GladiaTranscriber
- $ref: '#/components/schemas/GoogleTranscriber'
title: GoogleTranscriber
- $ref: '#/components/schemas/SpeechmaticsTranscriber'
title: SpeechmaticsTranscriber
- $ref: '#/components/schemas/TalkscriberTranscriber'
title: TalkscriberTranscriber
- $ref: '#/components/schemas/OpenAITranscriber'
title: OpenAITranscriber
- $ref: '#/components/schemas/CartesiaTranscriber'
title: CartesiaTranscriber
- $ref: '#/components/schemas/SonioxTranscriber'
title: SonioxTranscriber
- $ref: '#/components/schemas/XaiTranscriber'
title: XaiTranscriber
model:
description: These are the options for the assistant's LLM.
oneOf:
- $ref: '#/components/schemas/AnthropicModel'
title: Anthropic
- $ref: '#/components/schemas/AnthropicBedrockModel'
title: AnthropicBedrock
- $ref: '#/components/schemas/AnyscaleModel'
title: Anyscale
- $ref: '#/components/schemas/CerebrasModel'
title: Cerebras
- $ref: '#/components/schemas/CustomLLMModel'
title: CustomLLM
- $ref: '#/components/schemas/DeepInfraModel'
title: DeepInfra
- $ref: '#/components/schemas/DeepSeekModel'
title: DeepSeek
- $ref: '#/components/schemas/GoogleModel'
title: Google
- $ref: '#/components/schemas/GroqModel'
title: Groq
- $ref: '#/components/schemas/InflectionAIModel'
title: InflectionAI
- $ref: '#/components/schemas/MinimaxLLMModel'
title: MiniMaxLLM
- $ref: '#/components/schemas/OpenAIModel'
title: OpenAI
- $ref: '#/components/schemas/OpenRouterModel'
title: OpenRouter
- $ref: '#/components/schemas/PerplexityAIModel'
title: PerplexityAI
- $ref: '#/components/schemas/TogetherAIModel'
title: Together
- $ref: '#/components/schemas/XaiModel'
title: XAI
voice:
description: These are the options for the assistant's voice.
oneOf:
- $ref: '#/components/schemas/AzureVoice'
title: AzureVoice
- $ref: '#/components/schemas/CartesiaVoice'
title: CartesiaVoice
- $ref: '#/components/schemas/CustomVoice'
title: CustomVoice
- $ref: '#/components/schemas/DeepgramVoice'
title: DeepgramVoice
- $ref: '#/components/schemas/ElevenLabsVoice'
title: ElevenLabsVoice
- $ref: '#/components/schemas/HumeVoice'
title: HumeVoice
- $ref: '#/components/schemas/LMNTVoice'
title: LMNTVoice
- $ref: '#/components/schemas/NeuphonicVoice'
title: NeuphonicVoice
- $ref: '#/components/schemas/OpenAIVoice'
title: OpenAIVoice
- $ref: '#/components/schemas/PlayHTVoice'
title: PlayHTVoice
- $ref: '#/components/schemas/WellSaidVoice'
title: WellSaidVoice
- $ref: '#/components/schemas/RimeAIVoice'
title: RimeAIVoice
- $ref: '#/components/schemas/SmallestAIVoice'
title: SmallestAIVoice
- $ref: '#/components/schemas/TavusVoice'
title: TavusVoice
- $ref: '#/components/schemas/VapiVoice'
title: VapiVoice
- $ref: '#/components/schemas/SesameVoice'
title: SesameVoice
- $ref: '#/components/schemas/InworldVoice'
title: InworldVoice
- $ref: '#/components/schemas/MinimaxVoice'
title: MinimaxVoice
- $ref: '#/components/schemas/XaiVoice'
title: XaiVoice
firstMessage:
type: string
description: 'This is the first message that the assistant will say. This can also be a URL to a containerized audio
file (mp3, wav, etc.).
If unspecified, assistant will wait for user to speak and use the model to respond once they speak.'
example: Hello! How can I help you today?
firstMessageInterruptionsEnabled:
type: boolean
default: false
firstMessageMode:
type: string
description: 'This is the mode for the first message. Default is ''assistant-speaks-first''.
Use:
- ''assistant-speaks-first'' to have the assistant speak first.
- ''assistant-waits-for-user'' to have the assistant wait for the user to speak first.
- ''assistant-speaks-first-with-model-generated-message'' to have the assistant speak first with a message generated
by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad
transfer points).
@default ''assistant-speaks-first'''
enum:
- assistant-speaks-first
- assistant-speaks-first-with-model-generated-message
- assistant-waits-for-user
example: assistant-speaks-first
voicemailDetection:
description: 'These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection
can be configured using the model.tools=[VoicemailTool].
By default, voicemail detection is disabled.'
oneOf:
- type: string
enum:
- 'off'
- $ref: '#/components/schemas/GoogleVoicemailDetectionPlan'
title: Google
- $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan'
title: OpenAI
- $ref: '#/components/schemas/TwilioVoicemailDetectionPlan'
title: Twilio
- $ref: '#/components/schemas/VapiVoicemailDetectionPlan'
title: Vapi
clientMessages:
type: array
enum:
- conversation-update
- assistant.speechStarted
- function-call
- function-call-result
- hang
- language-changed
- metadata
- model-output
- speech-update
- status-update
- transcript
- tool-calls
- tool-calls-result
- tool.completed
- transfer-update
- user-interrupted
- voice-input
- workflow.node.started
- assistant.started
example:
- conversation-update
- function-call
- hang
- model-output
- speech-update
- status-update
- transfer-update
- transcript
- tool-calls
- user-interrupted
- voice-input
- workflow.node.started
- assistant.started
description: These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started.
You can check the shape of the messages in ClientMessage schema.
items:
type: string
enum:
- conversation-update
- assistant.speechStarted
- function-call
- function-call-result
- hang
- language-changed
- metadata
- model-output
- speech-update
- status-update
- transcript
- tool-calls
- tool-calls-result
- tool.completed
- transfer-update
- user-interrupted
- voice-input
- workflow.node.started
- assistant.started
serverMessages:
type: array
enum:
- assistant.started
- assistant.speechStarted
- conversation-update
- end-of-call-report
- function-call
- hang
- language-changed
- language-change-detected
- model-output
- phone-call-control
- speech-update
- status-update
- transcript
- transcript[transcriptType="final"]
- tool-calls
- transfer-destination-request
- handoff-destination-request
- transfer-update
- user-interrupted
- voice-input
- chat.created
- chat.deleted
- session.created
- session.updated
- session.deleted
- call.deleted
- call.delete.failed
example:
- conversation-update
- end-of-call-report
- function-call
- hang
- speech-update
- status-update
- tool-calls
- transfer-destination-request
- handoff-destination-request
- user-interrupted
- assistant.started
description: These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started.
You can check the shape of the messages in ServerMessage schema.
items:
type: string
enum:
- assistant.started
- assistant.speechStarted
- conversation-update
- end-of-call-report
- function-call
- hang
- language-changed
- language-change-detected
- model-output
- phone-call-control
- speech-update
- status-update
- transcript
- transcript[transcriptType="final"]
- tool-calls
- transfer-destination-request
- handoff-destination-request
- transfer-update
- user-interrupted
- voice-input
- chat.created
- chat.deleted
- session.created
- session.updated
- session.deleted
- call.deleted
- call.delete.failed
maxDurationSeconds:
type: number
description: 'This is the maximum number of seconds that the call will last. When the call reaches this duration,
it will be ended.
@default 600 (10 minutes)'
minimum: 10
maximum: 43200
example: 600
backgroundSound:
description: 'This is the background sound in the call. Default for phone calls is ''office'' and default for web
calls is ''off''.
You can also provide a custom sound by providing a URL to an audio file.'
oneOf:
- type: string
enum:
- 'off'
- office
example: office
- type: string
format: uri
example: https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3
modelOutputInMessagesEnabled:
type: boolean
description: 'This determines whether the model''s output is used in conversation history rather than the transcription
of assistant''s speech.
@default false'
example: false
transportConfigurations:
type: array
description: These are the configurations to be passed to the transport providers of assistant's calls, like Twilio.
You can store multiple configurations for different transport providers. For a call, only the configuration matching
the call transport provider is used.
items:
oneOf:
- $ref: '#/components/schemas/TransportConfigurationTwilio'
title: Twilio
observabilityPlan:
description: 'This is the plan for observability of assistant''s calls.
Currently, only Langfuse is supported.'
oneOf:
- $ref: '#/components/schemas/LangfuseObservabilityPlan'
title: Langfuse
allOf:
- $ref: '#/components/schemas/LangfuseObservabilityPlan'
credentials:
type: array
description: These are dynamic credentials that will be used for the assistant calls. By default, all the credentials
are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials
override existing credentials.
items:
oneOf:
- $ref: '#/components/schemas/CreateAnthropicCredentialDTO'
title: AnthropicCredential
- $ref: '#/components/schemas/CreateAnthropicBedrockCredentialDTO'
title: AnthropicBedrockCredential
- $ref: '#/components/schemas/CreateAnyscaleCredentialDTO'
title: AnyscaleCredential
- $ref: '#/components/schemas/CreateAssemblyAICredentialDTO'
title: AssemblyAICredential
- $ref: '#/components/schemas/CreateAzureCredentialDTO'
title: AzureCredential
- $ref: '#/components/schemas/CreateAzureOpenAICredentialDTO'
title: AzureOpenAICredential
- $ref: '#/components/schemas/CreateByoSipTrunkCredentialDTO'
title: ByoSipTrunkCredential
- $ref: '#/components/schemas/CreateCartesiaCredentialDTO'
title: CartesiaCredential
- $ref: '#/components/schemas/CreateCerebrasCredentialDTO'
title: CerebrasCredential
- $ref: '#/components/schemas/CreateCloudflareCredentialDTO'
title: CloudflareCredential
- $ref: '#/components/schemas/CreateCustomLLMCredentialDTO'
title: CustomLLMCredential
- $ref: '#/components/schemas/CreateDeepgramCredentialDTO'
title: DeepgramCredential
- $ref: '#/components/schemas/CreateDeepInfraCredentialDTO'
title: DeepInfraCredential
- $ref: '#/components/schemas/CreateDeepSeekCredentialDTO'
title: DeepSeekCredential
- $ref: '#/components/schemas/CreateElevenLabsCredentialDTO'
title: ElevenLabsCredential
- $ref: '#/components/schemas/CreateGcpCredentialDTO'
title: GcpCredential
- $ref: '#/components/schemas/CreateGladiaCredentialDTO'
title: GladiaCredential
- $ref: '#/components/schemas/CreateGoHighLevelCredentialDTO'
title: GhlCredential
- $ref: '#/components/schemas/CreateGoogleCredentialDTO'
title: GoogleCredential
- $ref: '#/components/schemas/CreateGroqCredentialDTO'
title: GroqCredential
- $ref: '#/components/schemas/CreateHumeCredentialDTO'
title: HumeCredential
- $ref: '#/components/schemas/CreateInflectionAICredentialDTO'
title: InflectionAICredential
- $ref: '#/components/schemas/CreateLangfuseCredentialDTO'
title: LangfuseCredential
- $ref: '#/components/schemas/CreateLmntCredentialDTO'
title: LmntCredential
- $ref: '#/components/schemas/CreateMakeCredentialDTO'
title: MakeCredential
- $ref: '#/components/schemas/CreateMistralCredentialDTO'
title: MistralCredential
- $ref: '#/components/schemas/CreateNeuphonicCredentialDTO'
title: NeuphonicCredential
- $ref: '#/components/schemas/CreateOpenAICredentialDTO'
title: OpenAICredential
- $ref: '#/components/schemas/CreateOpenRouterCredentialDTO'
title: OpenRouterCredential
- $ref: '#/components/schemas/CreatePerplexityAICredentialDTO'
title: PerplexityAICredential
- $ref: '#/components/schemas/CreatePlayHTCredentialDTO'
title: PlayHTCredential
- $ref: '#/components/schemas/CreateRimeAICredentialDTO'
title: RimeAICredential
- $ref: '#/components/schemas/CreateRunpodCredentialDTO'
title: RunpodCredential
- $ref: '#/components/schemas/CreateS3CredentialDTO'
title: S3Credential
- $ref: '#/components/schemas/CreateSmallestAICredentialDTO'
title: SmallestAICredential
- $ref: '#/components/schemas/CreateSpeechmaticsCredentialDTO'
title: SpeechmaticsCredential
- $ref: '#/components/schemas/CreateSonioxCredentialDTO'
title: SonioxCredential
- $ref: '#/components/schemas/CreateSupabaseCredentialDTO'
title: SupabaseCredential
- $ref: '#/components/schemas/CreateTavusCredentialDTO'
title: TavusCredential
- $ref: '#/components/schemas/CreateTogetherAICredentialDTO'
title: TogetherAICredential
- $ref: '#/components/schemas/CreateTwilioCredentialDTO'
title: TwilioCredential
- $ref: '#/components/schemas/CreateVonageCredentialDTO'
title: VonageCredential
- $ref: '#/components/schemas/CreateWebhookCredentialDTO'
title: WebhookCredential
- $ref: '#/components/schemas/CreateCustomCredentialDTO'
title: CustomCredential
- $ref: '#/components/schemas/CreateXAiCredentialDTO'
title: XAiCredential
- $ref: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO'
title: GoogleCalendarOAuth2ClientCredential
- $ref: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO'
title: GoogleCalendarOAuth2AuthorizationCredential
- $ref: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO'
title: GoogleSheetsOAuth2AuthorizationCredential
- $ref: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO'
title: SlackOAuth2AuthorizationCredential
- $ref: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO'
title: GoHighLevelMCPCredential
- $ref: '#/components/schemas/CreateInworldCredentialDTO'
title: InworldCredential
- $ref: '#/components/schemas/CreateMinimaxCredentialDTO'
title: MinimaxCredential
- $ref: '#/components/schemas/CreateWellSaidCredentialDTO'
title: WellSaidCredential
- $ref: '#/components/schemas/CreateEmailCredentialDTO'
title: EmailCredential
- $ref: '#/components/schemas/CreateSlackWebhookCredentialDTO'
title: SlackWebhookCredential
discriminator:
propertyName: provider
mapping:
11labs: '#/components/schemas/CreateElevenLabsCredentialDTO'
anthropic: '#/components/schemas/CreateAnthropicCredentialDTO'
anthropic-bedrock: '#/components/schemas/CreateAnthropicBedrockCredentialDTO'
anyscale: '#/components/schemas/CreateAnyscaleCredentialDTO'
assembly-ai: '#/components/schemas/CreateAssemblyAICredentialDTO'
azure-openai: '#/components/schemas/CreateAzureOpenAICredentialDTO'
azure: '#/components/schemas/CreateAzureCredentialDTO'
byo-sip-trunk: '#/components/schemas/CreateByoSipTrunkCredentialDTO'
cartesia: '#/components/schemas/CreateCartesiaCredentialDTO'
cerebras: '#/components/schemas/CreateCerebrasCredentialDTO'
cloudflare: '#/components/schemas/CreateCloudflareCredentialDTO'
custom-llm: '#/components/schemas/CreateCustomLLMCredentialDTO'
deepgram: '#/components/schemas/CreateDeepgramCredentialDTO'
deepinfra: '#/components/schemas/CreateDeepInfraCredentialDTO'
deep-seek: '#/components/schemas/CreateDeepSeekCredentialDTO'
gcp: '#/components/schemas/CreateGcpCredentialDTO'
gladia: '#/components/schemas/CreateGladiaCredentialDTO'
gohighlevel: '#/components/schemas/CreateGoHighLevelCredentialDTO'
google: '#/components/schemas/CreateGoogleCredentialDTO'
groq: '#/components/schemas/CreateGroqCredentialDTO'
inflection-ai: '#/components/schemas/CreateInflectionAICredentialDTO'
langfuse: '#/components/schemas/CreateLangfuseCredentialDTO'
lmnt: '#/components/schemas/CreateLmntCredentialDTO'
make: '#/components/schemas/CreateMakeCredentialDTO'
openai: '#/components/schemas/CreateOpenAICredentialDTO'
openrouter: '#/components/schemas/CreateOpenRouterCredentialDTO'
perplexity-ai: '#/components/schemas/CreatePerplexityAICredentialDTO'
playht: '#/components/schemas/CreatePlayHTCredentialDTO'
rime-ai: '#/components/schemas/CreateRimeAICredentialDTO'
runpod: '#/components/schemas/CreateRunpodCredentialDTO'
s3: '#/components/schemas/CreateS3CredentialDTO'
supabase: '#/components/schemas/CreateSupabaseCredentialDTO'
smallest-ai: '#/components/schemas/CreateSmallestAICredentialDTO'
tavus: '#/components/schemas/CreateTavusCredentialDTO'
together-ai: '#/components/schemas/CreateTogetherAICredentialDTO'
twilio: '#/components/schemas/CreateTwilioCredentialDTO'
vonage: '#/components/schemas/CreateVonageCredentialDTO'
webhook: '#/components/schemas/CreateWebhookCredentialDTO'
custom-credential: '#/components/schemas/CreateCustomCredentialDTO'
xai: '#/components/schemas/CreateXAiCredentialDTO'
neuphonic: '#/components/schemas/CreateNeuphonicCredentialDTO'
hume: '#/components/schemas/CreateHumeCredentialDTO'
mistral: '#/components/schemas/CreateMistralCredentialDTO'
speechmatics: '#/components/schemas/CreateSpeechmaticsCredentialDTO'
soniox: '#/components/schemas/CreateSonioxCredentialDTO'
google.calendar.oauth2-client: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO'
google.calendar.oauth2-authorization: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO'
google.sheets.oauth2-authorization: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO'
slack.oauth2-authorization: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO'
ghl.oauth2-authorization: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO'
inworld: '#/components/schemas/CreateInworldCredentialDTO'
minimax: '#/components/schemas/CreateMinimaxCredentialDTO'
wellsaid: '#/components/schemas/CreateWellSaidCredentialDTO'
email: '#/components/schemas/CreateEmailCredentialDTO'
slack-webhook: '#/components/schemas/CreateSlackWebhookCredentialDTO'
hooks:
type: array
description: This is a set of actions that will be performed on certain events.
items:
oneOf:
- $ref: '#/components/schemas/CallHookCallEnding'
title: CallHookCallEnding
- $ref: '#/components/schemas/CallHookAssistantSpeechInterrupted'
title: CallHookAssistantSpeechInterrupted
- $ref: '#/components/schemas/CallHookCustomerSpeechInterrupted'
title: CallHookCustomerSpeechInterrupted
- $ref: '#/components/schemas/CallHookCustomerSpeechTimeout'
title: CallHookCustomerSpeechTimeout
- $ref: '#/components/schemas/SessionCreatedHook'
title: SessionCreatedHook
name:
type: string
description: 'This is the name of the assistant.
This is required when you want to transfer between assistants in a call.'
maxLength: 40
voicemailMessage:
type: string
description: 'This is the message that the assistant will say if the call is forwarded to voicemail.
If unspecified, it will hang up.'
maxLength: 1000
endCallMessage:
type: string
description: 'This is the message that the assistant will say if it ends the call.
If unspecified, it will hang up without saying anything.'
maxLength: 1000
endCallPhrases:
description: This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case
insensitive.
type: array
items:
type: string
maxLength: 140
minLength: 2
compliancePlan:
$ref: '#/components/schemas/CompliancePlan'
metadata:
type: object
description: This is for metadata you want to store on the assistant.
backgroundSpeechDenoisingPlan:
description: 'This enables filtering of noise and background speech while the user is talking.
Features:
- Smart denoising using Krisp
- Fourier denoising
Smart denoising can be combined with or used independently of Fourier denoising.
Order of precedence:
- Smart denoising
- Fourier denoising'
allOf:
- $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan'
analysisPlan:
description: This is the plan for analysis of assistant's calls. Stored in `call.analysis`.
deprecated: true
allOf:
- $ref: '#/components/schemas/AnalysisPlan'
artifactPlan:
description: This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`.
allOf:
- $ref: '#/components/schemas/ArtifactPlan'
startSpeakingPlan:
description: 'This is the plan for when the assistant should start talking.
You should configure this if you''re running into these issues:
- The assistant is too slow to start talking after the customer is done speaking.
- The assistant is too fast to start talking after the customer is done speaking.
- The assistant is so fast that it''s actually interrupting the customer.'
allOf:
- $ref: '#/components/schemas/StartSpeakingPlan'
stopSpeakingPlan:
description: 'This is the plan for when assistant should stop talking on customer interruption.
You should configure this if you''re running into these issues:
- The assistant is too slow to recognize customer''s interruption.
- The assistant is too fast to recognize customer''s interruption.
- The assistant is getting interrupted by phrases that are just acknowledgments.
- The assistant is getting interrupted by background noises.
- The assistant is not properly stopping -- it starts talking right after getting interrupted.'
allOf:
- $ref: '#/components/schemas/StopSpeakingPlan'
monitorPlan:
description: 'This is the plan for real-time monitoring of the assistant''s calls.
Usage:
- To enable live listening of the assistant''s calls, set `monitorPlan.listenEnabled` to `true`.
- To enable live control of the assistant''s calls, set `monitorPlan.controlEnabled` to `true`.
- To attach monitors to the assistant, set `monitorPlan.monitorIds` to the set of monitor ids.'
allOf:
- $ref: '#/components/schemas/MonitorPlan'
credentialIds:
description: These are the credentials that will be used for the assistant calls. By default, all the credentials
are available for use in the call but you can provide a subset using this.
type: array
items:
type: string
server:
description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape
in ServerMessage schema.
The order of precedence is:
1. assistant.server.url
2. phoneNumber.serverUrl
3. org.serverUrl'
allOf:
- $ref: '#/components/schemas/Server'
keypadInputPlan:
$ref: '#/components/schemas/KeypadInputPlan'
CreateAzureCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- azure
service:
type: string
description: This is the service being used in Azure.
enum:
- speech
- blob_storage
default: speech
region:
type: string
description: This is the region of the Azure resource.
enum:
- australiaeast
- canadaeast
- canadacentral
- centralus
- eastus2
- eastus
- france
- germanywestcentral
- india
- japaneast
- japanwest
- northcentralus
- norway
- polandcentral
- southcentralus
- spaincentral
- swedencentral
- switzerland
- uaenorth
- uk
- westeurope
- westus
- westus3
apiKey:
type: string
description: This is not returned in the API.
maxLength: 10000
fallbackIndex:
type: number
minimum: 1
description: This is the order in which this storage provider is tried during upload retries. Lower numbers are
tried first in increasing order.
bucketPlan:
description: This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage.
allOf:
- $ref: '#/components/schemas/AzureBlobStorageBucketPlan'
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- service
CreateAzureOpenAICredentialDTO:
type: object
properties:
provider:
type: string
enum:
- azure-openai
region:
type: string
enum:
- australiaeast
- canadaeast
- canadacentral
- centralus
- eastus2
- eastus
- france
- germanywestcentral
- india
- japaneast
- japanwest
- northcentralus
- norway
- polandcentral
- southcentralus
- spaincentral
- swedencentral
- switzerland
- uaenorth
- uk
- westeurope
- westus
- westus3
models:
type: array
enum:
- gpt-5.4
- gpt-5.4-mini
- gpt-5.4-nano
- gpt-5.2
- gpt-5.2-chat
- gpt-5.1
- gpt-5.1-chat
- 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-4o-2024-11-20
- gpt-4o-2024-08-06
- gpt-4o-2024-05-13
- gpt-4o-mini-2024-07-18
- gpt-4-turbo-2024-04-09
- gpt-4-0125-preview
- gpt-4-1106-preview
- gpt-4-0613
- gpt-35-turbo-0125
- gpt-35-turbo-1106
example:
- gpt-4-0125-preview
- gpt-4-0613
items:
type: string
enum:
- gpt-5.4
- gpt-5.4-mini
- gpt-5.4-nano
- gpt-5.2
- gpt-5.2-chat
- gpt-5.1
- gpt-5.1-chat
- 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-4o-2024-11-20
- gpt-4o-2024-08-06
- gpt-4o-2024-05-13
- gpt-4o-mini-2024-07-18
- gpt-4-turbo-2024-04-09
- gpt-4-0125-preview
- gpt-4-1106-preview
- gpt-4-0613
- gpt-35-turbo-0125
- gpt-35-turbo-1106
openAIKey:
type: string
maxLength: 10000
description: This is not returned in the API.
ocpApimSubscriptionKey:
type: string
description: This is not returned in the API.
openAIEndpoint:
type: string
maxLength: 10000
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- region
- models
- openAIKey
- openAIEndpoint
CreateBashToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- bash
description: The type of tool. "bash" for Bash tool.
subType:
type: string
enum:
- bash_20241022
description: The sub type of tool.
server:
description: "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent\
\ to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n\
\ - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this\
\ order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook\
\ expects a response with tool call result."
allOf:
- $ref: '#/components/schemas/Server'
name:
type: string
description: The name of the tool, fixed to 'bash'
default: bash
enum:
- bash
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
- subType
- name
CreateByoSipTrunkCredentialDTO:
type: object
properties:
provider:
type: string
description: This can be used to bring your own SIP trunks or to connect to a Carrier.
enum:
- byo-sip-trunk
gateways:
description: This is the list of SIP trunk's gateways.
type: array
items:
$ref: '#/components/schemas/SipTrunkGateway'
outboundAuthenticationPlan:
description: This can be used to configure the outbound authentication if required by the SIP trunk.
allOf:
- $ref: '#/components/schemas/SipTrunkOutboundAuthenticationPlan'
outboundLeadingPlusEnabled:
type: boolean
description: 'This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional
telecom behavior.
Usage:
- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.
@default false'
techPrefix:
type: string
description: This can be used to configure the tech prefix on outbound calls. This is an advanced property.
maxLength: 10000
sipDiversionHeader:
type: string
description: This can be used to enable the SIP diversion header for authenticating the calling number if the SIP
trunk supports it. This is an advanced property.
maxLength: 10000
sbcConfiguration:
description: This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into
the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.
allOf:
- $ref: '#/components/schemas/SbcConfiguration'
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- gateways
CreateCartesiaCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- cartesia
apiKey:
type: string
description: This is not returned in the API.
apiUrl:
type: string
description: This can be used to point to an onprem Cartesia instance. Defaults to api.cartesia.ai.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateCerebrasCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- cerebras
apiKey:
type: string
maxLength: 10000
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateCloudflareCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- cloudflare
description: Credential provider. Only allowed value is cloudflare
accountId:
type: string
description: Cloudflare Account Id.
apiKey:
type: string
description: Cloudflare API Key / Token.
accountEmail:
type: string
description: Cloudflare Account Email.
fallbackIndex:
type: number
description: This is the order in which this storage provider is tried during upload retries. Lower numbers are
tried first in increasing order.
minimum: 1
bucketPlan:
description: This is the bucket plan that can be provided to store call artifacts in R2
allOf:
- $ref: '#/components/schemas/CloudflareR2BucketPlan'
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
CreateCodeToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- code
description: The type of tool. "code" for Code tool.
async:
type: boolean
example: false
description: "This determines if the tool is async.\n\n If async, the assistant will move forward without waiting\
\ for your server to respond. This is useful if you just want to trigger something on your server.\n\n If sync,\
\ the assistant will wait for your server to respond. This is useful if want assistant to respond with the result\
\ from your server.\n\n Defaults to synchronous (`false`)."
server:
description: "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent\
\ to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n\
\ - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this\
\ order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook\
\ expects a response with tool call result."
allOf:
- $ref: '#/components/schemas/Server'
code:
type: string
description: TypeScript code to execute when the tool is called
maxLength: 50000
environmentVariables:
description: Environment variables available in code via `env` object
type: array
items:
$ref: '#/components/schemas/CodeToolEnvironmentVariable'
timeoutSeconds:
type: number
description: 'This is the timeout in seconds for the code execution. Defaults to 10 seconds.
Maximum is 30 seconds to prevent abuse.
@default 10'
minimum: 1
maximum: 30
example: 10
credentialId:
type: string
description: Credential ID containing the Val Town API key
example: 550e8400-e29b-41d4-a716-446655440000
variableExtractionPlan:
description: Plan to extract variables from the tool response
allOf:
- $ref: '#/components/schemas/VariableExtractionPlan'
function:
description: 'This is the function definition of the tool.
For the Code tool, this defines the name, description, and parameters that the model
will use to understand when and how to call this tool.'
allOf:
- $ref: '#/components/schemas/OpenAIFunction'
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
- code
CreateComputerToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- computer
description: The type of tool. "computer" for Computer tool.
subType:
type: string
enum:
- computer_20241022
description: The sub type of tool.
server:
description: "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent\
\ to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n\
\ - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this\
\ order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook\
\ expects a response with tool call result."
allOf:
- $ref: '#/components/schemas/Server'
name:
type: string
description: The name of the tool, fixed to 'computer'
default: computer
enum:
- computer
displayWidthPx:
type: number
description: The display width in pixels
displayHeightPx:
type: number
description: The display height in pixels
displayNumber:
type: number
description: Optional display number
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
- subType
- name
- displayWidthPx
- displayHeightPx
CreateCustomCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- custom-credential
authenticationPlan:
description: This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication.
oneOf:
- $ref: '#/components/schemas/OAuth2AuthenticationPlan'
- $ref: '#/components/schemas/HMACAuthenticationPlan'
- $ref: '#/components/schemas/BearerAuthenticationPlan'
discriminator:
propertyName: type
mapping:
oauth2: '#/components/schemas/OAuth2AuthenticationPlan'
hmac: '#/components/schemas/HMACAuthenticationPlan'
bearer: '#/components/schemas/BearerAuthenticationPlan'
encryptionPlan:
description: This is the encryption plan for encrypting sensitive data. Currently supports public-key encryption.
oneOf:
- $ref: '#/components/schemas/PublicKeyEncryptionPlan'
discriminator:
propertyName: type
mapping:
public-key: '#/components/schemas/PublicKeyEncryptionPlan'
allOf:
- $ref: '#/components/schemas/PublicKeyEncryptionPlan'
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- authenticationPlan
CreateCustomKnowledgeBaseDTO:
type: object
properties:
provider:
type: string
description: This knowledge base is bring your own knowledge base implementation.
enum:
- custom-knowledge-base
server:
description: "This is where the knowledge base request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\n\
Content-Type: application/json\n\n{\n \"messsage\": {\n \"type\": \"knowledge-base-request\",\n \"messages\"\
: [\n {\n \"role\": \"user\",\n \"content\": \"Why is ocean blue?\"\n }\n ],\n ...other\
\ metadata about the call...\n }\n}\n\nResponse Expected:\n```\n{\n \"message\": {\n \"role\": \"assistant\"\
,\n \"content\": \"The ocean is blue because water absorbs everything but blue.\",\n }, // YOU CAN RETURN\
\ THE EXACT RESPONSE TO SPEAK\n \"documents\": [\n {\n \"content\": \"The ocean is blue primarily because\
\ water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible\
\ to our eyes.\",\n \"similarity\": 1\n },\n {\n \"content\": \"Blue light is scattered more by\
\ the water molecules than other colors, enhancing the blue appearance of the ocean.\",\n \"similarity\"\
: .5\n }\n ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL\n}\n```"
allOf:
- $ref: '#/components/schemas/Server'
required:
- provider
- server
CreateCustomLLMCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- custom-llm
apiKey:
type: string
maxLength: 10000
description: This is not returned in the API.
authenticationPlan:
description: This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication,
use apiKey
allOf:
- $ref: '#/components/schemas/OAuth2AuthenticationPlan'
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateDeepInfraCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- deepinfra
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateDeepSeekCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- deep-seek
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateDeepgramCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- deepgram
apiKey:
type: string
description: This is not returned in the API.
apiUrl:
type: string
description: This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateDtmfToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- dtmf
description: The type of tool. "dtmf" for DTMF tool.
sipInfoDtmfEnabled:
type: boolean
description: This enables sending DTMF tones via SIP INFO messages instead of RFC 2833 (RTP events). When enabled,
DTMF digits will be sent using the SIP INFO method, which can be more reliable in some network configurations.
Only relevant when using the `vapi.sip` transport.
default: false
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateElevenLabsCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- 11labs
apiKey:
type: string
maxLength: 10000
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateEmailCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- email
email:
type: string
description: The recipient email address for alerts
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- email
CreateEndCallToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- endCall
description: The type of tool. "endCall" for End Call tool.
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateFunctionToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- function
description: The type of tool. "function" for Function tool.
async:
type: boolean
example: false
description: "This determines if the tool is async.\n\n If async, the assistant will move forward without waiting\
\ for your server to respond. This is useful if you just want to trigger something on your server.\n\n If sync,\
\ the assistant will wait for your server to respond. This is useful if want assistant to respond with the result\
\ from your server.\n\n Defaults to synchronous (`false`)."
server:
description: "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent\
\ to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n\
\ - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this\
\ order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook\
\ expects a response with tool call result."
allOf:
- $ref: '#/components/schemas/Server'
variableExtractionPlan:
description: Plan to extract variables from the tool response
allOf:
- $ref: '#/components/schemas/VariableExtractionPlan'
parameters:
description: Static key-value pairs merged into the request body. Values support Liquid templates.
type: array
items:
$ref: '#/components/schemas/ToolParameter'
function:
description: This is the function definition of the tool.
allOf:
- $ref: '#/components/schemas/OpenAIFunction'
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateGcpCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- gcp
fallbackIndex:
type: number
description: This is the order in which this storage provider is tried during upload retries. Lower numbers are
tried first in increasing order.
minimum: 1
gcpKey:
description: 'This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at https://console.cloud.google.com/iam-admin/serviceaccounts/details//keys.
The schema is identical to the JSON that GCP outputs.'
allOf:
- $ref: '#/components/schemas/GcpKey'
region:
type: string
description: This is the region of the GCP resource.
maxLength: 40
bucketPlan:
$ref: '#/components/schemas/BucketPlan'
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- gcpKey
CreateGladiaCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- gladia
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateGoHighLevelCalendarAvailabilityToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- gohighlevel.calendar.availability.check
description: The type of tool. "gohighlevel.calendar.availability.check" for GoHighLevel Calendar Availability Check
tool.
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateGoHighLevelCalendarEventCreateToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- gohighlevel.calendar.event.create
description: The type of tool. "gohighlevel.calendar.event.create" for GoHighLevel Calendar Event Create tool.
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateGoHighLevelContactCreateToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- gohighlevel.contact.create
description: The type of tool. "gohighlevel.contact.create" for GoHighLevel Contact Create tool.
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateGoHighLevelContactGetToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- gohighlevel.contact.get
description: The type of tool. "gohighlevel.contact.get" for GoHighLevel Contact Get tool.
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateGoHighLevelCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- gohighlevel
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateGoHighLevelMCPCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- ghl.oauth2-authorization
authenticationSession:
description: This is the authentication session for the credential.
allOf:
- $ref: '#/components/schemas/Oauth2AuthenticationSession'
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- authenticationSession
CreateGoogleCalendarCheckAvailabilityToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- google.calendar.availability.check
description: The type of tool. "google.calendar.availability.check" for Google Calendar Check Availability tool.
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateGoogleCalendarCreateEventToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- google.calendar.event.create
description: The type of tool. "google.calendar.event.create" for Google Calendar Create Event tool.
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateGoogleCalendarOAuth2AuthorizationCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- google.calendar.oauth2-authorization
authorizationId:
type: string
description: The authorization ID for the OAuth2 authorization
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- authorizationId
CreateGoogleCalendarOAuth2ClientCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- google.calendar.oauth2-client
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
CreateGoogleCredentialDTO:
type: object
properties:
provider:
type: string
description: 'This is the key for Gemini in Google AI Studio. Get it from here: https://aistudio.google.com/app/apikey'
enum:
- google
apiKey:
type: string
maxLength: 10000
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateGoogleSheetsOAuth2AuthorizationCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- google.sheets.oauth2-authorization
authorizationId:
type: string
description: The authorization ID for the OAuth2 authorization
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- authorizationId
CreateGoogleSheetsRowAppendToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- google.sheets.row.append
description: The type of tool. "google.sheets.row.append" for Google Sheets Row Append tool.
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateGroqCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- groq
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateHandoffToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
description: 'This is the type of the tool.
When you''re using handoff tool, we recommend adding this to your system prompt
---
# System context
You are part of a multi-agent system designed to make agent coordination and execution easy. Agents uses two primary
abstraction: **Agents** and **Handoffs**. An agent encompasses instructions and tools and can hand off a conversation
to another agent when appropriate. Handoffs are achieved by calling a handoff function, generally named `handoff_to_`.
Handoffs between agents are handled seamlessly in the background; do not mention or draw attention to these handoffs
in your conversation with the user.
# Agent context
{put your agent system prompt here}
---'
enum:
- handoff
defaultResult:
type: string
description: This is the default local tool result message used when no runtime handoff result override is returned.
destinations:
type: array
description: "These are the destinations that the call can be handed off to.\n\nUsage:\n1. Single destination\n\n\
Use `assistantId` to handoff the call to a saved assistant, or `assistantName` to handoff the call to an assistant\
\ in the same squad.\n\n```json\n{\n \"tools\": [\n {\n \"type\": \"handoff\",\n \"destinations\"\
: [\n {\n \"type\": \"assistant\",\n \"assistantId\": \"assistant-123\", // or \"assistantName\"\
: \"Assistant123\"\n \"description\": \"customer wants to be handed off to assistant-123\",\n \
\ \"contextEngineeringPlan\": {\n \"type\": \"all\"\n }\n }\n ],\n }\n ]\n\
}\n```\n\n2. Multiple destinations\n\n2.1. Multiple Tools, Each With One Destination (OpenAI recommended)\n\n\
```json\n{\n \"tools\": [\n {\n \"type\": \"handoff\",\n \"destinations\": [\n {\n \
\ \"type\": \"assistant\",\n \"assistantId\": \"assistant-123\",\n \"description\": \"customer\
\ wants to be handed off to assistant-123\",\n \"contextEngineeringPlan\": {\n \"type\": \"\
all\"\n }\n },\n ],\n },\n {\n \"type\": \"handoff\",\n \"destinations\"\
: [\n {\n \"type\": \"assistant\",\n \"assistantId\": \"assistant-456\",\n \"\
description\": \"customer wants to be handed off to assistant-456\",\n \"contextEngineeringPlan\": {\n\
\ \"type\": \"all\"\n }\n }\n ],\n }\n ]\n}\n```\n\n2.2. One Tool, Multiple\
\ Destinations (Anthropic recommended)\n\n```json\n{\n \"tools\": [\n {\n \"type\": \"handoff\",\n \
\ \"destinations\": [\n {\n \"type\": \"assistant\",\n \"assistantId\": \"assistant-123\"\
,\n \"description\": \"customer wants to be handed off to assistant-123\",\n \"contextEngineeringPlan\"\
: {\n \"type\": \"all\"\n }\n },\n {\n \"type\": \"assistant\",\n \
\ \"assistantId\": \"assistant-456\",\n \"description\": \"customer wants to be handed off to\
\ assistant-456\",\n \"contextEngineeringPlan\": {\n \"type\": \"all\"\n }\n \
\ }\n ],\n }\n ]\n}\n```\n\n3. Dynamic destination\n\n3.1 To determine the destination dynamically,\
\ supply a `dynamic` handoff destination type and a `server` object.\n VAPI will send a handoff-destination-request\
\ webhook to the `server.url`.\n The response from the server will be used as the destination (if valid).\n\
\n```json\n{\n \"tools\": [\n {\n \"type\": \"handoff\",\n \"destinations\": [\n {\n \
\ \"type\": \"dynamic\",\n \"server\": {\n \"url\": \"https://example.com\"\n \
\ }\n }\n ],\n }\n ]\n}\n```\n\n3.2. To pass custom parameters to the server, you can use the\
\ `function` object.\n\n```json\n{\n \"tools\": [\n {\n \"type\": \"handoff\",\n \"destinations\"\
: [\n {\n \"type\": \"dynamic\",\n \"server\": {\n \"url\": \"https://example.com\"\
\n },\n }\n ],\n \"function\": {\n \"name\": \"handoff\",\n \"description\"\
: \"Call this function when the customer is ready to be handed off to the next assistant\",\n \"parameters\"\
: {\n \"type\": \"object\",\n \"properties\": {\n \"destination\": {\n \
\ \"type\": \"string\",\n \"description\": \"Use dynamic when customer is ready to be handed off\
\ to the next assistant\",\n \"enum\": [\"dynamic\"]\n },\n \"customerAreaCode\"\
: {\n \"type\": \"number\",\n \"description\": \"Area code of the customer\"\n \
\ },\n \"customerIntent\": {\n \"type\": \"string\",\n \"enum\": [\"\
new-customer\", \"existing-customer\"],\n \"description\": \"Use new-customer when customer is a\
\ new customer, existing-customer when customer is an existing customer\"\n },\n \"customerSentiment\"\
: {\n \"type\": \"string\",\n \"enum\": [\"positive\", \"negative\", \"neutral\"],\n\
\ \"description\": \"Use positive when customer is happy, negative when customer is unhappy, neutral\
\ when customer is neutral\"\n }\n }\n }\n }\n }\n ]\n}\n```\n\nThe properties\
\ `customerAreaCode`, `customerIntent`, and `customerSentiment` will be passed to the server in the webhook request\
\ body."
items:
oneOf:
- $ref: '#/components/schemas/HandoffDestinationAssistant'
title: Assistant
- $ref: '#/components/schemas/HandoffDestinationDynamic'
title: Dynamic
- $ref: '#/components/schemas/HandoffDestinationSquad'
title: Squad
function:
description: "This is the optional function definition that will be passed to the LLM.\nIf this is not defined,\
\ we will construct this based on the other properties.\n\nFor example, given the following tools definition:\n\
```json\n{\n \"tools\": [\n {\n \"type\": \"handoff\",\n \"destinations\": [\n {\n \
\ \"type\": \"assistant\",\n \"assistantId\": \"assistant-123\",\n \"description\": \"customer\
\ wants to be handed off to assistant-123\",\n \"contextEngineeringPlan\": {\n \"type\": \"\
all\"\n }\n },\n {\n \"type\": \"assistant\",\n \"assistantId\": \"assistant-456\"\
,\n \"description\": \"customer wants to be handed off to assistant-456\",\n \"contextEngineeringPlan\"\
: {\n \"type\": \"all\"\n }\n }\n ],\n }\n ]\n}\n```\n\nWe will construct\
\ the following function definition:\n```json\n{\n \"function\": {\n \"name\": \"handoff_to_assistant-123\"\
,\n \"description\": \"\n Use this function to handoff the call to the next assistant.\n Only\
\ use it when instructions explicitly ask you to use the handoff_to_assistant function.\n DO NOT call\
\ this function unless you are instructed to do so.\n Here are the destinations you can handoff the call\
\ to:\n 1. assistant-123. When: customer wants to be handed off to assistant-123\n 2. assistant-456.\
\ When: customer wants to be handed off to assistant-456\n \",\n \"parameters\": {\n \"type\": \"object\"\
,\n \"properties\": {\n \"destination\": {\n \"type\": \"string\",\n \"description\"\
: \"Options: assistant-123 (customer wants to be handed off to assistant-123), assistant-456 (customer wants to\
\ be handed off to assistant-456)\",\n \"enum\": [\"assistant-123\", \"assistant-456\"]\n },\n\
\ },\n \"required\": [\"destination\"]\n }\n }\n}\n```\n\nTo override this function, please provide\
\ an OpenAI function definition and refer to it in the system prompt.\nYou may override parts of the function\
\ definition (i.e. you may only want to change the function name for your prompt).\nIf you choose to override\
\ the function parameters, it must include `destination` as a required parameter, and it must evaluate to either\
\ an assistantId, assistantName, or a the string literal `dynamic`.\n\nTo pass custom parameters to the server\
\ in a dynamic handoff, you can use the function parameters, with `dynamic` as the destination.\n```json\n{\n\
\ \"function\": {\n \"name\": \"dynamic_handoff\",\n \"description\": \"\n Call this function when\
\ the customer is ready to be handed off to the next assistant\n \",\n \"parameters\": {\n \"type\"\
: \"object\",\n \"properties\": {\n \"destination\": {\n \"type\": \"string\",\n \
\ \"enum\": [\"dynamic\"]\n },\n \"customerAreaCode\": {\n \"type\": \"number\",\n \
\ \"description\": \"Area code of the customer\"\n },\n \"customerIntent\": {\n \"\
type\": \"string\",\n \"enum\": [\"new-customer\", \"existing-customer\"],\n \"description\"\
: \"Use new-customer when customer is a new customer, existing-customer when customer is an existing customer\"\
\n },\n \"customerSentiment\": {\n \"type\": \"string\",\n \"enum\": [\"positive\"\
, \"negative\", \"neutral\"],\n \"description\": \"Use positive when customer is happy, negative when\
\ customer is unhappy, neutral when customer is neutral\"\n }\n },\n \"required\": [\"destination\"\
, \"customerAreaCode\", \"customerIntent\", \"customerSentiment\"]\n }\n }\n}\n```"
allOf:
- $ref: '#/components/schemas/OpenAIFunction'
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateHumeCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- hume
apiKey:
type: string
maxLength: 10000
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateInflectionAICredentialDTO:
type: object
properties:
provider:
type: string
description: 'This is the api key for Pi in InflectionAI''s console. Get it from here: https://developers.inflection.ai/keys,
billing will need to be setup'
enum:
- inflection-ai
apiKey:
type: string
maxLength: 10000
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateInworldCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- inworld
apiKey:
type: string
description: This is the Inworld Basic (Base64) authentication token. This is not returned in the API.
example: your-base64-token-here
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateLangfuseCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- langfuse
publicKey:
type: string
description: 'The public key for Langfuse project. Eg: pk-lf-...'
apiKey:
type: string
description: 'The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API.'
apiUrl:
type: string
description: 'The host URL for Langfuse project. Eg: https://cloud.langfuse.com'
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- publicKey
- apiKey
- apiUrl
CreateLmntCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- lmnt
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateMakeCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- make
teamId:
type: string
description: Team ID
region:
type: string
description: 'Region of your application. For example: eu1, eu2, us1, us2'
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- teamId
- region
- apiKey
CreateMcpToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- mcp
description: The type of tool. "mcp" for MCP tool.
server:
description: "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent\
\ to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n\
\ - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this\
\ order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook\
\ expects a response with tool call result."
allOf:
- $ref: '#/components/schemas/Server'
toolMessages:
description: Per-tool message overrides for individual tools loaded from the MCP server. Set messages to an empty
array to suppress messages for a specific tool. Tools not listed here will use the default messages from the parent
tool.
type: array
items:
$ref: '#/components/schemas/McpToolMessages'
metadata:
$ref: '#/components/schemas/McpToolMetadata'
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateMinimaxCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- minimax
apiKey:
type: string
description: This is not returned in the API.
groupId:
type: string
description: This is the Minimax Group ID.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
- groupId
CreateMistralCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- mistral
apiKey:
type: string
maxLength: 100
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateNeuphonicCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- neuphonic
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateOpenAICredentialDTO:
type: object
properties:
provider:
type: string
enum:
- openai
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateOpenRouterCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- openrouter
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreatePerplexityAICredentialDTO:
type: object
properties:
provider:
type: string
enum:
- perplexity-ai
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreatePlayHTCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- playht
apiKey:
type: string
description: This is not returned in the API.
userId:
type: string
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
- userId
CreateQueryToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- query
description: The type of tool. "query" for Query tool.
knowledgeBases:
description: The knowledge bases to query
type: array
items:
$ref: '#/components/schemas/KnowledgeBase'
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateRimeAICredentialDTO:
type: object
properties:
provider:
type: string
enum:
- rime-ai
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateRunpodCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- runpod
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateS3CredentialDTO:
type: object
properties:
provider:
type: string
enum:
- s3
description: Credential provider. Only allowed value is s3
awsAccessKeyId:
type: string
description: AWS access key ID.
awsSecretAccessKey:
type: string
description: AWS access key secret. This is not returned in the API.
region:
type: string
description: AWS region in which the S3 bucket is located.
s3BucketName:
type: string
description: AWS S3 bucket name.
s3PathPrefix:
type: string
description: The path prefix for the uploaded recording. Ex. "recordings/"
fallbackIndex:
type: number
minimum: 1
description: This is the order in which this storage provider is tried during upload retries. Lower numbers are
tried first in increasing order.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- awsAccessKeyId
- awsSecretAccessKey
- region
- s3BucketName
- s3PathPrefix
CreateScorecardDTO:
type: object
properties:
name:
type: string
description: This is the name of the scorecard. It is only for user reference and will not be used for any evaluation.
maxLength: 80
description:
type: string
description: This is the description of the scorecard. It is only for user reference and will not be used for any
evaluation.
maxLength: 500
metrics:
description: 'These are the metrics that will be used to evaluate the scorecard.
Each metric will have a set of conditions and points that will be used to generate the score.'
type: array
items:
$ref: '#/components/schemas/ScorecardMetric'
assistantIds:
description: 'These are the assistant IDs that this scorecard is linked to.
When linked to assistants, this scorecard will be available for evaluation during those assistants'' calls.'
type: array
items:
type: string
required:
- metrics
CreateSipRequestToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- sipRequest
description: The type of tool. "sipRequest" for SIP request tool.
verb:
type: string
enum:
- INFO
- MESSAGE
- NOTIFY
description: The SIP method to send.
headers:
description: JSON schema for headers the model should populate when sending the SIP request.
allOf:
- $ref: '#/components/schemas/JsonSchema'
body:
description: Body to include in the SIP request. Either a literal string body, or a JSON schema describing a structured
body that the model should populate.
oneOf:
- type: string
- $ref: '#/components/schemas/JsonSchema'
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
- verb
CreateSlackOAuth2AuthorizationCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- slack.oauth2-authorization
authorizationId:
type: string
description: The authorization ID for the OAuth2 authorization
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- authorizationId
CreateSlackSendMessageToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- slack.message.send
description: The type of tool. "slack.message.send" for Slack Send Message tool.
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateSlackWebhookCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- slack-webhook
webhookUrl:
type: string
description: Slack incoming webhook URL. See https://api.slack.com/messaging/webhooks for setup instructions. This
is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- webhookUrl
CreateSmallestAICredentialDTO:
type: object
properties:
provider:
type: string
enum:
- smallest-ai
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateSmsToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- sms
description: The type of tool. "sms" for Twilio SMS sending tool.
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateSonioxCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- soniox
apiKey:
type: string
description: This is not returned in the API.
apiUrl:
type: string
description: Custom Soniox WebSocket endpoint (e.g. EU server wss://stt-rt.eu.soniox.com/transcribe-websocket).
Defaults to the region-appropriate endpoint when omitted.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateSpeechmaticsCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- speechmatics
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateSquadDTO:
type: object
properties:
name:
type: string
description: This is the name of the squad.
members:
description: 'This is the list of assistants that make up the squad.
The call will start with the first assistant in the list.'
type: array
items:
$ref: '#/components/schemas/SquadMemberDTO'
membersOverrides:
description: 'This can be used to override all the assistants'' settings and provide values for their template variables.
Both `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides`
is applied. Then, `membersOverrides` is applied as a global override.'
allOf:
- $ref: '#/components/schemas/AssistantOverrides'
required:
- members
CreateStructuredOutputDTO:
type: object
properties:
type:
type: string
description: 'This is the type of structured output.
- ''ai'': Uses an LLM to extract structured data from the conversation (default).
- ''regex'': Uses a regex pattern to extract data from the transcript without an LLM.
Defaults to ''ai'' if not specified.'
enum:
- ai
- regex
default: ai
regex:
type: string
description: 'This is the regex pattern to match against the transcript.
Only used when type is ''regex''. Supports both raw patterns (e.g. ''\d+'') and
regex literal format (e.g. ''/\d+/gi''). Uses RE2 syntax for safety.
The result depends on the schema type:
- boolean: true if the pattern matches, false otherwise
- string: the first match or first capture group
- number/integer: the first match parsed as a number
- array: all matches'
minLength: 1
maxLength: 1000
model:
description: 'This is the model that will be used to extract the structured output.
To provide your own custom system and user prompts for structured output extraction, populate the messages array
with your system and user messages. You can specify liquid templating in your system and user messages.
Between the system or user messages, you must reference either ''transcript'' or ''messages'' with the `{{}}`
syntax to access the conversation history.
Between the system or user messages, you must reference a variation of the structured output with the `{{}}` syntax
to access the structured output definition.
i.e.:
`{{structuredOutput}}`
`{{structuredOutput.name}}`
`{{structuredOutput.description}}`
`{{structuredOutput.schema}}`
If model is not specified, GPT-4.1 will be used by default for extraction, utilizing default system and user prompts.
If messages or required fields are not specified, the default system and user prompts will be used.'
oneOf:
- $ref: '#/components/schemas/WorkflowOpenAIModel'
title: WorkflowOpenAIModel
- $ref: '#/components/schemas/WorkflowAnthropicModel'
title: WorkflowAnthropicModel
- $ref: '#/components/schemas/WorkflowAnthropicBedrockModel'
title: WorkflowAnthropicBedrockModel
- $ref: '#/components/schemas/WorkflowGoogleModel'
title: WorkflowGoogleModel
- $ref: '#/components/schemas/WorkflowCustomModel'
title: WorkflowCustomModel
compliancePlan:
description: Compliance configuration for this output. Only enable overrides if no sensitive data will be stored.
example:
forceStoreOnHipaaEnabled: false
allOf:
- $ref: '#/components/schemas/ComplianceOverride'
name:
type: string
description: This is the name of the structured output.
minLength: 1
maxLength: 40
schema:
description: 'This is the JSON Schema definition for the structured output.
This is required when creating a structured output. Defines the structure and validation rules for the data that
will be extracted. Supports all JSON Schema features including:
- Objects and nested properties
- Arrays and array validation
- String, number, boolean, and null types
- Enums and const values
- Validation constraints (min/max, patterns, etc.)
- Composition with allOf, anyOf, oneOf'
allOf:
- $ref: '#/components/schemas/JsonSchema'
description:
type: string
description: 'This is the description of what the structured output extracts.
Use this to provide context about what data will be extracted and how it will be used.'
assistantIds:
description: 'These are the assistant IDs that this structured output is linked to.
When linked to assistants, this structured output will be available for extraction during those assistant''s calls.'
type: array
items:
type: string
workflowIds:
description: 'These are the workflow IDs that this structured output is linked to.
When linked to workflows, this structured output will be available for extraction during those workflow''s execution.'
type: array
items:
type: string
required:
- name
- schema
CreateSupabaseCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- supabase
description: This is for supabase storage.
fallbackIndex:
type: number
minimum: 1
description: This is the order in which this storage provider is tried during upload retries. Lower numbers are
tried first in increasing order.
bucketPlan:
$ref: '#/components/schemas/SupabaseBucketPlan'
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
CreateTavusCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- tavus
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateTextEditorToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- textEditor
description: The type of tool. "textEditor" for Text Editor tool.
subType:
type: string
enum:
- text_editor_20241022
description: The sub type of tool.
server:
description: "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent\
\ to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n\
\ - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this\
\ order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook\
\ expects a response with tool call result."
allOf:
- $ref: '#/components/schemas/Server'
name:
type: string
description: The name of the tool, fixed to 'str_replace_editor'
default: str_replace_editor
enum:
- str_replace_editor
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
- subType
- name
CreateTogetherAICredentialDTO:
type: object
properties:
provider:
type: string
enum:
- together-ai
apiKey:
type: string
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateTransferCallToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
enum:
- transferCall
destinations:
type: array
description: These are the destinations that the call can be transferred to. If no destinations are provided, server.url
will be used to get the transfer destination once the tool is called.
items:
oneOf:
- $ref: '#/components/schemas/TransferDestinationAssistant'
title: Assistant
- $ref: '#/components/schemas/TransferDestinationNumber'
title: Number
- $ref: '#/components/schemas/TransferDestinationSip'
title: Sip
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateTwilioCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- twilio
authToken:
type: string
description: This is not returned in the API.
apiKey:
type: string
description: This is not returned in the API.
apiSecret:
type: string
description: This is not returned in the API.
accountSid:
type: string
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- accountSid
CreateVoicemailToolDTO:
type: object
properties:
messages:
type: array
description: 'These are the messages that will be spoken to the user as the tool is running.
For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function
tool, these can be custom configured.'
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
type:
type: string
description: The type of tool. "voicemail" for Voicemail tool.
enum:
- voicemail
beepDetectionEnabled:
type: boolean
description: 'This is the flag that enables beep detection for voicemail detection and applies only for twilio based
calls.
@default false'
default: false
example: false
rejectionPlan:
description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall\
\ if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see\
\ you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern\
\ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n\
{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n\
}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n\
\ type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages =\
\ recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n \
\ {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n\
\ {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n\
{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying\
\ to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\
\ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size\
\ < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content\
\ | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive\
\ messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %}\
\ Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool\
\ thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains\
\ 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains\
\ 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n\
}\n```"
allOf:
- $ref: '#/components/schemas/ToolRejectionPlan'
required:
- type
CreateVonageCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- vonage
apiSecret:
type: string
description: This is not returned in the API.
apiKey:
type: string
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiSecret
- apiKey
CreateWebhookCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- webhook
authenticationPlan:
description: This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication.
oneOf:
- $ref: '#/components/schemas/OAuth2AuthenticationPlan'
- $ref: '#/components/schemas/HMACAuthenticationPlan'
- $ref: '#/components/schemas/BearerAuthenticationPlan'
discriminator:
propertyName: type
mapping:
oauth2: '#/components/schemas/OAuth2AuthenticationPlan'
hmac: '#/components/schemas/HMACAuthenticationPlan'
bearer: '#/components/schemas/BearerAuthenticationPlan'
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- authenticationPlan
CreateWellSaidCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- wellsaid
apiKey:
type: string
maxLength: 10000
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CreateXAiCredentialDTO:
type: object
properties:
provider:
type: string
description: 'This is the api key for Grok in XAi''s console. Get it from here: https://console.x.ai'
enum:
- xai
apiKey:
type: string
maxLength: 10000
description: This is not returned in the API.
name:
type: string
description: This is the name of credential. This is just for your reference.
minLength: 1
maxLength: 40
required:
- provider
- apiKey
CustomEndpointingModelSmartEndpointingPlan:
type: object
properties:
provider:
type: string
description: This is the provider for the smart endpointing plan. Use `custom-endpointing-model` for custom endpointing
providers that are not natively supported.
enum:
- vapi
- livekit
- custom-endpointing-model
example: custom-endpointing-model
server:
description: "This is where the endpointing request will be sent. If not provided, will be sent to `assistant.server`.\
\ If that does not exist either, will be sent to `org.server`.\n\nRequest Example:\n\nPOST https://{server.url}\n\
Content-Type: application/json\n\n{\n \"message\": {\n \"type\": \"call.endpointing.request\",\n \"messages\"\
: [\n {\n \"role\": \"user\",\n \"message\": \"Hello, how are you?\",\n \"time\": 1234567890,\n\
\ \"secondsFromStart\": 0\n }\n ],\n ...other metadata about the call...\n }\n}\n\nResponse\
\ Expected:\n{\n \"timeoutSeconds\": 0.5\n}\n\nThe timeout is the number of seconds to wait before considering\
\ the user's speech as finished. The endpointing timeout is automatically reset each time a new transcript is\
\ received (and another `call.endpointing.request` is sent)."
allOf:
- $ref: '#/components/schemas/Server'
required:
- provider
CustomLLMModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
provider:
type: string
description: This is the provider that will be used for the model. Any service, including your own server, that
is compatible with the OpenAI API can be used.
enum:
- custom-llm
metadataSendMode:
type: string
description: 'This determines whether metadata is sent in requests to the custom provider.
- `off` will not send any metadata. payload will look like `{ messages }`
- `variable` will send `assistant.metadata` as a variable on the payload. payload will look like `{ messages,
metadata }`
- `destructured` will send `assistant.metadata` fields directly on the payload. payload will look like `{ messages,
...metadata }`
Further, `variable` and `destructured` will send `call`, `phoneNumber`, and `customer` objects in the payload.
Default is `variable`.'
enum:
- 'off'
- variable
- destructured
headers:
type: object
description: 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).
additionalProperties:
type: string
example:
X-Custom-Header: value
url:
type: string
description: These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1
wordLevelConfidenceEnabled:
type: boolean
description: '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:
type: number
description: This sets the timeout for the connection to the custom provider without needing to stream any tokens
back. Default is 20 seconds.
minimum: 0
maximum: 300
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- provider
- url
- model
CustomMessage:
type: object
properties:
contents:
type: array
description: 'This is an alternative to the `content` property. It allows to specify variants of the same content,
one per language.
Usage:
- If your assistants are multilingual, you can provide content for each language.
- If you don''t provide content for a language, the first item in the array will be automatically translated to
the active language at that moment.
This will override the `content` property.'
items:
oneOf:
- $ref: '#/components/schemas/TextContent'
title: Text
type:
type: string
description: This is a custom message.
enum:
- custom-message
content:
type: string
description: This is the content that the assistant will say when this message is triggered.
maxLength: 1000
required:
- type
CustomTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used. Use `custom-transcriber` for providers that are
not natively supported.
enum:
- custom-transcriber
server:
description: "This is where the transcription request will be sent.\n\nUsage:\n1. Vapi will initiate a websocket\
\ connection with `server.url`.\n\n2. Vapi will send an initial text frame with the sample rate. Format:\n```\n\
\ {\n \"type\": \"start\",\n \"encoding\": \"linear16\", // 16-bit raw PCM format\n \"container\"\
: \"raw\",\n \"sampleRate\": {{sampleRate}},\n \"channels\": 2 // customer is channel 0, assistant is\
\ channel 1\n }\n```\n\n3. Vapi will send the audio data in 16-bit raw PCM format as binary frames.\n\n4. You\
\ can read the messages something like this:\n```\nws.on('message', (data, isBinary) => {\n if (isBinary) {\n\
\ pcmBuffer = Buffer.concat([pcmBuffer, data]);\n console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`);\n\
\ } else {\n console.log('Received message:', JSON.parse(data.toString()));\n }\n});\n```\n\n5. You will\
\ respond with transcriptions as you have them. Format:\n```\n {\n \"type\": \"transcriber-response\",\n \
\ \"transcription\": \"Hello, world!\",\n \"channel\": \"customer\" | \"assistant\"\n }\n```"
allOf:
- $ref: '#/components/schemas/Server'
fallbackPlan:
description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider
fails.
allOf:
- $ref: '#/components/schemas/FallbackTranscriberPlan'
required:
- provider
- server
CustomVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used. Use `custom-voice` for providers that are not natively
supported.
enum:
- custom-voice
voiceId:
type: string
description: This is the provider-specific ID that will be used. This is passed in the voice request payload to
identify the voice to use.
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
server:
description: "This is where the voice request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type:\
\ application/json\n\n{\n \"message\": {\n \"type\": \"voice-request\",\n \"text\": \"Hello, world!\",\n\
\ \"sampleRate\": 24000,\n ...other metadata about the call...\n }\n}\n\nResponse Expected: 1-channel 16-bit\
\ raw PCM audio at the sample rate specified in the request. Here is how the response will be piped to the transport:\n\
```\nresponse.on('data', (chunk: Buffer) => {\n outputStream.write(chunk);\n});\n```"
allOf:
- $ref: '#/components/schemas/Server'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- server
CustomerCustomEndpointingRule:
type: object
properties:
type:
type: string
description: 'This endpointing rule is based on current customer message as they are speaking.
Flow:
- Assistant speaks
- Customer starts speaking
- Customer transcription comes in
- This rule is evaluated on the current customer transcription
- If a match is found based on `regex`, the endpointing timeout is set to `timeoutSeconds`
Usage:
- If you want to wait longer while customer is speaking numbers, you can set a longer timeout.'
enum:
- customer
regex:
type: string
description: 'This is the regex pattern to match.
Note:
- This works by using the `RegExp.test` method in Node.JS. Eg. `/hello/.test("hello there")` will return `true`.
Hot tip:
- In JavaScript, escape `\` when sending the regex pattern. Eg. `"hello\sthere"` will be sent over the wire as
`"hellosthere"`. Send `"hello\\sthere"` instead.
- `RegExp.test` does substring matching, so `/cat/.test("I love cats")` will return `true`. To do full string
matching, send "^cat$".'
regexOptions:
description: 'These are the options for the regex match. Defaults to all disabled.
@default []'
type: array
items:
$ref: '#/components/schemas/RegexOption'
timeoutSeconds:
type: number
description: This is the endpointing timeout in seconds, if the rule is matched.
minimum: 0
maximum: 15
required:
- type
- regex
- timeoutSeconds
CustomerSpeechTimeoutOptions:
type: object
properties:
timeoutSeconds:
type: number
description: 'This is the timeout in seconds before action is triggered.
The clock starts when the assistant finishes speaking and remains active until the user speaks.
@default 7.5
@minimum 2
@maximum 1000'
minimum: 1
maximum: 1000
triggerMaxCount:
type: number
description: 'This is the maximum number of times the hook will trigger in a call.
@default 3'
minimum: 1
maximum: 10
triggerResetMode:
type: object
description: 'This is whether the counter for hook trigger resets the user speaks.
@default never'
required:
- timeoutSeconds
DeepInfraModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
provider:
type: string
enum:
- deepinfra
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- provider
- model
DeepSeekModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
enum:
- deepseek-chat
- deepseek-reasoner
provider:
type: string
enum:
- deep-seek
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- model
- provider
DeepgramTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- deepgram
model:
description: 'This is the Deepgram model that will be used. A list of models can be found here: https://developers.deepgram.com/docs/models-languages-overview'
oneOf:
- type: string
enum:
- nova-3
- nova-3-general
- nova-3-medical
- nova-2
- nova-2-general
- nova-2-meeting
- nova-2-phonecall
- nova-2-finance
- nova-2-conversationalai
- nova-2-voicemail
- nova-2-video
- nova-2-medical
- nova-2-drivethru
- nova-2-automotive
- nova
- nova-general
- nova-phonecall
- nova-medical
- enhanced
- enhanced-general
- enhanced-meeting
- enhanced-phonecall
- enhanced-finance
- base
- base-general
- base-meeting
- base-phonecall
- base-finance
- base-conversationalai
- base-voicemail
- base-video
- whisper
- flux-general-en
- flux-general-multi
- type: string
language:
type: string
description: 'This is the language that will be set for the transcription. The list of languages Deepgram supports
can be found here: https://developers.deepgram.com/docs/models-languages-overview'
enum:
- ar
- az
- ba
- be
- bg
- bn
- br
- bs
- 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
- fa
- fi
- fr
- fr-CA
- ha
- haw
- he
- hi
- hi-Latn
- hr
- hu
- id
- is
- it
- ja
- jw
- kn
- ko
- ko-KR
- ln
- lt
- lv
- mk
- mr
- 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
- te
- th
- th-TH
- tl
- tr
- tt
- uk
- ur
- vi
- yo
- zh
- zh-CN
- zh-HK
- zh-Hans
- zh-Hant
- zh-TW
smartFormat:
type: boolean
description: This will be use smart format option provided by Deepgram. It's default disabled because it can sometimes
format numbers as times but it's getting better.
example: false
mipOptOut:
type: boolean
description: 'If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out
This will only be used if you are using your own Deepgram API key.
@default false'
example: false
default: false
numerals:
type: boolean
description: 'If set to true, this will cause deepgram to convert spoken numbers to literal numerals. For example,
"my phone number is nine-seven-two..." would become "my phone number is 972..."
@default false'
example: false
profanityFilter:
type: boolean
description: 'If set to true, Deepgram will replace profanity in transcripts with surrounding asterisks, e.g. "f***".
@default false'
example: false
redaction:
type: array
description: 'Enables redaction of sensitive information from transcripts.
Options include:
- "pci": Redacts credit card numbers, expiration dates, and CVV.
- "pii": Redacts personally identifiable information (names, locations, identifying numbers, etc.).
- "phi": Redacts protected health information (medical conditions, drugs, injuries, etc.).
- "numbers": Redacts numerical and identifying entities (dates, account numbers, SSNs, etc.).
Multiple values can be provided to redact different categories simultaneously.
Redacted content is replaced with entity labels like [CREDIT_CARD_1], [SSN_1], etc.
See https://developers.deepgram.com/docs/redaction for details.'
enum:
- pci
- pii
- phi
- numbers
example:
- pci
- phi
items:
type: string
enum:
- pci
- pii
- phi
- numbers
confidenceThreshold:
type: number
description: 'Transcripts below this confidence threshold will be discarded.
@default 0.4'
minimum: 0
maximum: 1
example: 0.4
eotThreshold:
type: number
description: 'End-of-turn confidence required to finish a turn. Only used with Flux models.
@default 0.7'
minimum: 0.5
maximum: 0.9
example: 0.7
eotTimeoutMs:
type: number
description: 'A turn will be finished when this much time has passed after speech, regardless of EOT confidence.
Only used with Flux models.
@default 5000'
minimum: 500
maximum: 10000
example: 5000
languages:
description: 'Language hints to bias Flux Multilingual (`flux-general-multi`) toward specific languages.
Provide BCP-47 language codes (e.g. "en", "es", "fr"). Multiple hints can be given for
multilingual or code-switching scenarios. Omit for auto-detection. Only used with `flux-general-multi`.'
example:
- en
- es
type: array
items:
type: string
keywords:
description: These keywords are passed to the transcription model to help it pick up use-case specific words. Anything
that may not be a common word, like your company name, should be added here.
type: array
items:
type: string
pattern: /^\p{L}[\p{L}\d]*(?::[+-]?\d+)?$/u
keyterm:
description: Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up
to 90%.
type: array
items:
type: string
endpointing:
type: number
description: 'This is the timeout after which Deepgram will send transcription on user silence. You can read in-depth
documentation here: https://developers.deepgram.com/docs/endpointing.
Here are the most important bits:
- Defaults to 10. This is recommended for most use cases to optimize for latency.
- 10 can cause some missing transcriptions since because of the shorter context. This mostly happens for one-word
utterances. For those uses cases, it''s recommended to try 300. It will add a bit of latency but the quality and
reliability of the experience will be better.
- If neither 10 nor 300 work, contact support@vapi.ai and we''ll find another solution.
@default 10'
minimum: 10
maximum: 500
fallbackPlan:
description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider
fails.
allOf:
- $ref: '#/components/schemas/FallbackTranscriberPlan'
required:
- provider
DeepgramVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- deepgram
voiceId:
type: string
description: This is the provider-specific ID that will be used.
enum:
- asteria
- luna
- stella
- athena
- hera
- orion
- arcas
- perseus
- angus
- orpheus
- helios
- zeus
- thalia
- andromeda
- helena
- apollo
- arcas
- aries
- amalthea
- asteria
- athena
- atlas
- aurora
- callista
- cora
- cordelia
- delia
- draco
- electra
- harmonia
- hera
- hermes
- hyperion
- iris
- janus
- juno
- jupiter
- luna
- mars
- minerva
- neptune
- odysseus
- ophelia
- orion
- orpheus
- pandora
- phoebe
- pluto
- saturn
- selene
- theia
- vesta
- zeus
- celeste
- estrella
- nestor
- sirio
- carina
- alvaro
- diana
- aquila
- selena
- javier
title: This is the Deepgram Voice ID
model:
type: string
description: This is the model that will be used. Defaults to 'aura-2' when not specified.
enum:
- aura
- aura-2
example: aura-2
mipOptOut:
type: boolean
description: 'If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out
This will only be used if you are using your own Deepgram API key.
@default false'
example: false
default: false
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
DeveloperMessage:
type: object
properties:
role:
type: string
description: This is the role of the message author
default: developer
enum:
- developer
content:
type: string
description: This is the content of the developer message
maxLength: 10000
name:
type: string
description: This is an optional name for the participant
maxLength: 40
metadata:
type: object
description: This is an optional metadata for the message
required:
- role
- content
ElevenLabsPronunciationDictionaryLocator:
type: object
properties:
pronunciationDictionaryId:
type: string
description: This is the ID of the pronunciation dictionary to use.
title: This is the ElevenLabs Pronunciation Dictionary ID
versionId:
type: string
description: This is the version ID of the pronunciation dictionary to use.
title: This is the ElevenLabs Pronunciation Dictionary Version ID
required:
- pronunciationDictionaryId
- versionId
ElevenLabsTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- 11labs
model:
description: This is the model that will be used for the transcription.
oneOf:
- type: string
enum:
- scribe_v1
- scribe_v2
- scribe_v2_realtime
language:
type: string
description: This is the language that will be used for the transcription.
enum:
- aa
- ab
- ae
- af
- ak
- am
- an
- ar
- as
- av
- ay
- az
- ba
- be
- bg
- bh
- bi
- bm
- bn
- bo
- br
- bs
- ca
- ce
- ch
- co
- cr
- cs
- cu
- cv
- cy
- da
- de
- dv
- dz
- ee
- el
- en
- eo
- es
- et
- eu
- fa
- ff
- fi
- fj
- fo
- fr
- fy
- ga
- gd
- gl
- gn
- gu
- gv
- ha
- he
- hi
- ho
- hr
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- io
- is
- it
- iu
- ja
- jv
- ka
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ku
- kv
- kw
- ky
- la
- lb
- lg
- li
- ln
- lo
- lt
- lu
- lv
- mg
- mh
- mi
- mk
- ml
- mn
- mr
- ms
- mt
- my
- na
- nb
- nd
- ne
- ng
- nl
- nn
- 'no'
- nr
- nv
- ny
- oc
- oj
- om
- or
- os
- pa
- pi
- pl
- ps
- pt
- qu
- rm
- rn
- ro
- ru
- rw
- sa
- sc
- sd
- se
- sg
- si
- sk
- sl
- sm
- sn
- so
- sq
- sr
- ss
- st
- su
- sv
- sw
- ta
- te
- tg
- th
- ti
- tk
- tl
- tn
- to
- tr
- ts
- tt
- tw
- ty
- ug
- uk
- ur
- uz
- ve
- vi
- vo
- wa
- wo
- xh
- yi
- yue
- yo
- za
- zh
- zu
silenceThresholdSeconds:
type: number
description: This is the number of seconds of silence before VAD commits (0.3-3.0).
minimum: 0.3
maximum: 3
example: 1.5
confidenceThreshold:
type: number
description: This is the VAD sensitivity (0.1-0.9, lower indicates more sensitive).
minimum: 0.1
maximum: 0.9
example: 0.4
minSpeechDurationMs:
type: number
description: This is the minimum speech duration for VAD (50-2000ms).
minimum: 50
maximum: 2000
example: 100
minSilenceDurationMs:
type: number
description: This is the minimum silence duration for VAD (50-2000ms).
minimum: 50
maximum: 2000
example: 100
fallbackPlan:
description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider
fails.
allOf:
- $ref: '#/components/schemas/FallbackTranscriberPlan'
required:
- provider
ElevenLabsVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- 11labs
voiceId:
description: This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice
Library.
oneOf:
- type: string
enum:
- burt
- marissa
- andrea
- sarah
- phillip
- steve
- joseph
- myra
- paula
- ryan
- drew
- paul
- mrb
- matilda
- mark
title: Preset Voice Options
- type: string
title: 11Labs Voice ID
stability:
type: number
description: Defines the stability for voice settings.
minimum: 0
maximum: 1
example: 0.5
similarityBoost:
type: number
description: Defines the similarity boost for voice settings.
minimum: 0
maximum: 1
example: 0.75
style:
type: number
description: Defines the style for voice settings.
minimum: 0
maximum: 1
example: 0
useSpeakerBoost:
type: boolean
description: Defines the use speaker boost for voice settings.
example: false
speed:
type: number
description: Defines the speed for voice settings.
minimum: 0.7
maximum: 1.2
example: 0.9
optimizeStreamingLatency:
type: number
description: Defines the optimize streaming latency for voice settings. Defaults to 3.
minimum: 0
maximum: 4
example: 3
enableSsmlParsing:
type: boolean
description: 'This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults
to false to save latency.
@default false'
example: false
autoMode:
type: boolean
description: Defines the auto mode for voice settings. Defaults to false.
example: false
model:
type: string
description: This is the model that will be used. Defaults to 'eleven_turbo_v2' if not specified.
enum:
- eleven_multilingual_v2
- eleven_turbo_v2
- eleven_turbo_v2_5
- eleven_flash_v2
- eleven_flash_v2_5
- eleven_monolingual_v1
- eleven_v3
example: eleven_turbo_v2_5
language:
type: string
description: This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5 supports
language enforcement. For other models, an error will be returned if language code is provided.
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
pronunciationDictionaryLocators:
description: This is the pronunciation dictionary locators to use.
type: array
items:
$ref: '#/components/schemas/ElevenLabsPronunciationDictionaryLocator'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
ExactReplacement:
type: object
properties:
type:
type: string
description: 'This is the exact replacement type. You can use this to replace a specific word or phrase with a different
word or phrase.
Usage:
- Replace "hello" with "hi": { type: ''exact'', key: ''hello'', value: ''hi'' }
- Replace "good morning" with "good day": { type: ''exact'', key: ''good morning'', value: ''good day'' }
- Replace a specific name: { type: ''exact'', key: ''John Doe'', value: ''Jane Smith'' }
- Replace an acronym: { type: ''exact'', key: ''AI'', value: ''Artificial Intelligence'' }
- Replace a company name with its phonetic pronunciation: { type: ''exact'', key: ''Vapi'', value: ''Vappy'' }'
enum:
- exact
replaceAllEnabled:
type: boolean
description: 'This option let''s you control whether to replace all instances of the key or only the first one.
By default, it only replaces the first instance.
Examples:
- For { type: ''exact'', key: ''hello'', value: ''hi'', replaceAllEnabled: false }. Before: "hello world, hello
universe" | After: "hi world, hello universe"
- For { type: ''exact'', key: ''hello'', value: ''hi'', replaceAllEnabled: true }. Before: "hello world, hello
universe" | After: "hi world, hi universe"
@default false'
default: false
key:
type: string
description: This is the key to replace.
value:
type: string
description: This is the value that will replace the match.
maxLength: 1000
required:
- type
- key
- value
FallbackAssemblyAITranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- assembly-ai
language:
type: string
description: This is the language that will be set for the transcription.
enum:
- multi
- en
confidenceThreshold:
type: number
description: 'Transcripts below this confidence threshold will be discarded.
@default 0.4'
minimum: 0
maximum: 1
example: 0.4
formatTurns:
type: boolean
description: 'This enables formatting of transcripts.
@default true'
example: true
endOfTurnConfidenceThreshold:
type: number
description: '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'
minimum: 0
maximum: 1
example: 0.7
minEndOfTurnSilenceWhenConfident:
type: number
description: 'This is the minimum end of turn silence when confident in milliseconds.
Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set.
@default 160'
minimum: 0
example: 160
wordFinalizationMaxWaitTime:
type: number
deprecated: true
minimum: 0
example: 160
maxTurnSilence:
type: number
description: 'This is the maximum turn silence time in milliseconds.
Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set.
@default 400'
minimum: 0
example: 400
vadAssistedEndpointingEnabled:
type: boolean
description: 'Use VAD to assist with endpointing decisions from the transcriber.
When enabled, transcriber endpointing will be buffered if VAD detects the user is still speaking, preventing premature
turn-taking.
When disabled, transcriber endpointing will be used immediately regardless of VAD state, allowing for quicker
but more aggressive turn-taking.
Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set.
@default true'
example: true
speechModel:
type: string
description: 'This is the speech model used for the streaming session.
Note: Keyterms prompting is not supported with multilingual streaming.
@default ''universal-streaming-english'''
enum:
- universal-streaming-english
- universal-streaming-multilingual
realtimeUrl:
type: string
description: The WebSocket URL that the transcriber connects to.
wordBoost:
description: Add up to 2500 characters of custom vocabulary.
type: array
items:
type: string
maxLength: 2500
keytermsPrompt:
description: '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.'
type: array
items:
type: string
maxLength: 50
endUtteranceSilenceThreshold:
type: number
description: The duration of the end utterance silence threshold in milliseconds.
disablePartialTranscripts:
type: boolean
description: 'Disable partial transcripts.
Set to `true` to not receive partial transcripts. Defaults to `false`.'
required:
- provider
FallbackAzureSpeechTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- azure
language:
type: string
description: 'This is the language that will be set for the transcription. The list of languages Azure supports
can be found here: https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt'
enum:
- af-ZA
- am-ET
- ar-AE
- ar-BH
- ar-DZ
- ar-EG
- ar-IL
- ar-IQ
- ar-JO
- ar-KW
- ar-LB
- ar-LY
- ar-MA
- ar-OM
- ar-PS
- ar-QA
- ar-SA
- ar-SY
- ar-TN
- ar-YE
- az-AZ
- bg-BG
- bn-IN
- bs-BA
- ca-ES
- cs-CZ
- cy-GB
- da-DK
- de-AT
- de-CH
- de-DE
- el-GR
- en-AU
- en-CA
- en-GB
- en-GH
- en-HK
- en-IE
- en-IN
- en-KE
- en-NG
- en-NZ
- en-PH
- en-SG
- en-TZ
- en-US
- en-ZA
- es-AR
- es-BO
- es-CL
- es-CO
- es-CR
- es-CU
- es-DO
- es-EC
- es-ES
- es-GQ
- es-GT
- es-HN
- es-MX
- es-NI
- es-PA
- es-PE
- es-PR
- es-PY
- es-SV
- es-US
- es-UY
- es-VE
- et-EE
- eu-ES
- fa-IR
- fi-FI
- fil-PH
- fr-BE
- fr-CA
- fr-CH
- fr-FR
- ga-IE
- gl-ES
- gu-IN
- he-IL
- hi-IN
- hr-HR
- hu-HU
- hy-AM
- id-ID
- is-IS
- it-CH
- it-IT
- ja-JP
- jv-ID
- ka-GE
- kk-KZ
- km-KH
- kn-IN
- ko-KR
- lo-LA
- lt-LT
- lv-LV
- mk-MK
- ml-IN
- mn-MN
- mr-IN
- ms-MY
- mt-MT
- my-MM
- nb-NO
- ne-NP
- nl-BE
- nl-NL
- pa-IN
- pl-PL
- ps-AF
- pt-BR
- pt-PT
- ro-RO
- ru-RU
- si-LK
- sk-SK
- sl-SI
- so-SO
- sq-AL
- sr-RS
- sv-SE
- sw-KE
- sw-TZ
- ta-IN
- te-IN
- th-TH
- tr-TR
- uk-UA
- ur-IN
- uz-UZ
- vi-VN
- wuu-CN
- yue-CN
- zh-CN
- zh-CN-shandong
- zh-CN-sichuan
- zh-HK
- zh-TW
- zu-ZA
segmentationStrategy:
type: string
description: Controls how phrase boundaries are detected, enabling either simple time/silence heuristics or more
advanced semantic segmentation.
enum:
- Default
- Time
- Semantic
segmentationSilenceTimeoutMs:
type: number
description: Duration of detected silence after which the service finalizes a phrase. Configure to adjust sensitivity
to pauses in speech.
minimum: 100
maximum: 5000
segmentationMaximumTimeMs:
type: number
description: Maximum duration a segment can reach before being cut off when using time-based segmentation.
minimum: 20000
maximum: 70000
required:
- provider
FallbackAzureVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- azure
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum:
- andrew
- brian
- emma
title: Preset Voice Options
- type: string
title: Azure Voice ID
speed:
type: number
description: This is the speed multiplier that will be used.
minimum: 0.5
maximum: 2
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackCartesiaTranscriber:
type: object
properties:
provider:
type: string
enum:
- cartesia
model:
type: string
enum:
- ink-whisper
language:
type: string
enum:
- aa
- ab
- ae
- af
- ak
- am
- an
- ar
- as
- av
- ay
- az
- ba
- be
- bg
- bh
- bi
- bm
- bn
- bo
- br
- bs
- ca
- ce
- ch
- co
- cr
- cs
- cu
- cv
- cy
- da
- de
- dv
- dz
- ee
- el
- en
- eo
- es
- et
- eu
- fa
- ff
- fi
- fj
- fo
- fr
- fy
- ga
- gd
- gl
- gn
- gu
- gv
- ha
- he
- hi
- ho
- hr
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- io
- is
- it
- iu
- ja
- jv
- ka
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ku
- kv
- kw
- ky
- la
- lb
- lg
- li
- ln
- lo
- lt
- lu
- lv
- mg
- mh
- mi
- mk
- ml
- mn
- mr
- ms
- mt
- my
- na
- nb
- nd
- ne
- ng
- nl
- nn
- 'no'
- nr
- nv
- ny
- oc
- oj
- om
- or
- os
- pa
- pi
- pl
- ps
- pt
- qu
- rm
- rn
- ro
- ru
- rw
- sa
- sc
- sd
- se
- sg
- si
- sk
- sl
- sm
- sn
- so
- sq
- sr
- ss
- st
- su
- sv
- sw
- ta
- te
- tg
- th
- ti
- tk
- tl
- tn
- to
- tr
- ts
- tt
- tw
- ty
- ug
- uk
- ur
- uz
- ve
- vi
- vo
- wa
- wo
- xh
- yi
- yue
- yo
- za
- zh
- zu
required:
- provider
FallbackCartesiaVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- cartesia
voiceId:
type: string
description: The ID of the particular voice you want to use.
model:
type: string
description: This is the model that will be used. This is optional and will default to the correct model for the
voiceId.
enum:
- sonic-3.5
- sonic-3.5-2026-05-04
- sonic-3
- sonic-3-2026-01-12
- sonic-3-2025-10-27
- sonic-2
- sonic-2-2025-06-11
- sonic-english
- sonic-multilingual
- sonic-preview
- sonic
example: sonic-english
language:
type: string
description: This is the language that will be used. This is optional and will default to the correct language for
the voiceId.
enum:
- ar
- bg
- bn
- cs
- da
- de
- el
- en
- es
- fi
- fr
- gu
- he
- hi
- hr
- hu
- id
- it
- ja
- ka
- kn
- ko
- ml
- mr
- ms
- nl
- 'no'
- pa
- pl
- pt
- ro
- ru
- sk
- sv
- ta
- te
- th
- tl
- tr
- uk
- vi
- zh
example: en
experimentalControls:
description: Experimental controls for Cartesia voice generation
allOf:
- $ref: '#/components/schemas/CartesiaExperimentalControls'
generationConfig:
description: Generation config for fine-grained control of sonic-3 voice output (speed, volume, and experimental
controls). Only available for sonic-3 model.
allOf:
- $ref: '#/components/schemas/CartesiaGenerationConfig'
pronunciationDictId:
type: string
description: Pronunciation dictionary ID for sonic-3. Allows custom pronunciations for specific words. Only available
for sonic-3 model.
example: dict_abc123
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackCustomTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used. Use `custom-transcriber` for providers that are
not natively supported.
enum:
- custom-transcriber
server:
description: "This is where the transcription request will be sent.\n\nUsage:\n1. Vapi will initiate a websocket\
\ connection with `server.url`.\n\n2. Vapi will send an initial text frame with the sample rate. Format:\n```\n\
\ {\n \"type\": \"start\",\n \"encoding\": \"linear16\", // 16-bit raw PCM format\n \"container\"\
: \"raw\",\n \"sampleRate\": {{sampleRate}},\n \"channels\": 2 // customer is channel 0, assistant is\
\ channel 1\n }\n```\n\n3. Vapi will send the audio data in 16-bit raw PCM format as binary frames.\n\n4. You\
\ can read the messages something like this:\n```\nws.on('message', (data, isBinary) => {\n if (isBinary) {\n\
\ pcmBuffer = Buffer.concat([pcmBuffer, data]);\n console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`);\n\
\ } else {\n console.log('Received message:', JSON.parse(data.toString()));\n }\n});\n```\n\n5. You will\
\ respond with transcriptions as you have them. Format:\n```\n {\n \"type\": \"transcriber-response\",\n \
\ \"transcription\": \"Hello, world!\",\n \"channel\": \"customer\" | \"assistant\"\n }\n```"
allOf:
- $ref: '#/components/schemas/Server'
required:
- provider
- server
FallbackCustomVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used. Use `custom-voice` for providers that are not natively
supported.
enum:
- custom-voice
voiceId:
type: string
description: This is the provider-specific ID that will be used. This is passed in the voice request payload to
identify the voice to use.
server:
description: "This is where the voice request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type:\
\ application/json\n\n{\n \"message\": {\n \"type\": \"voice-request\",\n \"text\": \"Hello, world!\",\n\
\ \"sampleRate\": 24000,\n ...other metadata about the call...\n }\n}\n\nResponse Expected: 1-channel 16-bit\
\ raw PCM audio at the sample rate specified in the request. Here is how the response will be piped to the transport:\n\
```\nresponse.on('data', (chunk: Buffer) => {\n outputStream.write(chunk);\n});\n```"
allOf:
- $ref: '#/components/schemas/Server'
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- server
FallbackDeepgramTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- deepgram
model:
description: 'This is the Deepgram model that will be used. A list of models can be found here: https://developers.deepgram.com/docs/models-languages-overview'
oneOf:
- type: string
enum:
- nova-3
- nova-3-general
- nova-3-medical
- nova-2
- nova-2-general
- nova-2-meeting
- nova-2-phonecall
- nova-2-finance
- nova-2-conversationalai
- nova-2-voicemail
- nova-2-video
- nova-2-medical
- nova-2-drivethru
- nova-2-automotive
- nova
- nova-general
- nova-phonecall
- nova-medical
- enhanced
- enhanced-general
- enhanced-meeting
- enhanced-phonecall
- enhanced-finance
- base
- base-general
- base-meeting
- base-phonecall
- base-finance
- base-conversationalai
- base-voicemail
- base-video
- whisper
- flux-general-en
- flux-general-multi
- type: string
language:
type: string
description: 'This is the language that will be set for the transcription. The list of languages Deepgram supports
can be found here: https://developers.deepgram.com/docs/models-languages-overview'
enum:
- ar
- az
- ba
- be
- bg
- bn
- br
- bs
- 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
- fa
- fi
- fr
- fr-CA
- ha
- haw
- he
- hi
- hi-Latn
- hr
- hu
- id
- is
- it
- ja
- jw
- kn
- ko
- ko-KR
- ln
- lt
- lv
- mk
- mr
- 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
- te
- th
- th-TH
- tl
- tr
- tt
- uk
- ur
- vi
- yo
- zh
- zh-CN
- zh-HK
- zh-Hans
- zh-Hant
- zh-TW
smartFormat:
type: boolean
description: This will be use smart format option provided by Deepgram. It's default disabled because it can sometimes
format numbers as times but it's getting better.
example: false
mipOptOut:
type: boolean
description: 'If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out
This will only be used if you are using your own Deepgram API key.
@default false'
example: false
default: false
numerals:
type: boolean
description: 'If set to true, this will cause deepgram to convert spoken numbers to literal numerals. For example,
"my phone number is nine-seven-two..." would become "my phone number is 972..."
@default false'
example: false
profanityFilter:
type: boolean
description: 'If set to true, Deepgram will replace profanity in transcripts with surrounding asterisks, e.g. "f***".
@default false'
example: false
redaction:
type: array
description: 'Enables redaction of sensitive information from transcripts.
Options include:
- "pci": Redacts credit card numbers, expiration dates, and CVV.
- "pii": Redacts personally identifiable information (names, locations, identifying numbers, etc.).
- "phi": Redacts protected health information (medical conditions, drugs, injuries, etc.).
- "numbers": Redacts numerical and identifying entities (dates, account numbers, SSNs, etc.).
Multiple values can be provided to redact different categories simultaneously.
Redacted content is replaced with entity labels like [CREDIT_CARD_1], [SSN_1], etc.
See https://developers.deepgram.com/docs/redaction for details.'
enum:
- pci
- pii
- phi
- numbers
example:
- pci
- phi
items:
type: string
enum:
- pci
- pii
- phi
- numbers
confidenceThreshold:
type: number
description: 'Transcripts below this confidence threshold will be discarded.
@default 0.4'
minimum: 0
maximum: 1
example: 0.4
eotThreshold:
type: number
description: 'End-of-turn confidence required to finish a turn. Only used with Flux models.
@default 0.7'
minimum: 0.5
maximum: 0.9
example: 0.7
eotTimeoutMs:
type: number
description: 'A turn will be finished when this much time has passed after speech, regardless of EOT confidence.
Only used with Flux models.
@default 5000'
minimum: 500
maximum: 10000
example: 5000
languages:
description: 'Language hints to bias Flux Multilingual (`flux-general-multi`) toward specific languages.
Provide BCP-47 language codes (e.g. "en", "es", "fr"). Multiple hints can be given for
multilingual or code-switching scenarios. Omit for auto-detection. Only used with `flux-general-multi`.'
example:
- en
- es
type: array
items:
type: string
keywords:
description: These keywords are passed to the transcription model to help it pick up use-case specific words. Anything
that may not be a common word, like your company name, should be added here.
type: array
items:
type: string
pattern: /^\p{L}[\p{L}\d]*(?::[+-]?\d+)?$/u
keyterm:
description: Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up
to 90%.
type: array
items:
type: string
endpointing:
type: number
description: 'This is the timeout after which Deepgram will send transcription on user silence. You can read in-depth
documentation here: https://developers.deepgram.com/docs/endpointing.
Here are the most important bits:
- Defaults to 10. This is recommended for most use cases to optimize for latency.
- 10 can cause some missing transcriptions since because of the shorter context. This mostly happens for one-word
utterances. For those uses cases, it''s recommended to try 300. It will add a bit of latency but the quality and
reliability of the experience will be better.
- If neither 10 nor 300 work, contact support@vapi.ai and we''ll find another solution.
@default 10'
minimum: 10
maximum: 500
required:
- provider
FallbackDeepgramVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- deepgram
voiceId:
type: string
description: This is the provider-specific ID that will be used.
enum:
- asteria
- luna
- stella
- athena
- hera
- orion
- arcas
- perseus
- angus
- orpheus
- helios
- zeus
- thalia
- andromeda
- helena
- apollo
- arcas
- aries
- amalthea
- asteria
- athena
- atlas
- aurora
- callista
- cora
- cordelia
- delia
- draco
- electra
- harmonia
- hera
- hermes
- hyperion
- iris
- janus
- juno
- jupiter
- luna
- mars
- minerva
- neptune
- odysseus
- ophelia
- orion
- orpheus
- pandora
- phoebe
- pluto
- saturn
- selene
- theia
- vesta
- zeus
- celeste
- estrella
- nestor
- sirio
- carina
- alvaro
- diana
- aquila
- selena
- javier
title: This is the Deepgram Voice ID
model:
type: string
description: This is the model that will be used. Defaults to 'aura-2' when not specified.
enum:
- aura
- aura-2
example: aura-2
mipOptOut:
type: boolean
description: 'If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out
This will only be used if you are using your own Deepgram API key.
@default false'
example: false
default: false
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackElevenLabsTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- 11labs
model:
description: This is the model that will be used for the transcription.
oneOf:
- type: string
enum:
- scribe_v1
- scribe_v2
- scribe_v2_realtime
language:
type: string
description: This is the language that will be used for the transcription.
enum:
- aa
- ab
- ae
- af
- ak
- am
- an
- ar
- as
- av
- ay
- az
- ba
- be
- bg
- bh
- bi
- bm
- bn
- bo
- br
- bs
- ca
- ce
- ch
- co
- cr
- cs
- cu
- cv
- cy
- da
- de
- dv
- dz
- ee
- el
- en
- eo
- es
- et
- eu
- fa
- ff
- fi
- fj
- fo
- fr
- fy
- ga
- gd
- gl
- gn
- gu
- gv
- ha
- he
- hi
- ho
- hr
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- io
- is
- it
- iu
- ja
- jv
- ka
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ku
- kv
- kw
- ky
- la
- lb
- lg
- li
- ln
- lo
- lt
- lu
- lv
- mg
- mh
- mi
- mk
- ml
- mn
- mr
- ms
- mt
- my
- na
- nb
- nd
- ne
- ng
- nl
- nn
- 'no'
- nr
- nv
- ny
- oc
- oj
- om
- or
- os
- pa
- pi
- pl
- ps
- pt
- qu
- rm
- rn
- ro
- ru
- rw
- sa
- sc
- sd
- se
- sg
- si
- sk
- sl
- sm
- sn
- so
- sq
- sr
- ss
- st
- su
- sv
- sw
- ta
- te
- tg
- th
- ti
- tk
- tl
- tn
- to
- tr
- ts
- tt
- tw
- ty
- ug
- uk
- ur
- uz
- ve
- vi
- vo
- wa
- wo
- xh
- yi
- yue
- yo
- za
- zh
- zu
silenceThresholdSeconds:
type: number
description: This is the number of seconds of silence before VAD commits (0.3-3.0).
minimum: 0.3
maximum: 3
example: 1.5
confidenceThreshold:
type: number
description: This is the VAD sensitivity (0.1-0.9, lower indicates more sensitive).
minimum: 0.1
maximum: 0.9
example: 0.4
minSpeechDurationMs:
type: number
description: This is the minimum speech duration for VAD (50-2000ms).
minimum: 50
maximum: 2000
example: 100
minSilenceDurationMs:
type: number
description: This is the minimum silence duration for VAD (50-2000ms).
minimum: 50
maximum: 2000
example: 100
required:
- provider
FallbackElevenLabsVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- 11labs
voiceId:
description: This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice
Library.
oneOf:
- type: string
enum:
- burt
- marissa
- andrea
- sarah
- phillip
- steve
- joseph
- myra
- paula
- ryan
- drew
- paul
- mrb
- matilda
- mark
title: Preset Voice Options
- type: string
title: 11Labs Voice ID
stability:
type: number
description: Defines the stability for voice settings.
minimum: 0
maximum: 1
example: 0.5
similarityBoost:
type: number
description: Defines the similarity boost for voice settings.
minimum: 0
maximum: 1
example: 0.75
style:
type: number
description: Defines the style for voice settings.
minimum: 0
maximum: 1
example: 0
useSpeakerBoost:
type: boolean
description: Defines the use speaker boost for voice settings.
example: false
speed:
type: number
description: Defines the speed for voice settings.
minimum: 0.7
maximum: 1.2
example: 0.9
optimizeStreamingLatency:
type: number
description: Defines the optimize streaming latency for voice settings. Defaults to 3.
minimum: 0
maximum: 4
example: 3
enableSsmlParsing:
type: boolean
description: 'This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults
to false to save latency.
@default false'
example: false
autoMode:
type: boolean
description: Defines the auto mode for voice settings. Defaults to false.
example: false
model:
type: string
description: This is the model that will be used. Defaults to 'eleven_turbo_v2' if not specified.
enum:
- eleven_multilingual_v2
- eleven_turbo_v2
- eleven_turbo_v2_5
- eleven_flash_v2
- eleven_flash_v2_5
- eleven_monolingual_v1
- eleven_v3
example: eleven_turbo_v2_5
language:
type: string
description: This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5 supports
language enforcement. For other models, an error will be returned if language code is provided.
pronunciationDictionaryLocators:
description: This is the pronunciation dictionary locators to use.
type: array
items:
$ref: '#/components/schemas/ElevenLabsPronunciationDictionaryLocator'
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackGladiaTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- gladia
model:
description: This is the Gladia model that will be used. Default is 'fast'
oneOf:
- type: string
enum:
- fast
- accurate
- solaria-1
languageBehaviour:
description: Defines how the transcription model detects the audio language. Default value is 'automatic single
language'.
oneOf:
- type: string
enum:
- manual
- automatic single language
- automatic multiple languages
language:
type: string
description: Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.
enum:
- af
- sq
- am
- ar
- hy
- as
- az
- ba
- eu
- be
- bn
- bs
- br
- bg
- ca
- zh
- hr
- cs
- da
- nl
- en
- et
- fo
- fi
- fr
- gl
- ka
- de
- el
- gu
- ht
- ha
- haw
- he
- hi
- hu
- is
- id
- it
- ja
- jv
- kn
- kk
- km
- ko
- lo
- la
- lv
- ln
- lt
- lb
- mk
- mg
- ms
- ml
- mt
- mi
- mr
- mn
- my
- ne
- 'no'
- nn
- oc
- ps
- fa
- pl
- pt
- pa
- ro
- ru
- sa
- sr
- sn
- sd
- si
- sk
- sl
- so
- es
- su
- sw
- sv
- tl
- tg
- ta
- tt
- te
- th
- bo
- tr
- tk
- uk
- ur
- uz
- vi
- cy
- yi
- yo
languages:
type: array
description: Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'.
items:
type: string
enum:
- af
- sq
- am
- ar
- hy
- as
- az
- ba
- eu
- be
- bn
- bs
- br
- bg
- ca
- zh
- hr
- cs
- da
- nl
- en
- et
- fo
- fi
- fr
- gl
- ka
- de
- el
- gu
- ht
- ha
- haw
- he
- hi
- hu
- is
- id
- it
- ja
- jv
- kn
- kk
- km
- ko
- lo
- la
- lv
- ln
- lt
- lb
- mk
- mg
- ms
- ml
- mt
- mi
- mr
- mn
- my
- ne
- 'no'
- nn
- oc
- ps
- fa
- pl
- pt
- pa
- ro
- ru
- sa
- sr
- sn
- sd
- si
- sk
- sl
- so
- es
- su
- sw
- sv
- tl
- tg
- ta
- tt
- te
- th
- bo
- tr
- tk
- uk
- ur
- uz
- vi
- cy
- yi
- yo
transcriptionHint:
type: string
description: 'Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words,
technical terms, names, etc. If empty, this argument is ignored.
⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide
a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit.'
maxLength: 600
example: custom vocabulary
prosody:
type: boolean
description: If prosody is true, you will get a transcription that can contain prosodies i.e. (laugh) (giggles)
(malefic laugh) (toss) (music)… Default value is false.
example: false
audioEnhancer:
type: boolean
description: If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is
false.
example: false
confidenceThreshold:
type: number
description: 'Transcripts below this confidence threshold will be discarded.
@default 0.4'
minimum: 0
maximum: 1
example: 0.4
endpointing:
type: number
minimum: 0.01
maximum: 10
example: 0.05
description: Endpointing time in seconds - time to wait before considering speech ended
speechThreshold:
type: number
minimum: 0
maximum: 1
example: 0.6
description: Speech threshold - sensitivity configuration for speech detection (0.0 to 1.0)
customVocabularyEnabled:
type: boolean
example: false
description: Enable custom vocabulary for improved accuracy
customVocabularyConfig:
description: Custom vocabulary configuration
allOf:
- $ref: '#/components/schemas/GladiaCustomVocabularyConfigDTO'
region:
type: string
enum:
- us-west
- eu-west
description: Region for processing audio (us-west or eu-west)
example: us-west
receivePartialTranscripts:
type: boolean
example: false
description: Enable partial transcripts for low-latency streaming transcription
required:
- provider
FallbackGoogleTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- google
model:
type: string
description: This is the model that will be used for the transcription.
enum:
- gemini-3-flash-preview
- 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
language:
type: string
description: This is the language that will be set for the transcription.
enum:
- Multilingual
- Arabic
- Bengali
- Bulgarian
- Chinese
- Croatian
- Czech
- Danish
- Dutch
- English
- Estonian
- Finnish
- French
- German
- Greek
- Hebrew
- Hindi
- Hungarian
- Indonesian
- Italian
- Japanese
- Korean
- Latvian
- Lithuanian
- Norwegian
- Polish
- Portuguese
- Romanian
- Russian
- Serbian
- Slovak
- Slovenian
- Spanish
- Swahili
- Swedish
- Thai
- Turkish
- Ukrainian
- Vietnamese
required:
- provider
FallbackHumeVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- hume
model:
type: string
description: This is the model that will be used.
enum:
- octave
- octave2
example: octave2
voiceId:
type: string
description: The ID of the particular voice you want to use.
isCustomHumeVoice:
type: boolean
description: Indicates whether the chosen voice is a preset Hume AI voice or a custom voice.
example: false
description:
type: string
description: 'Natural language instructions describing how the synthesized speech should sound, including but not
limited to tone, intonation, pacing, and accent (e.g., ''a soft, gentle voice with a strong British accent'').
If a Voice is specified in the request, this description serves as acting instructions.
If no Voice is specified, a new voice is generated based on this description.'
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackInworldVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- inworld
voiceId:
type: string
description: 'Available voices by language:
• en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald,
Sarah, Shaun, Theodore, Timothy, Wendy, Dominus, Hana, Clive, Carter, Blake, Luna
• 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
• ru: Svetlana, Elena, Dmitry, Nikolai
• hi: Riya, Manoj
• he: Yael, Oren
• ar: Nour, Omar'
maxLength: 120
title: Inworld Voice ID
enum:
- Alex
- Ashley
- Craig
- Deborah
- Dennis
- Edward
- Elizabeth
- Hades
- Julia
- Pixie
- Mark
- Olivia
- Priya
- Ronald
- Sarah
- Shaun
- Theodore
- Timothy
- Wendy
- Dominus
- Hana
- Clive
- Carter
- Blake
- Luna
- 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
- Svetlana
- Elena
- Dmitry
- Nikolai
- Riya
- Manoj
- Yael
- Oren
- Nour
- Omar
example: Alex
model:
type: string
description: This is the model that will be used.
enum:
- inworld-tts-1
default: inworld-tts-1
languageCode:
type: string
description: Language code for Inworld TTS synthesis
default: en
enum:
- en
- zh
- ko
- nl
- fr
- es
- ja
- de
- it
- pl
- pt
- ru
- hi
- he
- ar
temperature:
type: number
description: 'A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided,
the model''s default temperature of 1.1 will be used. The temperature parameter controls variance.
Higher values will make the output more random and can lead to more expressive results. Lower values will make
it more deterministic.
See https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations for more details.'
minimum: 0.1
maximum: 2
default: 1.1
example: null
speakingRate:
type: number
description: 'A floating point number between 0.5, inclusive, and 1.5, inclusive. If equal to null or not provided,
the model''s default speaking speed of 1.0 will be used.
Values above 0.8 are recommended for higher quality.
See https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations for more details.'
minimum: 0.5
maximum: 1.5
default: 1
example: null
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackLMNTVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- lmnt
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum:
- amy
- ansel
- autumn
- ava
- brandon
- caleb
- cassian
- chloe
- dalton
- daniel
- dustin
- elowen
- evander
- huxley
- james
- juniper
- kennedy
- lauren
- leah
- lily
- lucas
- magnus
- miles
- morgan
- natalie
- nathan
- noah
- nyssa
- oliver
- paige
- ryan
- sadie
- sophie
- stella
- terrence
- tyler
- vesper
- violet
- warrick
- zain
- zeke
- zoe
title: Preset Voice Options
- type: string
title: LMNT Voice ID
speed:
type: number
description: This is the speed multiplier that will be used.
minimum: 0.25
maximum: 2
example: null
language:
description: Two letter ISO 639-1 language code. Use "auto" for auto-detection.
enum:
- aa
- ab
- ae
- af
- ak
- am
- an
- ar
- as
- av
- ay
- az
- ba
- be
- bg
- bh
- bi
- bm
- bn
- bo
- br
- bs
- ca
- ce
- ch
- co
- cr
- cs
- cu
- cv
- cy
- da
- de
- dv
- dz
- ee
- el
- en
- eo
- es
- et
- eu
- fa
- ff
- fi
- fj
- fo
- fr
- fy
- ga
- gd
- gl
- gn
- gu
- gv
- ha
- he
- hi
- ho
- hr
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- io
- is
- it
- iu
- ja
- jv
- ka
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ku
- kv
- kw
- ky
- la
- lb
- lg
- li
- ln
- lo
- lt
- lu
- lv
- mg
- mh
- mi
- mk
- ml
- mn
- mr
- ms
- mt
- my
- na
- nb
- nd
- ne
- ng
- nl
- nn
- 'no'
- nr
- nv
- ny
- oc
- oj
- om
- or
- os
- pa
- pi
- pl
- ps
- pt
- qu
- rm
- rn
- ro
- ru
- rw
- sa
- sc
- sd
- se
- sg
- si
- sk
- sl
- sm
- sn
- so
- sq
- sr
- ss
- st
- su
- sv
- sw
- ta
- te
- tg
- th
- ti
- tk
- tl
- tn
- to
- tr
- ts
- tt
- tw
- ty
- ug
- uk
- ur
- uz
- ve
- vi
- vo
- wa
- wo
- xh
- yi
- yue
- yo
- za
- zh
- zu
- auto
example: en
oneOf:
- type: string
enum:
- aa
- ab
- ae
- af
- ak
- am
- an
- ar
- as
- av
- ay
- az
- ba
- be
- bg
- bh
- bi
- bm
- bn
- bo
- br
- bs
- ca
- ce
- ch
- co
- cr
- cs
- cu
- cv
- cy
- da
- de
- dv
- dz
- ee
- el
- en
- eo
- es
- et
- eu
- fa
- ff
- fi
- fj
- fo
- fr
- fy
- ga
- gd
- gl
- gn
- gu
- gv
- ha
- he
- hi
- ho
- hr
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- io
- is
- it
- iu
- ja
- jv
- ka
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ku
- kv
- kw
- ky
- la
- lb
- lg
- li
- ln
- lo
- lt
- lu
- lv
- mg
- mh
- mi
- mk
- ml
- mn
- mr
- ms
- mt
- my
- na
- nb
- nd
- ne
- ng
- nl
- nn
- 'no'
- nr
- nv
- ny
- oc
- oj
- om
- or
- os
- pa
- pi
- pl
- ps
- pt
- qu
- rm
- rn
- ro
- ru
- rw
- sa
- sc
- sd
- se
- sg
- si
- sk
- sl
- sm
- sn
- so
- sq
- sr
- ss
- st
- su
- sv
- sw
- ta
- te
- tg
- th
- ti
- tk
- tl
- tn
- to
- tr
- ts
- tt
- tw
- ty
- ug
- uk
- ur
- uz
- ve
- vi
- vo
- wa
- wo
- xh
- yi
- yue
- yo
- za
- zh
- zu
title: ISO 639-1 Language Code
- type: string
enum:
- auto
title: Auto-detect
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackNeuphonicVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- neuphonic
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum: []
title: Preset Voice Options
- type: string
title: Neuphonic Voice ID
model:
type: string
description: This is the model that will be used. Defaults to 'neu_fast' if not specified.
enum:
- neu_hq
- neu_fast
example: neu_fast
language:
type: object
description: This is the language (ISO 639-1) that is enforced for the model.
example: en
speed:
type: number
description: This is the speed multiplier that will be used.
minimum: 0.25
maximum: 2
example: null
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
- language
FallbackOpenAITranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- openai
model:
type: string
description: This is the model that will be used for the transcription.
enum:
- gpt-4o-transcribe
- gpt-4o-mini-transcribe
language:
type: string
description: This is the language that will be set for the transcription.
enum:
- af
- ar
- hy
- az
- be
- bs
- bg
- ca
- zh
- hr
- cs
- da
- nl
- en
- et
- fi
- fr
- gl
- de
- el
- he
- hi
- hu
- is
- id
- it
- ja
- kn
- kk
- ko
- lv
- lt
- mk
- ms
- mr
- mi
- ne
- 'no'
- fa
- pl
- pt
- ro
- ru
- sr
- sk
- sl
- es
- sw
- sv
- tl
- ta
- th
- tr
- uk
- ur
- vi
- cy
required:
- provider
- model
FallbackOpenAIVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- openai
voiceId:
description: 'This is the provider-specific ID that will be used.
Please note that ash, ballad, coral, sage, and verse may only be used with realtime models.'
oneOf:
- type: string
enum:
- alloy
- echo
- fable
- onyx
- nova
- shimmer
- marin
- cedar
title: Preset Voice Options
- type: string
title: OpenAI Voice ID
model:
type: string
description: This is the model that will be used for text-to-speech.
enum:
- tts-1
- tts-1-hd
- gpt-4o-mini-tts
instructions:
type: string
description: 'This is a prompt that allows you to control the voice of your generated audio.
Does not work with ''tts-1'' or ''tts-1-hd'' models.'
maxLength: 10000
speed:
type: number
description: This is the speed multiplier that will be used.
minimum: 0.25
maximum: 4
example: null
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackPlan:
type: object
properties:
voices:
type: array
description: This is the list of voices to fallback to in the event that the primary voice provider fails.
items:
oneOf:
- $ref: '#/components/schemas/FallbackAzureVoice'
title: Azure
- $ref: '#/components/schemas/FallbackCartesiaVoice'
title: Cartesia
- $ref: '#/components/schemas/FallbackHumeVoice'
title: Hume
- $ref: '#/components/schemas/FallbackCustomVoice'
title: CustomVoice
- $ref: '#/components/schemas/FallbackDeepgramVoice'
title: Deepgram
- $ref: '#/components/schemas/FallbackElevenLabsVoice'
title: ElevenLabs
- $ref: '#/components/schemas/FallbackVapiVoice'
title: Vapi
- $ref: '#/components/schemas/FallbackLMNTVoice'
title: LMNT
- $ref: '#/components/schemas/FallbackOpenAIVoice'
title: OpenAI
- $ref: '#/components/schemas/FallbackPlayHTVoice'
title: PlayHT
- $ref: '#/components/schemas/FallbackWellSaidVoice'
title: WellSaid
- $ref: '#/components/schemas/FallbackRimeAIVoice'
title: RimeAI
- $ref: '#/components/schemas/FallbackSmallestAIVoice'
title: Smallest AI
- $ref: '#/components/schemas/FallbackTavusVoice'
title: TavusVoice
- $ref: '#/components/schemas/FallbackNeuphonicVoice'
title: Neuphonic
- $ref: '#/components/schemas/FallbackSesameVoice'
title: Sesame
- $ref: '#/components/schemas/FallbackInworldVoice'
title: Inworld
- $ref: '#/components/schemas/FallbackXaiVoice'
title: xAI
required:
- voices
FallbackPlayHTVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- playht
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum:
- jennifer
- melissa
- will
- chris
- matt
- jack
- ruby
- davis
- donna
- michael
title: Preset Voice Options
- type: string
title: PlayHT Voice ID
speed:
type: number
description: This is the speed multiplier that will be used.
minimum: 0.1
maximum: 5
example: null
temperature:
type: number
description: A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the
model's default temperature will be used. The temperature parameter controls variance. Lower temperatures result
in more predictable results, higher temperatures allow each run to vary more, so the voice may sound less like
the baseline voice.
minimum: 0.1
maximum: 2
example: null
emotion:
type: string
description: An emotion to be applied to the speech.
enum:
- female_happy
- female_sad
- female_angry
- female_fearful
- female_disgust
- female_surprised
- male_happy
- male_sad
- male_angry
- male_fearful
- male_disgust
- male_surprised
example: null
voiceGuidance:
type: number
description: A number between 1 and 6. Use lower numbers to reduce how unique your chosen voice will be compared
to other voices.
minimum: 1
maximum: 6
example: null
styleGuidance:
type: number
description: A number between 1 and 30. Use lower numbers to to reduce how strong your chosen emotion will be. Higher
numbers will create a very emotional performance.
minimum: 1
maximum: 30
example: null
textGuidance:
type: number
description: A number between 1 and 2. This number influences how closely the generated speech adheres to the input
text. Use lower values to create more fluid speech, but with a higher chance of deviating from the input text.
Higher numbers will make the generated speech more accurate to the input text, ensuring that the words spoken
align closely with the provided text.
minimum: 1
maximum: 2
example: null
model:
type: string
description: Playht voice model/engine to use.
enum:
- PlayHT2.0
- PlayHT2.0-turbo
- Play3.0-mini
- PlayDialog
language:
type: string
description: The language to use for the speech.
enum:
- afrikaans
- albanian
- amharic
- arabic
- bengali
- bulgarian
- catalan
- croatian
- czech
- danish
- dutch
- english
- french
- galician
- german
- greek
- hebrew
- hindi
- hungarian
- indonesian
- italian
- japanese
- korean
- malay
- mandarin
- polish
- portuguese
- russian
- serbian
- spanish
- swedish
- tagalog
- thai
- turkish
- ukrainian
- urdu
- xhosa
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackRimeAIVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- rime-ai
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum:
- cove
- moon
- wildflower
- eva
- amber
- maya
- lagoon
- breeze
- helen
- joy
- marsh
- creek
- cedar
- alpine
- summit
- nicholas
- tyler
- colin
- hank
- thunder
- astra
- eucalyptus
- moraine
- peak
- tundra
- mesa_extra
- talon
- marlu
- glacier
- falcon
- luna
- celeste
- estelle
- andromeda
- esther
- lyra
- lintel
- oculus
- vespera
- transom
- bond
- arcade
- atrium
- cupola
- fern
- sirius
- orion
- masonry
- albion
- parapet
title: Suggested Voice Options
description: Popular Rime AI voices across mist, mistv2, and arcana models. Any valid Rime AI voice ID is accepted,
not just these suggestions.
- type: string
title: Any Rime AI Voice ID
description: Any valid Rime AI voice ID. See https://docs.rime.ai/docs/voices for the full catalog.
model:
type: string
description: This is the model that will be used. Defaults to 'arcana' when not specified.
enum:
- arcana
- mistv2
- mist
example: arcana
speed:
type: number
description: This is the speed multiplier that will be used.
minimum: 0.1
example: null
pauseBetweenBrackets:
type: boolean
description: 'This is a flag that controls whether to add slight pauses using angle brackets. Example: "Hi. <200>
I''d love to have a conversation with you." adds a 200ms pause between the first and second sentences.'
example: false
phonemizeBetweenBrackets:
type: boolean
description: 'This is a flag that controls whether text inside brackets should be phonemized (converted to phonetic
pronunciation) - Example: "{h''El.o} World" will pronounce "Hello" as expected.'
example: false
reduceLatency:
type: boolean
description: This is a flag that controls whether to optimize for reduced latency in streaming. https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency
example: false
inlineSpeedAlpha:
type: string
description: This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha
example: null
language:
type: string
description: 'Language for speech synthesis. Uses ISO 639 codes. Supported: en, es, de, fr, ar, hi, ja, he, pt,
ta, si.'
enum:
- en
- es
- de
- fr
- ar
- hi
- ja
- he
- pt
- ta
- si
example: en
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackSesameVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- sesame
voiceId:
type: string
description: This is the provider-specific ID that will be used.
title: Sesame Voice ID. This should be either a name (a built-in voice) or a UUID (a custom voice).
model:
type: string
description: This is the model that will be used.
enum:
- csm-1b
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
- model
FallbackSmallestAIVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- smallest-ai
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum:
- emily
- jasmine
- arman
- james
- mithali
- aravind
- raj
- diya
- raman
- ananya
- isha
- william
- aarav
- monika
- niharika
- deepika
- raghav
- kajal
- radhika
- mansi
- nisha
- saurabh
- pooja
- saina
- sanya
title: Preset Voice Options
- type: string
title: Smallest AI Voice ID
model:
type: string
description: Smallest AI voice model to use. Defaults to 'lightning' when not specified.
enum:
- lightning
speed:
type: number
description: This is the speed multiplier that will be used.
example: null
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackSonioxTranscriber:
type: object
properties:
provider:
type: string
enum:
- soniox
model:
type: string
enum:
- stt-rt-v4
description: The Soniox model to use for transcription.
language:
type: string
enum:
- aa
- ab
- ae
- af
- ak
- am
- an
- ar
- as
- av
- ay
- az
- ba
- be
- bg
- bh
- bi
- bm
- bn
- bo
- br
- bs
- ca
- ce
- ch
- co
- cr
- cs
- cu
- cv
- cy
- da
- de
- dv
- dz
- ee
- el
- en
- eo
- es
- et
- eu
- fa
- ff
- fi
- fj
- fo
- fr
- fy
- ga
- gd
- gl
- gn
- gu
- gv
- ha
- he
- hi
- ho
- hr
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- io
- is
- it
- iu
- ja
- jv
- ka
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ku
- kv
- kw
- ky
- la
- lb
- lg
- li
- ln
- lo
- lt
- lu
- lv
- mg
- mh
- mi
- mk
- ml
- mn
- mr
- ms
- mt
- my
- na
- nb
- nd
- ne
- ng
- nl
- nn
- 'no'
- nr
- nv
- ny
- oc
- oj
- om
- or
- os
- pa
- pi
- pl
- ps
- pt
- qu
- rm
- rn
- ro
- ru
- rw
- sa
- sc
- sd
- se
- sg
- si
- sk
- sl
- sm
- sn
- so
- sq
- sr
- ss
- st
- su
- sv
- sw
- ta
- te
- tg
- th
- ti
- tk
- tl
- tn
- to
- tr
- ts
- tt
- tw
- ty
- ug
- uk
- ur
- uz
- ve
- vi
- vo
- wa
- wo
- xh
- yi
- yue
- yo
- za
- zh
- zu
description: Single language for transcription as an ISO 639-1 code (e.g., `en`, `es`). For multi-language hints
or to enable Soniox auto-detect, use `languages` instead — when `languages` is set (including to an empty array),
this field is ignored when building the Soniox request. Defaults to `en` if neither this nor `languages` is set.
languages:
type: array
description: Language hints sent to Soniox as `language_hints`. Provide `[lang1, lang2, ...]` (ISO 639-1 codes)
to bias recognition toward specific languages, or provide an explicit empty array `[]` to enable Soniox auto-detect
across all 60+ supported languages. When set (including the empty array), this field takes precedence over the
singular `language` field. When omitted, falls back to the singular `language` (which defaults to `en` if also
unset). Best accuracy is achieved with a single language.
items:
type: string
enum:
- aa
- ab
- ae
- af
- ak
- am
- an
- ar
- as
- av
- ay
- az
- ba
- be
- bg
- bh
- bi
- bm
- bn
- bo
- br
- bs
- ca
- ce
- ch
- co
- cr
- cs
- cu
- cv
- cy
- da
- de
- dv
- dz
- ee
- el
- en
- eo
- es
- et
- eu
- fa
- ff
- fi
- fj
- fo
- fr
- fy
- ga
- gd
- gl
- gn
- gu
- gv
- ha
- he
- hi
- ho
- hr
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- io
- is
- it
- iu
- ja
- jv
- ka
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ku
- kv
- kw
- ky
- la
- lb
- lg
- li
- ln
- lo
- lt
- lu
- lv
- mg
- mh
- mi
- mk
- ml
- mn
- mr
- ms
- mt
- my
- na
- nb
- nd
- ne
- ng
- nl
- nn
- 'no'
- nr
- nv
- ny
- oc
- oj
- om
- or
- os
- pa
- pi
- pl
- ps
- pt
- qu
- rm
- rn
- ro
- ru
- rw
- sa
- sc
- sd
- se
- sg
- si
- sk
- sl
- sm
- sn
- so
- sq
- sr
- ss
- st
- su
- sv
- sw
- ta
- te
- tg
- th
- ti
- tk
- tl
- tn
- to
- tr
- ts
- tt
- tw
- ty
- ug
- uk
- ur
- uz
- ve
- vi
- vo
- wa
- wo
- xh
- yi
- yue
- yo
- za
- zh
- zu
languageHintsStrict:
type: boolean
description: 'When `true`, Soniox strictly restricts transcription to the languages in `languages` (or the singular
`language` if `languages` is unset). When `false`, Soniox biases toward those languages but still allows transcription
in other languages. Has no effect when no language hints are sent (e.g., `languages: []` for auto-detect). Defaults
to `true` (strict mode).'
maxEndpointDelayMs:
type: number
minimum: 500
maximum: 3000
description: 'Maximum delay in milliseconds between when the speaker stops and when the endpoint is detected. Lower
values mean faster turn-taking but more false endpoints. Range: 500-3000. Default: 500.'
customVocabulary:
description: Custom vocabulary terms to boost recognition accuracy. Useful for brand names, product names, and domain-specific
terminology. Maps to Soniox context.terms.
type: array
items:
type: string
contextGeneral:
description: 'General context key-value pairs that guide the AI model during transcription. Helps adapt vocabulary
to the correct domain, improving accuracy. Recommended: 10 or fewer pairs. Maps to Soniox context.general.'
example:
- key: domain
value: Healthcare
- key: topic
value: Diabetes management consultation
type: array
items:
$ref: '#/components/schemas/SonioxContextGeneralItem'
required:
- provider
FallbackSpeechmaticsTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- speechmatics
model:
type: string
description: This is the model that will be used for the transcription.
enum:
- default
language:
type: string
enum:
- auto
- ar
- ar_en
- 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
- en_ms
- mt
- cmn
- cmn_en
- mr
- mn
- 'no'
- fa
- pl
- pt
- ro
- ru
- sk
- sl
- es
- en_es
- sw
- sv
- tl
- ta
- en_ta
- th
- tr
- uk
- ur
- ug
- vi
- cy
operatingPoint:
type: string
description: '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'''
example: enhanced
enum:
- standard
- enhanced
default: enhanced
region:
type: string
description: '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'''
example: us
enum:
- eu
- us
default: eu
enableDiarization:
type: boolean
description: 'This enables speaker diarization, which identifies and separates speakers in the transcription. Essential
for multi-speaker conversations and conference calls.
@default false'
example: true
default: false
maxDelay:
type: number
description: 'This sets the maximum delay in milliseconds for partial transcripts. Balances latency and accuracy.
@default 3000'
example: 1500
minimum: 500
maximum: 10000
default: 3000
customVocabulary:
example:
- content: Speechmatics
soundsLike:
- speech mattix
type: array
items:
$ref: '#/components/schemas/SpeechmaticsCustomVocabularyItem'
numeralStyle:
type: string
description: 'This controls how numbers, dates, currencies, and other entities are formatted in the transcription
output.
@default ''written'''
example: spoken
enum:
- written
- spoken
default: written
endOfTurnSensitivity:
type: number
description: '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'
example: 0.8
minimum: 0
maximum: 1
default: 0.5
removeDisfluencies:
type: boolean
description: 'This enables removal of disfluencies (um, uh) from the transcript to create cleaner, more professional
output.
This is only supported for the English language transcriber.
@default false'
example: true
default: false
minimumSpeechDuration:
type: number
description: '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'
example: 0.2
minimum: 0
maximum: 5
default: 0
required:
- provider
- customVocabulary
FallbackTalkscriberTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- talkscriber
model:
type: string
description: This is the model that will be used for the transcription.
enum:
- whisper
language:
type: string
description: 'This is the language that will be set for the transcription. The list of languages Whisper supports
can be found here: https://github.com/openai/whisper/blob/main/whisper/tokenizer.py'
enum:
- en
- zh
- de
- es
- ru
- ko
- fr
- ja
- pt
- tr
- pl
- ca
- nl
- ar
- sv
- it
- id
- hi
- fi
- vi
- he
- uk
- el
- ms
- cs
- ro
- da
- hu
- ta
- 'no'
- th
- ur
- hr
- bg
- lt
- la
- mi
- ml
- cy
- sk
- te
- fa
- lv
- bn
- sr
- az
- sl
- kn
- et
- mk
- br
- eu
- is
- hy
- ne
- mn
- bs
- kk
- sq
- sw
- gl
- mr
- pa
- si
- km
- sn
- yo
- so
- af
- oc
- ka
- be
- tg
- sd
- gu
- am
- yi
- lo
- uz
- fo
- ht
- ps
- tk
- nn
- mt
- sa
- lb
- my
- bo
- tl
- mg
- as
- tt
- haw
- ln
- ha
- ba
- jw
- su
- yue
required:
- provider
FallbackTavusVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- tavus
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum:
- r52da2535a
title: Preset Voice Options
- type: string
title: Tavus Voice ID
personaId:
type: string
description: This is the unique identifier for the persona that the replica will use in the conversation.
callbackUrl:
type: string
description: This is the url that will receive webhooks with updates regarding the conversation state.
conversationName:
type: string
description: This is the name for the conversation.
conversationalContext:
type: string
description: This is the context that will be appended to any context provided in the persona, if one is provided.
customGreeting:
type: string
description: This is the custom greeting that the replica will give once a participant joines the conversation.
properties:
description: These are optional properties used to customize the conversation.
allOf:
- $ref: '#/components/schemas/TavusConversationProperties'
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackTranscriberPlan:
type: object
properties:
transcribers:
type: array
items:
oneOf:
- $ref: '#/components/schemas/FallbackAssemblyAITranscriber'
title: AssemblyAI
- $ref: '#/components/schemas/FallbackAzureSpeechTranscriber'
title: Azure
- $ref: '#/components/schemas/FallbackCustomTranscriber'
title: Custom
- $ref: '#/components/schemas/FallbackDeepgramTranscriber'
title: Deepgram
- $ref: '#/components/schemas/FallbackElevenLabsTranscriber'
title: ElevenLabs
- $ref: '#/components/schemas/FallbackGladiaTranscriber'
title: Gladia
- $ref: '#/components/schemas/FallbackGoogleTranscriber'
title: Google
- $ref: '#/components/schemas/FallbackTalkscriberTranscriber'
title: Talkscriber
- $ref: '#/components/schemas/FallbackSpeechmaticsTranscriber'
title: Speechmatics
- $ref: '#/components/schemas/FallbackOpenAITranscriber'
title: OpenAI
- $ref: '#/components/schemas/FallbackCartesiaTranscriber'
title: Cartesia
- $ref: '#/components/schemas/FallbackSonioxTranscriber'
title: Soniox
- $ref: '#/components/schemas/FallbackXaiTranscriber'
title: xAI
FallbackVapiVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- vapi
voiceId:
type: string
description: The voices provided by Vapi
enum:
- Clara
- Godfrey
- Layla
- Sid
- Gustavo
- Elliot
- Kylie
- Rohan
- Lily
- Savannah
- Hana
- Neha
- Cole
- Harry
- Paige
- Spencer
- Nico
- Kai
- Emma
- Sagar
- Neil
- Naina
- Leah
- Tara
- Jess
- Leo
- Dan
- Mia
- Zac
- Zoe
speed:
type: number
description: 'This is the speed multiplier that will be used.
@default 1'
minimum: 0.25
maximum: 2
default: 1
pronunciationDictionary:
description: List of pronunciation dictionary locators for custom word pronunciations.
type: array
items:
$ref: '#/components/schemas/VapiPronunciationDictionaryLocator'
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackWellSaidVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- wellsaid
voiceId:
type: string
description: The WellSaid speaker ID to synthesize.
model:
type: string
description: This is the model that will be used.
enum:
- caruso
- legacy
enableSsml:
type: boolean
description: Enables limited SSML translation for input text.
libraryIds:
description: Array of library IDs to use for voice synthesis.
type: array
items:
type: string
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FallbackXaiTranscriber:
type: object
properties:
provider:
type: string
enum:
- xai
model:
type: string
description: The xAI speech-to-text model to use. xAI currently exposes a single STT model — placeholder for future
model selection.
enum:
- default
language:
type: string
description: Single language for transcription as an ISO 639-1 code (e.g., `en`, `es`). Defaults to `en` if not
set. xAI auto-detects when omitted via the API but Vapi defaults to English for deterministic behavior.
enum:
- ar
- cs
- da
- nl
- en
- fil
- fr
- de
- hi
- id
- it
- ja
- ko
- mk
- ms
- fa
- pl
- pt
- ro
- ru
- es
- sv
- th
- tr
- vi
required:
- provider
FallbackXaiVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- xai
voiceId:
type: string
description: 'Built-in voices: eve, ara, rex, sal, leo. Cloned voice IDs are also accepted.'
maxLength: 120
title: xAI Voice ID
enum:
- eve
- ara
- rex
- sal
- leo
example: eve
language:
type: string
description: BCP-47 language code for xAI TTS synthesis.
enum:
- auto
- en
- ar-EG
- ar-SA
- ar-AE
- bn
- zh
- fr
- de
- hi
- id
- it
- ja
- ko
- pt-BR
- pt-PT
- ru
- es-MX
- es-ES
- tr
- vi
default: en
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
FormatPlan:
type: object
properties:
enabled:
type: boolean
description: 'This determines whether the chunk is formatted before being sent to the voice provider. This helps
with enunciation. This includes phone numbers, emails and addresses. Default `true`.
Usage:
- To rely on the voice provider''s formatting logic, set this to `false`.
If `voice.chunkPlan.enabled` is `false`, this is automatically `false` since there''s no chunk to format.
@default true'
example: true
numberToDigitsCutoff:
type: number
description: 'This is the cutoff after which a number is converted to individual digits instead of being spoken
as words.
Example:
- If cutoff 2025, "12345" is converted to "1 2 3 4 5" while "1200" is converted to "twelve hundred".
Usage:
- If your use case doesn''t involve IDs like zip codes, set this to a high value.
- If your use case involves IDs that are shorter than 5 digits, set this to a lower value.
@default 2025'
minimum: 0
example: 2025
replacements:
type: array
description: 'These are the custom replacements you can make to the chunk before it is sent to the voice provider.
Usage:
- To replace a specific word or phrase with a different word or phrase, use the `ExactReplacement` type. Eg. `{
type: ''exact'', key: ''hello'', value: ''hi'' }`
- To replace a word or phrase that matches a pattern, use the `RegexReplacement` type. Eg. `{ type: ''regex'',
regex: ''\\b[a-zA-Z]{5}\\b'', value: ''hi'' }`
@default []'
items:
oneOf:
- $ref: '#/components/schemas/ExactReplacement'
title: ExactReplacement
- $ref: '#/components/schemas/RegexReplacement'
title: RegexReplacement
formattersEnabled:
type: array
description: 'List of formatters to apply. If not provided, all default formatters will be applied.
If provided, only the specified formatters will be applied.
Note: Some essential formatters like angle bracket removal will always be applied.
@default undefined'
enum:
- markdown
- asterisk
- quote
- dash
- newline
- colon
- acronym
- dollarAmount
- email
- date
- time
- distance
- unit
- percentage
- phoneNumber
- number
- stripAsterisk
items:
type: string
enum:
- markdown
- asterisk
- quote
- dash
- newline
- colon
- acronym
- dollarAmount
- email
- date
- time
- distance
- unit
- percentage
- phoneNumber
- number
- stripAsterisk
FourierDenoisingPlan:
type: object
properties:
enabled:
type: boolean
description: Whether Fourier denoising is enabled. Note that this is experimental and may not work as expected.
default: false
mediaDetectionEnabled:
type: boolean
description: 'Whether automatic media detection is enabled. When enabled, the filter will automatically
detect consistent background TV/music/radio and switch to more aggressive filtering settings.
Only applies when enabled is true.'
example: true
default: true
staticThreshold:
type: number
description: Static threshold in dB used as fallback when no baseline is established.
example: -35
minimum: -80
maximum: 0
default: -35
baselineOffsetDb:
type: number
description: 'How far below the rolling baseline to filter audio, in dB.
Lower values (e.g., -10) are more aggressive, higher values (e.g., -20) are more conservative.'
example: -15
minimum: -30
maximum: -5
default: -15
windowSizeMs:
type: number
description: 'Rolling window size in milliseconds for calculating the audio baseline.
Larger windows adapt more slowly but are more stable.'
example: 3000
minimum: 1000
maximum: 30000
default: 3000
baselinePercentile:
type: number
description: 'Percentile to use for baseline calculation (1-99).
Higher percentiles (e.g., 85) focus on louder speech, lower percentiles (e.g., 50) include quieter speech.'
example: 85
minimum: 1
maximum: 99
default: 85
GcpKey:
type: object
properties:
type:
type: string
description: This is the type of the key. Most likely, this is "service_account".
projectId:
type: string
description: This is the ID of the Google Cloud project associated with this key.
privateKeyId:
type: string
description: This is the unique identifier for the private key.
privateKey:
type: string
description: 'This is the private key in PEM format.
Note: This is not returned in the API.'
clientEmail:
type: string
description: This is the email address associated with the service account.
clientId:
type: string
description: This is the unique identifier for the client.
authUri:
type: string
description: This is the URI for the auth provider's authorization endpoint.
tokenUri:
type: string
description: This is the URI for the auth provider's token endpoint.
authProviderX509CertUrl:
type: string
description: This is the URL of the public x509 certificate for the auth provider.
clientX509CertUrl:
type: string
description: This is the URL of the public x509 certificate for the client.
universeDomain:
type: string
description: This is the domain associated with the universe this service account belongs to.
required:
- type
- projectId
- privateKeyId
- privateKey
- clientEmail
- clientId
- authUri
- tokenUri
- authProviderX509CertUrl
- clientX509CertUrl
- universeDomain
GeminiMultimodalLivePrebuiltVoiceConfig:
type: object
properties:
voiceName:
type: string
enum:
- Puck
- Charon
- Kore
- Fenrir
- Aoede
required:
- voiceName
GeminiMultimodalLiveSpeechConfig:
type: object
properties:
voiceConfig:
$ref: '#/components/schemas/GeminiMultimodalLiveVoiceConfig'
required:
- voiceConfig
GeminiMultimodalLiveVoiceConfig:
type: object
properties:
prebuiltVoiceConfig:
$ref: '#/components/schemas/GeminiMultimodalLivePrebuiltVoiceConfig'
required:
- prebuiltVoiceConfig
GladiaCustomVocabularyConfigDTO:
type: object
properties:
vocabulary:
type: array
description: Array of vocabulary items (strings or objects with value, pronunciations, intensity, language)
items:
oneOf:
- type: string
- $ref: '#/components/schemas/GladiaVocabularyItemDTO'
defaultIntensity:
type: number
minimum: 0
maximum: 1
description: Default intensity for vocabulary items (0.0 to 1.0)
default: 0.5
required:
- vocabulary
GladiaTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- gladia
model:
description: This is the Gladia model that will be used. Default is 'fast'
oneOf:
- type: string
enum:
- fast
- accurate
- solaria-1
languageBehaviour:
description: Defines how the transcription model detects the audio language. Default value is 'automatic single
language'.
oneOf:
- type: string
enum:
- manual
- automatic single language
- automatic multiple languages
language:
type: string
description: Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.
enum:
- af
- sq
- am
- ar
- hy
- as
- az
- ba
- eu
- be
- bn
- bs
- br
- bg
- ca
- zh
- hr
- cs
- da
- nl
- en
- et
- fo
- fi
- fr
- gl
- ka
- de
- el
- gu
- ht
- ha
- haw
- he
- hi
- hu
- is
- id
- it
- ja
- jv
- kn
- kk
- km
- ko
- lo
- la
- lv
- ln
- lt
- lb
- mk
- mg
- ms
- ml
- mt
- mi
- mr
- mn
- my
- ne
- 'no'
- nn
- oc
- ps
- fa
- pl
- pt
- pa
- ro
- ru
- sa
- sr
- sn
- sd
- si
- sk
- sl
- so
- es
- su
- sw
- sv
- tl
- tg
- ta
- tt
- te
- th
- bo
- tr
- tk
- uk
- ur
- uz
- vi
- cy
- yi
- yo
languages:
type: array
description: Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'.
items:
type: string
enum:
- af
- sq
- am
- ar
- hy
- as
- az
- ba
- eu
- be
- bn
- bs
- br
- bg
- ca
- zh
- hr
- cs
- da
- nl
- en
- et
- fo
- fi
- fr
- gl
- ka
- de
- el
- gu
- ht
- ha
- haw
- he
- hi
- hu
- is
- id
- it
- ja
- jv
- kn
- kk
- km
- ko
- lo
- la
- lv
- ln
- lt
- lb
- mk
- mg
- ms
- ml
- mt
- mi
- mr
- mn
- my
- ne
- 'no'
- nn
- oc
- ps
- fa
- pl
- pt
- pa
- ro
- ru
- sa
- sr
- sn
- sd
- si
- sk
- sl
- so
- es
- su
- sw
- sv
- tl
- tg
- ta
- tt
- te
- th
- bo
- tr
- tk
- uk
- ur
- uz
- vi
- cy
- yi
- yo
transcriptionHint:
type: string
description: 'Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words,
technical terms, names, etc. If empty, this argument is ignored.
⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide
a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit.'
maxLength: 600
example: custom vocabulary
prosody:
type: boolean
description: If prosody is true, you will get a transcription that can contain prosodies i.e. (laugh) (giggles)
(malefic laugh) (toss) (music)… Default value is false.
example: false
audioEnhancer:
type: boolean
description: If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is
false.
example: false
confidenceThreshold:
type: number
description: 'Transcripts below this confidence threshold will be discarded.
@default 0.4'
minimum: 0
maximum: 1
example: 0.4
endpointing:
type: number
minimum: 0.01
maximum: 10
example: 0.05
description: Endpointing time in seconds - time to wait before considering speech ended
speechThreshold:
type: number
minimum: 0
maximum: 1
example: 0.6
description: Speech threshold - sensitivity configuration for speech detection (0.0 to 1.0)
customVocabularyEnabled:
type: boolean
example: false
description: Enable custom vocabulary for improved accuracy
customVocabularyConfig:
description: Custom vocabulary configuration
allOf:
- $ref: '#/components/schemas/GladiaCustomVocabularyConfigDTO'
region:
type: string
enum:
- us-west
- eu-west
description: Region for processing audio (us-west or eu-west)
example: us-west
receivePartialTranscripts:
type: boolean
example: false
description: Enable partial transcripts for low-latency streaming transcription
fallbackPlan:
description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider
fails.
allOf:
- $ref: '#/components/schemas/FallbackTranscriberPlan'
required:
- provider
GladiaVocabularyItemDTO:
type: object
properties:
value:
type: string
description: The vocabulary word or phrase
pronunciations:
description: Alternative pronunciations for the vocabulary item
type: array
items:
type: string
intensity:
type: number
minimum: 0
maximum: 1
description: Intensity for this specific vocabulary item (0.0 to 1.0)
language:
type: string
description: Language code for this vocabulary item (ISO 639-1)
required:
- value
GoogleModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
model:
type: string
description: This is the Google model that will be used.
enum:
- gemini-3-flash-preview
- 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
provider:
type: string
enum:
- google
realtimeConfig:
description: 'This is the session configuration for the Gemini Flash 2.0 Multimodal Live API.
Only applicable if the model `gemini-2.0-flash-realtime-exp` is selected.'
allOf:
- $ref: '#/components/schemas/GoogleRealtimeConfig'
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- model
- provider
GoogleRealtimeConfig:
type: object
properties:
topP:
type: number
description: 'This is the nucleus sampling parameter that controls the cumulative probability of tokens considered
during text generation.
Only applicable with the Gemini Flash 2.0 Multimodal Live API.'
topK:
type: number
description: 'This is the top-k sampling parameter that limits the number of highest probability tokens considered
during text generation.
Only applicable with the Gemini Flash 2.0 Multimodal Live API.'
presencePenalty:
type: number
description: 'This is the presence penalty parameter that influences the model''s likelihood to repeat information
by penalizing tokens based on their presence in the text.
Only applicable with the Gemini Flash 2.0 Multimodal Live API.'
frequencyPenalty:
type: number
description: 'This is the frequency penalty parameter that influences the model''s likelihood to repeat tokens by
penalizing them based on their frequency in the text.
Only applicable with the Gemini Flash 2.0 Multimodal Live API.'
speechConfig:
description: 'This is the speech configuration object that defines the voice settings to be used for the model''s
speech output.
Only applicable with the Gemini Flash 2.0 Multimodal Live API.'
allOf:
- $ref: '#/components/schemas/GeminiMultimodalLiveSpeechConfig'
GoogleTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- google
model:
type: string
description: This is the model that will be used for the transcription.
enum:
- gemini-3-flash-preview
- 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
language:
type: string
description: This is the language that will be set for the transcription.
enum:
- Multilingual
- Arabic
- Bengali
- Bulgarian
- Chinese
- Croatian
- Czech
- Danish
- Dutch
- English
- Estonian
- Finnish
- French
- German
- Greek
- Hebrew
- Hindi
- Hungarian
- Indonesian
- Italian
- Japanese
- Korean
- Latvian
- Lithuanian
- Norwegian
- Polish
- Portuguese
- Romanian
- Russian
- Serbian
- Slovak
- Slovenian
- Spanish
- Swahili
- Swedish
- Thai
- Turkish
- Ukrainian
- Vietnamese
fallbackPlan:
description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider
fails.
allOf:
- $ref: '#/components/schemas/FallbackTranscriberPlan'
required:
- provider
GoogleVoicemailDetectionPlan:
type: object
properties:
beepMaxAwaitSeconds:
type: number
description: 'This is the maximum duration from the start of the call that we will wait for a voicemail beep, before
speaking our message
- If we detect a voicemail beep before this, we will speak the message at that point.
- Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so
before the actual beep, it will get cut off. You should definitely tune this to your use case.
@default 30
@min 0
@max 60'
minimum: 0
maximum: 30
default: 30
provider:
type: string
description: This is the provider to use for voicemail detection.
enum:
- google
backoffPlan:
description: This is the backoff plan for the voicemail detection.
allOf:
- $ref: '#/components/schemas/VoicemailDetectionBackoffPlan'
type:
type: string
description: '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)'
enum:
- audio
- transcript
required:
- provider
GroqModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
enum:
- 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
provider:
type: string
enum:
- groq
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- model
- provider
GroupCondition:
type: object
properties:
type:
type: string
description: This is the type discriminator for group condition
example: group
enum:
- group
operator:
type: string
description: This is the logical operator for combining conditions in this group
examples:
- AND
- OR
enum:
- AND
- OR
conditions:
type: array
description: 'This is the list of nested conditions to evaluate.
Supports recursive nesting of groups for complex logic.'
examples:
- '[{ type: "regex", regex: "(?i)stop", target: { role: "user" } }]'
- '[{ type: "group", operator: "AND", conditions: [...] }]'
items:
oneOf:
- $ref: '#/components/schemas/RegexCondition'
title: RegexCondition
- $ref: '#/components/schemas/LiquidCondition'
title: LiquidCondition
- $ref: '#/components/schemas/GroupCondition'
title: GroupCondition
description: This is the GroupCondition object but Swagger does not display nested schemas correctly.
required:
- type
- operator
- conditions
HMACAuthenticationPlan:
type: object
properties:
type:
type: string
enum:
- hmac
secretKey:
type: string
description: This is the HMAC secret key used to sign requests.
algorithm:
type: string
enum:
- sha256
- sha512
- sha1
description: This is the HMAC algorithm to use for signing.
signatureHeader:
type: string
description: This is the header name where the signature will be sent. Defaults to 'x-signature'.
timestampHeader:
type: string
description: This is the header name where the timestamp will be sent. Defaults to 'x-timestamp'.
signaturePrefix:
type: string
description: This is the prefix for the signature. For example, 'sha256=' for GitHub-style signatures.
includeTimestamp:
type: boolean
description: Whether to include a timestamp in the signature payload. Defaults to true.
payloadFormat:
type: string
description: Custom payload format. Use {body} for request body, {timestamp} for timestamp, {method} for HTTP method,
{url} for URL, {svix-id} for unique message ID. Defaults to '{timestamp}.{body}'.
messageIdHeader:
type: string
description: This is the header name where the unique message ID will be sent. Used for Svix-style webhooks.
signatureEncoding:
type: string
enum:
- hex
- base64
description: The encoding format for the signature. Defaults to 'hex'.
secretIsBase64:
type: boolean
description: Whether the secret key is base64-encoded and should be decoded before use. Defaults to false.
required:
- type
- secretKey
- algorithm
HandoffDestinationAssistant:
type: object
properties:
type:
type: string
enum:
- assistant
contextEngineeringPlan:
description: This is the plan for manipulating the message context before handing off the call to the next assistant.
oneOf:
- $ref: '#/components/schemas/ContextEngineeringPlanLastNMessages'
title: Last N Messages
- $ref: '#/components/schemas/ContextEngineeringPlanNone'
title: None
- $ref: '#/components/schemas/ContextEngineeringPlanAll'
title: All
- $ref: '#/components/schemas/ContextEngineeringPlanUserAndAssistantMessages'
title: User And Assistant Messages
- $ref: '#/components/schemas/ContextEngineeringPlanPreviousAssistantMessages'
title: Previous Assistant Messages
assistantName:
type: string
description: This is the assistant to transfer the call to. You must provide either assistantName or assistantId.
assistantId:
type: string
description: This is the assistant id to transfer the call to. You must provide either assistantName or assistantId.
assistant:
description: This is a transient assistant to transfer the call to. You may provide a transient assistant in the
response `handoff-destination-request` in a dynamic handoff.
allOf:
- $ref: '#/components/schemas/CreateAssistantDTO'
variableExtractionPlan:
description: This is the variable extraction plan for the handoff tool.
allOf:
- $ref: '#/components/schemas/VariableExtractionPlan'
assistantOverrides:
description: These are the assistant overrides to apply to the destination assistant.
allOf:
- $ref: '#/components/schemas/AssistantOverrides'
description:
type: string
description: This is the description of the destination, used by the AI to choose when and how to transfer the call.
required:
- type
HandoffDestinationDynamic:
type: object
properties:
type:
type: string
enum:
- dynamic
server:
description: 'This is where Vapi will send the handoff-destination-request webhook in a dynamic handoff.
The order of precedence is:
1. tool.server.url
2. assistant.server.url
3. phoneNumber.server.url
4. org.server.url'
allOf:
- $ref: '#/components/schemas/Server'
description:
type: string
description: This is the description of the destination, used by the AI to choose when and how to transfer the call.
required:
- type
HandoffDestinationSquad:
type: object
properties:
type:
type: string
enum:
- squad
contextEngineeringPlan:
description: This is the plan for manipulating the message context before handing off the call to the squad.
oneOf:
- $ref: '#/components/schemas/ContextEngineeringPlanLastNMessages'
title: Last N Messages
- $ref: '#/components/schemas/ContextEngineeringPlanNone'
title: None
- $ref: '#/components/schemas/ContextEngineeringPlanAll'
title: All
- $ref: '#/components/schemas/ContextEngineeringPlanUserAndAssistantMessages'
title: User And Assistant Messages
- $ref: '#/components/schemas/ContextEngineeringPlanPreviousAssistantMessages'
title: Previous Assistant Messages
squadId:
type: string
description: This is the squad id to transfer the call to.
squad:
description: This is a transient squad to transfer the call to.
allOf:
- $ref: '#/components/schemas/CreateSquadDTO'
entryAssistantName:
type: string
description: 'This is the name of the entry assistant to start with when handing off to the squad.
If not provided, the first member of the squad will be used.'
variableExtractionPlan:
description: This is the variable extraction plan for the handoff tool.
allOf:
- $ref: '#/components/schemas/VariableExtractionPlan'
squadOverrides:
description: 'These are the overrides to apply to the squad configuration.
Maps to squad-level membersOverrides.'
allOf:
- $ref: '#/components/schemas/AssistantOverrides'
description:
type: string
description: This is the description of the destination, used by the AI to choose when and how to transfer the call.
required:
- type
HumeVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- hume
model:
type: string
description: This is the model that will be used.
enum:
- octave
- octave2
example: octave2
voiceId:
type: string
description: The ID of the particular voice you want to use.
isCustomHumeVoice:
type: boolean
description: Indicates whether the chosen voice is a preset Hume AI voice or a custom voice.
example: false
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
description:
type: string
description: 'Natural language instructions describing how the synthesized speech should sound, including but not
limited to tone, intonation, pacing, and accent (e.g., ''a soft, gentle voice with a strong British accent'').
If a Voice is specified in the request, this description serves as acting instructions.
If no Voice is specified, a new voice is generated based on this description.'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
InflectionAIModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
enum:
- inflection_3_pi
provider:
type: string
enum:
- inflection-ai
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- model
- provider
InworldVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- inworld
voiceId:
type: string
description: 'Available voices by language:
• en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald,
Sarah, Shaun, Theodore, Timothy, Wendy, Dominus, Hana, Clive, Carter, Blake, Luna
• 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
• ru: Svetlana, Elena, Dmitry, Nikolai
• hi: Riya, Manoj
• he: Yael, Oren
• ar: Nour, Omar'
maxLength: 120
title: Inworld Voice ID
enum:
- Alex
- Ashley
- Craig
- Deborah
- Dennis
- Edward
- Elizabeth
- Hades
- Julia
- Pixie
- Mark
- Olivia
- Priya
- Ronald
- Sarah
- Shaun
- Theodore
- Timothy
- Wendy
- Dominus
- Hana
- Clive
- Carter
- Blake
- Luna
- 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
- Svetlana
- Elena
- Dmitry
- Nikolai
- Riya
- Manoj
- Yael
- Oren
- Nour
- Omar
example: Alex
model:
type: string
description: This is the model that will be used.
enum:
- inworld-tts-1
default: inworld-tts-1
languageCode:
type: string
description: Language code for Inworld TTS synthesis
default: en
enum:
- en
- zh
- ko
- nl
- fr
- es
- ja
- de
- it
- pl
- pt
- ru
- hi
- he
- ar
temperature:
type: number
description: 'A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided,
the model''s default temperature of 1.1 will be used. The temperature parameter controls variance.
Higher values will make the output more random and can lead to more expressive results. Lower values will make
it more deterministic.
See https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations for more details.'
minimum: 0.1
maximum: 2
default: 1.1
example: null
speakingRate:
type: number
description: 'A floating point number between 0.5, inclusive, and 1.5, inclusive. If equal to null or not provided,
the model''s default speaking speed of 1.0 will be used.
Values above 0.8 are recommended for higher quality.
See https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations for more details.'
minimum: 0.5
maximum: 1.5
default: 1
example: null
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
JsonSchema:
type: object
properties:
type:
type: string
description: 'This is the type of output you''d like.
`string`, `number`, `integer`, `boolean` are the primitive types and should be obvious.
`array` and `object` are more interesting and quite powerful. They allow you to define nested structures.
For `array`, you can define the schema of the items in the array using the `items` property.
For `object`, you can define the properties of the object using the `properties` property.'
enum:
- string
- number
- integer
- boolean
- array
- object
items:
description: This is required if the type is "array". This is the schema of the items in the array. This is a recursive
reference to JsonSchema.
allOf:
- $ref: '#/components/schemas/JsonSchema'
properties:
type: object
description: This is required if the type is "object". This specifies the properties of the object. This is a map
of property names to JsonSchema objects.
additionalProperties:
$ref: '#/components/schemas/JsonSchema'
description:
type: string
description: This is the description to help the model understand what it needs to output.
pattern:
type: string
description: 'This is the pattern of the string. This is a regex that will be used to validate the data in question.
To use a common format, use the `format` property instead.
OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs#supported-properties'
format:
type: string
description: 'This is the format of the string. To pass a regex, use the `pattern` property instead.
OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat&type-restrictions=string-restrictions'
enum:
- date-time
- time
- date
- duration
- email
- hostname
- ipv4
- ipv6
- uuid
required:
description: 'This is a list of properties that are required.
This only makes sense if the type is "object".'
type: array
items:
type: string
enum:
description: This array specifies the allowed values that can be used to restrict the output of the model.
type: array
items:
type: string
title:
type: string
description: This is the title of the schema.
required:
- type
KeypadInputPlan:
type: object
properties:
enabled:
type: boolean
description: 'This keeps track of whether the user has enabled keypad input.
By default, it is off.
@default false'
timeoutSeconds:
type: number
description: 'This is the time in seconds to wait before processing the input.
If the input is not received within this time, the input will be ignored.
If set to "off", the input will be processed when the user enters a delimiter or immediately if no delimiter is
used.
@default 2'
minimum: 0
maximum: 10
delimiters:
type: string
description: 'This is the delimiter(s) that will be used to process the input.
Can be ''#'', ''*'', or an empty array.'
enum:
- '#'
- '*'
- ''
KnowledgeBase:
type: object
properties:
name:
type: string
description: The name of the knowledge base
example: My Knowledge Base
provider:
type: string
description: The provider of the knowledge base
enum:
- google
example: google
model:
type: string
description: The model to use for the knowledge base
enum:
- gemini-3-flash-preview
- 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
description:
type: string
description: A description of the knowledge base
fileIds:
description: The file IDs associated with this knowledge base
type: array
items:
type: string
required:
- name
- provider
- description
- fileIds
LMNTVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- lmnt
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum:
- amy
- ansel
- autumn
- ava
- brandon
- caleb
- cassian
- chloe
- dalton
- daniel
- dustin
- elowen
- evander
- huxley
- james
- juniper
- kennedy
- lauren
- leah
- lily
- lucas
- magnus
- miles
- morgan
- natalie
- nathan
- noah
- nyssa
- oliver
- paige
- ryan
- sadie
- sophie
- stella
- terrence
- tyler
- vesper
- violet
- warrick
- zain
- zeke
- zoe
title: Preset Voice Options
- type: string
title: LMNT Voice ID
speed:
type: number
description: This is the speed multiplier that will be used.
minimum: 0.25
maximum: 2
example: null
language:
description: Two letter ISO 639-1 language code. Use "auto" for auto-detection.
enum:
- aa
- ab
- ae
- af
- ak
- am
- an
- ar
- as
- av
- ay
- az
- ba
- be
- bg
- bh
- bi
- bm
- bn
- bo
- br
- bs
- ca
- ce
- ch
- co
- cr
- cs
- cu
- cv
- cy
- da
- de
- dv
- dz
- ee
- el
- en
- eo
- es
- et
- eu
- fa
- ff
- fi
- fj
- fo
- fr
- fy
- ga
- gd
- gl
- gn
- gu
- gv
- ha
- he
- hi
- ho
- hr
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- io
- is
- it
- iu
- ja
- jv
- ka
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ku
- kv
- kw
- ky
- la
- lb
- lg
- li
- ln
- lo
- lt
- lu
- lv
- mg
- mh
- mi
- mk
- ml
- mn
- mr
- ms
- mt
- my
- na
- nb
- nd
- ne
- ng
- nl
- nn
- 'no'
- nr
- nv
- ny
- oc
- oj
- om
- or
- os
- pa
- pi
- pl
- ps
- pt
- qu
- rm
- rn
- ro
- ru
- rw
- sa
- sc
- sd
- se
- sg
- si
- sk
- sl
- sm
- sn
- so
- sq
- sr
- ss
- st
- su
- sv
- sw
- ta
- te
- tg
- th
- ti
- tk
- tl
- tn
- to
- tr
- ts
- tt
- tw
- ty
- ug
- uk
- ur
- uz
- ve
- vi
- vo
- wa
- wo
- xh
- yi
- yue
- yo
- za
- zh
- zu
- auto
example: en
oneOf:
- type: string
enum:
- aa
- ab
- ae
- af
- ak
- am
- an
- ar
- as
- av
- ay
- az
- ba
- be
- bg
- bh
- bi
- bm
- bn
- bo
- br
- bs
- ca
- ce
- ch
- co
- cr
- cs
- cu
- cv
- cy
- da
- de
- dv
- dz
- ee
- el
- en
- eo
- es
- et
- eu
- fa
- ff
- fi
- fj
- fo
- fr
- fy
- ga
- gd
- gl
- gn
- gu
- gv
- ha
- he
- hi
- ho
- hr
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- io
- is
- it
- iu
- ja
- jv
- ka
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ku
- kv
- kw
- ky
- la
- lb
- lg
- li
- ln
- lo
- lt
- lu
- lv
- mg
- mh
- mi
- mk
- ml
- mn
- mr
- ms
- mt
- my
- na
- nb
- nd
- ne
- ng
- nl
- nn
- 'no'
- nr
- nv
- ny
- oc
- oj
- om
- or
- os
- pa
- pi
- pl
- ps
- pt
- qu
- rm
- rn
- ro
- ru
- rw
- sa
- sc
- sd
- se
- sg
- si
- sk
- sl
- sm
- sn
- so
- sq
- sr
- ss
- st
- su
- sv
- sw
- ta
- te
- tg
- th
- ti
- tk
- tl
- tn
- to
- tr
- ts
- tt
- tw
- ty
- ug
- uk
- ur
- uz
- ve
- vi
- vo
- wa
- wo
- xh
- yi
- yue
- yo
- za
- zh
- zu
title: ISO 639-1 Language Code
- type: string
enum:
- auto
title: Auto-detect
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
LangfuseObservabilityPlan:
type: object
properties:
provider:
type: string
enum:
- langfuse
promptName:
type: string
description: The name of a Langfuse prompt to link generations to. This enables tracking which prompt version was
used for each generation. https://langfuse.com/docs/prompt-management/features/link-to-traces
promptVersion:
type: number
description: The version number of the Langfuse prompt to link generations to. Used together with promptName to
identify the exact prompt version. https://langfuse.com/docs/prompt-management/features/link-to-traces
minimum: 1
traceName:
type: string
description: 'Custom name for the Langfuse trace. Supports Liquid templates.
Available variables:
- {{ call.id }} - Call UUID
- {{ call.type }} - ''inboundPhoneCall'', ''outboundPhoneCall'', ''webCall''
- {{ assistant.name }} - Assistant name
- {{ assistant.id }} - Assistant ID
Example: "{{ assistant.name }} - {{ call.type }}"
Defaults to call ID if not provided.'
tags:
description: This is an array of tags to be added to the Langfuse trace. Tags allow you to categorize and filter
traces. https://langfuse.com/docs/tracing-features/tags
type: array
items:
type: string
metadata:
type: object
description: 'This is a JSON object that will be added to the Langfuse trace. Traces can be enriched with metadata
to better understand your users, application, and experiments. https://langfuse.com/docs/tracing-features/metadata
By default it includes the call metadata, assistant metadata, and assistant overrides.'
required:
- provider
- tags
LiquidCondition:
type: object
properties:
type:
type: string
description: This is the type discriminator for liquid condition
example: liquid
enum:
- liquid
liquid:
type: string
description: "This is the Liquid template that must return exactly \"true\" or \"false\" as a string.\nThe template\
\ is evaluated and the entire output must be either \"true\" or \"false\" - nothing else.\n\nAvailable variables:\n\
- `messages`: Array of recent messages in OpenAI chat completions format (ChatCompletionMessageParam[])\n Each\
\ message has properties like: role ('user', 'assistant', 'system'), content (string), etc.\n- `now`: Current\
\ timestamp in milliseconds (built-in Liquid variable)\n- Any assistant variable values (e.g., `userName`, `accountStatus`)\n\
\nUseful Liquid filters for messages:\n- `messages | last: 5` - Get the 5 most recent messages\n- `messages |\
\ where: 'role', 'user'` - Filter to only user messages\n- `messages | reverse` - Reverse the order of messages"
examples:
- '{% if messages.last.content contains goodbye %}true{% else %}false{% endif %}'
- '{% assign userMessages = messages | where: role, user %}{% if userMessages.size > 3 %}true{% else %}false{% endif
%}'
required:
- type
- liquid
LivekitSmartEndpointingPlan:
type: object
properties:
provider:
type: string
description: This is the provider for the smart endpointing plan.
enum:
- vapi
- livekit
- custom-endpointing-model
example: livekit
waitFunction:
type: string
description: 'This expression describes how long the bot will wait to start speaking based on the likelihood that
the user has reached an endpoint.
This is a millisecond valued function. It maps probabilities (real numbers on [0,1]) to milliseconds that the
bot should wait before speaking ([0, \infty]). Any negative values that are returned are set to zero (the bot
can''t start talking in the past).
A probability of zero represents very high confidence that the caller has stopped speaking, and would like the
bot to speak to them. A probability of one represents very high confidence that the caller is still speaking.
Under the hood, this is parsed into a mathjs expression. Whatever you use to write your expression needs to be
valid with respect to mathjs
@default "20 + 500 * sqrt(x) + 2500 * x^3"'
examples:
- 70 + 4000 * x
- 200 + 8000 * x
- 4000 * (1 - cos(pi * x))
required:
- provider
McpToolMessages:
type: object
properties:
name:
type: string
description: The name of the tool from the MCP server.
messages:
type: array
description: Custom messages for this specific tool. Set to an empty array to suppress all messages for this tool.
If not provided, the tool will use the default messages from the parent MCP tool configuration.
items:
oneOf:
- $ref: '#/components/schemas/ToolMessageStart'
title: ToolMessageStart
- $ref: '#/components/schemas/ToolMessageComplete'
title: ToolMessageComplete
- $ref: '#/components/schemas/ToolMessageFailed'
title: ToolMessageFailed
- $ref: '#/components/schemas/ToolMessageDelayed'
title: ToolMessageDelayed
required:
- name
McpToolMetadata:
type: object
properties:
protocol:
type: string
enum:
- sse
- shttp
description: This is the protocol used for MCP communication. Defaults to Streamable HTTP.
MessageAddHookAction:
type: object
properties:
type:
type: string
description: This is the type of action - must be "message.add"
enum:
- message.add
message:
description: The message to add to the conversation in OpenAI format
example:
role: system
content: Context update from hook
allOf:
- $ref: '#/components/schemas/OpenAIMessage'
triggerResponseEnabled:
type: boolean
description: Whether to trigger an assistant response after adding the message
default: true
required:
- type
- message
MessageTarget:
type: object
properties:
role:
type: string
description: 'This is the role of the message to target.
If not specified, will find the position in the message history ignoring role (effectively `any`).'
example: user
enum:
- user
- assistant
position:
type: number
description: 'This is the position of the message to target.
- Negative numbers: Count from end (-1 = most recent, -2 = second most recent)
- 0: First/oldest message in history
- Positive numbers: Specific position (0-indexed from start)
@default -1 (most recent message)'
example: -1
MinimaxLLMModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
provider:
type: string
enum:
- minimax
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
enum:
- MiniMax-M2.7
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- provider
- model
MinimaxVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- minimax
voiceId:
type: string
description: This is the provider-specific ID that will be used. Use a voice from MINIMAX_PREDEFINED_VOICES or a
custom cloned voice ID.
title: This is the Minimax Voice ID
model:
type: string
description: '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"'
enum:
- speech-02-hd
- speech-02-turbo
- speech-2.5-turbo-preview
example: speech-02-turbo
default: speech-02-turbo
emotion:
type: string
description: 'The emotion to use for the voice. If not provided, will use auto-detect mode.
Options include: ''happy'', ''sad'', ''angry'', ''fearful'', ''surprised'', ''disgusted'', ''neutral'''
example: happy
subtitleType:
type: string
description: 'Controls the granularity of subtitle/timing data returned by Minimax
during synthesis. Set to ''word'' to receive per-word timestamps in
assistant.speechStarted events for karaoke-style caption rendering.
@default "sentence"'
enum:
- word
- sentence
default: sentence
pitch:
type: number
description: 'Voice pitch adjustment. Range from -12 to 12 semitones.
@default 0'
minimum: -12
maximum: 12
example: 0
default: 0
speed:
type: number
description: 'Voice speed adjustment. Range from 0.5 to 2.0.
@default 1.0'
minimum: 0.5
maximum: 2
example: 1
default: 1
volume:
type: number
description: 'Voice volume adjustment. Range from 0.5 to 2.0.
@default 1.0'
minimum: 0.5
maximum: 2
example: 1
default: 1
region:
type: string
description: The region for Minimax API. Defaults to "worldwide".
enum:
- worldwide
- china
default: worldwide
languageBoost:
type: string
description: 'Language hint for MiniMax T2A. Example: yue (Cantonese), zh (Chinese), en (English).'
enum:
- 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
textNormalizationEnabled:
type: boolean
description: Enable MiniMax text normalization to improve number reading and formatting.
default: true
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
MonitorPlan:
type: object
properties:
listenEnabled:
type: boolean
description: 'This determines whether the assistant''s calls allow live listening. Defaults to true.
Fetch `call.monitor.listenUrl` to get the live listening URL.
@default true'
example: false
listenAuthenticationEnabled:
type: boolean
description: 'This enables authentication on the `call.monitor.listenUrl`.
If `listenAuthenticationEnabled` is `true`, the `call.monitor.listenUrl` will require an `Authorization: Bearer
` header.
@default false'
example: false
controlEnabled:
type: boolean
description: 'This determines whether the assistant''s calls allow live control. Defaults to true.
Fetch `call.monitor.controlUrl` to get the live control URL.
To use, send any control message via a POST request to `call.monitor.controlUrl`. Here are the types of controls
supported: https://docs.vapi.ai/api-reference/messages/client-inbound-message
@default true'
example: false
controlAuthenticationEnabled:
type: boolean
description: 'This enables authentication on the `call.monitor.controlUrl`.
If `controlAuthenticationEnabled` is `true`, the `call.monitor.controlUrl` will require an `Authorization: Bearer
` header.
@default false'
example: false
monitorIds:
description: 'This the set of monitor ids that are attached to the assistant.
The source of truth for the monitor ids is the assistant_monitor join table.
This field can be used for transient assistants and to update assistants with new monitor ids.
@default []'
example:
- 123e4567-e89b-12d3-a456-426614174000
type: array
items:
type: string
NeuphonicVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- neuphonic
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum: []
title: Preset Voice Options
- type: string
title: Neuphonic Voice ID
model:
type: string
description: This is the model that will be used. Defaults to 'neu_fast' if not specified.
enum:
- neu_hq
- neu_fast
example: neu_fast
language:
type: object
description: This is the language (ISO 639-1) that is enforced for the model.
example: en
speed:
type: number
description: This is the speed multiplier that will be used.
minimum: 0.25
maximum: 2
example: null
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
- language
OAuth2AuthenticationPlan:
type: object
properties:
type:
type: string
enum:
- oauth2
url:
type: string
description: This is the OAuth2 URL.
clientId:
type: string
description: This is the OAuth2 client ID.
clientSecret:
type: string
description: This is the OAuth2 client secret.
scope:
type: string
description: This is the scope of the OAuth2 token.
maxLength: 1000
required:
- type
- url
- clientId
- clientSecret
Oauth2AuthenticationSession:
type: object
properties:
accessToken:
type: string
description: This is the OAuth2 access token.
expiresAt:
format: date-time
type: string
description: This is the OAuth2 access token expiration.
refreshToken:
type: string
description: This is the OAuth2 refresh token.
OpenAIFunction:
type: object
properties:
strict:
type: boolean
description: 'This is a boolean that controls whether to enable strict schema adherence when generating the function
call. If set to true, the model will follow the exact schema defined in the parameters field. Only a subset of
JSON Schema is supported when strict is true. Learn more about Structured Outputs in the [OpenAI guide](https://openai.com/index/introducing-structured-outputs-in-the-api/).
@default false'
default: false
name:
type: string
description: 'This is the the name of the function to be called.
Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.'
maxLength: 64
pattern: /^[a-zA-Z0-9_-]{1,64}$/
description:
type: string
description: This is the description of what the function does, used by the AI to choose when and how to call the
function.
parameters:
description: 'These are the parameters the functions accepts, described as a JSON Schema object.
See the [OpenAI guide](https://platform.openai.com/docs/guides/function-calling) for examples, and the [JSON Schema
reference](https://json-schema.org/understanding-json-schema) for documentation about the format.
Omitting parameters defines a function with an empty parameter list.'
allOf:
- $ref: '#/components/schemas/OpenAIFunctionParameters'
required:
- name
OpenAIFunctionParameters:
type: object
properties:
type:
type: string
description: This must be set to 'object'. It instructs the model to return a JSON object containing the function
call properties.
enum:
- object
properties:
type: object
description: 'This provides a description of the properties required by the function.
JSON Schema can be used to specify expectations for each property.
Refer to [this doc](https://ajv.js.org/json-schema.html#json-data-type) for a comprehensive guide on JSON Schema.'
additionalProperties:
$ref: '#/components/schemas/JsonSchema'
required:
description: This specifies the properties that are required by the function.
type: array
items:
type: string
required:
- type
- properties
OpenAIMessage:
type: object
properties:
content:
type: string
nullable: true
maxLength: 100000000
role:
type: string
enum:
- assistant
- function
- user
- system
- tool
required:
- content
- role
OpenAIModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
provider:
type: string
description: This is the provider that will be used for the model.
enum:
- openai
model:
type: string
description: 'This is the OpenAI model that will be used.
When using 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'
enum:
- gpt-5.4
- gpt-5.4-mini
- gpt-5.4-nano
- gpt-5.2
- gpt-5.2-chat-latest
- gpt-5.1
- gpt-5.1-chat-latest
- gpt-5
- gpt-5-chat-latest
- 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-realtime-mini-2025-12-15
- 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-2025-04-14:westeurope
- gpt-4.1-2025-04-14:germanywestcentral
- gpt-4.1-2025-04-14:polandcentral
- gpt-4.1-2025-04-14:spaincentral
- 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-mini-2025-04-14:westeurope
- gpt-4.1-mini-2025-04-14:germanywestcentral
- gpt-4.1-mini-2025-04-14:polandcentral
- gpt-4.1-mini-2025-04-14:spaincentral
- 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-11-20:westeurope
- gpt-4o-2024-11-20:germanywestcentral
- gpt-4o-2024-11-20:polandcentral
- gpt-4o-2024-11-20:spaincentral
- 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:australiaeast
- gpt-4-1106-preview:canadaeast
- gpt-4-1106-preview:france
- gpt-4-1106-preview:india
- gpt-4-1106-preview:norway
- gpt-4-1106-preview:swedencentral
- gpt-4-1106-preview:uk
- gpt-4-1106-preview:westus
- gpt-4-1106-preview:westus3
- gpt-4-0613:canadaeast
- gpt-3.5-turbo-0125:canadaeast
- gpt-3.5-turbo-0125:northcentralus
- gpt-3.5-turbo-0125:southcentralus
- gpt-3.5-turbo-1106:canadaeast
- gpt-3.5-turbo-1106:westus
fallbackModels:
type: array
description: These are the fallback models that will be used if the primary model fails. This shouldn't be specified
unless you have a specific reason to do so. Vapi will automatically find the fastest fallbacks that make sense.
example:
- gpt-4-0125-preview
- gpt-4-0613
items:
type: string
enum:
- gpt-5.4
- gpt-5.4-mini
- gpt-5.4-nano
- gpt-5.2
- gpt-5.2-chat-latest
- gpt-5.1
- gpt-5.1-chat-latest
- gpt-5
- gpt-5-chat-latest
- 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-realtime-mini-2025-12-15
- 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-2025-04-14:westeurope
- gpt-4.1-2025-04-14:germanywestcentral
- gpt-4.1-2025-04-14:polandcentral
- gpt-4.1-2025-04-14:spaincentral
- 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-mini-2025-04-14:westeurope
- gpt-4.1-mini-2025-04-14:germanywestcentral
- gpt-4.1-mini-2025-04-14:polandcentral
- gpt-4.1-mini-2025-04-14:spaincentral
- 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-11-20:westeurope
- gpt-4o-2024-11-20:germanywestcentral
- gpt-4o-2024-11-20:polandcentral
- gpt-4o-2024-11-20:spaincentral
- 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:australiaeast
- gpt-4-1106-preview:canadaeast
- gpt-4-1106-preview:france
- gpt-4-1106-preview:india
- gpt-4-1106-preview:norway
- gpt-4-1106-preview:swedencentral
- gpt-4-1106-preview:uk
- gpt-4-1106-preview:westus
- gpt-4-1106-preview:westus3
- gpt-4-0613:canadaeast
- gpt-3.5-turbo-0125:canadaeast
- gpt-3.5-turbo-0125:northcentralus
- gpt-3.5-turbo-0125:southcentralus
- gpt-3.5-turbo-1106:canadaeast
- gpt-3.5-turbo-1106:westus
toolStrictCompatibilityMode:
type: string
description: 'Azure OpenAI doesn''t support `maxLength` right now https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs?tabs=python-secure%2Cdotnet-entra-id&pivots=programming-language-csharp#unsupported-type-specific-keywords.
Need to strip.
- `strip-parameters-with-unsupported-validation` will strip parameters with unsupported validation.
- `strip-unsupported-validation` will keep the parameters but strip unsupported validation.
@default `strip-unsupported-validation`'
enum:
- strip-parameters-with-unsupported-validation
- strip-unsupported-validation
promptCacheRetention:
type: string
description: 'This controls the prompt cache retention policy for models that support extended caching (GPT-4.1,
GPT-5 series).
- `in_memory`: Default behavior, cache retained in GPU memory only
- `24h`: Extended caching, keeps cached prefixes active for up to 24 hours by offloading to GPU-local storage
Only applies to models: gpt-5.4, gpt-5.4-mini, gpt-5.4-nano, gpt-5.2, gpt-5.1, gpt-5.1-codex, gpt-5.1-codex-mini,
gpt-5.1-chat-latest, gpt-5, gpt-5-codex, gpt-4.1
@default undefined (uses API default which is ''in_memory'')'
enum:
- in_memory
- 24h
promptCacheKey:
type: string
description: 'This is the prompt cache key for models that support extended caching (GPT-4.1, GPT-5 series).
Providing a cache key allows you to share cached prefixes across requests.
@default undefined'
maxLength: 64
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- provider
- model
OpenAITranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- openai
model:
type: string
description: This is the model that will be used for the transcription.
enum:
- gpt-4o-transcribe
- gpt-4o-mini-transcribe
language:
type: string
description: This is the language that will be set for the transcription.
enum:
- af
- ar
- hy
- az
- be
- bs
- bg
- ca
- zh
- hr
- cs
- da
- nl
- en
- et
- fi
- fr
- gl
- de
- el
- he
- hi
- hu
- is
- id
- it
- ja
- kn
- kk
- ko
- lv
- lt
- mk
- ms
- mr
- mi
- ne
- 'no'
- fa
- pl
- pt
- ro
- ru
- sr
- sk
- sl
- es
- sw
- sv
- tl
- ta
- th
- tr
- uk
- ur
- vi
- cy
fallbackPlan:
description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider
fails.
allOf:
- $ref: '#/components/schemas/FallbackTranscriberPlan'
required:
- provider
- model
OpenAIVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- openai
voiceId:
description: 'This is the provider-specific ID that will be used.
Please note that ash, ballad, coral, sage, and verse may only be used with realtime models.'
oneOf:
- type: string
enum:
- alloy
- echo
- fable
- onyx
- nova
- shimmer
- marin
- cedar
title: Preset Voice Options
- type: string
title: OpenAI Voice ID
model:
type: string
description: This is the model that will be used for text-to-speech.
enum:
- tts-1
- tts-1-hd
- gpt-4o-mini-tts
instructions:
type: string
description: 'This is a prompt that allows you to control the voice of your generated audio.
Does not work with ''tts-1'' or ''tts-1-hd'' models.'
maxLength: 10000
speed:
type: number
description: This is the speed multiplier that will be used.
minimum: 0.25
maximum: 4
example: null
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
OpenAIVoicemailDetectionPlan:
type: object
properties:
beepMaxAwaitSeconds:
type: number
description: 'This is the maximum duration from the start of the call that we will wait for a voicemail beep, before
speaking our message
- If we detect a voicemail beep before this, we will speak the message at that point.
- Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so
before the actual beep, it will get cut off. You should definitely tune this to your use case.
@default 30
@min 0
@max 60'
minimum: 0
maximum: 30
default: 30
provider:
type: string
description: This is the provider to use for voicemail detection.
enum:
- openai
backoffPlan:
description: This is the backoff plan for the voicemail detection.
allOf:
- $ref: '#/components/schemas/VoicemailDetectionBackoffPlan'
type:
type: string
description: '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)'
enum:
- audio
- transcript
required:
- provider
OpenRouterModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
provider:
type: string
enum:
- openrouter
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- provider
- model
PerplexityAIModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
provider:
type: string
enum:
- perplexity-ai
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- provider
- model
PlayHTVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- playht
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum:
- jennifer
- melissa
- will
- chris
- matt
- jack
- ruby
- davis
- donna
- michael
title: Preset Voice Options
- type: string
title: PlayHT Voice ID
speed:
type: number
description: This is the speed multiplier that will be used.
minimum: 0.1
maximum: 5
example: null
temperature:
type: number
description: A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the
model's default temperature will be used. The temperature parameter controls variance. Lower temperatures result
in more predictable results, higher temperatures allow each run to vary more, so the voice may sound less like
the baseline voice.
minimum: 0.1
maximum: 2
example: null
emotion:
type: string
description: An emotion to be applied to the speech.
enum:
- female_happy
- female_sad
- female_angry
- female_fearful
- female_disgust
- female_surprised
- male_happy
- male_sad
- male_angry
- male_fearful
- male_disgust
- male_surprised
example: null
voiceGuidance:
type: number
description: A number between 1 and 6. Use lower numbers to reduce how unique your chosen voice will be compared
to other voices.
minimum: 1
maximum: 6
example: null
styleGuidance:
type: number
description: A number between 1 and 30. Use lower numbers to to reduce how strong your chosen emotion will be. Higher
numbers will create a very emotional performance.
minimum: 1
maximum: 30
example: null
textGuidance:
type: number
description: A number between 1 and 2. This number influences how closely the generated speech adheres to the input
text. Use lower values to create more fluid speech, but with a higher chance of deviating from the input text.
Higher numbers will make the generated speech more accurate to the input text, ensuring that the words spoken
align closely with the provided text.
minimum: 1
maximum: 2
example: null
model:
type: string
description: Playht voice model/engine to use.
enum:
- PlayHT2.0
- PlayHT2.0-turbo
- Play3.0-mini
- PlayDialog
language:
type: string
description: The language to use for the speech.
enum:
- afrikaans
- albanian
- amharic
- arabic
- bengali
- bulgarian
- catalan
- croatian
- czech
- danish
- dutch
- english
- french
- galician
- german
- greek
- hebrew
- hindi
- hungarian
- indonesian
- italian
- japanese
- korean
- malay
- mandarin
- polish
- portuguese
- russian
- serbian
- spanish
- swedish
- tagalog
- thai
- turkish
- ukrainian
- urdu
- xhosa
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
PublicKeyEncryptionPlan:
type: object
properties:
type:
type: string
description: The type of encryption plan.
enum:
- public-key
algorithm:
type: string
description: The encryption algorithm to use.
enum:
- RSA-OAEP-256
publicKey:
description: The public key configuration.
oneOf:
- $ref: '#/components/schemas/SpkiPemPublicKeyConfig'
discriminator:
propertyName: format
mapping:
spki-pem: '#/components/schemas/SpkiPemPublicKeyConfig'
allOf:
- $ref: '#/components/schemas/SpkiPemPublicKeyConfig'
required:
- type
- algorithm
- publicKey
RecordingConsentPlanStayOnLine:
type: object
properties:
message:
type: string
description: '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.'
maxLength: 1000
examples:
- For quality purposes, this call may be recorded. Please stay on the line if you agree or end the call if you do
not consent.
- This call may be recorded for quality and training purposes. Say "I agree" if you consent to being recorded, or
"I disagree" if you do not consent.
voice:
description: '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.'
oneOf:
- $ref: '#/components/schemas/AzureVoice'
title: AzureVoice
- $ref: '#/components/schemas/CartesiaVoice'
title: CartesiaVoice
- $ref: '#/components/schemas/CustomVoice'
title: CustomVoice
- $ref: '#/components/schemas/DeepgramVoice'
title: DeepgramVoice
- $ref: '#/components/schemas/ElevenLabsVoice'
title: ElevenLabsVoice
- $ref: '#/components/schemas/HumeVoice'
title: HumeVoice
- $ref: '#/components/schemas/LMNTVoice'
title: LMNTVoice
- $ref: '#/components/schemas/NeuphonicVoice'
title: NeuphonicVoice
- $ref: '#/components/schemas/OpenAIVoice'
title: OpenAIVoice
- $ref: '#/components/schemas/PlayHTVoice'
title: PlayHTVoice
- $ref: '#/components/schemas/WellSaidVoice'
title: WellSaidVoice
- $ref: '#/components/schemas/RimeAIVoice'
title: RimeAIVoice
- $ref: '#/components/schemas/SmallestAIVoice'
title: SmallestAIVoice
- $ref: '#/components/schemas/TavusVoice'
title: TavusVoice
- $ref: '#/components/schemas/VapiVoice'
title: VapiVoice
- $ref: '#/components/schemas/SesameVoice'
title: SesameVoice
- $ref: '#/components/schemas/InworldVoice'
title: InworldVoice
- $ref: '#/components/schemas/MinimaxVoice'
title: MinimaxVoice
- $ref: '#/components/schemas/XaiVoice'
title: XaiVoice
firstMessageMode:
type: string
description: 'This controls whether the consent assistant speaks first or waits for the caller to speak first.
Use:
- `assistant-speaks-first` (default) to have the consent assistant play the consent message as soon as the call
is answered.
- `assistant-waits-for-user` to have the consent assistant wait for the caller to speak before playing the consent
message.
We strongly recommend `assistant-waits-for-user` for outbound calls. Some telephony providers signal "answered"
while the line is still ringing, which can cause the consent message to play into a ringing line and be missed
by the caller. Waiting for the caller to speak first guarantees they hear the full consent message.
Note: when combined with `type: ''stay-on-line''`, silence only counts toward consent after the caller has spoken
at least once.
@default ''assistant-speaks-first'''
enum:
- assistant-speaks-first
- assistant-waits-for-user
default: assistant-speaks-first
example: assistant-speaks-first
type:
type: string
description: This is the type of recording consent plan. This type assumes consent is granted if the user stays
on the line.
enum:
- stay-on-line
example: stay-on-line
waitSeconds:
type: number
description: Number of seconds to wait before transferring to the assistant if user stays on the call
minimum: 1
maximum: 6
default: 3
example: 3
required:
- message
- type
RecordingConsentPlanVerbal:
type: object
properties:
message:
type: string
description: '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.'
maxLength: 1000
examples:
- For quality purposes, this call may be recorded. Please stay on the line if you agree or end the call if you do
not consent.
- This call may be recorded for quality and training purposes. Say "I agree" if you consent to being recorded, or
"I disagree" if you do not consent.
voice:
description: '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.'
oneOf:
- $ref: '#/components/schemas/AzureVoice'
title: AzureVoice
- $ref: '#/components/schemas/CartesiaVoice'
title: CartesiaVoice
- $ref: '#/components/schemas/CustomVoice'
title: CustomVoice
- $ref: '#/components/schemas/DeepgramVoice'
title: DeepgramVoice
- $ref: '#/components/schemas/ElevenLabsVoice'
title: ElevenLabsVoice
- $ref: '#/components/schemas/HumeVoice'
title: HumeVoice
- $ref: '#/components/schemas/LMNTVoice'
title: LMNTVoice
- $ref: '#/components/schemas/NeuphonicVoice'
title: NeuphonicVoice
- $ref: '#/components/schemas/OpenAIVoice'
title: OpenAIVoice
- $ref: '#/components/schemas/PlayHTVoice'
title: PlayHTVoice
- $ref: '#/components/schemas/WellSaidVoice'
title: WellSaidVoice
- $ref: '#/components/schemas/RimeAIVoice'
title: RimeAIVoice
- $ref: '#/components/schemas/SmallestAIVoice'
title: SmallestAIVoice
- $ref: '#/components/schemas/TavusVoice'
title: TavusVoice
- $ref: '#/components/schemas/VapiVoice'
title: VapiVoice
- $ref: '#/components/schemas/SesameVoice'
title: SesameVoice
- $ref: '#/components/schemas/InworldVoice'
title: InworldVoice
- $ref: '#/components/schemas/MinimaxVoice'
title: MinimaxVoice
- $ref: '#/components/schemas/XaiVoice'
title: XaiVoice
firstMessageMode:
type: string
description: 'This controls whether the consent assistant speaks first or waits for the caller to speak first.
Use:
- `assistant-speaks-first` (default) to have the consent assistant play the consent message as soon as the call
is answered.
- `assistant-waits-for-user` to have the consent assistant wait for the caller to speak before playing the consent
message.
We strongly recommend `assistant-waits-for-user` for outbound calls. Some telephony providers signal "answered"
while the line is still ringing, which can cause the consent message to play into a ringing line and be missed
by the caller. Waiting for the caller to speak first guarantees they hear the full consent message.
Note: when combined with `type: ''stay-on-line''`, silence only counts toward consent after the caller has spoken
at least once.
@default ''assistant-speaks-first'''
enum:
- assistant-speaks-first
- assistant-waits-for-user
default: assistant-speaks-first
example: assistant-speaks-first
type:
type: string
description: This is the type of recording consent plan. This type assumes consent is granted if the user verbally
consents or declines.
enum:
- verbal
example: verbal
declineTool:
type: object
description: Tool to execute if user verbally declines recording consent
declineToolId:
type: string
description: ID of existing tool to execute if user verbally declines recording consent
required:
- message
- type
RegexCondition:
type: object
properties:
type:
type: string
description: This is the type discriminator for regex condition
example: regex
enum:
- regex
regex:
type: string
description: 'This is the regular expression pattern to match against message content.
Note:
- This works by using the RegExp.test method in Node.JS. Eg. /hello/.test("hello there") will return true.
Hot tips:
- In JavaScript, escape \ when sending the regex pattern. Eg. "hello\sthere" will be sent over the wire as "hellosthere".
Send "hello\\sthere" instead.
- RegExp.test does substring matching, so /cat/.test("I love cats") will return true. To do full string matching,
use anchors: /^cat$/ will only match exactly "cat".
- Word boundaries \b are useful for matching whole words: /\bcat\b/ matches "cat" but not "cats" or "category".
- Use inline flags for portability: (?i) for case insensitive, (?m) for multiline'
examples:
- \\b(cancel|stop|wait)\\b - Matches whole words
- ^yes$ - Matches exactly yes (full string match)
- (?i)hello - Case insensitive match
target:
description: 'This is the target for messages to check against.
If not specified, the condition will run on the last message (position: -1).
If role is not specified, it will look at the last message regardless of role.
@default { position: -1 }'
allOf:
- $ref: '#/components/schemas/MessageTarget'
negate:
type: boolean
description: 'This is the flag that when true, the condition matches if the pattern does NOT match.
Useful for ensuring certain words/phrases are absent.
@default false'
example: 'true - Reject if user hasn"t said goodbye: { regex: "\\b(bye|goodbye)\\b", negate: true }'
required:
- type
- regex
RegexOption:
type: object
properties:
type:
type: string
description: 'This is the type of the regex option. Options are:
- `ignore-case`: Ignores the case of the text being matched. Add
- `whole-word`: Matches whole words only.
- `multi-line`: Matches across multiple lines.'
enum:
- ignore-case
- whole-word
- multi-line
enabled:
type: boolean
description: 'This is whether to enable the option.
@default false'
required:
- type
- enabled
RegexReplacement:
type: object
properties:
type:
type: string
description: 'This is the regex replacement type. You can use this to replace a word or phrase that matches a pattern.
Usage:
- Replace all numbers with "some number": { type: ''regex'', regex: ''\\d+'', value: ''some number'' }
- Replace email addresses with "[EMAIL]": { type: ''regex'', regex: ''\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b'',
value: ''[EMAIL]'' }
- Replace phone numbers with a formatted version: { type: ''regex'', regex: ''(\\d{3})(\\d{3})(\\d{4})'', value:
''($1) $2-$3'' }
- Replace all instances of "color" or "colour" with "hue": { type: ''regex'', regex: ''colou?r'', value: ''hue''
}
- Capitalize the first letter of every sentence: { type: ''regex'', regex: ''(?<=\\. |^)[a-z]'', value: (match)
=> match.toUpperCase() }'
enum:
- regex
regex:
type: string
description: 'This is the regex pattern to replace.
Note:
- This works by using the `string.replace` method in Node.JS. Eg. `"hello there".replace(/hello/g, "hi")` will
return `"hi there"`.
Hot tip:
- In JavaScript, escape `\` when sending the regex pattern. Eg. `"hello\sthere"` will be sent over the wire as
`"hellosthere"`. Send `"hello\\sthere"` instead.'
options:
description: 'These are the options for the regex replacement. Defaults to all disabled.
@default []'
type: array
items:
$ref: '#/components/schemas/RegexOption'
value:
type: string
description: This is the value that will replace the match.
maxLength: 1000
required:
- type
- regex
- value
RimeAIVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- rime-ai
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum:
- cove
- moon
- wildflower
- eva
- amber
- maya
- lagoon
- breeze
- helen
- joy
- marsh
- creek
- cedar
- alpine
- summit
- nicholas
- tyler
- colin
- hank
- thunder
- astra
- eucalyptus
- moraine
- peak
- tundra
- mesa_extra
- talon
- marlu
- glacier
- falcon
- luna
- celeste
- estelle
- andromeda
- esther
- lyra
- lintel
- oculus
- vespera
- transom
- bond
- arcade
- atrium
- cupola
- fern
- sirius
- orion
- masonry
- albion
- parapet
title: Suggested Voice Options
description: Popular Rime AI voices across mist, mistv2, and arcana models. Any valid Rime AI voice ID is accepted,
not just these suggestions.
- type: string
title: Any Rime AI Voice ID
description: Any valid Rime AI voice ID. See https://docs.rime.ai/docs/voices for the full catalog.
model:
type: string
description: This is the model that will be used. Defaults to 'arcana' when not specified.
enum:
- arcana
- mistv2
- mist
example: arcana
speed:
type: number
description: This is the speed multiplier that will be used.
minimum: 0.1
example: null
pauseBetweenBrackets:
type: boolean
description: 'This is a flag that controls whether to add slight pauses using angle brackets. Example: "Hi. <200>
I''d love to have a conversation with you." adds a 200ms pause between the first and second sentences.'
example: false
phonemizeBetweenBrackets:
type: boolean
description: 'This is a flag that controls whether text inside brackets should be phonemized (converted to phonetic
pronunciation) - Example: "{h''El.o} World" will pronounce "Hello" as expected.'
example: false
reduceLatency:
type: boolean
description: This is a flag that controls whether to optimize for reduced latency in streaming. https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency
example: false
inlineSpeedAlpha:
type: string
description: This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha
example: null
language:
type: string
description: 'Language for speech synthesis. Uses ISO 639 codes. Supported: en, es, de, fr, ar, hi, ja, he, pt,
ta, si.'
enum:
- en
- es
- de
- fr
- ar
- hi
- ja
- he
- pt
- ta
- si
example: en
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
SayHookAction:
type: object
properties:
type:
type: string
description: This is the type of action - must be "say"
enum:
- say
prompt:
description: 'This is the prompt for the assistant to generate a response based on existing conversation.
Can be a string or an array of chat messages.'
oneOf:
- type: string
title: String
- type: array
items:
oneOf:
- $ref: '#/components/schemas/SystemMessage'
title: SystemMessage
- $ref: '#/components/schemas/UserMessage'
title: UserMessage
- $ref: '#/components/schemas/AssistantMessage'
title: AssistantMessage
- $ref: '#/components/schemas/ToolMessage'
title: ToolMessage
- $ref: '#/components/schemas/DeveloperMessage'
title: DeveloperMessage
title: MessageArray
examples:
- Ask the user if they're still in the call
- - role: system
content: You are a helpful assistant, and would like to know if the user is still in the call based on the conversation
history in {{transcript}}
exact:
type: object
description: This is the message to say
required:
- type
SbcConfiguration:
type: object
properties: {}
ScorecardMetric:
type: object
properties:
structuredOutputId:
type: string
description: 'This is the unique identifier for the structured output that will be used to evaluate the scorecard.
The structured output must be of type number or boolean only for now.'
conditions:
description: 'These are the conditions that will be used to evaluate the scorecard.
Each condition will have a comparator, value, and points that will be used to calculate the final score.
The points will be added to the overall score if the condition is met.
The overall score will be normalized to a 100 point scale to ensure uniformity across different scorecards.'
type: array
items:
type: object
required:
- structuredOutputId
- conditions
SecurityFilterBase:
type: object
properties: {}
SecurityFilterPlan:
type: object
properties:
enabled:
type: boolean
description: 'Whether the security filter is enabled.
@default false'
default: false
filters:
description: 'Array of security filter types to apply.
If array is not empty, only those security filters are run.'
example: '[{ type: "sql-injection" }, { type: "xss" }]'
type: array
items:
$ref: '#/components/schemas/SecurityFilterBase'
mode:
type: string
description: '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'''
enum:
- sanitize
- reject
- replace
default: sanitize
replacementText:
type: string
description: 'Text to use when replacing filtered content.
@default ''[FILTERED]'''
default: '[FILTERED]'
Server:
type: object
properties:
timeoutSeconds:
type: number
description: 'This is the timeout in seconds for the request. Defaults to 20 seconds.
@default 20'
minimum: 1
maximum: 300
example: 20
credentialId:
type: string
description: The credential ID for server authentication
example: 550e8400-e29b-41d4-a716-446655440000
staticIpAddressesEnabled:
type: boolean
description: 'If enabled, requests will originate from a static set of IPs owned and managed by Vapi.
@default false'
example: false
encryptedPaths:
type: array
description: This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined.
items:
type: string
url:
type: string
description: This is where the request will be sent.
headers:
type: object
description: 'These are the headers to include in the request.
Each key-value pair represents a header name and its value.
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:
description: 'This is the backoff plan if the request fails. Defaults to undefined (the request will not be retried).
@default undefined (the request will not be retried)'
allOf:
- $ref: '#/components/schemas/BackoffPlan'
SesameVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- sesame
voiceId:
type: string
description: This is the provider-specific ID that will be used.
title: Sesame Voice ID. This should be either a name (a built-in voice) or a UUID (a custom voice).
model:
type: string
description: This is the model that will be used.
enum:
- csm-1b
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
- model
SessionCreatedHook:
type: object
properties:
'on':
type: string
description: This is the event that triggers this hook
enum:
- session.created
maxLength: 1000
do:
type: array
description: This is the set of actions to perform when the hook triggers.
items:
oneOf:
- $ref: '#/components/schemas/ToolCallHookAction'
title: ToolCallHookAction
name:
type: string
description: 'Optional name for this hook instance.
If no name is provided, the hook will be auto generated as UUID.
@default UUID'
maxLength: 1000
required:
- 'on'
- do
SipTrunkGateway:
type: object
properties:
ip:
type: string
description: This is the address of the gateway. It can be an IPv4 address like 1.1.1.1 or a fully qualified domain
name like my-sip-trunk.pstn.twilio.com.
port:
type: number
description: 'This is the port number of the gateway. Default is 5060.
@default 5060'
minimum: 1
maximum: 65535
netmask:
type: number
description: 'This is the netmask of the gateway. Defaults to 32.
@default 32'
minimum: 24
maximum: 32
inboundEnabled:
type: boolean
description: 'This is whether inbound calls are allowed from this gateway. Default is true.
@default true'
outboundEnabled:
type: boolean
description: 'This is whether outbound calls should be sent to this gateway. Default is true.
Note, if netmask is less than 32, it doesn''t affect the outbound IPs that are tried. 1 attempt is made to `ip:port`.
@default true'
outboundProtocol:
type: string
description: 'This is the protocol to use for SIP signaling outbound calls. Default is udp.
@default udp'
enum:
- tls/srtp
- tcp
- tls
- udp
optionsPingEnabled:
type: boolean
description: 'This is whether to send options ping to the gateway. This can be used to check if the gateway is reachable.
Default is false.
This is useful for high availability setups where you want to check if the gateway is reachable before routing
calls to it. Note, if no gateway for a trunk is reachable, outbound calls will be rejected.
@default false'
required:
- ip
SipTrunkOutboundAuthenticationPlan:
type: object
properties:
authPassword:
type: string
description: This is not returned in the API.
authUsername:
type: string
sipRegisterPlan:
description: This can be used to configure if SIP register is required by the SIP trunk. If not provided, no SIP
registration will be attempted.
allOf:
- $ref: '#/components/schemas/SipTrunkOutboundSipRegisterPlan'
SipTrunkOutboundSipRegisterPlan:
type: object
properties:
domain:
type: string
username:
type: string
realm:
type: string
SmallestAIVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- smallest-ai
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum:
- emily
- jasmine
- arman
- james
- mithali
- aravind
- raj
- diya
- raman
- ananya
- isha
- william
- aarav
- monika
- niharika
- deepika
- raghav
- kajal
- radhika
- mansi
- nisha
- saurabh
- pooja
- saina
- sanya
title: Preset Voice Options
- type: string
title: Smallest AI Voice ID
model:
type: string
description: Smallest AI voice model to use. Defaults to 'lightning' when not specified.
enum:
- lightning
speed:
type: number
description: This is the speed multiplier that will be used.
example: null
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
SmartDenoisingPlan:
type: object
properties:
enabled:
type: boolean
description: Whether smart denoising using Krisp is enabled.
default: true
SonioxContextGeneralItem:
type: object
properties:
key:
type: string
description: The key describing the type of context (e.g., "domain", "topic", "doctor", "organization").
minLength: 1
example: domain
value:
type: string
description: The value for the context key (e.g., "Healthcare", "Diabetes management consultation").
minLength: 1
example: Healthcare
required:
- key
- value
SonioxTranscriber:
type: object
properties:
provider:
type: string
enum:
- soniox
model:
type: string
enum:
- stt-rt-v4
description: The Soniox model to use for transcription.
language:
type: string
enum:
- aa
- ab
- ae
- af
- ak
- am
- an
- ar
- as
- av
- ay
- az
- ba
- be
- bg
- bh
- bi
- bm
- bn
- bo
- br
- bs
- ca
- ce
- ch
- co
- cr
- cs
- cu
- cv
- cy
- da
- de
- dv
- dz
- ee
- el
- en
- eo
- es
- et
- eu
- fa
- ff
- fi
- fj
- fo
- fr
- fy
- ga
- gd
- gl
- gn
- gu
- gv
- ha
- he
- hi
- ho
- hr
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- io
- is
- it
- iu
- ja
- jv
- ka
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ku
- kv
- kw
- ky
- la
- lb
- lg
- li
- ln
- lo
- lt
- lu
- lv
- mg
- mh
- mi
- mk
- ml
- mn
- mr
- ms
- mt
- my
- na
- nb
- nd
- ne
- ng
- nl
- nn
- 'no'
- nr
- nv
- ny
- oc
- oj
- om
- or
- os
- pa
- pi
- pl
- ps
- pt
- qu
- rm
- rn
- ro
- ru
- rw
- sa
- sc
- sd
- se
- sg
- si
- sk
- sl
- sm
- sn
- so
- sq
- sr
- ss
- st
- su
- sv
- sw
- ta
- te
- tg
- th
- ti
- tk
- tl
- tn
- to
- tr
- ts
- tt
- tw
- ty
- ug
- uk
- ur
- uz
- ve
- vi
- vo
- wa
- wo
- xh
- yi
- yue
- yo
- za
- zh
- zu
description: Single language for transcription as an ISO 639-1 code (e.g., `en`, `es`). For multi-language hints
or to enable Soniox auto-detect, use `languages` instead — when `languages` is set (including to an empty array),
this field is ignored when building the Soniox request. Defaults to `en` if neither this nor `languages` is set.
languages:
type: array
description: Language hints sent to Soniox as `language_hints`. Provide `[lang1, lang2, ...]` (ISO 639-1 codes)
to bias recognition toward specific languages, or provide an explicit empty array `[]` to enable Soniox auto-detect
across all 60+ supported languages. When set (including the empty array), this field takes precedence over the
singular `language` field. When omitted, falls back to the singular `language` (which defaults to `en` if also
unset). Best accuracy is achieved with a single language.
items:
type: string
enum:
- aa
- ab
- ae
- af
- ak
- am
- an
- ar
- as
- av
- ay
- az
- ba
- be
- bg
- bh
- bi
- bm
- bn
- bo
- br
- bs
- ca
- ce
- ch
- co
- cr
- cs
- cu
- cv
- cy
- da
- de
- dv
- dz
- ee
- el
- en
- eo
- es
- et
- eu
- fa
- ff
- fi
- fj
- fo
- fr
- fy
- ga
- gd
- gl
- gn
- gu
- gv
- ha
- he
- hi
- ho
- hr
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- io
- is
- it
- iu
- ja
- jv
- ka
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ku
- kv
- kw
- ky
- la
- lb
- lg
- li
- ln
- lo
- lt
- lu
- lv
- mg
- mh
- mi
- mk
- ml
- mn
- mr
- ms
- mt
- my
- na
- nb
- nd
- ne
- ng
- nl
- nn
- 'no'
- nr
- nv
- ny
- oc
- oj
- om
- or
- os
- pa
- pi
- pl
- ps
- pt
- qu
- rm
- rn
- ro
- ru
- rw
- sa
- sc
- sd
- se
- sg
- si
- sk
- sl
- sm
- sn
- so
- sq
- sr
- ss
- st
- su
- sv
- sw
- ta
- te
- tg
- th
- ti
- tk
- tl
- tn
- to
- tr
- ts
- tt
- tw
- ty
- ug
- uk
- ur
- uz
- ve
- vi
- vo
- wa
- wo
- xh
- yi
- yue
- yo
- za
- zh
- zu
languageHintsStrict:
type: boolean
description: 'When `true`, Soniox strictly restricts transcription to the languages in `languages` (or the singular
`language` if `languages` is unset). When `false`, Soniox biases toward those languages but still allows transcription
in other languages. Has no effect when no language hints are sent (e.g., `languages: []` for auto-detect). Defaults
to `true` (strict mode).'
maxEndpointDelayMs:
type: number
minimum: 500
maximum: 3000
description: 'Maximum delay in milliseconds between when the speaker stops and when the endpoint is detected. Lower
values mean faster turn-taking but more false endpoints. Range: 500-3000. Default: 500.'
customVocabulary:
description: Custom vocabulary terms to boost recognition accuracy. Useful for brand names, product names, and domain-specific
terminology. Maps to Soniox context.terms.
type: array
items:
type: string
contextGeneral:
description: 'General context key-value pairs that guide the AI model during transcription. Helps adapt vocabulary
to the correct domain, improving accuracy. Recommended: 10 or fewer pairs. Maps to Soniox context.general.'
example:
- key: domain
value: Healthcare
- key: topic
value: Diabetes management consultation
type: array
items:
$ref: '#/components/schemas/SonioxContextGeneralItem'
fallbackPlan:
description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider
fails.
allOf:
- $ref: '#/components/schemas/FallbackTranscriberPlan'
required:
- provider
SpeechmaticsCustomVocabularyItem:
type: object
properties:
content:
type: string
description: The word or phrase to add to the custom vocabulary.
minLength: 1
example: Speechmatics
soundsLike:
description: Alternative phonetic representations of how the word might sound. This helps recognition when the word
might be pronounced differently.
example:
- speech mattix
type: array
items:
type: string
required:
- content
SpeechmaticsTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- speechmatics
model:
type: string
description: This is the model that will be used for the transcription.
enum:
- default
language:
type: string
enum:
- auto
- ar
- ar_en
- 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
- en_ms
- mt
- cmn
- cmn_en
- mr
- mn
- 'no'
- fa
- pl
- pt
- ro
- ru
- sk
- sl
- es
- en_es
- sw
- sv
- tl
- ta
- en_ta
- th
- tr
- uk
- ur
- ug
- vi
- cy
operatingPoint:
type: string
description: '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'''
example: enhanced
enum:
- standard
- enhanced
default: enhanced
region:
type: string
description: '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'''
example: us
enum:
- eu
- us
default: eu
enableDiarization:
type: boolean
description: 'This enables speaker diarization, which identifies and separates speakers in the transcription. Essential
for multi-speaker conversations and conference calls.
@default false'
example: true
default: false
maxDelay:
type: number
description: 'This sets the maximum delay in milliseconds for partial transcripts. Balances latency and accuracy.
@default 3000'
example: 1500
minimum: 500
maximum: 10000
default: 3000
customVocabulary:
example:
- content: Speechmatics
soundsLike:
- speech mattix
type: array
items:
$ref: '#/components/schemas/SpeechmaticsCustomVocabularyItem'
numeralStyle:
type: string
description: 'This controls how numbers, dates, currencies, and other entities are formatted in the transcription
output.
@default ''written'''
example: spoken
enum:
- written
- spoken
default: written
endOfTurnSensitivity:
type: number
description: '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'
example: 0.8
minimum: 0
maximum: 1
default: 0.5
removeDisfluencies:
type: boolean
description: 'This enables removal of disfluencies (um, uh) from the transcript to create cleaner, more professional
output.
This is only supported for the English language transcriber.
@default false'
example: true
default: false
minimumSpeechDuration:
type: number
description: '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'
example: 0.2
minimum: 0
maximum: 5
default: 0
fallbackPlan:
description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider
fails.
allOf:
- $ref: '#/components/schemas/FallbackTranscriberPlan'
required:
- provider
- customVocabulary
SpkiPemPublicKeyConfig:
type: object
properties:
name:
type: string
description: Optional name of the key for identification purposes.
maxLength: 100
format:
type: string
description: The format of the public key.
enum:
- spki-pem
pem:
type: string
description: The PEM-encoded public key.
required:
- format
- pem
Squad:
type: object
properties:
name:
type: string
description: This is the name of the squad.
members:
description: 'This is the list of assistants that make up the squad.
The call will start with the first assistant in the list.'
type: array
items:
$ref: '#/components/schemas/SquadMemberDTO'
membersOverrides:
description: 'This can be used to override all the assistants'' settings and provide values for their template variables.
Both `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides`
is applied. Then, `membersOverrides` is applied as a global override.'
allOf:
- $ref: '#/components/schemas/AssistantOverrides'
id:
type: string
description: This is the unique identifier for the squad.
orgId:
type: string
description: This is the unique identifier for the org that this squad belongs to.
createdAt:
format: date-time
type: string
description: This is the ISO 8601 date-time string of when the squad was created.
updatedAt:
format: date-time
type: string
description: This is the ISO 8601 date-time string of when the squad was last updated.
required:
- members
- id
- orgId
- createdAt
- updatedAt
SquadMemberDTO:
type: object
properties:
assistantDestinations:
type: array
items:
oneOf:
- $ref: '#/components/schemas/TransferDestinationAssistant'
title: Transfer Destination
- $ref: '#/components/schemas/HandoffDestinationAssistant'
title: Handoff Destination
assistantId:
type: string
nullable: true
description: This is the assistant that will be used for the call. To use a transient assistant, use `assistant`
instead.
assistant:
description: This is the assistant that will be used for the call. To use an existing assistant, use `assistantId`
instead.
allOf:
- $ref: '#/components/schemas/CreateAssistantDTO'
assistantOverrides:
description: This can be used to override the assistant's settings and provide values for it's template variables.
allOf:
- $ref: '#/components/schemas/AssistantOverrides'
StartSpeakingPlan:
type: object
properties:
waitSeconds:
type: number
description: 'This is how long assistant waits before speaking. Defaults to 0.4.
This is the minimum it will wait but if there is latency is the pipeline, this minimum will be exceeded. This
is intended as a stopgap in case the pipeline is moving too fast.
Example:
- If model generates tokens and voice generates bytes within 100ms, the pipeline still waits 300ms before outputting
speech.
Usage:
- If the customer is taking long pauses, set this to a higher value.
- If the assistant is accidentally jumping in too much, set this to a higher value.
@default 0.4'
minimum: 0
maximum: 5
example: 0.4
smartEndpointingEnabled:
example: false
deprecated: true
oneOf:
- type: boolean
- type: string
enum:
- livekit
smartEndpointingPlan:
description: 'This is the plan for smart endpointing. Pick between 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.'
oneOf:
- $ref: '#/components/schemas/VapiSmartEndpointingPlan'
title: Vapi
- $ref: '#/components/schemas/LivekitSmartEndpointingPlan'
title: Livekit
- $ref: '#/components/schemas/CustomEndpointingModelSmartEndpointingPlan'
title: Custom Endpointing Model
customEndpointingRules:
type: array
description: 'These are the custom endpointing rules to set an endpointing timeout based on a regex on the customer''s
speech or the assistant''s last message.
Usage:
- If you have yes/no questions like "are you interested in a loan?", you can set a shorter timeout.
- If you have questions where the customer may pause to look up information like "what''s my account number?",
you can set a longer timeout.
- If you want to wait longer while customer is enumerating a list of numbers, you can set a longer timeout.
These rules have the highest precedence and will override both `smartEndpointingPlan` and `transcriptionEndpointingPlan`
when a rule is matched.
The rules are evaluated in order and the first one that matches will be used.
Order of precedence for endpointing:
1. customEndpointingRules (if any match)
2. smartEndpointingPlan (if set)
3. transcriptionEndpointingPlan
@default []'
items:
oneOf:
- $ref: '#/components/schemas/AssistantCustomEndpointingRule'
title: Assistant
- $ref: '#/components/schemas/CustomerCustomEndpointingRule'
title: Customer
- $ref: '#/components/schemas/BothCustomEndpointingRule'
title: Both
transcriptionEndpointingPlan:
description: 'This determines how a customer speech is considered done (endpointing) using the transcription of
customer''s speech.
Once an endpoint is triggered, the request is sent to `assistant.model`.
Note: This plan is only used if `smartEndpointingPlan` is not set and transcriber does not have built-in endpointing
capabilities. If both are provided, `smartEndpointingPlan` takes precedence.
This plan will also be overridden by any matching `customEndpointingRules`.'
allOf:
- $ref: '#/components/schemas/TranscriptionEndpointingPlan'
StopSpeakingPlan:
type: object
properties:
numWords:
type: number
description: 'This is the number of words that the customer has to say before the assistant will stop talking.
Words like "stop", "actually", "no", etc. will always interrupt immediately regardless of this value.
Words like "okay", "yeah", "right" will never interrupt.
When set to 0, `voiceSeconds` is used in addition to the transcriptions to determine the customer has started
speaking.
Defaults to 0.
@default 0'
minimum: 0
maximum: 10
example: 0
voiceSeconds:
type: number
description: 'This is the seconds customer has to speak before the assistant stops talking. This uses the VAD (Voice
Activity Detection) spike to determine if the customer has started speaking.
Considerations:
- A lower value might be more responsive but could potentially pick up non-speech sounds.
- A higher value reduces false positives but might slightly delay the detection of speech onset.
This is only used if `numWords` is set to 0.
Defaults to 0.2
@default 0.2'
minimum: 0
maximum: 0.5
example: 0.2
backoffSeconds:
type: number
description: 'This is the seconds to wait before the assistant will start talking again after being interrupted.
Defaults to 1.
@default 1'
minimum: 0
maximum: 10
example: 1
acknowledgementPhrases:
description: 'These are the phrases that will never interrupt the assistant, even if numWords threshold is met.
These are typically acknowledgement or backchanneling phrases.'
example:
- i understand
- i see
- i got it
- i hear you
- im listening
- im with you
- right
- okay
- ok
- sure
- alright
- got it
- understood
- yeah
- 'yes'
- uh-huh
- mm-hmm
- gotcha
- mhmm
- ah
- yeah okay
- yeah sure
default:
- i understand
- i see
- i got it
- i hear you
- im listening
- im with you
- right
- okay
- ok
- sure
- alright
- got it
- understood
- yeah
- 'yes'
- uh-huh
- mm-hmm
- gotcha
- mhmm
- ah
- yeah okay
- yeah sure
type: array
items:
type: string
maxLength: 240
interruptionPhrases:
description: 'These are the phrases that will always interrupt the assistant immediately, regardless of numWords.
These are typically phrases indicating disagreement or desire to stop.'
example:
- stop
- shut
- up
- enough
- quiet
- silence
- but
- dont
- not
- 'no'
- hold
- wait
- cut
- pause
- nope
- nah
- nevermind
- never
- bad
- actually
default:
- stop
- shut
- up
- enough
- quiet
- silence
- but
- dont
- not
- 'no'
- hold
- wait
- cut
- pause
- nope
- nah
- nevermind
- never
- bad
- actually
type: array
items:
type: string
maxLength: 240
StructuredDataMultiPlan:
type: object
properties:
key:
type: string
description: This is the key of the structured data plan in the catalog.
plan:
description: This is an individual structured data plan in the catalog.
allOf:
- $ref: '#/components/schemas/StructuredDataPlan'
required:
- key
- plan
StructuredDataPlan:
type: object
properties:
messages:
description: "These are the messages used to generate the structured data.\n\n@default: ```\n[\n {\n \"role\"\
: \"system\",\n \"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.\"\n },\n {\n \"role\": \"user\",\n \"content\": \"Here\
\ is the transcript:\\n\\n{{transcript}}\\n\\n. Here is the ended reason of the call:\\n\\n{{endedReason}}\\n\\\
n\"\n }\n]```\n\nYou can customize by providing any messages you want.\n\nHere are the template variables available:\n\
- {{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`"
type: array
items:
type: object
enabled:
type: boolean
description: 'This determines whether structured data is generated and stored in `call.analysis.structuredData`.
Defaults to false.
Usage:
- If you want to extract structured data, set this to true and provide a `schema`.
@default false'
schema:
description: 'This is the schema of the structured data. The output is stored in `call.analysis.structuredData`.
Complete guide on JSON Schema can be found [here](https://ajv.js.org/json-schema.html#json-data-type).'
allOf:
- $ref: '#/components/schemas/JsonSchema'
timeoutSeconds:
type: number
description: 'This is how long the request is tried before giving up. When request times out, `call.analysis.structuredData`
will be empty.
Usage:
- To guarantee the structured data is generated, set this value high. Note, this will delay the end of call report
in cases where model is slow to respond.
@default 5 seconds'
minimum: 1
maximum: 60
SuccessEvaluationPlan:
type: object
properties:
rubric:
type: string
enum:
- NumericScale
- DescriptiveScale
- Checklist
- Matrix
- PercentageScale
- LikertScale
- AutomaticRubric
- PassFail
description: 'This enforces the rubric of the evaluation. The output is stored in `call.analysis.successEvaluation`.
Options include:
- ''NumericScale'': A scale of 1 to 10.
- ''DescriptiveScale'': A scale of Excellent, Good, Fair, Poor.
- ''Checklist'': A checklist of criteria and their status.
- ''Matrix'': A grid that evaluates multiple criteria across different performance levels.
- ''PercentageScale'': A scale of 0% to 100%.
- ''LikertScale'': A scale of Strongly Agree, Agree, Neutral, Disagree, Strongly Disagree.
- ''AutomaticRubric'': Automatically break down evaluation into several criteria, each with its own score.
- ''PassFail'': A simple ''true'' if call passed, ''false'' if not.
Default is ''PassFail''.'
messages:
description: "These are the messages used to generate the success evaluation.\n\n@default: ```\n[\n {\n \"role\"\
: \"system\",\n \"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.\"\n },\n {\n \"role\": \"user\",\n \"content\": \"Here is the transcript:\\n\\n{{transcript}}\\\
n\\n\"\n },\n {\n \"role\": \"user\",\n \"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\"\n }\n]```\n\nYou can customize by providing\
\ any messages you want.\n\nHere are the template variables available:\n- {{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`"
type: array
items:
type: object
enabled:
type: boolean
description: 'This determines whether a success evaluation is generated and stored in `call.analysis.successEvaluation`.
Defaults to true.
Usage:
- If you want to disable the success evaluation, set this to false.
@default true'
timeoutSeconds:
type: number
description: 'This is how long the request is tried before giving up. When request times out, `call.analysis.successEvaluation`
will be empty.
Usage:
- To guarantee the success evaluation is generated, set this value high. Note, this will delay the end of call
report in cases where model is slow to respond.
@default 5 seconds'
minimum: 1
maximum: 60
SummaryPlan:
type: object
properties:
messages:
description: "These are the messages used to generate the summary.\n\n@default: ```\n[\n {\n \"role\": \"system\"\
,\n \"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.\"\n },\n {\n \"role\": \"user\",\n \"content\"\
: \"Here is the transcript:\\n\\n{{transcript}}\\n\\n. Here is the ended reason of the call:\\n\\n{{endedReason}}\\\
n\\n\"\n }\n]```\n\nYou can customize by providing any messages you want.\n\nHere are the template variables\
\ available:\n- {{transcript}}: The transcript of the call from `call.artifact.transcript` \n- {{systemPrompt}}:\
\ The system prompt of the call from `assistant.model.messages[type=system].content` \n- {{messages}}: The messages\
\ of the call from `assistant.model.messages` \n- {{endedReason}}: The ended reason of the call from `call.endedReason`"
type: array
items:
type: object
enabled:
type: boolean
description: 'This determines whether a summary is generated and stored in `call.analysis.summary`. Defaults to
true.
Usage:
- If you want to disable the summary, set this to false.
@default true'
timeoutSeconds:
type: number
description: 'This is how long the request is tried before giving up. When request times out, `call.analysis.summary`
will be empty.
Usage:
- To guarantee the summary is generated, set this value high. Note, this will delay the end of call report in
cases where model is slow to respond.
@default 5 seconds'
minimum: 1
maximum: 60
SupabaseBucketPlan:
type: object
properties:
region:
type: string
description: 'This is the S3 Region. It should look like us-east-1
It should be one of the supabase regions defined in the SUPABASE_REGION enum
Check https://supabase.com/docs/guides/platform/regions for up to date regions'
enum:
- us-west-1
- us-east-1
- us-east-2
- ca-central-1
- eu-west-1
- eu-west-2
- eu-west-3
- eu-central-1
- eu-central-2
- eu-north-1
- ap-south-1
- ap-southeast-1
- ap-northeast-1
- ap-northeast-2
- ap-southeast-2
- sa-east-1
url:
type: string
description: 'This is the S3 compatible URL for Supabase S3
This should look like https://.supabase.co/storage/v1/s3'
accessKeyId:
type: string
description: 'This is the Supabase S3 Access Key ID.
The user creates this in the Supabase project Storage settings'
secretAccessKey:
type: string
description: 'This is the Supabase S3 Secret Access Key.
The user creates this in the Supabase project Storage settings along with the access key id'
name:
type: string
description: 'This is the Supabase S3 Bucket Name.
The user must create this in Supabase under Storage > Buckets
A bucket that does not exist will not be checked now, but file uploads will fail'
path:
type: string
description: 'This is the Supabase S3 Bucket Folder Path.
The user can create this in Supabase under Storage > Buckets
A path that does not exist will not be checked now, but file uploads will fail
A Path is like a folder in the bucket
Eg. If the bucket is called "my-bucket" and the path is "my-folder", the full path is "my-bucket/my-folder"'
required:
- region
- url
- accessKeyId
- secretAccessKey
- name
SystemMessage:
type: object
properties:
role:
type: string
description: The role of the system in the conversation.
message:
type: string
description: The message content from the system.
time:
type: number
description: The timestamp when the message was sent.
secondsFromStart:
type: number
description: The number of seconds from the start of the conversation.
required:
- role
- message
- time
- secondsFromStart
TalkscriberTranscriber:
type: object
properties:
provider:
type: string
description: This is the transcription provider that will be used.
enum:
- talkscriber
model:
type: string
description: This is the model that will be used for the transcription.
enum:
- whisper
language:
type: string
description: 'This is the language that will be set for the transcription. The list of languages Whisper supports
can be found here: https://github.com/openai/whisper/blob/main/whisper/tokenizer.py'
enum:
- en
- zh
- de
- es
- ru
- ko
- fr
- ja
- pt
- tr
- pl
- ca
- nl
- ar
- sv
- it
- id
- hi
- fi
- vi
- he
- uk
- el
- ms
- cs
- ro
- da
- hu
- ta
- 'no'
- th
- ur
- hr
- bg
- lt
- la
- mi
- ml
- cy
- sk
- te
- fa
- lv
- bn
- sr
- az
- sl
- kn
- et
- mk
- br
- eu
- is
- hy
- ne
- mn
- bs
- kk
- sq
- sw
- gl
- mr
- pa
- si
- km
- sn
- yo
- so
- af
- oc
- ka
- be
- tg
- sd
- gu
- am
- yi
- lo
- uz
- fo
- ht
- ps
- tk
- nn
- mt
- sa
- lb
- my
- bo
- tl
- mg
- as
- tt
- haw
- ln
- ha
- ba
- jw
- su
- yue
fallbackPlan:
description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider
fails.
allOf:
- $ref: '#/components/schemas/FallbackTranscriberPlan'
required:
- provider
TavusConversationProperties:
type: object
properties:
maxCallDuration:
type: number
description: 'The maximum duration of the call in seconds. The default `maxCallDuration` is 3600 seconds (1 hour).
Once the time limit specified by this parameter has been reached, the conversation will automatically shut down.'
participantLeftTimeout:
type: number
description: The duration in seconds after which the call will be automatically shut down once the last participant
leaves.
participantAbsentTimeout:
type: number
description: 'Starting from conversation creation, the duration in seconds after which the call will be automatically
shut down if no participant joins the call.
Default is 300 seconds (5 minutes).'
enableRecording:
type: boolean
description: If true, the user will be able to record the conversation.
enableTranscription:
type: boolean
description: 'If true, the user will be able to transcribe the conversation.
You can find more instructions on displaying transcriptions if you are using your custom DailyJS components here.
You need to have an event listener on Daily that listens for `app-messages`.'
applyGreenscreen:
type: boolean
description: 'If true, the background will be replaced with a greenscreen (RGB values: `[0, 255, 155]`).
You can use WebGL on the frontend to make the greenscreen transparent or change its color.'
language:
type: string
description: 'The language of the conversation. Please provide the **full language name**, not the two-letter code.
If you are using your own TTS voice, please ensure it supports the language you provide.
If you are using a stock replica or default persona, please note that only ElevenLabs and Cartesia supported languages
are available.
You can find a full list of supported languages for Cartesia here, for ElevenLabs here, and for PlayHT here.'
recordingS3BucketName:
type: string
description: The name of the S3 bucket where the recording will be stored.
recordingS3BucketRegion:
type: string
description: The region of the S3 bucket where the recording will be stored.
awsAssumeRoleArn:
type: string
description: The ARN of the role that will be assumed to access the S3 bucket.
TavusVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- tavus
voiceId:
description: This is the provider-specific ID that will be used.
oneOf:
- type: string
enum:
- r52da2535a
title: Preset Voice Options
- type: string
title: Tavus Voice ID
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
personaId:
type: string
description: This is the unique identifier for the persona that the replica will use in the conversation.
callbackUrl:
type: string
description: This is the url that will receive webhooks with updates regarding the conversation state.
conversationName:
type: string
description: This is the name for the conversation.
conversationalContext:
type: string
description: This is the context that will be appended to any context provided in the persona, if one is provided.
customGreeting:
type: string
description: This is the custom greeting that the replica will give once a participant joines the conversation.
properties:
description: These are optional properties used to customize the conversation.
allOf:
- $ref: '#/components/schemas/TavusConversationProperties'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
TextContent:
type: object
properties:
type:
type: string
enum:
- text
text:
type: string
language:
type: string
enum:
- aa
- ab
- ae
- af
- ak
- am
- an
- ar
- as
- av
- ay
- az
- ba
- be
- bg
- bh
- bi
- bm
- bn
- bo
- br
- bs
- ca
- ce
- ch
- co
- cr
- cs
- cu
- cv
- cy
- da
- de
- dv
- dz
- ee
- el
- en
- eo
- es
- et
- eu
- fa
- ff
- fi
- fj
- fo
- fr
- fy
- ga
- gd
- gl
- gn
- gu
- gv
- ha
- he
- hi
- ho
- hr
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- io
- is
- it
- iu
- ja
- jv
- ka
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ku
- kv
- kw
- ky
- la
- lb
- lg
- li
- ln
- lo
- lt
- lu
- lv
- mg
- mh
- mi
- mk
- ml
- mn
- mr
- ms
- mt
- my
- na
- nb
- nd
- ne
- ng
- nl
- nn
- 'no'
- nr
- nv
- ny
- oc
- oj
- om
- or
- os
- pa
- pi
- pl
- ps
- pt
- qu
- rm
- rn
- ro
- ru
- rw
- sa
- sc
- sd
- se
- sg
- si
- sk
- sl
- sm
- sn
- so
- sq
- sr
- ss
- st
- su
- sv
- sw
- ta
- te
- tg
- th
- ti
- tk
- tl
- tn
- to
- tr
- ts
- tt
- tw
- ty
- ug
- uk
- ur
- uz
- ve
- vi
- vo
- wa
- wo
- xh
- yi
- yue
- yo
- za
- zh
- zu
required:
- type
- text
- language
TogetherAIModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
provider:
type: string
enum:
- together-ai
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- provider
- model
ToolCall:
type: object
properties:
id:
type: string
description: This is the ID of the tool call
type:
type: string
description: This is the type of tool
function:
description: This is the function that was called
allOf:
- $ref: '#/components/schemas/ToolCallFunction'
required:
- id
- type
- function
ToolCallFunction:
type: object
properties:
arguments:
type: string
description: This is the arguments to call the function with
name:
type: string
description: This is the name of the function to call
maxLength: 80
required:
- arguments
- name
ToolCallHookAction:
type: object
properties:
type:
type: string
description: This is the type of action - must be "tool"
enum:
- tool
tool:
description: This is the tool to call. To use an existing tool, send `toolId` instead.
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolId:
type: string
description: This is the tool to call. To use a transient tool, send `tool` instead.
required:
- type
ToolMessage:
type: object
properties:
role:
type: string
description: This is the role of the message author
default: tool
enum:
- tool
content:
type: string
description: This is the content of the tool message
maxLength: 10000
tool_call_id:
type: string
description: This is the ID of the tool call this message is responding to
name:
type: string
description: This is an optional name for the participant
maxLength: 40
metadata:
type: object
description: This is an optional metadata for the message
required:
- role
- content
- tool_call_id
ToolMessageComplete:
type: object
properties:
contents:
type: array
description: 'This is an alternative to the `content` property. It allows to specify variants of the same content,
one per language.
Usage:
- If your assistants are multilingual, you can provide content for each language.
- If you don''t provide content for a language, the first item in the array will be automatically translated to
the active language at that moment.
This will override the `content` property.'
items:
oneOf:
- $ref: '#/components/schemas/TextContent'
title: Text
type:
type: string
description: 'This message is triggered when the tool call is complete.
This message is triggered immediately without waiting for your server to respond for async tool calls.
If this message is not provided, the model will be requested to respond.
If this message is provided, only this message will be spoken and the model will not be requested to come up with
a response. It''s an exclusive OR.'
enum:
- request-complete
role:
type: string
description: "This is optional and defaults to \"assistant\".\n\nWhen role=assistant, `content` is said out loud.\n\
\nWhen role=system, `content` is passed to the model in a system message. Example:\n system: default one\n\
\ assistant:\n user:\n assistant:\n user:\n assistant:\n user:\n assistant: tool called\n\
\ tool: your server response\n <--- system prompt as hint\n ---> model generates response which is spoken\n\
This is useful when you want to provide a hint to the model about what to say next."
enum:
- assistant
- system
endCallAfterSpokenEnabled:
type: boolean
description: 'This is an optional boolean that if true, the call will end after the message is spoken. Default is
false.
This is ignored if `role` is set to `system`.
@default false'
example: false
content:
type: string
description: This is the content that the assistant says when this message is triggered.
maxLength: 1000
conditions:
description: This is an optional array of conditions that the tool call arguments must meet in order for this message
to be triggered.
type: array
items:
$ref: '#/components/schemas/Condition'
required:
- type
ToolMessageDelayed:
type: object
properties:
contents:
type: array
description: 'This is an alternative to the `content` property. It allows to specify variants of the same content,
one per language.
Usage:
- If your assistants are multilingual, you can provide content for each language.
- If you don''t provide content for a language, the first item in the array will be automatically translated to
the active language at that moment.
This will override the `content` property.'
items:
oneOf:
- $ref: '#/components/schemas/TextContent'
title: Text
type:
type: string
description: 'This message is triggered when the tool call is delayed.
There are the two things that can trigger this message:
1. The user talks with the assistant while your server is processing the request. Default is "Sorry, a few more
seconds."
2. The server doesn''t respond within `timingMilliseconds`.
This message is never triggered for async tool calls.'
enum:
- request-response-delayed
timingMilliseconds:
type: number
minimum: 100
maximum: 120000
example: 1000
description: The number of milliseconds to wait for the server response before saying this message.
content:
type: string
description: This is the content that the assistant says when this message is triggered.
maxLength: 1000
conditions:
description: This is an optional array of conditions that the tool call arguments must meet in order for this message
to be triggered.
type: array
items:
$ref: '#/components/schemas/Condition'
required:
- type
ToolMessageFailed:
type: object
properties:
contents:
type: array
description: 'This is an alternative to the `content` property. It allows to specify variants of the same content,
one per language.
Usage:
- If your assistants are multilingual, you can provide content for each language.
- If you don''t provide content for a language, the first item in the array will be automatically translated to
the active language at that moment.
This will override the `content` property.'
items:
oneOf:
- $ref: '#/components/schemas/TextContent'
title: Text
type:
type: string
description: 'This message is triggered when the tool call fails.
This message is never triggered for async tool calls.
If this message is not provided, the model will be requested to respond.
If this message is provided, only this message will be spoken and the model will not be requested to come up with
a response. It''s an exclusive OR.'
enum:
- request-failed
endCallAfterSpokenEnabled:
type: boolean
description: 'This is an optional boolean that if true, the call will end after the message is spoken. Default is
false.
@default false'
example: false
content:
type: string
description: This is the content that the assistant says when this message is triggered.
maxLength: 1000
conditions:
description: This is an optional array of conditions that the tool call arguments must meet in order for this message
to be triggered.
type: array
items:
$ref: '#/components/schemas/Condition'
required:
- type
ToolMessageStart:
type: object
properties:
contents:
type: array
description: 'This is an alternative to the `content` property. It allows to specify variants of the same content,
one per language.
Usage:
- If your assistants are multilingual, you can provide content for each language.
- If you don''t provide content for a language, the first item in the array will be automatically translated to
the active language at that moment.
This will override the `content` property.'
items:
oneOf:
- $ref: '#/components/schemas/TextContent'
title: Text
type:
type: string
enum:
- request-start
description: 'This message is triggered when the tool call starts.
This message is never triggered for async tools.
If this message is not provided, one of the default filler messages "Hold on a sec", "One moment", "Just a sec",
"Give me a moment" or "This''ll just take a sec" will be used.'
blocking:
type: boolean
description: 'This is an optional boolean that if true, the tool call will only trigger after the message is spoken.
Default is false.
@default false'
example: false
default: false
content:
type: string
description: This is the content that the assistant says when this message is triggered.
maxLength: 1000
conditions:
description: This is an optional array of conditions that the tool call arguments must meet in order for this message
to be triggered.
type: array
items:
$ref: '#/components/schemas/Condition'
required:
- type
ToolParameter:
type: object
properties:
key:
type: string
description: This is the key of the parameter.
value:
description: The value of the parameter. Any JSON type. String values support Liquid templates.
oneOf:
- type: string
- type: number
- type: boolean
- type: object
- type: array
required:
- key
- value
ToolRejectionPlan:
type: object
properties:
conditions:
type: array
description: 'This is the list of conditions that must be evaluated.
Usage:
- If all conditions match (AND logic), the tool call is rejected.
- For OR logic at the top level, use a single ''group'' condition with operator: ''OR''.
@default [] - Empty array means tool always executes'
examples:
- '[{ type: "regex", regex: "(?i)\\b(cancel|stop)\\b", target: { role: "user" } }]'
- '[{ type: "group", operator: "OR", conditions: [...] }]'
items:
oneOf:
- $ref: '#/components/schemas/RegexCondition'
title: RegexCondition
- $ref: '#/components/schemas/LiquidCondition'
title: LiquidCondition
- $ref: '#/components/schemas/GroupCondition'
title: GroupCondition
description: This is the GroupCondition object but Swagger does not display nested schemas correctly.
TranscriptPlan:
type: object
properties:
enabled:
type: boolean
description: 'This determines whether the transcript is stored in `call.artifact.transcript`. Defaults to true.
@default true'
example: true
assistantName:
type: string
description: 'This is the name of the assistant in the transcript. Defaults to ''AI''.
Usage:
- If you want to change the name of the assistant in the transcript, set this. Example, here is what the transcript
would look like with `assistantName` set to ''Buyer'':
```
User: Hello, how are you?
Buyer: I''m fine.
User: Do you want to buy a car?
Buyer: No.
```
@default ''AI'''
userName:
type: string
description: 'This is the name of the user in the transcript. Defaults to ''User''.
Usage:
- If you want to change the name of the user in the transcript, set this. Example, here is what the transcript
would look like with `userName` set to ''Seller'':
```
Seller: Hello, how are you?
AI: I''m fine.
Seller: Do you want to buy a car?
AI: No.
```
@default ''User'''
TranscriptionEndpointingPlan:
type: object
properties:
onPunctuationSeconds:
type: number
description: 'The minimum number of seconds to wait after transcription ending with punctuation before sending a
request to the model. Defaults to 0.1.
This setting exists because the transcriber punctuates the transcription when it''s more confident that customer
has completed a thought.
@default 0.1'
minimum: 0
maximum: 3
example: 0.1
onNoPunctuationSeconds:
type: number
description: 'The minimum number of seconds to wait after transcription ending without punctuation before sending
a request to the model. Defaults to 1.5.
This setting exists to catch the cases where the transcriber was not confident enough to punctuate the transcription,
but the customer is done and has been silent for a long time.
@default 1.5'
minimum: 0
maximum: 3
example: 1.5
onNumberSeconds:
type: number
description: 'The minimum number of seconds to wait after transcription ending with a number before sending a request
to the model. Defaults to 0.4.
This setting exists because the transcriber will sometimes punctuate the transcription ending with a number, even
though the customer hasn''t uttered the full number. This happens commonly for long numbers when the customer
reads the number in chunks.
@default 0.5'
minimum: 0
maximum: 3
example: 0.5
TransferDestinationAssistant:
type: object
properties:
message:
description: 'This is spoken to the customer before connecting them to the destination.
Usage:
- If this is not provided and transfer tool messages is not provided, default is "Transferring the call now".
- If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful
when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message`
for the destination assistant.
This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for
different languages through the `contents` field.'
oneOf:
- type: string
- $ref: '#/components/schemas/CustomMessage'
type:
type: string
enum:
- assistant
transferMode:
type: string
description: "This is the mode to use for the transfer. Defaults to `rolling-history`.\n\n- `rolling-history`: This\
\ is the default mode. It keeps the entire conversation history and appends the new assistant's system message\
\ on transfer.\n\n Example:\n\n Pre-transfer:\n system: assistant1 system message\n assistant: assistant1\
\ first message\n user: hey, good morning\n assistant: how can i help?\n user: i need help with my account\n\
\ assistant: (destination.message)\n\n Post-transfer:\n system: assistant1 system message\n assistant:\
\ assistant1 first message\n user: hey, good morning\n assistant: how can i help?\n user: i need help\
\ with my account\n assistant: (destination.message)\n system: assistant2 system message\n assistant:\
\ assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)\n\
\n- `swap-system-message-in-history`: This replaces the original system message with the new assistant's system\
\ message on transfer.\n\n Example:\n\n Pre-transfer:\n system: assistant1 system message\n assistant:\
\ assistant1 first message\n user: hey, good morning\n assistant: how can i help?\n user: i need help\
\ with my account\n assistant: (destination.message)\n\n Post-transfer:\n system: assistant2 system message\n\
\ assistant: assistant1 first message\n user: hey, good morning\n assistant: how can i help?\n user:\
\ i need help with my account\n assistant: (destination.message)\n assistant: assistant2 first message (or\
\ model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)\n\n- `delete-history`:\
\ This deletes the entire conversation history on transfer.\n\n Example:\n\n Pre-transfer:\n system: assistant1\
\ system message\n assistant: assistant1 first message\n user: hey, good morning\n assistant: how can\
\ i help?\n user: i need help with my account\n assistant: (destination.message)\n\n Post-transfer:\n \
\ system: assistant2 system message\n assistant: assistant2 first message\n user: Yes, please\n assistant:\
\ how can i help?\n user: i need help with my account\n\n- `swap-system-message-in-history-and-remove-transfer-tool-messages`:\
\ This replaces the original system message with the new assistant's system message on transfer and removes transfer\
\ tool messages from conversation history sent to the LLM.\n\n Example:\n\n Pre-transfer:\n system: assistant1\
\ system message\n assistant: assistant1 first message\n user: hey, good morning\n assistant: how can\
\ i help?\n user: i need help with my account\n transfer-tool\n transfer-tool-result\n assistant:\
\ (destination.message)\n\n Post-transfer:\n system: assistant2 system message\n assistant: assistant1\
\ first message\n user: hey, good morning\n assistant: how can i help?\n user: i need help with my account\n\
\ assistant: (destination.message)\n assistant: assistant2 first message (or model generated if firstMessageMode\
\ is set to `assistant-speaks-first-with-model-generated-message`)\n\n@default 'rolling-history'"
enum:
- rolling-history
- swap-system-message-in-history
- swap-system-message-in-history-and-remove-transfer-tool-messages
- delete-history
assistantName:
type: string
description: This is the assistant to transfer the call to.
description:
type: string
description: This is the description of the destination, used by the AI to choose when and how to transfer the call.
required:
- type
- assistantName
TransferDestinationNumber:
type: object
properties:
message:
description: 'This is spoken to the customer before connecting them to the destination.
Usage:
- If this is not provided and transfer tool messages is not provided, default is "Transferring the call now".
- If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful
when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message`
for the destination assistant.
This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for
different languages through the `contents` field.'
oneOf:
- type: string
- $ref: '#/components/schemas/CustomMessage'
type:
type: string
enum:
- number
numberE164CheckEnabled:
type: boolean
description: 'This is the flag to toggle the E164 check for the `number` field. This is an advanced property which
should be used if you know your use case requires it.
Use cases:
- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to
non-E164 numbers on your SIP trunks.
- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.
If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`).
@default true (E164 check is enabled)'
default: true
number:
type: string
description: This is the phone number to transfer the call to.
minLength: 3
maxLength: 40
extension:
type: string
description: This is the extension to dial after transferring the call to the `number`.
minLength: 1
maxLength: 10
callerId:
type: string
description: "This is the caller ID to use when transferring the call to the `number`.\n\nUsage:\n- If not provided,\
\ the caller ID will be the number the call is coming **from**.\n Example: a customer with number +14151111111\
\ calls in to and the assistant transfers out to +16470000000. +16470000000 will see +14151111111 as the caller.\n\
\ For inbound calls, the caller ID is the customer's number. For outbound calls, the caller ID is the phone number\
\ of the assistant.\n- To change this behavior, provide a `callerId`.\n- Set to '{{customer.number}}' to always\
\ use the customer's number as the caller ID.\n- Set to '{{phoneNumber.number}}' to always use the phone number\
\ of the assistant as the caller ID.\n- 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.\n\nFor Twilio, you can\
\ read up more here: https://www.twilio.com/docs/voice/twiml/dial#callerid"
maxLength: 40
transferPlan:
description: 'This configures how transfer is executed and the experience of the destination party receiving the
call. Defaults to `blind-transfer`.
@default `transferPlan.mode=''blind-transfer''`'
allOf:
- $ref: '#/components/schemas/TransferPlan'
description:
type: string
description: This is the description of the destination, used by the AI to choose when and how to transfer the call.
required:
- type
- number
TransferDestinationSip:
type: object
properties:
message:
description: 'This is spoken to the customer before connecting them to the destination.
Usage:
- If this is not provided and transfer tool messages is not provided, default is "Transferring the call now".
- If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful
when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message`
for the destination assistant.
This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for
different languages through the `contents` field.'
oneOf:
- type: string
- $ref: '#/components/schemas/CustomMessage'
type:
type: string
enum:
- sip
sipUri:
type: string
description: This is the SIP URI to transfer the call to.
callerId:
type: string
description: 'This is the caller ID to use when transferring the call to the `sipUri`.
Usage:
- If not provided, the caller ID will be determined by the SIP infrastructure.
- 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.
Only applicable when `transferPlan.sipVerb=''dial''`. Not applicable for SIP REFER.'
maxLength: 40
transferPlan:
description: 'This configures how transfer is executed and the experience of the destination party receiving the
call. Defaults to `blind-transfer`.
@default `transferPlan.mode=''blind-transfer''`'
allOf:
- $ref: '#/components/schemas/TransferPlan'
sipHeaders:
type: object
description: These are custom headers to be added to SIP refer during transfer call.
description:
type: string
description: This is the description of the destination, used by the AI to choose when and how to transfer the call.
required:
- type
- sipUri
TransferFallbackPlan:
type: object
properties:
message:
description: This is the message the assistant will deliver to the customer if the transfer fails.
oneOf:
- type: string
- $ref: '#/components/schemas/CustomMessage'
endCallEnabled:
type: boolean
description: 'This controls what happens after delivering the failure message to the customer.
- true: End the call after delivering the failure message (default)
- false: Keep the assistant on the call to continue handling the customer''s request
@default true'
default: true
required:
- message
TransferPlan:
type: object
properties:
mode:
type: string
description: 'This configures how transfer is executed and the experience of the destination party receiving the
call.
Usage:
- `blind-transfer`: The assistant forwards the call to the destination without any message or summary.
- `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP
header X-Transfer-Summary to the call to include the summary.
- `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination
party, connects the customer, and leaves the call.
- `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination
party, connects the customer, and leaves the call.
- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination,
waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer.
- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination,
waits for the operator to speak, provides a summary of the call to the destination party, and then connects the
customer.
- `warm-transfer-twiml`: The assistant dials the destination, executes the twiml instructions on the destination
call leg, connects the customer, and leaves the call.
- `warm-transfer-experimental`: The assistant puts the customer on hold, dials the destination, and if the destination
answers (and is human), delivers a message or summary before connecting the customer. If the destination is unreachable
or not human (e.g., with voicemail detection), the assistant delivers the `fallbackMessage` to the customer and
optionally ends the call.
@default ''blind-transfer'''
enum:
- blind-transfer
- blind-transfer-add-summary-to-sip-header
- warm-transfer-say-message
- warm-transfer-say-summary
- warm-transfer-twiml
- warm-transfer-wait-for-operator-to-speak-first-and-then-say-message
- warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary
- warm-transfer-experimental
message:
description: 'This is the message the assistant will deliver to the destination party before connecting the customer.
Usage:
- Used only when `mode` is `blind-transfer-add-summary-to-sip-header`, `warm-transfer-say-message`, `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`,
or `warm-transfer-experimental`.'
oneOf:
- type: string
- $ref: '#/components/schemas/CustomMessage'
timeout:
type: number
description: 'This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary
@default 60'
minimum: 1
maximum: 600
default: 60
sipVerb:
type: object
description: 'This specifies the SIP verb to use while transferring the call.
- ''refer'': Uses SIP REFER to transfer the call (default)
- ''bye'': Ends current call with SIP BYE
- ''dial'': Uses SIP DIAL to transfer the call'
default: refer
enum:
- refer
- bye
- dial
dialTimeout:
type: number
description: 'This sets the timeout for the dial operation in seconds. This is the duration the call will ring before
timing out.
Only applicable when `sipVerb=''dial''`. Not applicable for SIP REFER or BYE.
@default 60'
minimum: 1
maximum: 600
default: 60
holdAudioUrl:
type: string
description: 'This is the URL to an audio file played while the customer is on hold during transfer.
Usage:
- Used only when `mode` is `warm-transfer-experimental`.
- Used when transferring calls to play hold audio for the customer.
- Must be a publicly accessible URL to an audio file.
- Supported formats: MP3 and WAV.
- If not provided, the default hold audio will be used.'
transferCompleteAudioUrl:
type: string
description: 'This is the URL to an audio file played after the warm transfer message or summary is delivered to
the destination party.
It can be used to play a custom sound like ''beep'' to notify that the transfer is complete.
Usage:
- Used only when `mode` is `warm-transfer-experimental`.
- Used when transferring calls to play hold audio for the destination party.
- Must be a publicly accessible URL to an audio file.
- Supported formats: MP3 and WAV.'
contextEngineeringPlan:
description: 'This is the plan for manipulating the message context before initiating the warm transfer.
Usage:
- Used only when `mode` is `warm-transfer-experimental`.
- These messages will automatically be added to the transferAssistant''s system message.
- If ''none'', we will not add any transcript to the transferAssistant''s system message.
- If you want to provide your own messages, use transferAssistant.model.messages instead.
@default { type: ''all'' }'
oneOf:
- $ref: '#/components/schemas/ContextEngineeringPlanLastNMessages'
title: Last N Messages
- $ref: '#/components/schemas/ContextEngineeringPlanNone'
title: None
- $ref: '#/components/schemas/ContextEngineeringPlanAll'
title: All
twiml:
type: string
description: 'This is the TwiML instructions to execute on the destination call leg before connecting the customer.
Usage:
- Used only when `mode` is `warm-transfer-twiml`.
- Supports only `Play`, `Say`, `Gather`, `Hangup` and `Pause` verbs.
- Maximum length is 4096 characters.
Example:
```
Hello, transferring a customer to you.
They called about billing questions.
```'
maxLength: 4096
summaryPlan:
description: 'This is the plan for generating a summary of the call to present to the destination party.
Usage:
- Used only when `mode` is `blind-transfer-add-summary-to-sip-header` or `warm-transfer-say-summary` or `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`
or `warm-transfer-experimental`.'
allOf:
- $ref: '#/components/schemas/SummaryPlan'
sipHeadersInReferToEnabled:
type: boolean
description: 'This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params.
@default false'
fallbackPlan:
description: 'This configures the fallback plan when the transfer fails (destination unreachable, busy, or not human).
Usage:
- Used only when `mode` is `warm-transfer-experimental`.
- If not provided when using `warm-transfer-experimental`, a default message will be used.'
allOf:
- $ref: '#/components/schemas/TransferFallbackPlan'
required:
- mode
TransportConfigurationTwilio:
type: object
properties:
provider:
type: string
enum:
- twilio
timeout:
type: number
description: 'The integer number of seconds that we should allow the phone to ring before assuming there is no answer.
The default is `60` seconds and the maximum is `600` seconds.
For some call flows, we will add a 5-second buffer to the timeout value you provide.
For this reason, a timeout value of 10 seconds could result in an actual timeout closer to 15 seconds.
You can set this to a short time, such as `15` seconds, to hang up before reaching an answering machine or voicemail.
@default 60'
minimum: 1
maximum: 600
example: 60
record:
type: boolean
description: 'Whether to record the call.
Can be `true` to record the phone call, or `false` to not.
The default is `false`.
@default false'
example: false
recordingChannels:
type: string
description: 'The number of channels in the final recording.
Can be: `mono` or `dual`.
The default is `mono`.
`mono` records both legs of the call in a single channel of the recording file.
`dual` records each leg to a separate channel of the recording file.
The first channel of a dual-channel recording contains the parent call and the second channel contains the child
call.
@default ''mono'''
enum:
- mono
- dual
example: mono
required:
- provider
TwilioVoicemailDetectionPlan:
type: object
properties:
provider:
type: string
description: This is the provider to use for voicemail detection.
enum:
- twilio
voicemailDetectionTypes:
type: array
description: 'These are the AMD messages from Twilio that are considered as voicemail. Default is [''machine_end_beep'',
''machine_end_silence''].
@default {Array} [''machine_end_beep'', ''machine_end_silence'']'
enum:
- machine_start
- human
- fax
- unknown
- machine_end_beep
- machine_end_silence
- machine_end_other
example:
- machine_end_beep
- machine_end_silence
items:
type: string
enum:
- machine_start
- human
- fax
- unknown
- machine_end_beep
- machine_end_silence
- machine_end_other
enabled:
type: boolean
description: 'This sets whether the assistant should detect voicemail. Defaults to true.
@default true'
machineDetectionTimeout:
type: number
description: 'The number of seconds that Twilio should attempt to perform answering machine detection before timing
out and returning AnsweredBy as unknown. Default is 30 seconds.
Increasing this value will provide the engine more time to make a determination. This can be useful when DetectMessageEnd
is provided in the MachineDetection parameter and there is an expectation of long answering machine greetings
that can exceed 30 seconds.
Decreasing this value will reduce the amount of time the engine has to make a determination. This can be particularly
useful when the Enable option is provided in the MachineDetection parameter and you want to limit the time for
initial detection.
Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters)
for more info.
@default 30'
minimum: 3
maximum: 59
machineDetectionSpeechThreshold:
type: number
description: 'The number of milliseconds that is used as the measuring stick for the length of the speech activity.
Durations lower than this value will be interpreted as a human, longer as a machine. Default is 2400 milliseconds.
Increasing this value will reduce the chance of a False Machine (detected machine, actually human) for a long
human greeting (e.g., a business greeting) but increase the time it takes to detect a machine.
Decreasing this value will reduce the chances of a False Human (detected human, actually machine) for short voicemail
greetings. The value of this parameter may need to be reduced by more than 1000ms to detect very short voicemail
greetings. A reduction of that significance can result in increased False Machine detections. Adjusting the MachineDetectionSpeechEndThreshold
is likely the better approach for short voicemails. Decreasing MachineDetectionSpeechThreshold will also reduce
the time it takes to detect a machine.
Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters)
for more info.
@default 2400'
minimum: 1000
maximum: 6000
machineDetectionSpeechEndThreshold:
type: number
description: 'The number of milliseconds of silence after speech activity at which point the speech activity is
considered complete. Default is 1200 milliseconds.
Increasing this value will typically be used to better address the short voicemail greeting scenarios. For short
voicemails, there is typically 1000-2000ms of audio followed by 1200-2400ms of silence and then additional audio
before the beep. Increasing the MachineDetectionSpeechEndThreshold to ~2500ms will treat the 1200-2400ms of silence
as a gap in the greeting but not the end of the greeting and will result in a machine detection. The downsides
of such a change include:
- Increasing the delay for human detection by the amount you increase this parameter, e.g., a change of 1200ms
to 2500ms increases human detection delay by 1300ms.
- Cases where a human has two utterances separated by a period of silence (e.g. a "Hello", then 2000ms of silence,
and another "Hello") may be interpreted as a machine.
Decreasing this value will result in faster human detection. The consequence is that it can lead to increased
False Human (detected human, actually machine) detections because a silence gap in a voicemail greeting (not necessarily
just in short voicemail scenarios) can be incorrectly interpreted as the end of speech.
Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters)
for more info.
@default 1200'
minimum: 500
maximum: 5000
machineDetectionSilenceTimeout:
type: number
description: 'The number of milliseconds of initial silence after which an unknown AnsweredBy result will be returned.
Default is 5000 milliseconds.
Increasing this value will result in waiting for a longer period of initial silence before returning an ''unknown''
AMD result.
Decreasing this value will result in waiting for a shorter period of initial silence before returning an ''unknown''
AMD result.
Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters)
for more info.
@default 5000'
minimum: 2000
maximum: 10000
required:
- provider
UpdateSquadDTO:
type: object
properties:
name:
type: string
description: This is the name of the squad.
members:
description: 'This is the list of assistants that make up the squad.
The call will start with the first assistant in the list.'
type: array
items:
$ref: '#/components/schemas/SquadMemberDTO'
membersOverrides:
description: 'This can be used to override all the assistants'' settings and provide values for their template variables.
Both `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides`
is applied. Then, `membersOverrides` is applied as a global override.'
allOf:
- $ref: '#/components/schemas/AssistantOverrides'
required:
- members
UserMessage:
type: object
properties:
role:
type: string
description: The role of the user in the conversation.
message:
type: string
description: The message content from the user.
time:
type: number
description: The timestamp when the message was sent.
endTime:
type: number
description: The timestamp when the message ended.
secondsFromStart:
type: number
description: The number of seconds from the start of the conversation.
duration:
type: number
description: The duration of the message in seconds.
isFiltered:
type: boolean
description: Indicates if the message was filtered for security reasons.
detectedThreats:
description: List of detected security threats if the message was filtered.
type: array
items:
type: string
originalMessage:
type: string
description: The original message before filtering (only included if content was filtered).
metadata:
type: object
description: The metadata associated with the message. Currently used to store the transcriber's word level confidence.
speakerLabel:
type: string
description: Stable speaker label for diarized user speakers (e.g., "Speaker 1").
required:
- role
- message
- time
- endTime
- secondsFromStart
VapiPronunciationDictionaryLocator:
type: object
properties:
pronunciationDictId:
type: string
description: The pronunciation dictionary ID
example: pdict_abc123
versionId:
type: string
description: Version ID (only required for ElevenLabs, ignored for Cartesia)
example: ver_abc123
required:
- pronunciationDictId
VapiSmartEndpointingPlan:
type: object
properties:
provider:
type: string
description: This is the provider for the smart endpointing plan.
enum:
- vapi
- livekit
- custom-endpointing-model
example: vapi
required:
- provider
VapiVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- vapi
voiceId:
type: string
description: The voices provided by Vapi
enum:
- Clara
- Godfrey
- Layla
- Sid
- Gustavo
- Elliot
- Kylie
- Rohan
- Lily
- Savannah
- Hana
- Neha
- Cole
- Harry
- Paige
- Spencer
- Nico
- Kai
- Emma
- Sagar
- Neil
- Naina
- Leah
- Tara
- Jess
- Leo
- Dan
- Mia
- Zac
- Zoe
speed:
type: number
description: 'This is the speed multiplier that will be used.
@default 1'
minimum: 0.25
maximum: 2
default: 1
pronunciationDictionary:
description: List of pronunciation dictionary locators for custom word pronunciations.
type: array
items:
$ref: '#/components/schemas/VapiPronunciationDictionaryLocator'
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
VapiVoicemailDetectionPlan:
type: object
properties:
beepMaxAwaitSeconds:
type: number
description: 'This is the maximum duration from the start of the call that we will wait for a voicemail beep, before
speaking our message
- If we detect a voicemail beep before this, we will speak the message at that point.
- Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so
before the actual beep, it will get cut off. You should definitely tune this to your use case.
@default 30
@min 0
@max 60'
minimum: 0
maximum: 30
default: 30
provider:
type: string
description: This is the provider to use for voicemail detection.
enum:
- vapi
backoffPlan:
description: This is the backoff plan for the voicemail detection.
allOf:
- $ref: '#/components/schemas/VoicemailDetectionBackoffPlan'
type:
type: string
description: '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)'
enum:
- audio
- transcript
required:
- provider
VariableExtractionAlias:
type: object
properties:
key:
type: string
description: 'This is the key of the variable.
This variable will be accessible during the call as `{{key}}` and stored in `call.artifact.variableValues` after
the call.
Rules:
- Must start with a letter (a-z, A-Z).
- Subsequent characters can be letters, numbers, or underscores.
- Minimum length of 1 and maximum length of 40.'
minLength: 1
maxLength: 40
pattern: /^[a-zA-Z][a-zA-Z0-9_]*$/
value:
type: string
description: 'This is the value of the variable.
This can reference existing variables, use filters, and perform transformations.
Examples: "{{name}}", "{{customer.email}}", "Hello {{name | upcase}}"'
maxLength: 10000
required:
- key
- value
VariableExtractionPlan:
type: object
properties:
schema:
description: "This is the schema to extract.\n\nExamples:\n1. To extract object properties, you can use the following\
\ schema:\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\
\n },\n \"age\": {\n \"type\": \"number\"\n }\n }\n}\n```\n\nThese will be extracted as `{{ name\
\ }}` and `{{ age }}` respectively. To emphasize, object properties are extracted as direct global variables.\n\
\n2. To extract nested properties, you can use the following schema:\n```json\n{\n \"type\": \"object\",\n \"\
properties\": {\n \"name\": {\n \"type\": \"object\",\n \"properties\": {\n \"first\": {\n\
\ \"type\": \"string\"\n },\n \"last\": {\n \"type\": \"string\"\n }\n\
\ }\n }\n }\n}\n```\n\nThese will be extracted as `{{ name }}`. And, `{{ name.first }}` and `{{ name.last\
\ }}` will be accessible.\n\n3. To extract array items, you can use the following schema:\n```json\n{\n \"type\"\
: \"array\",\n \"title\": \"zipCodes\",\n \"items\": {\n \"type\": \"string\"\n }\n}\n```\n\nThis will be\
\ extracted as `{{ zipCodes }}`. To access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1]\
\ }}`.\n\n4. To extract array of objects, you can use the following schema:\n\n```json\n{\n \"type\": \"array\"\
,\n \"name\": \"people\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\":\
\ {\n \"type\": \"string\"\n },\n \"age\": {\n \"type\": \"number\"\n },\n \"\
zipCodes\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n\
\ }\n }\n }\n}\n```\n\nThis will be extracted as `{{ people }}`. To access the array items, you can use\
\ `{{ people[n].name }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and\
\ `{{ people[n].zipCodes[1] }}`."
allOf:
- $ref: '#/components/schemas/JsonSchema'
aliases:
description: "These are additional variables to create.\n\nThese will be accessible during the call as `{{key}}`\
\ and stored in `call.artifact.variableValues` after the call.\n\nExample:\n```json\n{\n \"aliases\": [\n \
\ {\n \"key\": \"customerName\",\n \"value\": \"{{name}}\"\n },\n {\n \"key\": \"fullName\"\
,\n \"value\": \"{{firstName}} {{lastName}}\"\n },\n {\n \"key\": \"greeting\",\n \"value\"\
: \"Hello {{name}}, welcome to {{company}}!\"\n },\n {\n \"key\": \"customerCity\",\n \"value\"\
: \"{{addresses[0].city}}\"\n },\n {\n \"key\": \"something\",\n \"value\": \"{{any liquid}}\"\
\n }\n ]\n}\n```\n\nThis will create variables `customerName`, `fullName`, `greeting`, `customerCity`, and\
\ `something`. To access these variables, you can reference them as `{{customerName}}`, `{{fullName}}`, `{{greeting}}`,\
\ `{{customerCity}}`, and `{{something}}`."
type: array
items:
$ref: '#/components/schemas/VariableExtractionAlias'
VoicemailDetectionBackoffPlan:
type: object
properties:
startAtSeconds:
type: number
description: This is the number of seconds to wait before starting the first retry attempt.
minimum: 0
default: 5
frequencySeconds:
type: number
description: This is the interval in seconds between retry attempts.
minimum: 2.5
default: 5
maxRetries:
type: number
description: This is the maximum number of retry attempts before giving up.
minimum: 1
maximum: 10
default: 6
WellSaidVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- wellsaid
voiceId:
type: string
description: The WellSaid speaker ID to synthesize.
model:
type: string
description: This is the model that will be used.
enum:
- caruso
- legacy
enableSsml:
type: boolean
description: Enables limited SSML translation for input text.
libraryIds:
description: Array of library IDs to use for voice synthesis.
type: array
items:
type: string
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId
WorkflowAnthropicBedrockModel:
type: object
properties:
provider:
type: string
description: This is the provider of the model (`anthropic-bedrock`).
enum:
- anthropic-bedrock
model:
type: string
description: This is the specific model that will be used.
maxLength: 100
enum:
- claude-3-opus-20240229
- claude-3-sonnet-20240229
- claude-3-haiku-20240307
- claude-3-5-sonnet-20240620
- claude-3-5-sonnet-20241022
- claude-3-5-haiku-20241022
- claude-3-7-sonnet-20250219
- claude-opus-4-20250514
- claude-opus-4-5-20251101
- claude-opus-4-6
- claude-sonnet-4-20250514
- claude-sonnet-4-5-20250929
- claude-sonnet-4-6
- claude-haiku-4-5-20251001
thinking:
description: 'This is the optional configuration for Anthropic''s thinking feature.
- If provided, `maxTokens` must be greater than `thinking.budgetTokens`.'
allOf:
- $ref: '#/components/schemas/AnthropicThinkingConfig'
temperature:
type: number
description: This is the temperature of the model.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max tokens of the model.
minimum: 50
maximum: 10000
required:
- provider
- model
WorkflowAnthropicModel:
type: object
properties:
provider:
type: string
description: This is the provider of the model (`anthropic`).
enum:
- anthropic
model:
type: string
description: This is the specific model that will be used.
maxLength: 100
enum:
- claude-3-opus-20240229
- claude-3-sonnet-20240229
- claude-3-haiku-20240307
- claude-3-5-sonnet-20240620
- claude-3-5-sonnet-20241022
- claude-3-5-haiku-20241022
- claude-3-7-sonnet-20250219
- claude-opus-4-20250514
- claude-opus-4-5-20251101
- claude-opus-4-6
- claude-sonnet-4-20250514
- claude-sonnet-4-5-20250929
- claude-sonnet-4-6
- claude-haiku-4-5-20251001
thinking:
description: 'This is the optional configuration for Anthropic''s thinking feature.
- If provided, `maxTokens` must be greater than `thinking.budgetTokens`.'
allOf:
- $ref: '#/components/schemas/AnthropicThinkingConfig'
temperature:
type: number
description: This is the temperature of the model.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max tokens of the model.
minimum: 50
maximum: 10000
required:
- provider
- model
WorkflowCustomModel:
type: object
properties:
provider:
type: string
description: This is the provider of the model (`custom-llm`).
enum:
- custom-llm
metadataSendMode:
type: string
description: 'This determines whether metadata is sent in requests to the custom provider.
- `off` will not send any metadata. payload will look like `{ messages }`
- `variable` will send `assistant.metadata` as a variable on the payload. payload will look like `{ messages,
metadata }`
- `destructured` will send `assistant.metadata` fields directly on the payload. payload will look like `{ messages,
...metadata }`
Further, `variable` and `destructured` will send `call`, `phoneNumber`, and `customer` objects in the payload.
Default is `variable`.'
enum:
- 'off'
- variable
- destructured
url:
type: string
description: These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1
headers:
type: object
description: These are the headers we'll use for the OpenAI client's `headers`.
timeoutSeconds:
type: number
description: This sets the timeout for the connection to the custom provider without needing to stream any tokens
back. Default is 20 seconds.
minimum: 20
maximum: 600
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
maxLength: 100
temperature:
type: number
description: This is the temperature of the model.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max tokens of the model.
minimum: 50
maximum: 10000
required:
- provider
- url
- model
WorkflowGoogleModel:
type: object
properties:
provider:
type: string
description: This is the provider of the model (`google`).
enum:
- google
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
maxLength: 100
enum:
- gemini-3-flash-preview
- 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
temperature:
type: number
description: This is the temperature of the model.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max tokens of the model.
minimum: 50
maximum: 10000
required:
- provider
- model
WorkflowOpenAIModel:
type: object
properties:
provider:
type: string
description: This is the provider of the model (`openai`).
enum:
- openai
model:
type: string
description: 'This is the OpenAI model that will be used.
When using 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/.'
maxLength: 100
enum:
- gpt-5.4
- gpt-5.4-mini
- gpt-5.4-nano
- gpt-5.2
- gpt-5.2-chat-latest
- gpt-5.1
- gpt-5.1-chat-latest
- gpt-5
- gpt-5-chat-latest
- 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-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-2025-04-14:westeurope
- gpt-4.1-2025-04-14:germanywestcentral
- gpt-4.1-2025-04-14:polandcentral
- gpt-4.1-2025-04-14:spaincentral
- 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-mini-2025-04-14:westeurope
- gpt-4.1-mini-2025-04-14:germanywestcentral
- gpt-4.1-mini-2025-04-14:polandcentral
- gpt-4.1-mini-2025-04-14:spaincentral
- 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-11-20:westeurope
- gpt-4o-2024-11-20:germanywestcentral
- gpt-4o-2024-11-20:polandcentral
- gpt-4o-2024-11-20:spaincentral
- 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:australiaeast
- gpt-4-1106-preview:canadaeast
- gpt-4-1106-preview:france
- gpt-4-1106-preview:india
- gpt-4-1106-preview:norway
- gpt-4-1106-preview:swedencentral
- gpt-4-1106-preview:uk
- gpt-4-1106-preview:westus
- gpt-4-1106-preview:westus3
- gpt-4-0613:canadaeast
- gpt-3.5-turbo-0125:canadaeast
- gpt-3.5-turbo-0125:northcentralus
- gpt-3.5-turbo-0125:southcentralus
- gpt-3.5-turbo-1106:canadaeast
- gpt-3.5-turbo-1106:westus
temperature:
type: number
description: This is the temperature of the model.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max tokens of the model.
minimum: 50
maximum: 10000
required:
- provider
- model
XaiModel:
type: object
properties:
messages:
description: This is the starting state for the conversation.
type: array
items:
$ref: '#/components/schemas/OpenAIMessage'
tools:
type: array
description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.
Both `tools` and `toolIds` can be used together.'
items:
oneOf:
- $ref: '#/components/schemas/CreateApiRequestToolDTO'
title: ApiRequestTool
- $ref: '#/components/schemas/CreateBashToolDTO'
title: BashTool
- $ref: '#/components/schemas/CreateCodeToolDTO'
title: CodeTool
- $ref: '#/components/schemas/CreateComputerToolDTO'
title: ComputerTool
- $ref: '#/components/schemas/CreateDtmfToolDTO'
title: DtmfTool
- $ref: '#/components/schemas/CreateEndCallToolDTO'
title: EndCallTool
- $ref: '#/components/schemas/CreateFunctionToolDTO'
title: FunctionTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
title: GoHighLevelCalendarAvailabilityTool
- $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
title: GoHighLevelCalendarEventCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
title: GoHighLevelContactCreateTool
- $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
title: GoHighLevelContactGetTool
- $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
title: GoogleCalendarCheckAvailabilityTool
- $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
title: GoogleCalendarCreateEventTool
- $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
title: GoogleSheetsRowAppendTool
- $ref: '#/components/schemas/CreateHandoffToolDTO'
title: HandoffTool
- $ref: '#/components/schemas/CreateMcpToolDTO'
title: McpTool
- $ref: '#/components/schemas/CreateQueryToolDTO'
title: QueryTool
- $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
title: SlackSendMessageTool
- $ref: '#/components/schemas/CreateSmsToolDTO'
title: SmsTool
- $ref: '#/components/schemas/CreateTextEditorToolDTO'
title: TextEditorTool
- $ref: '#/components/schemas/CreateTransferCallToolDTO'
title: TransferCallTool
- $ref: '#/components/schemas/CreateSipRequestToolDTO'
title: SipRequestTool
- $ref: '#/components/schemas/CreateVoicemailToolDTO'
title: VoicemailTool
toolIds:
description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`.
Both `tools` and `toolIds` can be used together.'
type: array
items:
type: string
knowledgeBase:
description: These are the options for the knowledge base.
oneOf:
- $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
title: Custom
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
enum:
- grok-beta
- grok-2
- grok-3
- grok-4-fast-reasoning
- grok-4-fast-non-reasoning
- grok-4.20-0309-reasoning
- grok-4.20-0309-non-reasoning
provider:
type: string
enum:
- xai
temperature:
type: number
description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the
conversation. Default is 250.
minimum: 50
maximum: 10000
emotionRecognitionEnabled:
type: boolean
description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info
to model.
Default `false` because the model is usually are good at understanding the user''s emotion from text.
@default false'
numFastTurns:
type: number
description: 'This sets how many turns at the start of the conversation to use a smaller, faster model from the
same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.
Default is 0.
@default 0'
minimum: 0
required:
- model
- provider
XaiTranscriber:
type: object
properties:
provider:
type: string
enum:
- xai
model:
type: string
description: The xAI speech-to-text model to use. xAI currently exposes a single STT model — placeholder for future
model selection.
enum:
- default
language:
type: string
description: Single language for transcription as an ISO 639-1 code (e.g., `en`, `es`). Defaults to `en` if not
set. xAI auto-detects when omitted via the API but Vapi defaults to English for deterministic behavior.
enum:
- ar
- cs
- da
- nl
- en
- fil
- fr
- de
- hi
- id
- it
- ja
- ko
- mk
- ms
- fa
- pl
- pt
- ro
- ru
- es
- sv
- th
- tr
- vi
fallbackPlan:
description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider
fails.
allOf:
- $ref: '#/components/schemas/FallbackTranscriberPlan'
required:
- provider
XaiVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- xai
voiceId:
type: string
description: 'Built-in voices: eve, ara, rex, sal, leo. Cloned voice IDs are also accepted.'
maxLength: 120
title: xAI Voice ID
enum:
- eve
- ara
- rex
- sal
- leo
example: eve
language:
type: string
description: BCP-47 language code for xAI TTS synthesis.
enum:
- auto
- en
- ar-EG
- ar-SA
- ar-AE
- bn
- zh
- fr
- de
- hi
- id
- it
- ja
- ko
- pt-BR
- pt-PT
- ru
- es-MX
- es-ES
- tr
- vi
default: en
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
fallbackPlan:
description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails.
allOf:
- $ref: '#/components/schemas/FallbackPlan'
required:
- provider
- voiceId