> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.vapi.ai/api-reference/tools/get/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.vapi.ai/_mcp/server. # Get Tool GET https://api.vapi.ai/tool/{id} Returns the tool identified by its ID. Reference: https://docs.vapi.ai/api-reference/tools/get ## Authentication - `Authorization` header (bearer token, required) — Authenticate server-side requests with a private Vapi API key. Create or copy a key from the [Vapi Dashboard](https://dashboard.vapi.ai) and send it in the `Authorization` header as `Bearer `. Keep private API keys out of client-side code and public repositories. ## Request ### Path parameters - `id` (string, required) — The unique identifier of the tool. ## Response ### 200 - `tools_get_Response_200` - `type`: `apiRequest` (apiRequest) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `method` (enum, required) — The HTTP method used for the API request. - Allowed values: `POST`, `GET`, `PUT`, `PATCH`, `DELETE` - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `url` (string, required) — This is where the request will be sent. - `backoffPlan` (BackoffPlan, optional) — A backoff plan can be saved on an API Request Tool, but API Request Tools do not currently retry after a non-2xx response or a timeout. - `body` (JsonSchema, optional) — This is the body of the request. - `credentialId` (string, optional) — The credential ID for API request authentication - `description` (string, optional) — This is the description of the tool. This will be passed to the model. - `encryptedPaths` (list of string, optional) — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined. - `headers` (JsonSchema, optional) — These are the headers to send with the request. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingApiRequestMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `name` (string, optional) — 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. - `parameters` (list of ToolParameter, optional) — Static key-value pairs merged into the request body. Values support Liquid templates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `timeoutSeconds` (double, optional) — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20 - `variableExtractionPlan` (VariableExtractionPlan, optional) — This is the plan to extract variables from the tool's response. These will be accessible during the call and stored in `call.artifact.variableValues` after the call. Usage: 1. Use `aliases` to extract variables from the tool's response body. (Most common case) ```json { "aliases": [ { "key": "customerName", "value": "{{customer.name}}" }, { "key": "customerAge", "value": "{{customer.age}}" } ] } ``` The tool response body is made available to the liquid template. 2. Use `aliases` to extract variables from the tool's response body if the response is an array. ```json { "aliases": [ { "key": "customerName", "value": "{{$[0].name}}" }, { "key": "customerAge", "value": "{{$[0].age}}" } ] } ``` $ is a shorthand for the tool's response body. `$\[0]`is the first item in the array.`$[n]` is the nth item in the array. Note, $ is available regardless of the response body type (both object and array). 3. Use `aliases` to extract variables from the tool's response headers. ```json { "aliases": [ { "key": "customerName", "value": "{{tool.response.headers.customer-name}}" }, { "key": "customerAge", "value": "{{tool.response.headers.customer-age}}" } ] } ``` `tool.response` is made available to the liquid template. Particularly, both `tool.response.headers` and `tool.response.body` are available. Note, `tool.response` is available regardless of the response body type (both object and array). 4. Use `schema` to extract a large portion of the tool's response body. 4.1. If you hit example.com and it returns `{"name": "John", "age": 30}`, then you can specify the schema as: ```json { "schema": { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "number" } } } } ``` These will be extracted as `{{ name }}` and `{{ age }}` respectively. To emphasize, object properties are extracted as direct global variables. 4.2. If you hit example.com and it returns `{"name": {"first": "John", "last": "Doe"}}`, then you can specify the schema as: ```json { "schema": { "type": "object", "properties": { "name": { "type": "object", "properties": { "first": { "type": "string" }, "last": { "type": "string" } } } } } } ``` These will be extracted as `{{ name }}`. And, `{{ name.first }}` and `{{ name.last }}` will be accessible. 4.3. If you hit example.com and it returns `["94123", "94124"]`, then you can specify the schema as: ```json { "schema": { "type": "array", "title": "zipCodes", "items": { "type": "string" } } } ``` This will be extracted as `{{ zipCodes }}`. To access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`. 4.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: ```json { "schema": { "type": "array", "title": "people", "items": { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "number" }, "zipCodes": { "type": "array", "items": { "type": "string" } } } } } } ``` This will be extracted as `{{ people }}`. To access the array items, you can use `{{ people[n].name }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{ people[n].zipCodes[1] }}`. Note: Both `aliases` and `schema` can be used together. - `type`: `code` (code) - `code` (string, required) — TypeScript code to execute when the tool is called - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `async` (boolean, optional) — This determines if the tool is async. If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server. If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server. Defaults to synchronous (`false`). - `credentialId` (string, optional) — Credential ID containing the Val Town API key - `environmentVariables` (list of CodeToolEnvironmentVariable, optional) — Environment variables available in code via `env` object - `function` (OpenAIFunction, optional) — 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. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingCodeMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `server` (Server, optional) — This is the server where a `tool-calls` webhook will be sent. Notes: * Webhook is sent to this server when a tool call is made. * Webhook contains the call, assistant, and phone number objects. * Webhook contains the variables set on the assistant. * Webhook is sent to the first available URL in this order: \{\{tool.server.url}}, \{\{assistant.server.url}}, \{\{phoneNumber.server.url}}, \{\{org.server.url}}. * Webhook expects a response with tool call result. - `timeoutSeconds` (double, optional) — This is the timeout in seconds for the code execution. Defaults to 10 seconds. Maximum is 30 seconds to prevent abuse. @default 10 - `variableExtractionPlan` (VariableExtractionPlan, optional) — Plan to extract variables from the tool response - `type`: `dtmf` (DtmfTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingDtmfMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `sipInfoDtmfEnabled` (boolean, optional, default: false) — 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. - `type`: `endCall` (EndCallTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingEndCallMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `function` (FunctionTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `async` (boolean, optional) — This determines if the tool is async. If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server. If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server. Defaults to synchronous (`false`). - `function` (OpenAIFunction, optional) — This is the function definition of the tool. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingFunctionMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `parameters` (list of ToolParameter, optional) — Static key-value pairs merged into the request body. Values support Liquid templates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `server` (Server, optional) — This is the server where a `tool-calls` webhook will be sent. Notes: * Webhook is sent to this server when a tool call is made. * Webhook contains the call, assistant, and phone number objects. * Webhook contains the variables set on the assistant. * Webhook is sent to the first available URL in this order: \{\{tool.server.url}}, \{\{assistant.server.url}}, \{\{phoneNumber.server.url}}, \{\{org.server.url}}. * Webhook expects a response with tool call result. - `variableExtractionPlan` (VariableExtractionPlan, optional) — Plan to extract variables from the tool response - `type`: `knowledgeBase` (knowledgeBase) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `function` (KnowledgeBaseToolFunction, required) - `id` (string, required) — This is the unique identifier for the tool. - `knowledgeBaseId` (string, required, nullable) — The knowledge base this tool searches. At most one search tool references a knowledge base. Deleting the base also deletes its generated tool; null references are retained only for backward compatibility and are inert. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingKnowledgeBaseMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `transferCall` (TransferCallTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `destinations` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTransferCallDestinationsItems, optional) — 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. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTransferCallMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `handoff` (handoff) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `defaultResult` (string, optional) — This is the default local tool result message used when no runtime handoff result override is returned. - `destinations` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingHandoffDestinationsItems, optional) — These are the destinations that the call can be handed off to. Usage: 1. Single destination Use `assistantId` to handoff the call to a saved assistant, or `assistantName` to handoff the call to an assistant in the same squad. ```json { "tools": [ { "type": "handoff", "destinations": [ { "type": "assistant", "assistantId": "assistant-123", // or "assistantName": "Assistant123" "description": "customer wants to be handed off to assistant-123", "contextEngineeringPlan": { "type": "all" } } ], } ] } ``` 2. Multiple destinations 2.1. Multiple Tools, Each With One Destination (OpenAI recommended) ```json { "tools": [ { "type": "handoff", "destinations": [ { "type": "assistant", "assistantId": "assistant-123", "description": "customer wants to be handed off to assistant-123", "contextEngineeringPlan": { "type": "all" } }, ], }, { "type": "handoff", "destinations": [ { "type": "assistant", "assistantId": "assistant-456", "description": "customer wants to be handed off to assistant-456", "contextEngineeringPlan": { "type": "all" } } ], } ] } ``` 2.2. One Tool, Multiple Destinations (Anthropic recommended) ```json { "tools": [ { "type": "handoff", "destinations": [ { "type": "assistant", "assistantId": "assistant-123", "description": "customer wants to be handed off to assistant-123", "contextEngineeringPlan": { "type": "all" } }, { "type": "assistant", "assistantId": "assistant-456", "description": "customer wants to be handed off to assistant-456", "contextEngineeringPlan": { "type": "all" } } ], } ] } ``` 3. Dynamic destination 3.1 To determine the destination dynamically, supply a `dynamic` handoff destination type and a `server` object. VAPI will send a handoff-destination-request webhook to the `server.url`. The response from the server will be used as the destination (if valid). ```json { "tools": [ { "type": "handoff", "destinations": [ { "type": "dynamic", "server": { "url": "https://example.com" } } ], } ] } ``` 3.2. To pass custom parameters to the server, you can use the `function` object. ```json { "tools": [ { "type": "handoff", "destinations": [ { "type": "dynamic", "server": { "url": "https://example.com" }, } ], "function": { "name": "handoff", "description": "Call this function when the customer is ready to be handed off to the next assistant", "parameters": { "type": "object", "properties": { "destination": { "type": "string", "description": "Use dynamic when customer is ready to be handed off to the next assistant", "enum": ["dynamic"] }, "customerAreaCode": { "type": "number", "description": "Area code of the customer" }, "customerIntent": { "type": "string", "enum": ["new-customer", "existing-customer"], "description": "Use new-customer when customer is a new customer, existing-customer when customer is an existing customer" }, "customerSentiment": { "type": "string", "enum": ["positive", "negative", "neutral"], "description": "Use positive when customer is happy, negative when customer is unhappy, neutral when customer is neutral" } } } } } ] } ``` The properties `customerAreaCode`, `customerIntent`, and `customerSentiment` will be passed to the server in the webhook request body. - `function` (OpenAIFunction, optional) — This is the optional function definition that will be passed to the LLM. If this is not defined, we will construct this based on the other properties. For example, given the following tools definition: ```json { "tools": [ { "type": "handoff", "destinations": [ { "type": "assistant", "assistantId": "assistant-123", "description": "customer wants to be handed off to assistant-123", "contextEngineeringPlan": { "type": "all" } }, { "type": "assistant", "assistantId": "assistant-456", "description": "customer wants to be handed off to assistant-456", "contextEngineeringPlan": { "type": "all" } } ], } ] } ``` We will construct the following function definition: ```json { "function": { "name": "handoff_to_assistant-123", "description": " Use this function to handoff the call to the next assistant. Only use it when instructions explicitly ask you to use the handoff_to_assistant function. DO NOT call this function unless you are instructed to do so. Here are the destinations you can handoff the call to: 1. assistant-123. When: customer wants to be handed off to assistant-123 2. assistant-456. When: customer wants to be handed off to assistant-456 ", "parameters": { "type": "object", "properties": { "destination": { "type": "string", "description": "Options: assistant-123 (customer wants to be handed off to assistant-123), assistant-456 (customer wants to be handed off to assistant-456)", "enum": ["assistant-123", "assistant-456"] }, }, "required": ["destination"] } } } ``` To override this function, please provide an OpenAI function definition and refer to it in the system prompt. You may override parts of the function definition (i.e. you may only want to change the function name for your prompt). If 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`. To pass custom parameters to the server in a dynamic handoff, you can use the function parameters, with `dynamic` as the destination. ```json { "function": { "name": "dynamic_handoff", "description": " Call this function when the customer is ready to be handed off to the next assistant ", "parameters": { "type": "object", "properties": { "destination": { "type": "string", "enum": ["dynamic"] }, "customerAreaCode": { "type": "number", "description": "Area code of the customer" }, "customerIntent": { "type": "string", "enum": ["new-customer", "existing-customer"], "description": "Use new-customer when customer is a new customer, existing-customer when customer is an existing customer" }, "customerSentiment": { "type": "string", "enum": ["positive", "negative", "neutral"], "description": "Use positive when customer is happy, negative when customer is unhappy, neutral when customer is neutral" } }, "required": ["destination", "customerAreaCode", "customerIntent", "customerSentiment"] } } } ``` - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingHandoffMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `bash` (BashTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `name` (enum, required, default: bash) — The name of the tool, fixed to 'bash' - Allowed values: `bash` - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `subType` (enum, required) — The sub type of tool. - Allowed values: `bash_20241022` - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingBashMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `server` (Server, optional) — This is the server where a `tool-calls` webhook will be sent. Notes: * Webhook is sent to this server when a tool call is made. * Webhook contains the call, assistant, and phone number objects. * Webhook contains the variables set on the assistant. * Webhook is sent to the first available URL in this order: \{\{tool.server.url}}, \{\{assistant.server.url}}, \{\{phoneNumber.server.url}}, \{\{org.server.url}}. * Webhook expects a response with tool call result. - `type`: `computer` (ComputerTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `displayHeightPx` (double, required) — The display height in pixels - `displayWidthPx` (double, required) — The display width in pixels - `id` (string, required) — This is the unique identifier for the tool. - `name` (enum, required, default: computer) — The name of the tool, fixed to 'computer' - Allowed values: `computer` - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `subType` (enum, required) — The sub type of tool. - Allowed values: `computer_20241022` - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `displayNumber` (double, optional) — Optional display number - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingComputerMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `server` (Server, optional) — This is the server where a `tool-calls` webhook will be sent. Notes: * Webhook is sent to this server when a tool call is made. * Webhook contains the call, assistant, and phone number objects. * Webhook contains the variables set on the assistant. * Webhook is sent to the first available URL in this order: \{\{tool.server.url}}, \{\{assistant.server.url}}, \{\{phoneNumber.server.url}}, \{\{org.server.url}}. * Webhook expects a response with tool call result. - `type`: `textEditor` (TextEditorTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `name` (enum, required, default: str_replace_editor) — The name of the tool, fixed to 'str_replace_editor' - Allowed values: `str_replace_editor` - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `subType` (enum, required) — The sub type of tool. - Allowed values: `text_editor_20241022` - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTextEditorMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `server` (Server, optional) — This is the server where a `tool-calls` webhook will be sent. Notes: * Webhook is sent to this server when a tool call is made. * Webhook contains the call, assistant, and phone number objects. * Webhook contains the variables set on the assistant. * Webhook is sent to the first available URL in this order: \{\{tool.server.url}}, \{\{assistant.server.url}}, \{\{phoneNumber.server.url}}, \{\{org.server.url}}. * Webhook expects a response with tool call result. - `type`: `query` (QueryTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `knowledgeBases` (list of KnowledgeBase, optional) — The knowledge bases to query - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingQueryMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `google.calendar.event.create` (GoogleCalendarCreateEventTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGoogleCalendarEventCreateMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `google.sheets.row.append` (GoogleSheetsRowAppendTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGoogleSheetsRowAppendMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `google.calendar.availability.check` (GoogleCalendarCheckAvailabilityTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGoogleCalendarAvailabilityCheckMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `slack.message.send` (SlackSendMessageTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingSlackMessageSendMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `sms` (SmsTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingSmsMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `mcp` (McpTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingMcpMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `metadata` (McpToolMetadata, optional) — Connection metadata for the MCP server, including its communication protocol. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `server` (Server, optional) — This is the server where a `tool-calls` webhook will be sent. Notes: * Webhook is sent to this server when a tool call is made. * Webhook contains the call, assistant, and phone number objects. * Webhook contains the variables set on the assistant. * Webhook is sent to the first available URL in this order: \{\{tool.server.url}}, \{\{assistant.server.url}}, \{\{phoneNumber.server.url}}, \{\{org.server.url}}. * Webhook expects a response with tool call result. - `toolMessages` (list of McpToolMessages, optional) — 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`: `gohighlevel.calendar.availability.check` (GoHighLevelCalendarAvailabilityTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGohighlevelCalendarAvailabilityCheckMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `gohighlevel.calendar.event.create` (GoHighLevelCalendarEventCreateTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGohighlevelCalendarEventCreateMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `gohighlevel.contact.create` (GoHighLevelContactCreateTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGohighlevelContactCreateMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `gohighlevel.contact.get` (GoHighLevelContactGetTool) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGohighlevelContactGetMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `sipRequest` (sipRequest) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `verb` (enum, required) — The SIP method to send. - Allowed values: `INFO`, `MESSAGE`, `NOTIFY` - `body` (ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingSipRequestBody, optional) — 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. - `headers` (JsonSchema, optional) — JSON schema for headers the model should populate when sending the SIP request. - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingSipRequestMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` - `type`: `voicemail` (voicemail) - `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was created. - `id` (string, required) — This is the unique identifier for the tool. - `orgId` (string, required) — This is the unique identifier for the organization that this tool belongs to. - `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the tool was last updated. - `beepDetectionEnabled` (boolean, optional, default: false) — This is the flag that enables beep detection for voicemail detection and applies only for twilio based calls. @default false - `latestVersion` (string, optional, nullable) - `messages` (list of ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingVoicemailMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ## Types ### BackoffPlan Controls retry behavior for failed server requests, including strategy, maximum retries, base delay, and status codes excluded from retries. - `type` (enum, required) — This is the type of backoff plan to use. Defaults to fixed. @default fixed - Allowed values: `fixed`, `exponential` - `maxRetries` (double, required) — This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries). @default 0 - `baseDelaySeconds` (double, required) — Base delay in seconds. For fixed backoff, this is the delay between retries. For exponential backoff, this is the initial delay. - `excludedStatusCodes` (list of BackoffPlanExcludedStatusCodesItems, optional) — HTTP status codes that should not trigger a retry. By default, any non-2xx status code not listed here can be retried. ### JsonSchema JSON Schema definition used to describe structured data for extraction, validation, or model output. - `type` (enum, required) — This is the type of output you'd like. `string`, `number`, `integer`, `boolean` are the primitive types and should be obvious. `array` and `object` are more interesting and quite powerful. They allow you to define nested structures. For `array`, you can define the schema of the items in the array using the `items` property. For `object`, you can define the properties of the object using the `properties` property. - Allowed values: `string`, `number`, `integer`, `boolean`, `array`, `object` - `items` (JsonSchema, optional) — 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. - `properties` (map from string to JsonSchema, optional) — 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. - `description` (string, optional) — This is the description to help the model understand what it needs to output. - `pattern` (string, optional) — 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` (enum, optional) — 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 - Allowed values: `date-time`, `time`, `date`, `duration`, `email`, `hostname`, `ipv4`, `ipv6`, `uuid` - `required` (list of string, optional) — This is a list of properties that are required. This only makes sense if the type is "object". - `enum` (list of string, optional) — This array specifies the allowed values that can be used to restrict the output of the model. - `title` (string, optional) — This is the title of the schema. ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingApiRequestMessagesItems ### ToolParameter Static key-value parameter added to a tool request, with Liquid template support for string values. - `key` (string, required) — This is the key of the parameter. - `value` (ToolParameterValue, required) — The value of the parameter. Any JSON type. String values support Liquid templates. ### ToolRejectionPlan Conditions evaluated to determine whether a requested tool call should be rejected. - `conditions` (list of ToolRejectionPlanConditionsItems, optional) — 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 ### VariableExtractionPlan Defines structured variables to extract and optional aliases made available during and after a call. - `schema` (JsonSchema, optional) — This is the schema to extract. Examples: 1. To extract object properties, you can use the following schema: ```json { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "number" } } } ``` These will be extracted as `{{ name }}` and `{{ age }}` respectively. To emphasize, object properties are extracted as direct global variables. 2. To extract nested properties, you can use the following schema: ```json { "type": "object", "properties": { "name": { "type": "object", "properties": { "first": { "type": "string" }, "last": { "type": "string" } } } } } ``` These will be extracted as `{{ name }}`. And, `{{ name.first }}` and `{{ name.last }}` will be accessible. 3. To extract array items, you can use the following schema: ```json { "type": "array", "title": "zipCodes", "items": { "type": "string" } } ``` This will be extracted as `{{ zipCodes }}`. To access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`. 4. To extract array of objects, you can use the following schema: ```json { "type": "array", "name": "people", "items": { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "number" }, "zipCodes": { "type": "array", "items": { "type": "string" } } } } } ``` This will be extracted as `{{ people }}`. To access the array items, you can use `{{ people[n].name }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{ people[n].zipCodes[1] }}`. - `aliases` (list of VariableExtractionAlias, optional) — These are additional variables to create. These will be accessible during the call as `{{key}}` and stored in `call.artifact.variableValues` after the call. Example: ```json { "aliases": [ { "key": "customerName", "value": "{{name}}" }, { "key": "fullName", "value": "{{firstName}} {{lastName}}" }, { "key": "greeting", "value": "Hello {{name}}, welcome to {{company}}!" }, { "key": "customerCity", "value": "{{addresses[0].city}}" }, { "key": "something", "value": "{{any liquid}}" } ] } ``` This will create variables `customerName`, `fullName`, `greeting`, `customerCity`, and `something`. To access these variables, you can reference them as `{{customerName}}`, `{{fullName}}`, `{{greeting}}`, `{{customerCity}}`, and `{{something}}`. ### CodeToolEnvironmentVariable An environment variable supplied to code-tool execution, with support for Liquid templates in its value. - `name` (string, required) — Name of the environment variable - `value` (string, required) — Value of the environment variable. Supports Liquid templates. ### OpenAIFunction Function definition exposed to a language model, including its name, purpose, parameter schema, and strict-schema behavior. - `name` (string, required) — 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. - `strict` (boolean, optional, default: false) — 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 - `description` (string, optional) — This is the description of what the function does, used by the AI to choose when and how to call the function. - `parameters` (OpenAIFunctionParameters, optional) — 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. ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingCodeMessagesItems ### Server Configuration for requests Vapi sends to a customer server, including URL, authentication, headers, timeout, encryption, static IP addresses, and retry behavior. - `timeoutSeconds` (double, optional) — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20 - `credentialId` (string, optional) — The credential ID for server authentication - `staticIpAddressesEnabled` (boolean, optional) — If enabled, requests will originate from a static set of IPs owned and managed by Vapi. @default false - `encryptedPaths` (list of string, optional) — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined. - `url` (string, optional) — This is where the request will be sent. - `headers` (ServerHeaders, optional) — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios. - `backoffPlan` (BackoffPlan, optional) — 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) ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingDtmfMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingEndCallMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingFunctionMessagesItems ### KnowledgeBaseToolFunction - `name` (string, required) — 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. - `description` (string, required) — This is the description of what the function does, used by the AI to choose when and how to call the function. - `parameters` (OpenAIFunctionParameters, required) — 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. - `strict` (boolean, optional, default: false) — 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 ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingKnowledgeBaseMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTransferCallDestinationsItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTransferCallMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingHandoffDestinationsItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingHandoffMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingBashMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingComputerMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTextEditorMessagesItems ### KnowledgeBase A knowledge-base configuration, including its provider, model, description, and associated files. - `name` (string, required) — The name of the knowledge base - `provider` (enum, required) — The provider of the knowledge base - Allowed values: `google` - `description` (string, required) — A description of the knowledge base - `fileIds` (list of string, required) — The file IDs associated with this knowledge base - `model` (enum, optional) — The model to use for the knowledge base - Allowed values: `gemini-3.5-flash`, `gemini-3.1-flash-lite`, `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` ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingQueryMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGoogleCalendarEventCreateMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGoogleSheetsRowAppendMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGoogleCalendarAvailabilityCheckMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingSlackMessageSendMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingSmsMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingMcpMessagesItems ### McpToolMetadata Protocol metadata used to communicate with an MCP server. - `protocol` (enum, optional) — This is the protocol used for MCP communication. Defaults to Streamable HTTP. - Allowed values: `sse`, `shttp` ### McpToolMessages Per-tool message overrides for a tool discovered through an MCP server. - `name` (string, required) — The name of the tool from the MCP server. - `messages` (list of McpToolMessagesMessagesItems, optional) — 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. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGohighlevelCalendarAvailabilityCheckMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGohighlevelCalendarEventCreateMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGohighlevelContactCreateMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingGohighlevelContactGetMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingSipRequestBody 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. ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingSipRequestMessagesItems ### ToolIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingVoicemailMessagesItems ### BackoffPlanExcludedStatusCodesItems ### ToolMessageStart Message spoken when a tool call starts, with optional language variants, argument conditions, and blocking behavior. - `type` (enum, required) — This message is triggered when the tool call starts. This message is never triggered for async tools. Multiple request-start messages are variants. One eligible variant is selected each time the tool starts. 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. - Allowed values: `request-start` - `contents` (list of ToolMessageStartContentsItems, optional) — 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. - `blocking` (boolean, optional, default: false) — This is an optional boolean that if true, the tool call will only trigger after the message is spoken. Default is false. @default false - `content` (string, optional) — This is the content that the assistant says when this message is triggered. - `conditions` (list of Condition, optional) — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered. ### ToolMessageComplete Message spoken when a tool call completes, with optional language variants, argument conditions, role, and end-call behavior. - `type` (enum, required) — 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. - Allowed values: `request-complete` - `contents` (list of ToolMessageCompleteContentsItems, optional) — 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. - `role` (enum, optional) — This is optional and defaults to "assistant". When role=assistant, `content` is said out loud. When role=system, `content` is passed to the model in a system message. Example: system: default one assistant: user: assistant: user: assistant: user: assistant: tool called tool: your server response \<--- system prompt as hint \---> model generates response which is spoken This is useful when you want to provide a hint to the model about what to say next. - Allowed values: `assistant`, `system` - `endCallAfterSpokenEnabled` (boolean, optional) — 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 - `content` (string, optional) — This is the content that the assistant says when this message is triggered. - `conditions` (list of Condition, optional) — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered. ### ToolMessageFailed Message spoken when a tool call fails, with optional language variants, argument conditions, and end-call behavior. - `type` (enum, required) — 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. - Allowed values: `request-failed` - `contents` (list of ToolMessageFailedContentsItems, optional) — 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. - `role` (enum, optional) — This is optional and defaults to "assistant". When role=assistant, `content` is said out loud when the tool call fails. When role=system, `content` is passed to the model as a system message along with the failure result, and the model's generated response is spoken. Example: assistant: tool called tool: error from your server \<--- system prompt as hint \---> model generates response which is spoken This is useful when you want the model to generate an error-aware response instead of speaking a fixed failure message. - Allowed values: `assistant`, `system` - `endCallAfterSpokenEnabled` (boolean, optional) — 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 - `content` (string, optional) — This is the content that the assistant says when this message is triggered. - `conditions` (list of Condition, optional) — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered. ### ToolMessageDelayed Message spoken when a tool call exceeds a configured response delay, with optional language variants and argument conditions. - `type` (enum, required) — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates. - Allowed values: `request-response-delayed` - `contents` (list of ToolMessageDelayedContentsItems, optional) — 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. - `timingMilliseconds` (double, optional) — The number of milliseconds to wait for the server response before saying this delayed message. - `content` (string, optional) — This is the content that the assistant says when this message is triggered. - `conditions` (list of Condition, optional) — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered. ### ToolParameterValue The value of the parameter. Any JSON type. String values support Liquid templates. ### ToolRejectionPlanConditionsItems ### VariableExtractionAlias Defines an additional Liquid-based variable from values extracted during a call. - `key` (string, required) — 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. - `value` (string, required) — This is the value of the variable. This can reference existing variables, use filters, and perform transformations. Examples: "\{\{name}}", "\{\{customer.email}}", "Hello \{\{name | upcase}}" ### OpenAIFunctionParameters JSON object schema defining the properties accepted by a function and which properties are required. - `type` (enum, required) — This must be set to 'object'. It instructs the model to return a JSON object containing the function call properties. - Allowed values: `object` - `properties` (map from string to JsonSchema, required) — 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. - `required` (list of string, optional) — This specifies the properties that are required by the function. ### ServerHeaders 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. ### TransferDestinationAssistant Transfers a call to another assistant by name, with an optional message and assistant-transfer mode. - `type` (enum, required) — Selects another assistant as the transfer destination. - Allowed values: `assistant` - `assistantName` (string, required) — This is the assistant to transfer the call to. - `message` (TransferDestinationAssistantMessage, optional) — 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. - `transferMode` (enum, optional) — This is the mode to use for the transfer. Defaults to `rolling-history`. - `rolling-history`: This is the default mode. It keeps the entire conversation history and appends the new assistant's system message on transfer. Example: Pre-transfer: system: assistant1 system message assistant: assistant1 first message user: hey, good morning assistant: how can i help? user: i need help with my account assistant: (destination.message) Post-transfer: system: assistant1 system message assistant: assistant1 first message user: hey, good morning assistant: how can i help? user: i need help with my account assistant: (destination.message) system: assistant2 system message assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`) - `swap-system-message-in-history`: This replaces the original system message with the new assistant's system message on transfer. Example: Pre-transfer: system: assistant1 system message assistant: assistant1 first message user: hey, good morning assistant: how can i help? user: i need help with my account assistant: (destination.message) Post-transfer: system: assistant2 system message assistant: assistant1 first message user: hey, good morning assistant: how can i help? user: i need help with my account assistant: (destination.message) assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`) - `delete-history`: This deletes the entire conversation history on transfer. Example: Pre-transfer: system: assistant1 system message assistant: assistant1 first message user: hey, good morning assistant: how can i help? user: i need help with my account assistant: (destination.message) Post-transfer: system: assistant2 system message assistant: assistant2 first message user: Yes, please assistant: how can i help? user: i need help with my account - `swap-system-message-in-history-and-remove-transfer-tool-messages`: This replaces the original system message with the new assistant's system message on transfer and removes transfer tool messages from conversation history sent to the LLM. Example: Pre-transfer: system: assistant1 system message assistant: assistant1 first message user: hey, good morning assistant: how can i help? user: i need help with my account transfer-tool transfer-tool-result assistant: (destination.message) Post-transfer: system: assistant2 system message assistant: assistant1 first message user: hey, good morning assistant: how can i help? user: i need help with my account assistant: (destination.message) assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`) @default 'rolling-history' - Allowed values: `rolling-history`, `swap-system-message-in-history` - `name` (string, optional) — This is the name of the transfer destination. This is just for your own reference. Usage: - Optional. Stored with the destination wherever it is supplied. For `number` and `sip` destinations it is also persisted on the transfer record in the call artifact after a transfer and displayed in the dashboard call log (on the transfer divider in the transcript view) alongside the destination. When omitted, everything behaves exactly as before. - Display-only. Unlike `description`, it is never included in prompts or tool descriptions and has no effect on model behavior or destination choice. - `description` (string, optional) — This is the description of the destination, used by the AI to choose when and how to transfer the call. ### TransferDestinationNumber Transfers a call to a phone number, with optional extension, caller ID, message, transfer plan, and number validation. - `type` (enum, required) — Selects a phone number as the transfer destination. - Allowed values: `number` - `number` (string, required) — This is the phone number to transfer the call to. - `message` (TransferDestinationNumberMessage, optional) — 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. - `numberE164CheckEnabled` (boolean, optional, default: true) — This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it. Use cases: - `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks. - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). @default true (E164 check is enabled) - `extension` (string, optional) — This is the extension to dial after transferring the call to the `number`. - `callerId` (string, optional) — This is the caller ID to use when transferring the call to the `number`. Usage: * If not provided, the caller ID will be the number the call is coming **from**. Example: a customer with number +14151111111 calls in to and the assistant transfers out to +16470000000. +16470000000 will see +14151111111 as the caller. For inbound calls, the caller ID is the customer's number. For outbound calls, the caller ID is the phone number of the assistant. * To change this behavior, provide a `callerId`. * Set to '\{\{customer.number}}' to always use the customer's number as the caller ID. * Set to '\{\{phoneNumber.number}}' to always use the phone number of the assistant as the caller ID. * Set to any E164 number to always use that number as the caller ID. This needs to be a number that is owned or verified by your Transport provider like Twilio. Note: on Twilio, a caller who withheld their number has no caller ID the destination carrier will accept, so the assistant's phone number is presented instead and the transfer goes through. This applies when `callerId` is not provided and when it is set to '\{\{customer.number}}'. For Twilio, you can read up more here: [https://www.twilio.com/docs/voice/twiml/dial#callerid](https://www.twilio.com/docs/voice/twiml/dial#callerid) - `transferPlan` (TransferPlan, optional) — 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'` - `name` (string, optional) — This is the name of the transfer destination. This is just for your own reference. Usage: - Optional. Stored with the destination wherever it is supplied. For `number` and `sip` destinations it is also persisted on the transfer record in the call artifact after a transfer and displayed in the dashboard call log (on the transfer divider in the transcript view) alongside the destination. When omitted, everything behaves exactly as before. - Display-only. Unlike `description`, it is never included in prompts or tool descriptions and has no effect on model behavior or destination choice. - `description` (string, optional) — This is the description of the destination, used by the AI to choose when and how to transfer the call. ### TransferDestinationSip Transfers a call to a SIP URI, with optional caller ID, headers, message, and transfer plan. - `type` (enum, required) — Selects a SIP URI as the transfer destination. - Allowed values: `sip` - `sipUri` (string, required) — This is the SIP URI to transfer the call to. - `message` (TransferDestinationSipMessage, optional) — 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. - `callerId` (string, optional) — 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. - `transferPlan` (TransferPlan, optional) — 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'` - `sipHeaders` (TransferDestinationSipSipHeaders, optional) — These are custom headers to be added to SIP refer during transfer call. - `name` (string, optional) — This is the name of the transfer destination. This is just for your own reference. Usage: - Optional. Stored with the destination wherever it is supplied. For `number` and `sip` destinations it is also persisted on the transfer record in the call artifact after a transfer and displayed in the dashboard call log (on the transfer divider in the transcript view) alongside the destination. When omitted, everything behaves exactly as before. - Display-only. Unlike `description`, it is never included in prompts or tool descriptions and has no effect on model behavior or destination choice. - `description` (string, optional) — This is the description of the destination, used by the AI to choose when and how to transfer the call. ### HandoffDestinationAssistant Routes a handoff to a saved or transient assistant, with optional context engineering, variable extraction, and assistant overrides. - `type` (enum, required) — Selects an assistant as the handoff destination. - Allowed values: `assistant` - `contextEngineeringPlan` (HandoffDestinationAssistantContextEngineeringPlan, optional) — This is the plan for manipulating the message context before handing off the call to the next assistant. - `assistantName` (string, optional) — This is the assistant to transfer the call to. You must provide either assistantName or assistantId. - `assistantId` (string, optional) — This is the assistant id to transfer the call to. You must provide either assistantName or assistantId. - `assistant` (CreateAssistantDTO, optional) — 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. - `variableExtractionPlan` (VariableExtractionPlan, optional) — This is the variable extraction plan for the handoff tool. - `assistantOverrides` (AssistantOverrides, optional) — These are the assistant overrides to apply to the destination assistant. - `description` (string, optional) — This is the description of the destination, used by the AI to choose when and how to transfer the call. ### HandoffDestinationDynamic Uses a webhook response to select the handoff destination at runtime. - `type` (enum, required) — Selects a dynamically resolved handoff destination. - Allowed values: `dynamic` - `server` (Server, optional) — 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 - `description` (string, optional) — This is the description of the destination, used by the AI to choose when and how to transfer the call. ### HandoffDestinationSquad Routes a handoff to a saved or transient squad, with optional entry assistant, context engineering, variable extraction, and overrides. - `type` (enum, required) — Selects a squad as the handoff destination. - Allowed values: `squad` - `contextEngineeringPlan` (HandoffDestinationSquadContextEngineeringPlan, optional) — This is the plan for manipulating the message context before handing off the call to the squad. - `squadId` (string, optional) — This is the squad id to transfer the call to. - `squad` (CreateSquadDTO, optional) — This is a transient squad to transfer the call to. - `entryAssistantName` (string, optional) — 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` (VariableExtractionPlan, optional) — This is the variable extraction plan for the handoff tool. - `squadOverrides` (AssistantOverrides, optional) — These are the overrides to apply to the squad configuration. Maps to squad-level membersOverrides. - `description` (string, optional) — This is the description of the destination, used by the AI to choose when and how to transfer the call. ### McpToolMessagesMessagesItems ### ToolMessageStartContentsItems ### Condition Compares a named parameter with a value using the selected comparison operator. - `operator` (enum, required) — This is the operator you want to use to compare the parameter and value. - Allowed values: `eq`, `neq`, `gt`, `gte`, `lt`, `lte` - `param` (string, required) — This is the name of the parameter that you want to check. - `value` (string, required) — This is the value you want to compare against the parameter. ### ToolMessageCompleteContentsItems ### ToolMessageFailedContentsItems ### ToolMessageDelayedContentsItems ### RegexCondition Evaluates whether targeted conversation-message content matches a regular expression. - `type` (enum, required) — This is the type discriminator for regex condition - Allowed values: `regex` - `regex` (string, required) — 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 - `target` (MessageTarget, optional) — 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 } - `negate` (boolean, optional) — 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 ### LiquidCondition Evaluates a Liquid template that must return `true` or `false`. - `type` (enum, required) — This is the type discriminator for liquid condition - Allowed values: `liquid` - `liquid` (string, required) — This is the Liquid template that must return exactly "true" or "false" as a string. The template is evaluated and the entire output must be either "true" or "false" - nothing else. Available variables: - `messages`: Array of recent messages in OpenAI chat completions format (ChatCompletionMessageParam[]) Each message has properties like: role ('user', 'assistant', 'system'), content (string), etc. - `now`: Current timestamp in milliseconds (built-in Liquid variable) - Any assistant variable values (e.g., `userName`, `accountStatus`) Useful Liquid filters for messages: - `messages | last: 5` - Get the 5 most recent messages - `messages | where: 'role', 'user'` - Filter to only user messages - `messages | reverse` - Reverse the order of messages ### GroupCondition Combines nested regular-expression, Liquid, or grouped conditions with an `AND` or `OR` operator. - `type` (enum, required) — This is the type discriminator for group condition - Allowed values: `group` - `operator` (enum, required) — This is the logical operator for combining conditions in this group - Allowed values: `AND`, `OR` - `conditions` (list of GroupConditionConditionsItems, required) — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic. ### TransferDestinationAssistantMessage 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. ### TransferDestinationNumberMessage 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. ### TransferPlan Controls how a call transfer is executed, including blind and warm transfer modes, dialing and SIP behavior, hold audio, context, summary, and failure handling. - `mode` (enum, required) — This configures how transfer is executed and the experience of the destination party receiving the call. Usage: - `blind-transfer`: The assistant forwards the call to the destination without any message or summary. - `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP header X-Transfer-Summary to the call to include the summary. - `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call. - `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer. - `warm-transfer-twiml`: The assistant dials the destination, executes the twiml instructions on the destination call leg, connects the customer, and leaves the call. - `warm-transfer-experimental`: The assistant puts the customer on hold, dials the destination, and if the destination answers (and is human), delivers a message or summary before connecting the customer. If the destination is unreachable or not human (e.g., with voicemail detection), the assistant delivers the `fallbackMessage` to the customer and optionally ends the call. @default 'blind-transfer' - Allowed values: `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` (TransferPlanMessage, optional) — 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`. - `timeout` (double, optional, default: 60) — This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary @default 60 - `sipVerb` (enum, optional, default: refer) — 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 - Allowed values: `refer`, `bye`, `dial` - `dialTimeout` (double, optional, default: 60) — 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 - `holdAudioUrl` (string, optional) — This is the URL to an audio file played while the customer is on hold during transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the customer. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV. - If not provided, the default hold audio will be used. - `transferCompleteAudioUrl` (string, optional) — 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` (TransferPlanContextEngineeringPlan, optional) — 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' } - `twiml` (string, optional) — 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. ``` - `summaryPlan` (SummaryPlan, optional) — 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`. - `sipHeadersInReferToEnabled` (boolean, optional) — This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params. @default false - `fallbackPlan` (TransferFallbackPlan, optional) — This configures the fallback plan when the transfer fails (destination unreachable, busy, or not human). Usage: - Used when `mode` is `warm-transfer-experimental`. If not provided, a default message will be used. - Used for SIP cold transfers (`blind-transfer` modes) when transfer outcome detection and fallback are enabled for the organization: on a failed transfer, the assistant speaks `message`, then ends the call or continues with the customer per `endCallEnabled`. ### TransferDestinationSipMessage 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. ### TransferDestinationSipSipHeaders These are custom headers to be added to SIP refer during transfer call. ### HandoffDestinationAssistantContextEngineeringPlan This is the plan for manipulating the message context before handing off the call to the next assistant. ### CreateAssistantDTO Configuration used to create an assistant, including its model, voice, transcriber, prompts, tools, messaging, and conversation behavior. - `transcriber` (CreateAssistantDtoTranscriber, optional) — These are the options for the assistant's transcriber. - `model` (CreateAssistantDtoModel, optional) — These are the options for the assistant's LLM. - `voice` (CreateAssistantDtoVoice, optional) — These are the options for the assistant's voice. - `firstMessage` (string, optional) — This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If unspecified, assistant will wait for user to speak and use the model to respond once they speak. - `firstMessageInterruptionsEnabled` (boolean, optional, default: false) — Set to `true` to allow the user to interrupt the assistant while it speaks the first message. Default is `false`. - `firstMessageMode` (enum, optional) — 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' - Allowed values: `assistant-speaks-first`, `assistant-speaks-first-with-model-generated-message`, `assistant-waits-for-user` - `voicemailDetection` (CreateAssistantDtoVoicemailDetection, optional) — 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. - `clientMessages` (enum, optional) — 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. - Allowed values: `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` (enum, optional) — 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. - Allowed values: `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`, `call.artifact.upload` - `maxDurationSeconds` (double, optional) — This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes) - `backgroundSound` (CreateAssistantDtoBackgroundSound, optional) — This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'. You can also provide a custom sound by providing a URL to an audio file. - `modelOutputInMessagesEnabled` (boolean, optional) — This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. @default false - `transportConfigurations` (list of CreateAssistantDtoTransportConfigurationsItems, optional) — 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. - `observabilityPlan` (LangfuseObservabilityPlan, optional) — This is the plan for observability of assistant's calls. Currently, only Langfuse is supported. - `credentials` (list of CreateAssistantDtoCredentialsItems, optional) — 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. - `hooks` (list of CreateAssistantDtoHooksItems, optional) — This is a set of actions that will be performed on certain events. - `name` (string, optional) — This is the name of the assistant. This is required when you want to transfer between assistants in a call. - `voicemailMessage` (string, optional) — This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up. - `endCallMessage` (string, optional) — This is the message that the assistant will say if it ends the call. If unspecified, it will hang up without saying anything. - `endCallPhrases` (list of string, optional) — This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive. - `compliancePlan` (CompliancePlan, optional) — Compliance settings for the assistant, including HIPAA and PCI behavior, security filtering, and recording consent. - `metadata` (CreateAssistantDtoMetadata, optional) — This is for metadata you want to store on the assistant. - `backgroundSpeechDenoisingPlan` (BackgroundSpeechDenoisingPlan, optional) — 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 - `artifactPlan` (ArtifactPlan, optional) — This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`. - `startSpeakingPlan` (StartSpeakingPlan, optional) — 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. - `stopSpeakingPlan` (StopSpeakingPlan, optional) — 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. - `monitorPlan` (MonitorPlan, optional) — 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. - `credentialIds` (list of string, optional) — These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this. - `server` (Server, optional) — 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 - `keypadInputPlan` (KeypadInputPlan, optional) — Configuration for collecting and processing DTMF keypad input during calls. - `analysisPlan` (AnalysisPlan, optional, deprecated) — This is the plan for analysis of assistant's calls. Stored in `call.analysis`. ### AssistantOverrides Per-call or handoff overrides for an assistant's providers, messages, tools, credentials, call behavior, and server configuration. - `transcriber` (AssistantOverridesTranscriber, optional) — These are the options for the assistant's transcriber. - `model` (AssistantOverridesModel, optional) — These are the options for the assistant's LLM. - `voice` (AssistantOverridesVoice, optional) — These are the options for the assistant's voice. - `firstMessage` (string, optional) — This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If unspecified, assistant will wait for user to speak and use the model to respond once they speak. - `firstMessageInterruptionsEnabled` (boolean, optional, default: false) — Set to `true` to allow the user to interrupt the assistant while it speaks the first message. Default is `false`. - `firstMessageMode` (enum, optional) — 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' - Allowed values: `assistant-speaks-first`, `assistant-speaks-first-with-model-generated-message`, `assistant-waits-for-user` - `voicemailDetection` (AssistantOverridesVoicemailDetection, optional) — 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. - `clientMessages` (enum, optional) — 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. - Allowed values: `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` (enum, optional) — 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. - Allowed values: `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`, `call.artifact.upload` - `maxDurationSeconds` (double, optional) — This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes) - `backgroundSound` (AssistantOverridesBackgroundSound, optional) — This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'. You can also provide a custom sound by providing a URL to an audio file. - `modelOutputInMessagesEnabled` (boolean, optional) — This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. @default false - `transportConfigurations` (list of AssistantOverridesTransportConfigurationsItems, optional) — 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. - `observabilityPlan` (LangfuseObservabilityPlan, optional) — This is the plan for observability of assistant's calls. Currently, only Langfuse is supported. - `credentials` (list of AssistantOverridesCredentialsItems, optional) — 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. - `hooks` (list of AssistantOverridesHooksItems, optional) — This is a set of actions that will be performed on certain events. - `tools:append` (list of AssistantOverridesToolsAppendItems, optional) — Tools to append to the assistant's existing tool configuration. - `variableValues` (AssistantOverridesVariableValues, optional) — These are values that will be used to replace the template variables in the assistant messages and other text-based fields. This uses LiquidJS syntax. [https://liquidjs.com/tutorials/intro-to-liquid.html](https://liquidjs.com/tutorials/intro-to-liquid.html) So for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`. `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will be replaced with the current date and time in New York. Some VAPI reserved defaults: * *customer* - the customer object - `name` (string, optional) — This is the name of the assistant. This is required when you want to transfer between assistants in a call. - `voicemailMessage` (string, optional) — This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up. - `endCallMessage` (string, optional) — This is the message that the assistant will say if it ends the call. If unspecified, it will hang up without saying anything. - `endCallPhrases` (list of string, optional) — This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive. - `compliancePlan` (CompliancePlan, optional) — Compliance settings to apply, including HIPAA and PCI behavior, security filtering, and recording consent. - `metadata` (AssistantOverridesMetadata, optional) — This is for metadata you want to store on the assistant. - `backgroundSpeechDenoisingPlan` (BackgroundSpeechDenoisingPlan, optional) — 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 - `artifactPlan` (ArtifactPlan, optional) — This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`. - `startSpeakingPlan` (StartSpeakingPlan, optional) — 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. - `stopSpeakingPlan` (StopSpeakingPlan, optional) — 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. - `monitorPlan` (MonitorPlan, optional) — 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. - `credentialIds` (list of string, optional) — These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this. - `server` (Server, optional) — 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 - `keypadInputPlan` (KeypadInputPlan, optional) — Configuration for collecting and processing DTMF keypad input. - `analysisPlan` (AnalysisPlan, optional, deprecated) — This is the plan for analysis of assistant's calls. Stored in `call.analysis`. ### HandoffDestinationSquadContextEngineeringPlan This is the plan for manipulating the message context before handing off the call to the squad. ### CreateSquadDTO Configuration used to create a squad. Provide an ordered list of assistant members and optional overrides that control how the squad handles a conversation and transfers between assistants. - `members` (list of SquadMemberDTO, required) — This is the list of assistants that make up the squad. The call will start with the first assistant in the list. - `name` (string, optional) — This is the name of the squad. - `membersOverrides` (AssistantOverrides, optional) — 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. ### TextContent Localized text content used as a language-specific message variant. - `type` (enum, required) — Selects text as the content type. - Allowed values: `text` - `text` (string, required) — Text spoken or displayed for this content variant. - `language` (enum, required) — Language code associated with this text variant. - Allowed values: `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` ### MessageTarget Selects a conversation message by participant role and position for condition evaluation. - `role` (enum, optional) — This is the role of the message to target. If not specified, will find the position in the message history ignoring role (effectively `any`). - Allowed values: `user`, `assistant` - `position` (double, optional) — 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) ### GroupConditionConditionsItems ### CustomMessage A message spoken by the assistant with optional language-specific content variants. - `type` (enum, required) — This is a custom message. - Allowed values: `custom-message` - `contents` (list of CustomMessageContentsItems, optional) — 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. - `content` (string, optional) — This is the content that the assistant will say when this message is triggered. ### TransferPlanMessage 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`. ### TransferPlanContextEngineeringPlan 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' } ### SummaryPlan Controls generation of a post-call summary, including prompt messages, enablement, and request timeout. - `messages` (list of SummaryPlanMessagesItems, optional) — These are the messages used to generate the summary. @default: ` [ \{ "role": "system", "content": "You are an expert note-taker. You will be given a transcript of a call. Summarize the call in 2-3 sentences. DO NOT return anything except the summary." }, \{ "role": "user", "content": "Here is the transcript:\n\n\{\{transcript}}\n\n. Here is the ended reason of the call:\n\n\{\{endedReason}}\n\n" } ]` You can customize by providing any messages you want. Here are the template variables available: * \{\{transcript}}: The transcript of the call from `call.artifact.transcript` * \{\{systemPrompt}}: The system prompt of the call from `assistant.model.messages[type=system].content` * \{\{messages}}: The messages of the call from `assistant.model.messages` * \{\{endedReason}}: The ended reason of the call from `call.endedReason` - `enabled` (boolean, optional) — 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` (double, optional) — 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 ### TransferFallbackPlan Controls the message and end-call behavior used when a call transfer fails. - `message` (TransferFallbackPlanMessage, required) — This is the message the assistant will deliver to the customer if the transfer fails. - `endCallEnabled` (boolean, optional, default: true) — 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 ### ContextEngineeringPlanLastNMessages Includes a configured number of the most recent messages when constructing context for a handoff. - `type` (enum, required) — Selects inclusion of the most recent messages. - Allowed values: `lastNMessages` - `maxMessages` (double, required) — This is the maximum number of messages to include in the context engineering plan. ### ContextEngineeringPlanNone Excludes prior conversation messages when constructing context for a handoff. - `type` (enum, required) — Selects exclusion of prior conversation messages. - Allowed values: `none` ### ContextEngineeringPlanAll Includes all available messages when constructing context for a handoff. - `type` (enum, required) — Selects inclusion of all available messages. - Allowed values: `all` ### ContextEngineeringPlanUserAndAssistantMessages Includes only user and assistant messages when constructing context for a handoff. - `type` (enum, required) — Selects inclusion of user and assistant messages only. - Allowed values: `userAndAssistantMessages` ### ContextEngineeringPlanPreviousAssistantMessages - `type` (enum, required) - Allowed values: `previousAssistantMessages` ### CreateAssistantDtoTranscriber These are the options for the assistant's transcriber. ### CreateAssistantDtoModel These are the options for the assistant's LLM. ### CreateAssistantDtoVoice These are the options for the assistant's voice. ### CreateAssistantDtoVoicemailDetection 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. ### CreateAssistantDtoBackgroundSound 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. ### CreateAssistantDtoTransportConfigurationsItems ### LangfuseObservabilityPlan Configuration for sending assistant call traces to Langfuse, including prompt version linkage, trace naming, tags, and metadata. - `provider` (enum, required) — Routes assistant call observability data to Langfuse. - Allowed values: `langfuse` - `tags` (list of string, required) — This is an array of tags to be added to the Langfuse trace. Tags allow you to categorize and filter traces. https://langfuse.com/docs/tracing-features/tags - `promptName` (string, optional) — 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` (double, optional) — 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 - `traceName` (string, optional) — 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. - `metadata` (LangfuseObservabilityPlanMetadata, optional) — 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. ### CreateAssistantDtoCredentialsItems - `provider`: `11labs` (CreateElevenLabsCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `apiUrl` (enum, optional, nullable) — ElevenLabs-only API environment for this key: the global endpoint or the EU data residency endpoint. In EU deployments, new credentials must explicitly use the EU data residency endpoint; existing credentials may omit this field on update to retain their saved endpoint. Outside EU deployments, Vapi detects an omitted endpoint automatically and null on update clears and re-detects the endpoint. - Allowed values: `https://api.elevenlabs.io`, `https://api.eu.residency.elevenlabs.io` - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `anthropic` (CreateAnthropicCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `anthropic-bedrock` (anthropic-bedrock) - `authenticationPlan` (UpdateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockAuthenticationPlan, required) — Authentication method - either direct IAM credentials or cross-account role assumption. - `region` (enum, required) — AWS region where Bedrock is configured. - Allowed values: `us-east-1`, `us-west-2`, `eu-central-1`, `eu-west-1`, `eu-west-3`, `ap-northeast-1`, `ap-southeast-2` - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `anyscale` (CreateAnyscaleCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `assembly-ai` (CreateAssemblyAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `azure-openai` (CreateAzureOpenAICredentialDTO) - `models` (enum, required) — Azure OpenAI models available through this credential. - Allowed values: `gpt-5.6-luna-2026-07-09`, `gpt-5.6-terra-2026-07-09`, `gpt-5.6-sol-2026-07-09`, `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`, `gpt-4o`, `gpt-4.1`, `gpt-5.4-mini-2026-03-17` - `openAIEndpoint` (string, required) — Endpoint URL for the Azure OpenAI resource. - `openAIKey` (string, required) — This is not returned in the API. - `region` (enum, required) — Azure region that hosts the OpenAI resource. - Allowed values: `australiaeast`, `canadaeast`, `canadacentral`, `centralus`, `eastus2`, `eastus`, `france`, `germanywestcentral`, `india`, `japaneast`, `japanwest`, `northcentralus`, `norway`, `polandcentral`, `southcentralus`, `spaincentral`, `swedencentral`, `switzerland`, `switzerlandnorth`, `switzerlandwest`, `uaenorth`, `uk`, `westeurope`, `westus`, `westus3` - `name` (string, optional) — This is the name of credential. This is just for your reference. - `ocpApimSubscriptionKey` (string, optional) — This is not returned in the API. - `provider`: `azure` (CreateAzureCredentialDTO) - `service` (enum, required, default: speech) — This is the service being used in Azure. - Allowed values: `speech`, `blob_storage` - `apiKey` (string, optional) — This is not returned in the API. - `bucketPlan` (AzureBlobStorageBucketPlan, optional) — This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage. - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `region` (enum, optional) — This is the region of the Azure resource. - Allowed values: `australiaeast`, `canadaeast`, `canadacentral`, `centralus`, `eastus2`, `eastus`, `france`, `germanywestcentral`, `india`, `japaneast`, `japanwest`, `northcentralus`, `norway`, `polandcentral`, `southcentralus`, `spaincentral`, `swedencentral`, `switzerland`, `switzerlandnorth`, `switzerlandwest`, `uaenorth`, `uk`, `westeurope`, `westus`, `westus3` - `provider`: `byo-sip-trunk` (CreateByoSipTrunkCredentialDTO) - `gateways` (list of SipTrunkGateway, required) — This is the list of SIP trunk's gateways. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `outboundAuthenticationPlan` (SipTrunkOutboundAuthenticationPlan, optional) — This can be used to configure the outbound authentication if required by the SIP trunk. - `outboundLeadingPlusEnabled` (boolean, optional) — 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 - `sipDiversionHeader` (string, optional) — 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. - `techPrefix` (string, optional) — This can be used to configure the tech prefix on outbound calls. This is an advanced property. - `provider`: `cartesia` (CreateCartesiaCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `apiUrl` (string, optional) — This can be used to point to an onprem Cartesia instance. Defaults to api.cartesia.ai. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `cerebras` (CreateCerebrasCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `cloudflare` (CreateCloudflareCredentialDTO) - `accountEmail` (string, optional) — Cloudflare Account Email. - `accountId` (string, optional) — Cloudflare Account Id. - `apiKey` (string, optional) — Cloudflare API Key / Token. - `bucketPlan` (CloudflareR2BucketPlan, optional) — This is the bucket plan that can be provided to store call artifacts in R2 - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `custom-llm` (CreateCustomLLMCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `authenticationPlan` (OAuth2AuthenticationPlan, optional) — This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `deepgram` (CreateDeepgramCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `apiUrl` (string, optional) — This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `deepinfra` (CreateDeepInfraCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `deep-seek` (CreateDeepSeekCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `gcp` (CreateGcpCredentialDTO) - `gcpKey` (GcpKey, required) — This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at [https://console.cloud.google.com/iam-admin/serviceaccounts/details/\<service-account-id\>/keys](https://console.cloud.google.com/iam-admin/serviceaccounts/details/\<service-account-id\>/keys). The schema is identical to the JSON that GCP outputs. - `bucketPlan` (BucketPlan, optional) — Bucket configuration used to store call artifacts in Google Cloud Storage. - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `region` (string, optional) — This is the region of the GCP resource. - `provider`: `gladia` (CreateGladiaCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `gohighlevel` (CreateGoHighLevelCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `google` (CreateGoogleCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `groq` (CreateGroqCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `inflection-ai` (CreateInflectionAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `langfuse` (CreateLangfuseCredentialDTO) - `apiKey` (string, required) — The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API. - `apiUrl` (string, required) — The host URL for Langfuse project. Eg: https://cloud.langfuse.com - `publicKey` (string, required) — The public key for Langfuse project. Eg: pk-lf-... - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `lmnt` (CreateLmntCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `make` (CreateMakeCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `region` (string, required) — Region of your application. For example: eu1, eu2, us1, us2 - `teamId` (string, required) — Team ID - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `openai` (CreateOpenAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `openrouter` (CreateOpenRouterCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `perplexity-ai` (CreatePerplexityAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `playht` (CreatePlayHTCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `userId` (string, required) — PlayHT user identifier associated with the API key. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `rime-ai` (CreateRimeAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `runpod` (CreateRunpodCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `s3` (CreateS3CredentialDTO) - `awsAccessKeyId` (string, required) — AWS access key ID. - `awsSecretAccessKey` (string, required) — AWS access key secret. This is not returned in the API. - `region` (string, required) — AWS region in which the S3 bucket is located. - `s3BucketName` (string, required) — AWS S3 bucket name. - `s3PathPrefix` (string, required) — The path prefix for the uploaded recording. Ex. "recordings/" - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `s3-compatible` (s3-compatible) - `bucketPlan` (S3CompatibleBucketPlan, required) - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `supabase` (CreateSupabaseCredentialDTO) - `bucketPlan` (SupabaseBucketPlan, optional) — Supabase S3-compatible bucket configuration used to store call artifacts. - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `smallest-ai` (CreateSmallestAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `tavus` (CreateTavusCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `together-ai` (CreateTogetherAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `twilio` (CreateTwilioCredentialDTO) - `accountSid` (string, required) — Twilio Account SID associated with the credential. - `apiKey` (string, optional) — This is not returned in the API. - `apiSecret` (string, optional) — This is not returned in the API. - `authToken` (string, optional) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `vonage` (CreateVonageCredentialDTO) - `apiKey` (string, required) — Vonage API key associated with the credential. - `apiSecret` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `webhook` (CreateWebhookCredentialDTO) - `authenticationPlan` (UpdateWorkflowDtoCredentialsItemsDiscriminatorMappingWebhookAuthenticationPlan, required) — This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `custom-credential` (custom-credential) - `authenticationPlan` (CreateCustomCredentialDtoAuthenticationPlan, required) — This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. - `encryptionPlan` (PublicKeyEncryptionPlan, optional) — This is the encryption plan for encrypting sensitive data. Currently supports public-key encryption. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `xai` (CreateXAiCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `microsoft` (microsoft) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `region` (string, optional) — Azure region for the Speech resource. Defaults to `eastus` when omitted. MAI-Voice-2 is preview and region-limited. - `provider`: `neuphonic` (CreateNeuphonicCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `hume` (CreateHumeCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `mistral` (CreateMistralCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `speechmatics` (CreateSpeechmaticsCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `soniox` (soniox) - `apiKey` (string, required) — This is not returned in the API. - `apiUrl` (string, optional) — 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` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `google.calendar.oauth2-client` (CreateGoogleCalendarOAuth2ClientCredentialDTO) - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `google.calendar.oauth2-authorization` (CreateGoogleCalendarOAuth2AuthorizationCredentialDTO) - `authorizationId` (string, required) — The authorization ID for the OAuth2 authorization - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `google.sheets.oauth2-authorization` (CreateGoogleSheetsOAuth2AuthorizationCredentialDTO) - `authorizationId` (string, required) — The authorization ID for the OAuth2 authorization - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `slack.oauth2-authorization` (CreateSlackOAuth2AuthorizationCredentialDTO) - `authorizationId` (string, required) — The authorization ID for the OAuth2 authorization - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `ghl.oauth2-authorization` (CreateGoHighLevelMCPCredentialDTO) - `authenticationSession` (Oauth2AuthenticationSession, required) — This is the authentication session for the credential. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `inworld` (inworld) - `apiKey` (string, required) — This is the Inworld Basic (Base64) authentication token. This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `minimax` (minimax) - `apiKey` (string, required) — This is not returned in the API. - `groupId` (string, required) — This is the Minimax Group ID. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `wellsaid` (wellsaid) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `email` (email) - `email` (string, required) — The recipient email address for alerts - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `slack-webhook` (slack-webhook) - `webhookUrl` (string, required) — Slack incoming webhook URL. See https://api.slack.com/messaging/webhooks for setup instructions. This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. ### CreateAssistantDtoHooksItems ### CompliancePlan Controls HIPAA and PCI requirements, transcript security filtering, and recording-consent handling for assistant calls. - `hipaaEnabled` (boolean, optional) — 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` (boolean, optional) — When this is enabled, the user will be restricted to use PCI-compliant providers, and no logs or transcripts are stored. At the end of the call, you will receive an end-of-call-report message to store on your server. Defaults to false. - `securityFilterPlan` (SecurityFilterPlan, optional) — This is the security filter plan for the assistant. It allows filtering of transcripts for security threats before sending to LLM. - `recordingConsentPlan` (CompliancePlanRecordingConsentPlan, optional) — Controls how recording consent is requested before the assistant joins the call. ### CreateAssistantDtoMetadata This is for metadata you want to store on the assistant. ### BackgroundSpeechDenoisingPlan Controls smart and Fourier denoising applied to customer audio before transcription. - `smartDenoisingPlan` (SmartDenoisingPlan, optional) — Whether smart denoising using Krisp is enabled. - `fourierDenoisingPlan` (FourierDenoisingPlan, optional) — 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. ### ArtifactPlan Controls artifacts generated and stored for calls, including recordings, packet captures, logs, transcripts, structured outputs, scorecards, and custom storage paths. - `recordingEnabled` (boolean, optional) — This determines whether assistant's calls are recorded. Defaults to true. Usage: - If you don't want to record the calls, set this to false. - If you want to record the calls when `assistant.hipaaEnabled` (deprecated) or `assistant.compliancePlan.hipaaEnabled` explicity set this to true and make sure to provide S3 or GCP credentials on the Provider Credentials page in the Dashboard. You can find the recording at `call.artifact.recordingUrl` and `call.artifact.stereoRecordingUrl` after the call is ended. @default true - `recordingFormat` (enum, optional) — This determines the format of the recording. Defaults to `wav;l16`. @default 'wav;l16' - Allowed values: `wav;l16`, `mp3` - `recordingUseCustomStorageEnabled` (boolean, optional) — 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. If your organization has ZDR (zero data retention) or PCI enabled, recordings are never written to Vapi storage. In that case, false means "do not use my custom storage", so nothing is stored at all. @default true - `videoRecordingEnabled` (boolean, optional) — This determines whether the video is recorded during the call. Defaults to false. Only relevant for `webCall` type. You can find the video recording at `call.artifact.videoRecordingUrl` after the call is ended. @default false - `fullMessageHistoryEnabled` (boolean, optional) — This determines whether the artifact contains the full message history, even after handoff context engineering. Defaults to false. - `pcapEnabled` (boolean, optional) — This determines whether the SIP packet capture is enabled. Defaults to true. Only relevant for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`. You can find the packet capture at `call.artifact.pcapUrl` after the call is ended. @default true - `pcapS3PathPrefix` (string, optional) — This is the path where the SIP packet capture will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard. If credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it. Usage: - If you want to upload the packet capture to a specific path, set this to the path. Example: `/my-assistant-captures`. - If you want to upload the packet capture to the root of the bucket, set this to `/`. @default '/' - `pcapUseCustomStorageEnabled` (boolean, optional) — 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. If your organization has ZDR (zero data retention) or PCI enabled, packet captures are never written to Vapi storage. In that case, false means "do not use my custom storage", so nothing is stored at all. @default true - `loggingEnabled` (boolean, optional) — This determines whether the call logs are enabled. Defaults to true. @default true - `loggingUseCustomStorageEnabled` (boolean, optional) — 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. If your organization has ZDR (zero data retention) or PCI enabled, logs are never written to Vapi storage. In that case, false means "do not use my custom storage", so nothing is stored at all. @default true - `transcriptPlan` (TranscriptPlan, optional) — This is the plan for `call.artifact.transcript`. To disable, set `transcriptPlan.enabled` to false. - `recordingPath` (string, optional) — 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` (list of string, optional) — 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. - `structuredOutputs` (list of CreateStructuredOutputDTO, optional) — 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. - `scorecardIds` (list of string, optional) — 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. - `scorecards` (list of CreateScorecardDTO, optional) — 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. - `loggingPath` (string, optional) — This is the path where the call logs will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard. If credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it. Usage: - If you want to upload the call logs to a specific path, set this to the path. Example: `/my-assistant-logs`. - If you want to upload the call logs to the root of the bucket, set this to `/`. @default '/' ### StartSpeakingPlan Controls when the assistant begins speaking after customer speech, including the minimum wait, endpointing strategy, and custom endpointing rules. - `waitSeconds` (double, optional) — 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 - `smartEndpointingPlan` (StartSpeakingPlanSmartEndpointingPlan, optional) — 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. - `customEndpointingRules` (list of StartSpeakingPlanCustomEndpointingRulesItems, optional) — 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 [] - `transcriptionEndpointingPlan` (TranscriptionEndpointingPlan, optional) — 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`. - `smartEndpointingEnabled` (StartSpeakingPlanSmartEndpointingEnabled, optional, deprecated) ### StopSpeakingPlan Controls when the assistant stops speaking after a customer interruption, including word and voice thresholds, restart delay, and phrase exceptions. - `numWords` (double, optional) — This is the number of words that the customer has to say before the assistant will stop talking. Words like "stop", "actually", "no", etc. will always interrupt immediately regardless of this value. Words like "okay", "yeah", "right" will never interrupt. When set to 0, `voiceSeconds` is used in addition to the transcriptions to determine the customer has started speaking. Defaults to 0. @default 0 - `voiceSeconds` (double, optional) — This is the seconds customer has to speak before the assistant stops talking. This uses the VAD (Voice Activity Detection) spike to determine if the customer has started speaking. Considerations: - A lower value might be more responsive but could potentially pick up non-speech sounds. - A higher value reduces false positives but might slightly delay the detection of speech onset. This is only used if `numWords` is set to 0. Defaults to 0.2 @default 0.2 - `backoffSeconds` (double, optional) — This is the seconds to wait before the assistant will start talking again after being interrupted. Defaults to 1. @default 1 - `acknowledgementPhrases` (list of string, optional, 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"]) — These are the phrases that will never interrupt the assistant, even if numWords threshold is met. These are typically acknowledgement or backchanneling phrases. - `interruptionPhrases` (list of string, optional, default: ["stop","shut","up","enough","quiet","silence","but","dont","not","no","hold","wait","cut","pause","nope","nah","nevermind","never","bad","actually"]) — These are the phrases that will always interrupt the assistant immediately, regardless of numWords. These are typically phrases indicating disagreement or desire to stop. ### MonitorPlan Controls real-time listening and control for assistant calls, authentication requirements for monitor URLs, and attached monitors. - `listenEnabled` (boolean, optional) — This determines whether the assistant's calls allow live listening. Defaults to true. Fetch `call.monitor.listenUrl` to get the live listening URL. @default true - `listenAuthenticationEnabled` (boolean, optional) — This enables authentication on the `call.monitor.listenUrl`. If `listenAuthenticationEnabled` is `true`, the `call.monitor.listenUrl` will require an `Authorization: Bearer ` header. @default false - `controlEnabled` (boolean, optional) — This determines whether the assistant's calls allow live control. Defaults to true. Fetch `call.monitor.controlUrl` to get the live control URL. To use, send any control message via a POST request to `call.monitor.controlUrl`. Here are the types of controls supported: https://docs.vapi.ai/api-reference/messages/client-inbound-message @default true - `controlAuthenticationEnabled` (boolean, optional) — This enables authentication on the `call.monitor.controlUrl`. If `controlAuthenticationEnabled` is `true`, the `call.monitor.controlUrl` will require an `Authorization: Bearer ` header. @default false - `monitorIds` (list of string, optional) — IDs of the monitors attached to the assistant. Use this field for transient assistants or to update the monitors attached to an existing assistant. Defaults to an empty array. ### KeypadInputPlan Controls collection of dual-tone multi-frequency (DTMF) keypad input, including enablement, processing timeout, and delimiters. - `enabled` (boolean, optional) — This keeps track of whether the user has enabled keypad input. By default, it is off. @default false - `timeoutSeconds` (double, optional) — This is the time in seconds to wait before processing the input. If the input is not received within this time, the input will be ignored. If set to "off", the input will be processed when the user enters a delimiter or immediately if no delimiter is used. @default 2 - `delimiters` (enum, optional) — This is the delimiter(s) that will be used to process the input. Can be '#', '*', or an empty array. - Allowed values: `#`, `*`, `` ### AnalysisPlan Configuration for post-call analysis of summaries, structured-data extraction, success evaluation, and outcomes. - `minMessagesThreshold` (double, optional, deprecated) — The minimum number of messages required to run the analysis plan. If the number of messages is less than this, analysis will be skipped. @default 2 - `summaryPlan` (SummaryPlan, optional, deprecated) — This is the plan for generating the summary of the call. This outputs to `call.analysis.summary`. - `structuredDataPlan` (StructuredDataPlan, optional, deprecated) — This is the plan for generating the structured data from the call. This outputs to `call.analysis.structuredData`. - `structuredDataMultiPlan` (list of StructuredDataMultiPlan, optional, deprecated) — 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`. - `successEvaluationPlan` (SuccessEvaluationPlan, optional, deprecated) — This is the plan for generating the success evaluation of the call. This outputs to `call.analysis.successEvaluation`. - `outcomeIds` (list of string, optional, deprecated) — This is an array of outcome UUIDs to be calculated during analysis. The outcomes will be calculated and stored in `call.analysis.outcomes`. ### AssistantOverridesTranscriber These are the options for the assistant's transcriber. ### AssistantOverridesModel These are the options for the assistant's LLM. ### AssistantOverridesVoice These are the options for the assistant's voice. ### AssistantOverridesVoicemailDetection 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. ### AssistantOverridesBackgroundSound 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. ### AssistantOverridesTransportConfigurationsItems ### AssistantOverridesCredentialsItems - `provider`: `11labs` (CreateElevenLabsCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `apiUrl` (enum, optional, nullable) — ElevenLabs-only API environment for this key: the global endpoint or the EU data residency endpoint. In EU deployments, new credentials must explicitly use the EU data residency endpoint; existing credentials may omit this field on update to retain their saved endpoint. Outside EU deployments, Vapi detects an omitted endpoint automatically and null on update clears and re-detects the endpoint. - Allowed values: `https://api.elevenlabs.io`, `https://api.eu.residency.elevenlabs.io` - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `anthropic` (CreateAnthropicCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `anthropic-bedrock` (anthropic-bedrock) - `authenticationPlan` (UpdateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockAuthenticationPlan, required) — Authentication method - either direct IAM credentials or cross-account role assumption. - `region` (enum, required) — AWS region where Bedrock is configured. - Allowed values: `us-east-1`, `us-west-2`, `eu-central-1`, `eu-west-1`, `eu-west-3`, `ap-northeast-1`, `ap-southeast-2` - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `anyscale` (CreateAnyscaleCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `assembly-ai` (CreateAssemblyAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `azure-openai` (CreateAzureOpenAICredentialDTO) - `models` (enum, required) — Azure OpenAI models available through this credential. - Allowed values: `gpt-5.6-luna-2026-07-09`, `gpt-5.6-terra-2026-07-09`, `gpt-5.6-sol-2026-07-09`, `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`, `gpt-4o`, `gpt-4.1`, `gpt-5.4-mini-2026-03-17` - `openAIEndpoint` (string, required) — Endpoint URL for the Azure OpenAI resource. - `openAIKey` (string, required) — This is not returned in the API. - `region` (enum, required) — Azure region that hosts the OpenAI resource. - Allowed values: `australiaeast`, `canadaeast`, `canadacentral`, `centralus`, `eastus2`, `eastus`, `france`, `germanywestcentral`, `india`, `japaneast`, `japanwest`, `northcentralus`, `norway`, `polandcentral`, `southcentralus`, `spaincentral`, `swedencentral`, `switzerland`, `switzerlandnorth`, `switzerlandwest`, `uaenorth`, `uk`, `westeurope`, `westus`, `westus3` - `name` (string, optional) — This is the name of credential. This is just for your reference. - `ocpApimSubscriptionKey` (string, optional) — This is not returned in the API. - `provider`: `azure` (CreateAzureCredentialDTO) - `service` (enum, required, default: speech) — This is the service being used in Azure. - Allowed values: `speech`, `blob_storage` - `apiKey` (string, optional) — This is not returned in the API. - `bucketPlan` (AzureBlobStorageBucketPlan, optional) — This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage. - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `region` (enum, optional) — This is the region of the Azure resource. - Allowed values: `australiaeast`, `canadaeast`, `canadacentral`, `centralus`, `eastus2`, `eastus`, `france`, `germanywestcentral`, `india`, `japaneast`, `japanwest`, `northcentralus`, `norway`, `polandcentral`, `southcentralus`, `spaincentral`, `swedencentral`, `switzerland`, `switzerlandnorth`, `switzerlandwest`, `uaenorth`, `uk`, `westeurope`, `westus`, `westus3` - `provider`: `byo-sip-trunk` (CreateByoSipTrunkCredentialDTO) - `gateways` (list of SipTrunkGateway, required) — This is the list of SIP trunk's gateways. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `outboundAuthenticationPlan` (SipTrunkOutboundAuthenticationPlan, optional) — This can be used to configure the outbound authentication if required by the SIP trunk. - `outboundLeadingPlusEnabled` (boolean, optional) — 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 - `sipDiversionHeader` (string, optional) — 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. - `techPrefix` (string, optional) — This can be used to configure the tech prefix on outbound calls. This is an advanced property. - `provider`: `cartesia` (CreateCartesiaCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `apiUrl` (string, optional) — This can be used to point to an onprem Cartesia instance. Defaults to api.cartesia.ai. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `cerebras` (CreateCerebrasCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `cloudflare` (CreateCloudflareCredentialDTO) - `accountEmail` (string, optional) — Cloudflare Account Email. - `accountId` (string, optional) — Cloudflare Account Id. - `apiKey` (string, optional) — Cloudflare API Key / Token. - `bucketPlan` (CloudflareR2BucketPlan, optional) — This is the bucket plan that can be provided to store call artifacts in R2 - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `custom-llm` (CreateCustomLLMCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `authenticationPlan` (OAuth2AuthenticationPlan, optional) — This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `deepgram` (CreateDeepgramCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `apiUrl` (string, optional) — This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `deepinfra` (CreateDeepInfraCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `deep-seek` (CreateDeepSeekCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `gcp` (CreateGcpCredentialDTO) - `gcpKey` (GcpKey, required) — This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at [https://console.cloud.google.com/iam-admin/serviceaccounts/details/\<service-account-id\>/keys](https://console.cloud.google.com/iam-admin/serviceaccounts/details/\<service-account-id\>/keys). The schema is identical to the JSON that GCP outputs. - `bucketPlan` (BucketPlan, optional) — Bucket configuration used to store call artifacts in Google Cloud Storage. - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `region` (string, optional) — This is the region of the GCP resource. - `provider`: `gladia` (CreateGladiaCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `gohighlevel` (CreateGoHighLevelCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `google` (CreateGoogleCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `groq` (CreateGroqCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `inflection-ai` (CreateInflectionAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `langfuse` (CreateLangfuseCredentialDTO) - `apiKey` (string, required) — The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API. - `apiUrl` (string, required) — The host URL for Langfuse project. Eg: https://cloud.langfuse.com - `publicKey` (string, required) — The public key for Langfuse project. Eg: pk-lf-... - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `lmnt` (CreateLmntCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `make` (CreateMakeCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `region` (string, required) — Region of your application. For example: eu1, eu2, us1, us2 - `teamId` (string, required) — Team ID - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `openai` (CreateOpenAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `openrouter` (CreateOpenRouterCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `perplexity-ai` (CreatePerplexityAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `playht` (CreatePlayHTCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `userId` (string, required) — PlayHT user identifier associated with the API key. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `rime-ai` (CreateRimeAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `runpod` (CreateRunpodCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `s3` (CreateS3CredentialDTO) - `awsAccessKeyId` (string, required) — AWS access key ID. - `awsSecretAccessKey` (string, required) — AWS access key secret. This is not returned in the API. - `region` (string, required) — AWS region in which the S3 bucket is located. - `s3BucketName` (string, required) — AWS S3 bucket name. - `s3PathPrefix` (string, required) — The path prefix for the uploaded recording. Ex. "recordings/" - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `s3-compatible` (s3-compatible) - `bucketPlan` (S3CompatibleBucketPlan, required) - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `supabase` (CreateSupabaseCredentialDTO) - `bucketPlan` (SupabaseBucketPlan, optional) — Supabase S3-compatible bucket configuration used to store call artifacts. - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `smallest-ai` (CreateSmallestAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `tavus` (CreateTavusCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `together-ai` (CreateTogetherAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `twilio` (CreateTwilioCredentialDTO) - `accountSid` (string, required) — Twilio Account SID associated with the credential. - `apiKey` (string, optional) — This is not returned in the API. - `apiSecret` (string, optional) — This is not returned in the API. - `authToken` (string, optional) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `vonage` (CreateVonageCredentialDTO) - `apiKey` (string, required) — Vonage API key associated with the credential. - `apiSecret` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `webhook` (CreateWebhookCredentialDTO) - `authenticationPlan` (UpdateWorkflowDtoCredentialsItemsDiscriminatorMappingWebhookAuthenticationPlan, required) — This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `custom-credential` (custom-credential) - `authenticationPlan` (CreateCustomCredentialDtoAuthenticationPlan, required) — This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. - `encryptionPlan` (PublicKeyEncryptionPlan, optional) — This is the encryption plan for encrypting sensitive data. Currently supports public-key encryption. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `xai` (CreateXAiCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `microsoft` (microsoft) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `region` (string, optional) — Azure region for the Speech resource. Defaults to `eastus` when omitted. MAI-Voice-2 is preview and region-limited. - `provider`: `neuphonic` (CreateNeuphonicCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `hume` (CreateHumeCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `mistral` (CreateMistralCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `speechmatics` (CreateSpeechmaticsCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `soniox` (soniox) - `apiKey` (string, required) — This is not returned in the API. - `apiUrl` (string, optional) — 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` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `google.calendar.oauth2-client` (CreateGoogleCalendarOAuth2ClientCredentialDTO) - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `google.calendar.oauth2-authorization` (CreateGoogleCalendarOAuth2AuthorizationCredentialDTO) - `authorizationId` (string, required) — The authorization ID for the OAuth2 authorization - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `google.sheets.oauth2-authorization` (CreateGoogleSheetsOAuth2AuthorizationCredentialDTO) - `authorizationId` (string, required) — The authorization ID for the OAuth2 authorization - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `slack.oauth2-authorization` (CreateSlackOAuth2AuthorizationCredentialDTO) - `authorizationId` (string, required) — The authorization ID for the OAuth2 authorization - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `ghl.oauth2-authorization` (CreateGoHighLevelMCPCredentialDTO) - `authenticationSession` (Oauth2AuthenticationSession, required) — This is the authentication session for the credential. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `inworld` (inworld) - `apiKey` (string, required) — This is the Inworld Basic (Base64) authentication token. This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `minimax` (minimax) - `apiKey` (string, required) — This is not returned in the API. - `groupId` (string, required) — This is the Minimax Group ID. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `wellsaid` (wellsaid) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `email` (email) - `email` (string, required) — The recipient email address for alerts - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `slack-webhook` (slack-webhook) - `webhookUrl` (string, required) — Slack incoming webhook URL. See https://api.slack.com/messaging/webhooks for setup instructions. This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. ### AssistantOverridesHooksItems ### AssistantOverridesToolsAppendItems ### AssistantOverridesVariableValues These are values that will be used to replace the template variables in the assistant messages and other text-based fields. This uses LiquidJS syntax. [https://liquidjs.com/tutorials/intro-to-liquid.html](https://liquidjs.com/tutorials/intro-to-liquid.html) So for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`. `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will be replaced with the current date and time in New York. Some VAPI reserved defaults: * *customer* - the customer object ### AssistantOverridesMetadata This is for metadata you want to store on the assistant. ### SquadMemberDTO An assistant member of a squad. Reference a saved assistant or provide a transient assistant, then configure member-specific overrides and destinations for transfers. - `assistantVersion` (string, optional, nullable) — This is the assistant version (e.g. `v3`) to pin for this squad member. When set, the call uses the snapshot from `assistant_version` (by `(assistantId, version)`) instead of the latest. Valid only with `assistantId`; rejected with inline `assistant`. Omit to follow the latest version. - `assistantDestinations` (list of SquadMemberDtoAssistantDestinationsItems, optional) — Assistants this squad member can route the conversation to through a transfer or handoff. - `assistantId` (string, optional, nullable) — This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead. - `assistant` (CreateAssistantDTO, optional) — This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead. - `assistantOverrides` (AssistantOverrides, optional) — This can be used to override the assistant's settings and provide values for it's template variables. ### CustomMessageContentsItems ### SummaryPlanMessagesItems ### TransferFallbackPlanMessage This is the message the assistant will deliver to the customer if the transfer fails. ### AssemblyAITranscriber Configuration for transcribing speech during assistant conversations with AssemblyAI, including language, streaming model, endpointing, vocabulary, and fallback settings. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `assembly-ai` - `language` (enum, optional) — This is the language that will be set for the transcription. - Allowed values: `multi`, `en` - `confidenceThreshold` (double, optional) — Transcripts below this confidence threshold will be discarded. @default 0.4 - `formatTurns` (boolean, optional) — This enables formatting of transcripts. @default true - `endOfTurnConfidenceThreshold` (double, optional) — This is the end of turn confidence threshold. The minimum confidence that the end of turn is detected. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @min 0 @max 1 @default 0.7 - `minEndOfTurnSilenceWhenConfident` (double, optional) — This is the minimum end of turn silence when confident in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 160 - `maxTurnSilence` (double, optional) — This is the maximum turn silence time in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 400 - `vadAssistedEndpointingEnabled` (boolean, optional) — 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 - `mode` (enum, optional) — This is the transcription mode used by the Universal Pro speech models. Only applies to `universal-3-5-pro` and `universal-3-6-pro`. @default 'balanced' - Allowed values: `max_accuracy`, `min_latency`, `balanced` - `prompt` (string, optional) — This is a prompt that provides additional context to the transcription model. Only applies to `universal-3-5-pro` and `universal-3-6-pro`. - `agentContext` (string, optional) — This is context about the voice agent that guides the transcription model. Only applies to `universal-3-5-pro` and `universal-3-6-pro`. - `agentContextAutoUpdateEnabled` (boolean, optional, default: false) — When true, the text the assistant just spoke is sent to AssemblyAI as `agent_context` after every assistant turn, replacing the previous value, so the user's reply is transcribed in the context of the question it answers. `agentContext` still seeds the first turn. Text longer than 1750 characters keeps its last 1750 characters. Turns the user interrupted are not sent when the interruption is detected by voice activity (the default, `stopSpeakingPlan.numWords: 0`). Only applies to `universal-3-5-pro` and `universal-3-6-pro`. @default false - `languageCodes` (list of enum, optional) — These are language codes used to steer automatic language detection. Only applies to `universal-3-5-pro` and `universal-3-6-pro`. `ur`, `ru`, `ko`, `ca`, `gl`, `ro`, `et`, `fa`, `yue`, `af`, `mr`, `zu`, `xh` and `nn` were added with `universal-3-6-pro`. - Allowed values: `en`, `es`, `fr`, `de`, `it`, `pt`, `tr`, `nl`, `sv`, `no`, `da`, `fi`, `hi`, `vi`, `ar`, `he`, `ja`, `zh`, `ur`, `ru`, `ko`, `ca`, `gl`, `ro`, `et`, `fa`, `yue`, `af`, `mr`, `zu`, `xh`, `nn` - `speechModel` (enum, optional) — This is the speech model used for the streaming session. Keyterms prompting is supported on universal-streaming-english, universal-3-5-pro and universal-3-6-pro. universal-3-6-pro is AssemblyAI's newest and most accurate voice-agent model. @default 'universal-streaming-english' - Allowed values: `universal-streaming-english`, `universal-streaming-multilingual`, `universal-3-5-pro`, `universal-3-6-pro` - `realtimeUrl` (string, optional) — The WebSocket URL that the transcriber connects to. - `wordBoost` (list of string, optional) — Add up to 2500 characters of custom vocabulary. - `keytermsPrompt` (list of string, optional) — 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 on universal-streaming-english and is included at no extra cost on the Universal Pro models (universal-3-5-pro, universal-3-6-pro). - `endUtteranceSilenceThreshold` (double, optional) — The duration of the end utterance silence threshold in milliseconds. - `disablePartialTranscripts` (boolean, optional) — Disable partial transcripts. Set to `true` to not receive partial transcripts. Defaults to `false`. - `fallbackPlan` (FallbackTranscriberPlan, optional) — This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. - `wordFinalizationMaxWaitTime` (double, optional, deprecated) ### AzureSpeechTranscriber Configuration for transcribing speech during assistant conversations with Azure Speech, including language, segmentation, and fallback settings. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `azure` - `language` (enum, optional) — 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 - Allowed values: `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` (enum, optional) — Controls how phrase boundaries are detected, enabling either simple time/silence heuristics or more advanced semantic segmentation. - Allowed values: `Default`, `Time`, `Semantic` - `segmentationSilenceTimeoutMs` (double, optional) — Duration of detected silence after which the service finalizes a phrase. Configure to adjust sensitivity to pauses in speech. - `segmentationMaximumTimeMs` (double, optional) — Maximum duration a segment can reach before being cut off when using time-based segmentation. - `fallbackPlan` (FallbackTranscriberPlan, optional) — This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. ### CustomTranscriber Configuration for sending conversation audio to a custom WebSocket transcription server. - `provider` (enum, required) — This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported. - Allowed values: `custom-transcriber` - `server` (Server, required) — This is where the transcription request will be sent. Usage: 1. Vapi will initiate a websocket connection with `server.url`. 2. Vapi will send an initial text frame with the sample rate. Format: ``` { "type": "start", "encoding": "linear16", // 16-bit raw PCM format "container": "raw", "sampleRate": {{sampleRate}}, "channels": 2 // customer is channel 0, assistant is channel 1 } ``` 3. Vapi will send the audio data in 16-bit raw PCM format as binary frames. 4. You can read the messages something like this: ``` ws.on('message', (data, isBinary) => { if (isBinary) { pcmBuffer = Buffer.concat([pcmBuffer, data]); console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`); } else { console.log('Received message:', JSON.parse(data.toString())); } }); ``` 5. You will respond with transcriptions as you have them. Format: ``` { "type": "transcriber-response", "transcription": "Hello, world!", "channel": "customer" | "assistant" } ``` - `fallbackPlan` (FallbackTranscriberPlan, optional) — This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. ### DeepgramTranscriber Configuration for transcribing speech during assistant conversations with Deepgram, including model, language, formatting, endpointing, vocabulary, and fallback settings. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `deepgram` - `model` (enum, optional) — 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 - Allowed values: `flux-general-en`, `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` - `language` (enum, optional) — 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 - Allowed values: `bg`, `ca`, `cs`, `da`, `da-DK`, `de`, `de-CH`, `el`, `en`, `en-AU`, `en-GB`, `en-IN`, `en-NZ`, `en-US`, `es`, `es-419`, `es-LATAM`, `et`, `fi`, `fr`, `fr-CA`, `hi`, `hi-Latn`, `hu`, `id`, `it`, `ja`, `ko`, `ko-KR`, `lt`, `lv`, `ms`, `multi`, `nl`, `nl-BE`, `no`, `pl`, `pt`, `pt-BR`, `ro`, `ru`, `sk`, `sv`, `sv-SE`, `ta`, `taq`, `th`, `th-TH`, `tr`, `uk`, `vi`, `zh`, `zh-CN`, `zh-Hans`, `zh-Hant`, `zh-TW` - `smartFormat` (boolean, optional) — This will be use smart format option provided by Deepgram. It's default disabled because it can sometimes format numbers as times but it's getting better. - `mipOptOut` (boolean, optional, default: false) — 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 only applies to your own Deepgram API key. Requests on Vapi's key always opt out, whatever this is set to. @default false - `numerals` (boolean, optional) — 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 - `profanityFilter` (boolean, optional) — If set to true, Deepgram will replace profanity in transcripts with surrounding asterisks, e.g. "f***". @default false - `redaction` (enum, optional) — 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. - Allowed values: `pci`, `pii`, `phi`, `numbers` - `confidenceThreshold` (double, optional) — Transcripts below this confidence threshold will be discarded. @default 0.4 - `eotThreshold` (double, optional) — End-of-turn confidence required to finish a turn. Only used with Flux models. @default 0.7 - `eotTimeoutMs` (double, optional) — A turn will be finished when this much time has passed after speech, regardless of EOT confidence. Only used with Flux models. @default 5000 - `languages` (list of string, optional) — 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`. - `keywords` (list of string, optional) — These keywords are passed to the transcription model to help it pick up use-case specific words. Anything that may not be a common word, like your company name, should be added here. - `keyterm` (list of string, optional) — Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%. - `endpointing` (double, optional) — This is the timeout after which Deepgram will send transcription on user silence. You can read in-depth documentation here: https://developers.deepgram.com/docs/endpointing. Here are the most important bits: - Defaults to 10. This is recommended for most use cases to optimize for latency. - 10 can cause some missing transcriptions since because of the shorter context. This mostly happens for one-word utterances. For those uses cases, it's recommended to try 300. It will add a bit of latency but the quality and reliability of the experience will be better. - If neither 10 nor 300 work, contact support@vapi.ai and we'll find another solution. @default 10 - `fallbackPlan` (FallbackTranscriberPlan, optional) — This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. ### ElevenLabsTranscriber Configuration for transcribing speech during assistant conversations with ElevenLabs, including model, language, speech thresholds, and fallback settings. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `11labs` - `model` (ElevenLabsTranscriberModel, optional) — This is the model that will be used for the transcription. - `language` (enum, optional) — This is the language that will be used for the transcription. - Allowed values: `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` (double, optional) — This is the number of seconds of silence before VAD commits (0.3-3.0). - `confidenceThreshold` (double, optional) — This is the VAD sensitivity (0.1-0.9, lower indicates more sensitive). - `minSpeechDurationMs` (double, optional) — This is the minimum speech duration for VAD (50-2000ms). - `minSilenceDurationMs` (double, optional) — This is the minimum silence duration for VAD (50-2000ms). - `fallbackPlan` (FallbackTranscriberPlan, optional) — This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. ### GladiaTranscriber Configuration for transcribing speech during assistant conversations with Gladia, including language behavior, audio processing, endpointing, vocabulary, region, and fallback settings. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `gladia` - `model` (GladiaTranscriberModel, optional) — This is the Gladia model that will be used. Default is 'fast' - `languageBehaviour` (GladiaTranscriberLanguageBehaviour, optional) — Defines how the transcription model detects the audio language. Default value is 'automatic single language'. - `language` (enum, optional) — Defines the language to use for the transcription. Required when languageBehaviour is 'manual'. - Allowed values: `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` (list of enum, optional) — Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'. - Allowed values: `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` (string, optional) — Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words, technical terms, names, etc. If empty, this argument is ignored. ⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit. - `prosody` (boolean, optional) — If prosody is true, you will get a transcription that can contain prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)… Default value is false. - `audioEnhancer` (boolean, optional) — If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false. - `confidenceThreshold` (double, optional) — Transcripts below this confidence threshold will be discarded. @default 0.4 - `endpointing` (double, optional) — Endpointing time in seconds - time to wait before considering speech ended - `speechThreshold` (double, optional) — Speech threshold - sensitivity configuration for speech detection (0.0 to 1.0) - `customVocabularyEnabled` (boolean, optional) — Enable custom vocabulary for improved accuracy - `customVocabularyConfig` (GladiaCustomVocabularyConfigDTO, optional) — Custom vocabulary configuration - `region` (enum, optional) — Region for processing audio (us-west or eu-west) - Allowed values: `us-west`, `eu-west` - `receivePartialTranscripts` (boolean, optional) — Enable partial transcripts for low-latency streaming transcription - `fallbackPlan` (FallbackTranscriberPlan, optional) — This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. ### GoogleTranscriber Configuration for transcribing speech during assistant conversations with Google, including model, language, and fallback settings. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `google` - `model` (enum, optional) — This is the model that will be used for the transcription. - Allowed values: `gemini-3.5-flash`, `gemini-3.1-flash-lite`, `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` (enum, optional) — This is the language that will be set for the transcription. - Allowed values: `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` (FallbackTranscriberPlan, optional) — This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. ### SpeechmaticsTranscriber Configuration for transcribing speech during assistant conversations with Speechmatics, including language, region, diarization, vocabulary, endpointing, formatting, and fallback settings. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `speechmatics` - `customVocabulary` (list of SpeechmaticsCustomVocabularyItem, required) — Words and phrases that Speechmatics should recognize more accurately, with optional phonetic alternatives. - `model` (enum, optional) — This is the model that will be used for the transcription. - Allowed values: `default` - `language` (enum, optional) — Language used for transcription. Set to `auto` to detect the language automatically. - Allowed values: `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` (enum, optional, default: enhanced) — This is the operating point for the transcription. Choose between `standard` for faster turnaround with strong accuracy or `enhanced` for highest accuracy when precision is critical. @default 'enhanced' - Allowed values: `standard`, `enhanced` - `region` (enum, optional, default: eu) — 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' - Allowed values: `eu`, `us` - `enableDiarization` (boolean, optional, default: false) — This enables speaker diarization, which identifies and separates speakers in the transcription. Essential for multi-speaker conversations and conference calls. @default false - `maxDelay` (double, optional, default: 3000) — This sets the maximum delay in milliseconds for partial transcripts. Balances latency and accuracy. @default 3000 - `numeralStyle` (enum, optional, default: written) — This controls how numbers, dates, currencies, and other entities are formatted in the transcription output. @default 'written' - Allowed values: `written`, `spoken` - `endOfTurnSensitivity` (double, optional, default: 0.5) — This is the sensitivity level for end-of-turn detection, which determines when a speaker has finished talking. Higher values are more sensitive. @default 0.5 - `removeDisfluencies` (boolean, optional, default: false) — 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 - `minimumSpeechDuration` (double, optional, default: 0) — This is the minimum duration in seconds for speech segments. Shorter segments will be filtered out. Helps remove noise and improve accuracy. @default 0.0 - `fallbackPlan` (FallbackTranscriberPlan, optional) — This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. ### TalkscriberTranscriber Configuration for transcribing speech during assistant conversations with Talkscriber, including model, language, and fallback settings. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `talkscriber` - `model` (enum, optional) — This is the model that will be used for the transcription. - Allowed values: `whisper` - `language` (enum, optional) — 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 - Allowed values: `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` (FallbackTranscriberPlan, optional) — This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. ### OpenAITranscriber Configuration for transcribing speech during assistant conversations with OpenAI, including model, language, and fallback settings. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `openai` - `model` (enum, required) — This is the model that will be used for the transcription. - Allowed values: `gpt-4o-transcribe`, `gpt-4o-mini-transcribe` - `language` (enum, optional) — This is the language that will be set for the transcription. - Allowed values: `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` (FallbackTranscriberPlan, optional) — This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. ### CartesiaTranscriber Configuration for transcribing speech during assistant conversations with Cartesia, including model, language, and fallback settings. - `provider` (enum, required) — Selects Cartesia for speech-to-text transcription. - Allowed values: `cartesia` - `model` (enum, optional) — The Cartesia speech-to-text model used for transcription. - Allowed values: `ink-whisper`, `ink-2` - `language` (enum, optional) — The language code used for transcription. - Allowed values: `aa`, `ab`, `ae`, `af`, `ak`, `am`, `an`, `ar`, `as`, `av`, `ay`, `az`, `ba`, `be`, `bg`, `bh`, `bi`, `bm`, `bn`, `bo`, `br`, `bs`, `ca`, `ce`, `ch`, `co`, `cr`, `cs`, `cu`, `cv`, `cy`, `da`, `de`, `dv`, `dz`, `ee`, `el`, `en`, `eo`, `es`, `et`, `eu`, `fa`, `ff`, `fi`, `fj`, `fo`, `fr`, `fy`, `ga`, `gd`, `gl`, `gn`, `gu`, `gv`, `ha`, `he`, `hi`, `ho`, `hr`, `ht`, `hu`, `hy`, `hz`, `ia`, `id`, `ie`, `ig`, `ii`, `ik`, `io`, `is`, `it`, `iu`, `ja`, `jv`, `ka`, `kg`, `ki`, `kj`, `kk`, `kl`, `km`, `kn`, `ko`, `kr`, `ks`, `ku`, `kv`, `kw`, `ky`, `la`, `lb`, `lg`, `li`, `ln`, `lo`, `lt`, `lu`, `lv`, `mg`, `mh`, `mi`, `mk`, `ml`, `mn`, `mr`, `ms`, `mt`, `my`, `na`, `nb`, `nd`, `ne`, `ng`, `nl`, `nn`, `no`, `nr`, `nv`, `ny`, `oc`, `oj`, `om`, `or`, `os`, `pa`, `pi`, `pl`, `ps`, `pt`, `qu`, `rm`, `rn`, `ro`, `ru`, `rw`, `sa`, `sc`, `sd`, `se`, `sg`, `si`, `sk`, `sl`, `sm`, `sn`, `so`, `sq`, `sr`, `ss`, `st`, `su`, `sv`, `sw`, `ta`, `te`, `tg`, `th`, `ti`, `tk`, `tl`, `tn`, `to`, `tr`, `ts`, `tt`, `tw`, `ty`, `ug`, `uk`, `ur`, `uz`, `ve`, `vi`, `vo`, `wa`, `wo`, `xh`, `yi`, `yue`, `yo`, `za`, `zh`, `zu` - `fallbackPlan` (FallbackTranscriberPlan, optional) — This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. ### SonioxTranscriber Configuration for transcribing speech during assistant conversations with Soniox, including model, language detection, endpointing, vocabulary, and fallback settings. - `provider` (enum, required) — Selects Soniox for speech-to-text transcription. - Allowed values: `soniox` - `model` (enum, optional) — The Soniox model to use for transcription. - Allowed values: `stt-rt-v4`, `stt-rt-v5` - `language` (enum, optional) — 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. - Allowed values: `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` - `languages` (list of enum, optional) — 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. - Allowed values: `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` (boolean, optional) — 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` (double, optional) — 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. - `endpointSensitivity` (double, optional) — How likely Soniox is to emit an endpoint (end the caller turn). Higher values make endpoints more likely for faster turn-taking; negative values make them less likely, which helps when callers pause mid-sentence (e.g. reading numbers group by group). Range: -1.0 to 1.0. Default: 0.3 (the platform low-latency voice profile; Soniox's own default is 0.0). Supported by stt-rt-v5; omitted from the Soniox request on explicit stt-rt-v4. Soniox recommends tuning endpointLatencyAdjustmentLevel first, and advises against negative sensitivity while the level is above 0 (the settings work against each other). - `endpointLatencyAdjustmentLevel` (double, optional) — How aggressively Soniox reduces endpoint latency. 0 is Soniox's default semantic endpointing; 3 is the most aggressive. Higher levels return endpoints sooner but may split speech into more segments and slightly reduce accuracy. Integer. Range: 0-3. Default: 2 (the platform low-latency voice profile; Soniox's own default is 0). Supported by stt-rt-v5; omitted from the Soniox request on explicit stt-rt-v4. - `customVocabulary` (list of string, optional) — Custom vocabulary terms to boost recognition accuracy. Useful for brand names, product names, and domain-specific terminology. Maps to Soniox context.terms. - `contextGeneral` (list of SonioxContextGeneralItem, optional) — 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. - `confidenceThreshold` (double, optional) — Transcripts below this confidence are discarded. For a discarded final, an `assistant.transcriber.endpointedSpeechLowConfidence` hook whose range covers the confidence runs (by default `[threshold - 0.2, threshold)`); if none does, the assistant does not respond to that utterance. Confidence is the mean of the per-token scores, and a transcript with an unscored token counts as 1. When unset, nothing is discarded by this setting. - `fallbackPlan` (FallbackTranscriberPlan, optional) — This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. ### XaiTranscriber - `provider` (enum, required) - Allowed values: `xai` - `model` (enum, optional) — The xAI speech-to-text model to use. xAI currently exposes a single STT model — placeholder for future model selection. - Allowed values: `default` - `language` (enum, optional) — 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. - Allowed values: `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` (FallbackTranscriberPlan, optional) — This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. ### VapiTranscriber - `provider` (enum, required) - Allowed values: `vapi` - `version` (enum, optional) — This is the version of the Vapi transcriber. Vapi manages the underlying model and routing. When omitted, the latest version is used. Managed version params are additive-only and `'latest'` is an auto-update channel — see the param-evolution INVARIANT in `vapiManaged/types.ts`. - Allowed values: `latest`, `1` - `language` (enum, optional) — This is the language for transcription as an ISO 639-1 code (e.g. `en`). Selecting a language locks transcription to it. For multiple languages, use `languages` instead. When neither `language` nor `languages` is set, the transcriber auto-detects the spoken language. - Allowed values: `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` - `languages` (enum, optional) — These are the languages for transcription as ISO 639-1 codes. Set one or more codes to restrict and bias recognition to those languages. An empty array `[]` (or omitting both this and `language`) enables auto-detection of the spoken language. - Allowed values: `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` - `keywords` (list of string, optional) — These are custom keywords/vocabulary to boost recognition of use-case specific words (company names, product names, jargon). - `turnTaking` (enum, optional) — This is the turn-taking mode. `intelligent` uses the underlying model's native end-of-turn detection; `manual` ignores it and waits a fixed end-of-turn delay. Defaults to `intelligent`. - Allowed values: `intelligent`, `manual` ### AnthropicModel Configuration for generating assistant responses with Anthropic, including model, prompts, tools, knowledge-base access, reasoning, and generation settings. - `model` (enum, required) — The specific Anthropic/Claude model that will be used. - Allowed values: `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-sonnet-5`, `claude-haiku-4-5-20251001` - `provider` (enum, required) — The provider identifier for Anthropic. - Allowed values: `anthropic` - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of AnthropicModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (AnthropicModelKnowledgeBase, optional) — These are the options for the knowledge base. - `thinking` (AnthropicThinkingConfig, optional) — 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. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — 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 ### AnthropicBedrockModel Configuration for generating assistant responses with Anthropic models through Amazon Bedrock, including model, prompts, tools, knowledge-base access, reasoning, and generation settings. - `provider` (enum, required) — The provider identifier for Anthropic via AWS Bedrock. - Allowed values: `anthropic-bedrock` - `model` (enum, required) — The specific Anthropic/Claude model that will be used via Bedrock. - Allowed values: `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`, `global.anthropic.claude-haiku-4-5-20251001-v1:0` - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of AnthropicBedrockModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (AnthropicBedrockModelKnowledgeBase, optional) — These are the options for the knowledge base. - `fallbackModels` (enum, optional) — At most one same-provider Bedrock fallback model, tried if the primary fails. Cannot be combined with thinking in this release. Resolution uses the call's Bedrock credential region (or ANTHROPIC_BEDROCK_AWS_REGION). Names with no inference profile in that region are skipped and warned, never remapped to US or global. On Vapi EU, fallback names without an EU inference profile are rejected at write time. - Allowed values: `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`, `global.anthropic.claude-haiku-4-5-20251001-v1:0` - `thinking` (AnthropicThinkingConfig, optional) — 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. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0 ### AnyscaleModel Configuration for generating assistant responses with Anyscale, including model, prompts, tools, knowledge-base access, and generation settings. - `provider` (enum, required) — Routes assistant response generation through Anyscale. - Allowed values: `anyscale` - `model` (string, required) — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of AnyscaleModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (AnyscaleModelKnowledgeBase, optional) — These are the options for the knowledge base. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0 ### CerebrasModel Configuration for generating assistant responses with Cerebras, including model, prompts, tools, knowledge-base access, and generation settings. - `model` (enum, required) — The Cerebras model used to generate assistant responses. `llama-3.3-70b` is deprecated and no longer available in the Dashboard. - Allowed values: `llama3.1-8b` - `provider` (enum, required) — Routes assistant response generation through Cerebras. - Allowed values: `cerebras` - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of CerebrasModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (CerebrasModelKnowledgeBase, optional) — These are the options for the knowledge base. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0 ### CustomLLMModel Configuration for generating assistant responses through a custom language model endpoint, including server URL, headers, metadata, prompts, tools, and generation settings. - `provider` (enum, required) — This is the provider that will be used for the model. Any service, including your own server, that is compatible with the OpenAI API can be used. - Allowed values: `custom-llm` - `url` (string, required) — These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1 - `model` (string, required) — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of CustomLlmModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (CustomLlmModelKnowledgeBase, optional) — These are the options for the knowledge base. - `metadataSendMode` (enum, optional) — 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`. - Allowed values: `off`, `variable`, `destructured` - `headers` (map from string to string, optional) — 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). - `wordLevelConfidenceEnabled` (boolean, optional) — 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` (double, optional) — This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0 ### DeepInfraModel Configuration for generating assistant responses with DeepInfra, including model, prompts, tools, knowledge-base access, and generation settings. - `provider` (enum, required) — Routes assistant response generation through DeepInfra. - Allowed values: `deepinfra` - `model` (string, required) — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of DeepInfraModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (DeepInfraModelKnowledgeBase, optional) — These are the options for the knowledge base. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0 ### DeepSeekModel Configuration for generating assistant responses with DeepSeek, including model, prompts, tools, knowledge-base access, and generation settings. - `model` (enum, required) — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b - Allowed values: `deepseek-chat`, `deepseek-reasoner`, `deepseek-flash`, `deepseek-flash-thinking` - `provider` (enum, required) — Routes assistant response generation through DeepSeek. - Allowed values: `deep-seek` - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of DeepSeekModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (DeepSeekModelKnowledgeBase, optional) — These are the options for the knowledge base. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0 ### GoogleModel Configuration for generating assistant responses with Google, including model, prompts, tools, knowledge-base access, realtime settings, and generation settings. - `model` (enum, required) — This is the Google model that will be used. - Allowed values: `gemini-3.5-flash`, `gemini-3.1-flash-lite`, `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` (enum, required) — Routes assistant response generation through Google. - Allowed values: `google` - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of GoogleModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (GoogleModelKnowledgeBase, optional) — These are the options for the knowledge base. - `realtimeConfig` (GoogleRealtimeConfig, optional) — 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. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0 ### GroqModel Configuration for generating assistant responses with Groq, including model, prompts, tools, knowledge-base access, and generation settings. - `model` (enum, required) — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b - Allowed values: `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-scout-17b-16e-instruct`, `mistral-saba-24b`, `compound-beta`, `compound-beta-mini` - `provider` (enum, required) — Routes assistant response generation through Groq. - Allowed values: `groq` - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of GroqModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (GroqModelKnowledgeBase, optional) — These are the options for the knowledge base. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0 ### InflectionAIModel Configuration for generating assistant responses with Inflection AI, including model, prompts, tools, knowledge-base access, and generation settings. - `model` (enum, required) — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b - Allowed values: `inflection_3_pi` - `provider` (enum, required) — Routes assistant response generation through Inflection AI. - Allowed values: `inflection-ai` - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of InflectionAiModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (InflectionAiModelKnowledgeBase, optional) — These are the options for the knowledge base. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — 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 ### MinimaxLLMModel Configuration for generating assistant responses with MiniMax, including model, prompts, tools, knowledge-base access, and generation settings. - `provider` (enum, required) — Routes assistant response generation through MiniMax. - Allowed values: `minimax` - `model` (enum, required) — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b - Allowed values: `MiniMax-M2.7` - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of MinimaxLlmModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (MinimaxLlmModelKnowledgeBase, optional) — These are the options for the knowledge base. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0 ### OpenAIModel Configuration for generating assistant responses with OpenAI, including model selection, fallback models, prompts, tools, prompt caching, and generation settings. - `provider` (enum, required) — This is the provider that will be used for the model. - Allowed values: `openai` - `model` (enum, required) — This is the OpenAI model that will be used. For GPT-Live configuration and supported settings, see https://docs.vapi.ai/gpt-live/overview. 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 - Allowed values: `gpt-6-luna`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-5.5`, `chat-latest`, `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-realtime-2`, `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-5.6-luna:westus3`, `gpt-5.6-terra:westus3`, `gpt-5.6-sol:westus3`, `gpt-5.4:eastus2`, `gpt-5.4:swedencentral`, `gpt-5.4-mini:eastus2`, `gpt-5.4-mini:swedencentral`, `gpt-5.4-nano:eastus2`, `gpt-5.4-nano:swedencentral`, `gpt-5.2:eastus2`, `gpt-5.2:swedencentral`, `gpt-5.1:eastus2`, `gpt-5.1:swedencentral`, `gpt-5:eastus2`, `gpt-5:swedencentral`, `gpt-5:canadaeast`, `gpt-5:eastus`, `gpt-5:westeurope`, `gpt-5:germanywestcentral`, `gpt-5:polandcentral`, `gpt-5:spaincentral`, `gpt-5-mini:eastus2`, `gpt-5-mini:swedencentral`, `gpt-5-mini:westeurope`, `gpt-5-mini:germanywestcentral`, `gpt-5-mini:polandcentral`, `gpt-5-mini:spaincentral`, `gpt-5-nano:eastus2`, `gpt-5-nano:swedencentral`, `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`, `gpt-4.1:australiaeast`, `gpt-4o:australiaeast`, `gpt-5.4-mini:australiaeast`, `gpt-live-1` - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of OpenAiModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (OpenAiModelKnowledgeBase, optional) — These are the options for the knowledge base. - `speaker` (OpenAISpeaker, optional) — Configuration for the GPT-Live speaker. - `reasoner` (OpenAIReasoner, optional) — Configuration for the reasoner supporting the GPT-Live speaker. - `fallbackModels` (list of enum, optional) — 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. - Allowed values: `gpt-6-luna`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-5.5`, `chat-latest`, `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-realtime-2`, `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-5.6-luna:westus3`, `gpt-5.6-terra:westus3`, `gpt-5.6-sol:westus3`, `gpt-5.4:eastus2`, `gpt-5.4:swedencentral`, `gpt-5.4-mini:eastus2`, `gpt-5.4-mini:swedencentral`, `gpt-5.4-nano:eastus2`, `gpt-5.4-nano:swedencentral`, `gpt-5.2:eastus2`, `gpt-5.2:swedencentral`, `gpt-5.1:eastus2`, `gpt-5.1:swedencentral`, `gpt-5:eastus2`, `gpt-5:swedencentral`, `gpt-5:canadaeast`, `gpt-5:eastus`, `gpt-5:westeurope`, `gpt-5:germanywestcentral`, `gpt-5:polandcentral`, `gpt-5:spaincentral`, `gpt-5-mini:eastus2`, `gpt-5-mini:swedencentral`, `gpt-5-mini:westeurope`, `gpt-5-mini:germanywestcentral`, `gpt-5-mini:polandcentral`, `gpt-5-mini:spaincentral`, `gpt-5-nano:eastus2`, `gpt-5-nano:swedencentral`, `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`, `gpt-4.1:australiaeast`, `gpt-4o:australiaeast`, `gpt-5.4-mini:australiaeast` - `toolStrictCompatibilityMode` (enum, optional) — 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` - Allowed values: `strip-parameters-with-unsupported-validation`, `strip-unsupported-validation` - `promptCacheRetention` (enum, optional) — 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.6-sol, gpt-5.6-terra, gpt-5.6-luna, gpt-5.5, chat-latest, 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') - Allowed values: `in_memory`, `24h` - `promptCacheKey` (string, optional) — 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 - `serviceTier` (enum, optional) — This is the OpenAI service tier used for chat completions requests. - `fast`: OpenAI's fast processing tier (renamed from `priority` on 2026-07-30; both values are accepted and billed identically) — up to ~2.5x faster inference at 2x the standard token rates. OpenAI may silently downgrade a fast request to standard processing under ramp limits; when that happens the response reports the served tier and the request is billed at standard rates. - `auto`: uses the service tier configured for the OpenAI project. - `default`: standard processing and billing. Only applies to models that support fast processing: gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, gpt-5.5. Ignored for other models. @default undefined (uses the service tier configured for the OpenAI project) - Allowed values: `auto`, `default`, `fast`, `priority` - `reasoningEffort` (enum, optional) — Reasoning effort for reasoning-capable OpenAI models. For `gpt-realtime-2`: forwarded to V2 stream's session.update as `reasoning.effort`. For non-realtime OpenAI models, model-aware validation limits newly public values while preserving the existing four-value storage contract. - Allowed values: `minimal`, `none`, `low`, `medium`, `high`, `xhigh` - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0 ### OpenRouterModel Configuration for generating assistant responses through OpenRouter, including routed model selection, prompts, tools, knowledge-base access, and generation settings. - `provider` (enum, required) — Routes assistant response generation through OpenRouter. - Allowed values: `openrouter` - `model` (string, required) — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of OpenRouterModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (OpenRouterModelKnowledgeBase, optional) — These are the options for the knowledge base. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0 ### PerplexityAIModel Configuration for generating assistant responses with Perplexity AI, including model, prompts, tools, knowledge-base access, and generation settings. - `provider` (enum, required) — Routes assistant response generation through Perplexity AI. - Allowed values: `perplexity-ai` - `model` (string, required) — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of PerplexityAiModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (PerplexityAiModelKnowledgeBase, optional) — These are the options for the knowledge base. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0 ### TogetherAIModel Configuration for generating assistant responses with Together AI, including model, prompts, tools, knowledge-base access, and generation settings. - `provider` (enum, required) — Routes assistant response generation through Together AI. - Allowed values: `together-ai` - `model` (string, required) — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of TogetherAiModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (TogetherAiModelKnowledgeBase, optional) — These are the options for the knowledge base. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0 ### XaiModel Configuration for generating assistant responses with xAI, including model, prompts, tools, knowledge-base access, and generation settings. - `model` (enum, required) — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b - Allowed values: `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`, `grok-4.3` - `provider` (enum, required) — Routes assistant response generation through xAI. - Allowed values: `xai` - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of XaiModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (XaiModelKnowledgeBase, optional) — These are the options for the knowledge base. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `maxTokens` (double, optional) — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. On gpt-6-luna no cap is applied unless you set one, because reasoning uses output tokens and a small cap can leave the reply empty. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — 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 ### VapiModel - `provider` (enum, required) - Allowed values: `vapi` - `messages` (list of OpenAIMessage, optional) — This is the starting state for the conversation. - `tools` (list of VapiModelToolsItems, optional) — 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. - `toolIds` (list of string, optional) — 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. - `toolRefs` (list of ToolRef, optional) — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time). - `knowledgeBase` (VapiModelKnowledgeBase, optional) — These are the options for the knowledge base. - `model` (string, optional) — White-label Vapi models are selected by `version`, not a model name, so `model` is optional here (the runtime already accepts a version-only Vapi payload). Overriding the required `ModelBase.model`: the declared type stays `string` to match the base (avoids TS2416) and the `= undefined!` initializer satisfies TS2612 for the field override, while `@IsOptional` + `@ApiPropertyOptional` make validation and the generated OpenAPI schema treat it as optional (so `VapiModel.required` is `['provider']`). - `version` (enum, optional) — Vapi-managed model version (update channel). When set, this is a Vapi-managed LLM routed by the registry; when absent, this is the legacy workflow form below (`steps` / `workflow`). - Allowed values: `latest`, `1` - `workflowId` (string, optional) — This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead. - `workflow` (WorkflowUserEditable, optional) — This is the workflow that will be used for the call. To use an existing workflow, use `workflowId` instead. - `temperature` (double, optional) — This is the temperature that will be used for calls. Default is 0.5. - `emotionRecognitionEnabled` (boolean, optional) — 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` (double, optional) — 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 ### AzureVoice Configuration for synthesizing assistant speech with Azure, including voice selection, speed, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `azure` - `voiceId` (AzureVoiceId, required) — This is the provider-specific ID that will be used. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `speed` (double, optional) — This is the speed multiplier that will be used. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### CartesiaVoice Configuration for synthesizing assistant speech with Cartesia, including voice and model selection, language, generation controls, pronunciation dictionaries, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `cartesia` - `voiceId` (string, required) — The ID of the particular voice you want to use. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used. This is optional and will default to the correct model for the voiceId. - Allowed values: `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` - `language` (enum, optional) — This is the language that will be used. This is optional and will default to the correct language for the voiceId. - Allowed values: `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` - `experimentalControls` (CartesiaExperimentalControls, optional) — Experimental controls for Cartesia voice generation - `generationConfig` (CartesiaGenerationConfig, optional) — Generation config for fine-grained control of sonic-3 voice output (speed, volume, and experimental controls). Only available for sonic-3 model. - `pronunciationDictId` (string, optional) — Pronunciation dictionary ID for sonic-3. Allows custom pronunciations for specific words. Only available for sonic-3 model. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### CustomVoice Configuration for synthesizing assistant speech through a custom server, including voice selection, server connection, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. Use `custom-voice` for providers that are not natively supported. - Allowed values: `custom-voice` - `server` (Server, required) — This is where the voice request will be sent. Request Example: POST https\://\{server.url} Content-Type: application/json \{ "message": \{ "type": "voice-request", "text": "Hello, world!", "sampleRate": 24000, ...other metadata about the call... } } Response Expected: 1-channel 16-bit raw PCM audio at the sample rate specified in the request. Here is how the response will be piped to the transport: ``` response.on('data', (chunk: Buffer) => \{ outputStream.write(chunk); }); ``` - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `voiceId` (string, optional) — 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` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### DeepgramVoice Configuration for synthesizing assistant speech with Deepgram, including voice and model selection, model-improvement preferences, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `deepgram` - `voiceId` (enum, required) — This is the provider-specific ID that will be used. - Allowed values: `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`, `viktoria`, `kara`, `fabian`, `julius`, `lara`, `elara`, `aurelia`, `hannah`, `kit`, `alexis`, `cliff`, `sienna`, `cole`, `brooke`, `colin`, `gemma`, `haley`, `heather`, `miles`, `sean`, `bree`, `brittany`, `bruce`, `conor`, `donovan`, `drew`, `elise`, `jack`, `kai`, `kelsey`, `maeve`, `marcelo`, `marcus`, `meena`, `meghan`, `naveen`, `paige`, `priya`, `rufus`, `sharon`, `tanner`, `wade`, `wes` - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used. Defaults to 'aura' when not specified. - Allowed values: `aura`, `aura-2`, `flux` - `mipOptOut` (boolean, optional, default: false) — 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 only applies to your own Deepgram API key. Requests on Vapi's key always opt out, whatever this is set to. @default false - `speed` (double, optional, default: 1) — This is the speed multiplier that will be used. Aura-2 accepts 0.7 to 1.5; Flux accepts 0.5 to 1.5 in steps of 0.05. Aura does not support speed. @default 1 - `expressivity` (double, optional, default: 0) — This is the expressivity level for Flux voices, from -2 (flat) to 2 (lively). Deepgram marks this control as beta and may retune the scale. Aura and Aura-2 do not support it. @default 0 - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### ElevenLabsVoice Configuration for synthesizing assistant speech with ElevenLabs, including voice and model selection, language, voice tuning, streaming, Speech Synthesis Markup Language parsing, pronunciation dictionaries, chunking, caching, and fallback settings. - `provider` ("11labs", required) — This is the voice provider that will be used. - `voiceId` (ElevenLabsVoiceId, required) — This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice Library. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `stability` (double, optional) — Defines the stability for voice settings. - `similarityBoost` (double, optional) — Defines the similarity boost for voice settings. Ignored by `eleven_v4_turbo`. - `style` (double, optional) — Defines the style for voice settings. Ignored by `eleven_v4_turbo`. - `useSpeakerBoost` (boolean, optional) — Defines the use speaker boost for voice settings. Ignored by `eleven_v4_turbo`. - `speed` (double, optional) — Defines the speed for voice settings. Ignored by `eleven_v4_turbo`. - `optimizeStreamingLatency` (double, optional) — Defines the optimize streaming latency for voice settings. Defaults to 3. Ignored by `eleven_v4_turbo`. - `enableSsmlParsing` (boolean, optional) — This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency. Ignored by `eleven_v4_turbo`. @default false - `autoMode` (boolean, optional) — Defines the auto mode for voice settings. Defaults to false. Ignored by `eleven_v4_turbo`. - `model` (enum, optional) — This is the model that will be used. Defaults to 'eleven_turbo_v2' if not specified. - Allowed values: `eleven_multilingual_v2`, `eleven_turbo_v2`, `eleven_turbo_v2_5`, `eleven_flash_v2`, `eleven_flash_v2_5`, `eleven_monolingual_v1`, `eleven_v3`, `eleven_v4_turbo` - `language` (string, optional) — This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5, Flash v2.5 and v4 Turbo support language enforcement; other models ignore it. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `pronunciationDictionaryLocators` (list of ElevenLabsPronunciationDictionaryLocator, optional) — This is the pronunciation dictionary locators to use. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### HumeVoice Configuration for synthesizing assistant speech with Hume, including model and voice selection, custom voice metadata, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `hume` - `voiceId` (string, required) — The ID of the particular voice you want to use. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used. - Allowed values: `octave`, `octave2` - `isCustomHumeVoice` (boolean, optional) — Indicates whether the chosen voice is a preset Hume AI voice or a custom voice. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `description` (string, optional) — Natural language instructions describing how the synthesized speech should sound, including but not limited to tone, intonation, pacing, and accent (e.g., 'a soft, gentle voice with a strong British accent'). If a Voice is specified in the request, this description serves as acting instructions. If no Voice is specified, a new voice is generated based on this description. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### LMNTVoice Configuration for synthesizing assistant speech with LMNT, including voice selection, language, speed, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `lmnt` - `voiceId` (LMNTVoiceId, required) — This is the provider-specific ID that will be used. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `speed` (double, optional) — This is the speed multiplier that will be used. - `language` (enum, optional) — Two letter ISO 639-1 language code. Use "auto" for auto-detection. - Allowed values: `aa`, `ab`, `ae`, `af`, `ak`, `am`, `an`, `ar`, `as`, `av`, `ay`, `az`, `ba`, `be`, `bg`, `bh`, `bi`, `bm`, `bn`, `bo`, `br`, `bs`, `ca`, `ce`, `ch`, `co`, `cr`, `cs`, `cu`, `cv`, `cy`, `da`, `de`, `dv`, `dz`, `ee`, `el`, `en`, `eo`, `es`, `et`, `eu`, `fa`, `ff`, `fi`, `fj`, `fo`, `fr`, `fy`, `ga`, `gd`, `gl`, `gn`, `gu`, `gv`, `ha`, `he`, `hi`, `ho`, `hr`, `ht`, `hu`, `hy`, `hz`, `ia`, `id`, `ie`, `ig`, `ii`, `ik`, `io`, `is`, `it`, `iu`, `ja`, `jv`, `ka`, `kg`, `ki`, `kj`, `kk`, `kl`, `km`, `kn`, `ko`, `kr`, `ks`, `ku`, `kv`, `kw`, `ky`, `la`, `lb`, `lg`, `li`, `ln`, `lo`, `lt`, `lu`, `lv`, `mg`, `mh`, `mi`, `mk`, `ml`, `mn`, `mr`, `ms`, `mt`, `my`, `na`, `nb`, `nd`, `ne`, `ng`, `nl`, `nn`, `no`, `nr`, `nv`, `ny`, `oc`, `oj`, `om`, `or`, `os`, `pa`, `pi`, `pl`, `ps`, `pt`, `qu`, `rm`, `rn`, `ro`, `ru`, `rw`, `sa`, `sc`, `sd`, `se`, `sg`, `si`, `sk`, `sl`, `sm`, `sn`, `so`, `sq`, `sr`, `ss`, `st`, `su`, `sv`, `sw`, `ta`, `te`, `tg`, `th`, `ti`, `tk`, `tl`, `tn`, `to`, `tr`, `ts`, `tt`, `tw`, `ty`, `ug`, `uk`, `ur`, `uz`, `ve`, `vi`, `vo`, `wa`, `wo`, `xh`, `yi`, `yue`, `yo`, `za`, `zh`, `zu`, `auto` - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### NeuphonicVoice Configuration for synthesizing assistant speech with Neuphonic, including voice and model selection, language, speed, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `neuphonic` - `voiceId` (string, required) — This is the provider-specific ID that will be used. - `language` (NeuphonicVoiceLanguage, required) — This is the language (ISO 639-1) that is enforced for the model. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used. Defaults to 'neu_fast' if not specified. - Allowed values: `neu_hq`, `neu_fast` - `speed` (double, optional) — This is the speed multiplier that will be used. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### OpenAIVoice Configuration for synthesizing assistant speech with OpenAI, including voice and model selection, delivery instructions, speed, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `openai` - `voiceId` (OpenAIVoiceId, required) — This is the provider-specific ID that will be used. Voice availability depends on the selected model. quartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder are only supported with GPT-Live models. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used for text-to-speech. - Allowed values: `tts-1`, `tts-1-hd`, `gpt-4o-mini-tts` - `instructions` (string, optional) — This is a prompt that allows you to control the voice of your generated audio. Does not work with 'tts-1' or 'tts-1-hd' models. - `speed` (double, optional) — This is the speed multiplier that will be used. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### PlayHTVoice Configuration for synthesizing assistant speech with PlayHT, including voice and model selection, language, emotion and style guidance, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `playht` - `voiceId` (PlayHTVoiceId, required) — This is the provider-specific ID that will be used. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `speed` (double, optional) — This is the speed multiplier that will be used. - `temperature` (double, optional) — A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the model's default temperature will be used. The temperature parameter controls variance. Lower temperatures result in more predictable results, higher temperatures allow each run to vary more, so the voice may sound less like the baseline voice. - `emotion` (enum, optional) — An emotion to be applied to the speech. - Allowed values: `female_happy`, `female_sad`, `female_angry`, `female_fearful`, `female_disgust`, `female_surprised`, `male_happy`, `male_sad`, `male_angry`, `male_fearful`, `male_disgust`, `male_surprised` - `voiceGuidance` (double, optional) — A number between 1 and 6. Use lower numbers to reduce how unique your chosen voice will be compared to other voices. - `styleGuidance` (double, optional) — A number between 1 and 30. Use lower numbers to to reduce how strong your chosen emotion will be. Higher numbers will create a very emotional performance. - `textGuidance` (double, optional) — A number between 1 and 2. This number influences how closely the generated speech adheres to the input text. Use lower values to create more fluid speech, but with a higher chance of deviating from the input text. Higher numbers will make the generated speech more accurate to the input text, ensuring that the words spoken align closely with the provided text. - `model` (enum, optional) — Playht voice model/engine to use. - Allowed values: `PlayHT2.0`, `PlayHT2.0-turbo`, `Play3.0-mini`, `PlayDialog` - `language` (enum, optional) — The language to use for the speech. - Allowed values: `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` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### WellSaidVoice Configuration for synthesizing assistant speech with WellSaid, including voice and model selection, Speech Synthesis Markup Language support, voice libraries, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `wellsaid` - `voiceId` (string, required) — The WellSaid speaker ID to synthesize. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used. - Allowed values: `caruso`, `legacy` - `enableSsml` (boolean, optional) — Enables limited SSML translation for input text. - `libraryIds` (list of string, optional) — Array of library IDs to use for voice synthesis. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### RimeAIVoice Configuration for synthesizing assistant speech with Rime AI, including voice and model selection, language, speed, pauses, phonemization, latency, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `rime-ai` - `voiceId` (RimeAIVoiceId, required) — This is the provider-specific ID that will be used. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used. Defaults to 'arcana' when not specified. - Allowed values: `arcana`, `coda`, `mistv2`, `mistv3`, `mist` - `speed` (double, optional) — This is the speed multiplier that will be used. - `pauseBetweenBrackets` (boolean, optional) — This is a flag that controls whether to add slight pauses using angle brackets. Example: "Hi. \<200> I'd love to have a conversation with you." adds a 200ms pause between the first and second sentences. - `phonemizeBetweenBrackets` (boolean, optional) — This is a flag that controls whether text inside brackets should be phonemized (converted to phonetic pronunciation) - Example: "\{h'El.o} World" will pronounce "Hello" as expected. - `reduceLatency` (boolean, optional) — This is a flag that controls whether to optimize for reduced latency in streaming. https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency - `inlineSpeedAlpha` (string, optional) — This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha - `language` (enum, optional) — Language for speech synthesis. Uses ISO 639 codes. Supported: en, es, de, fr, ar, hi, ja, he, pt, ta, si. - Allowed values: `en`, `es`, `de`, `fr`, `ar`, `hi`, `ja`, `he`, `pt`, `ta`, `si` - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### SmallestAIVoice Configuration for synthesizing assistant speech with Smallest AI, including voice and model selection, speed, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `smallest-ai` - `voiceId` (SmallestAIVoiceId, required) — This is the provider-specific ID that will be used. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — Smallest AI voice model to use. Defaults to 'lightning' when not specified. - Allowed values: `lightning` - `speed` (double, optional) — This is the speed multiplier that will be used. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### TavusVoice Configuration for using Tavus as the assistant's voice provider, including persona, callback, context, greeting, conversation properties, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `tavus` - `voiceId` (TavusVoiceVoiceId, required) — This is the provider-specific ID that will be used. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `personaId` (string, optional) — This is the unique identifier for the persona that the replica will use in the conversation. - `callbackUrl` (string, optional) — This is the url that will receive webhooks with updates regarding the conversation state. - `conversationName` (string, optional) — This is the name for the conversation. - `conversationalContext` (string, optional) — This is the context that will be appended to any context provided in the persona, if one is provided. - `customGreeting` (string, optional) — This is the custom greeting that the replica will give once a participant joines the conversation. - `properties` (TavusConversationProperties, optional) — These are optional properties used to customize the conversation. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### VapiVoice Configuration for synthesizing assistant speech with Vapi, including voice selection, speed, pronunciation dictionary, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `vapi` - `voiceId` (string, required) — The voice to use: a built-in Vapi voice name, or a cloned voice id (used with version 2). - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `version` (enum, optional) — The Vapi voice routing generation. `latest` auto-updates to the newest generation; version 1 uses legacy mappings; version 2 can use xAI-backed voices when available. When omitted, Version 1 is used. Accepts the string channel ('latest', '1', '2'); legacy numeric values (1, 2) are also accepted and coerced to their string form. - Allowed values: `1`, `2`, `latest` - `speed` (double, optional, default: 1) — This is the speed multiplier that will be used. @default 1 - `language` (enum, optional) — Language for Vapi voice synthesis. For Version 2, omit this field or set `auto` for automatic language detection. Version 1 supports legacy Vapi language values. - Allowed values: `en-US`, `en-GB`, `en-AU`, `en-CA`, `ja`, `zh`, `de`, `hi`, `fr-FR`, `fr-CA`, `ko`, `pt-BR`, `pt-PT`, `it`, `es-ES`, `es-MX`, `id`, `nl`, `tr`, `fil`, `pl`, `sv`, `bg`, `ro`, `ar-SA`, `ar-AE`, `cs`, `el`, `fi`, `hr`, `ms`, `sk`, `da`, `ta`, `uk`, `ru`, `hu`, `no`, `vi`, `auto`, `en`, `ar`, `ar-EG`, `bn`, `es`, `fr`, `gu`, `he`, `ka`, `kn`, `ml`, `mr`, `pa`, `pt`, `te`, `th`, `tl` - `pronunciationDictionary` (list of VapiPronunciationDictionaryLocator, optional) — List of pronunciation dictionary locators for custom word pronunciations. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### SesameVoice Configuration for synthesizing assistant speech with Sesame, including voice and model selection, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `sesame` - `voiceId` (string, required) — This is the provider-specific ID that will be used. - `model` (enum, required) — This is the model that will be used. - Allowed values: `csm-1b` - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### InworldVoice Configuration for synthesizing assistant speech with Inworld, including voice and model selection, language, temperature, speaking rate, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `inworld` - `voiceId` (enum, required) — Available voices by language: • en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun, Theodore, Timothy, Wendy, Dominus, 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 - Allowed values: `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` - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional, default: inworld-tts-1) — This is the model that will be used. - Allowed values: `inworld-tts-1` - `languageCode` (enum, optional, default: en) — Language code for Inworld TTS synthesis - Allowed values: `en`, `zh`, `ko`, `nl`, `fr`, `es`, `ja`, `de`, `it`, `pl`, `pt`, `ru`, `hi`, `he`, `ar` - `temperature` (double, optional, default: 1.1) — 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. - `speakingRate` (double, optional, default: 1) — 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. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### MinimaxVoice Configuration for synthesizing assistant speech with MiniMax, including voice and model selection, emotion, pitch, speed, volume, region, language, text normalization, chunking, caching, and fallback settings. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `minimax` - `voiceId` (string, required) — This is the provider-specific ID that will be used. Use a voice from MINIMAX_PREDEFINED_VOICES or a custom cloned voice ID. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional, default: speech-02-turbo) — 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" - Allowed values: `speech-02-hd`, `speech-02-turbo`, `speech-2.5-turbo-preview` - `emotion` (string, optional) — The emotion to use for the voice. If not provided, will use auto-detect mode. Options include: 'happy', 'sad', 'angry', 'fearful', 'surprised', 'disgusted', 'neutral' - `subtitleType` (enum, optional, default: sentence) — 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" - Allowed values: `word`, `sentence` - `pitch` (double, optional, default: 0) — Voice pitch adjustment. Range from -12 to 12 semitones. @default 0 - `speed` (double, optional, default: 1) — Voice speed adjustment. Range from 0.5 to 2.0. @default 1.0 - `volume` (double, optional, default: 1) — Voice volume adjustment. Range from 0.5 to 2.0. @default 1.0 - `region` (enum, optional, default: worldwide) — The region for Minimax API. Defaults to "worldwide". - Allowed values: `worldwide`, `china` - `languageBoost` (enum, optional) — Language hint for MiniMax T2A. Example: yue (Cantonese), zh (Chinese), en (English). - Allowed values: `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` (boolean, optional, default: true) — Enable MiniMax text normalization to improve number reading and formatting. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### XaiVoice - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `xai` - `voiceId` (enum, required) — Built-in voices: eve, ara, rex, sal, leo. Cloned voice IDs are also accepted. - Allowed values: `eve`, `ara`, `rex`, `sal`, `leo` - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `language` (enum, optional, default: en) — BCP-47 language code for xAI TTS synthesis. - Allowed values: `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` - `speed` (double, optional, default: 1.1) — Speed multiplier for xAI TTS synthesis. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### MicrosoftVoice - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `microsoft` - `voiceId` (enum, required) — MAI-Voice-2 voice ID. Built-in voices listed in enum. - Allowed values: `de-DE-Klaus:MAI-Voice-2`, `de-DE-Mia:MAI-Voice-2`, `en-AU-Lisa:MAI-Voice-2`, `en-US-Ethan:MAI-Voice-2`, `en-US-Grant:MAI-Voice-2`, `en-US-Harper:MAI-Voice-2`, `en-US-Iris:MAI-Voice-2`, `en-US-Jasper:MAI-Voice-2`, `en-US-Olivia:MAI-Voice-2`, `es-ES-Marta:MAI-Voice-2`, `es-MX-Alejo:MAI-Voice-2`, `es-MX-Valeria:MAI-Voice-2`, `fr-FR-Marc:MAI-Voice-2`, `fr-FR-Soleil:MAI-Voice-2`, `hi-IN-Arjun:MAI-Voice-2`, `hi-IN-Dhruv:MAI-Voice-2`, `hi-IN-Kavya:MAI-Voice-2`, `hi-IN-Priya:MAI-Voice-2`, `hu-HU-Bence:MAI-Voice-2`, `hu-HU-Levente:MAI-Voice-2`, `hu-HU-Lilla:MAI-Voice-2`, `hu-HU-Réka:MAI-Voice-2`, `it-IT-Luca:MAI-Voice-2`, `it-IT-Rosa:MAI-Voice-2`, `ko-KR-Hana:MAI-Voice-2`, `ko-KR-Junho:MAI-Voice-2`, `nl-NL-Fleur:MAI-Voice-2`, `nl-NL-Sander:MAI-Voice-2`, `pt-BR-Caio:MAI-Voice-2`, `pt-BR-Luana:MAI-Voice-2`, `pt-BR-Pedro:MAI-Voice-2`, `pt-BR-Rafael:MAI-Voice-2`, `pt-PT-Rui:MAI-Voice-2`, `ro-RO-Andrei:MAI-Voice-2`, `ro-RO-Elena:MAI-Voice-2`, `ro-RO-Ioana:MAI-Voice-2`, `ro-RO-Radu:MAI-Voice-2`, `ru-RU-Lev:MAI-Voice-2`, `ru-RU-Masha:MAI-Voice-2`, `th-TH-Krit:MAI-Voice-2`, `th-TH-Nattapong:MAI-Voice-2`, `tr-TR-Aydin:MAI-Voice-2`, `tr-TR-Elif:MAI-Voice-2`, `zh-CN-Bo:MAI-Voice-2`, `zh-CN-Lan:MAI-Voice-2`, `zh-CN-Mei:MAI-Voice-2` - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `style` (enum, optional) — Speaking style applied via mstts:express-as on every request. Unknown styles are ignored by Azure and fall back to neutral. - Allowed values: `adventurous`, `angry`, `caring`, `cheerful`, `confused`, `curious`, `determined`, `disappointed`, `disgusted`, `embarrassed`, `empathy`, `encouraging`, `excited`, `fearful`, `friendly`, `happy`, `hopeful`, `jealous`, `joyful`, `nostalgic`, `reflective`, `regretful`, `relieved`, `sad`, `serious`, `shouting`, `softvoice`, `surprised`, `whispering` - `styleDegree` (double, optional, default: 1) — Style intensity (0.01–2). Default 1 = the predefined style strength. Only applies when `style` is set. - `role` (enum, optional) — Role-play (age/gender imitation). Requires `style` to be set; ignored otherwise. - Allowed values: `Girl`, `Boy`, `YoungAdultFemale`, `YoungAdultMale`, `OlderAdultFemale`, `OlderAdultMale`, `SeniorFemale`, `SeniorMale` - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `speed` (double, optional) — This is the speed multiplier that will be used. - `fallbackPlan` (FallbackPlan, optional) — This is the plan for voice provider fallbacks in the event that the primary voice provider fails. ### GoogleVoicemailDetectionPlan Configuration for detecting voicemail with Google, including detection type, maximum beep wait, and retry backoff. - `provider` (enum, required) — This is the provider to use for voicemail detection. - Allowed values: `google` - `beepMaxAwaitSeconds` (double, optional, default: 30) — 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 - `backoffPlan` (VoicemailDetectionBackoffPlan, optional) — This is the backoff plan for the voicemail detection. - `type` (enum, optional) — 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) - Allowed values: `audio`, `transcript` ### OpenAIVoicemailDetectionPlan Configuration for detecting voicemail with OpenAI, including detection type, maximum beep wait, and retry backoff. - `provider` (enum, required) — This is the provider to use for voicemail detection. - Allowed values: `openai` - `beepMaxAwaitSeconds` (double, optional, default: 30) — 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 - `backoffPlan` (VoicemailDetectionBackoffPlan, optional) — This is the backoff plan for the voicemail detection. - `type` (enum, optional) — 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) - Allowed values: `audio`, `transcript` ### TwilioVoicemailDetectionPlan Configuration for Twilio answering-machine detection, including recognized outcomes, enablement, timeout, speech thresholds, and silence timeout. - `provider` (enum, required) — This is the provider to use for voicemail detection. - Allowed values: `twilio` - `voicemailDetectionTypes` (enum, optional) — 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'] - Allowed values: `machine_start`, `human`, `fax`, `unknown`, `machine_end_beep`, `machine_end_silence`, `machine_end_other` - `enabled` (boolean, optional) — This sets whether the assistant should detect voicemail. Defaults to true. @default true - `machineDetectionTimeout` (double, optional) — The number of seconds that Twilio should attempt to perform answering machine detection before timing out and returning AnsweredBy as unknown. Default is 30 seconds. Increasing this value will provide the engine more time to make a determination. This can be useful when DetectMessageEnd is provided in the MachineDetection parameter and there is an expectation of long answering machine greetings that can exceed 30 seconds. Decreasing this value will reduce the amount of time the engine has to make a determination. This can be particularly useful when the Enable option is provided in the MachineDetection parameter and you want to limit the time for initial detection. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 30 - `machineDetectionSpeechThreshold` (double, optional) — The number of milliseconds that is used as the measuring stick for the length of the speech activity. Durations lower than this value will be interpreted as a human, longer as a machine. Default is 2400 milliseconds. Increasing this value will reduce the chance of a False Machine (detected machine, actually human) for a long human greeting (e.g., a business greeting) but increase the time it takes to detect a machine. Decreasing this value will reduce the chances of a False Human (detected human, actually machine) for short voicemail greetings. The value of this parameter may need to be reduced by more than 1000ms to detect very short voicemail greetings. A reduction of that significance can result in increased False Machine detections. Adjusting the MachineDetectionSpeechEndThreshold is likely the better approach for short voicemails. Decreasing MachineDetectionSpeechThreshold will also reduce the time it takes to detect a machine. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 2400 - `machineDetectionSpeechEndThreshold` (double, optional) — The number of milliseconds of silence after speech activity at which point the speech activity is considered complete. Default is 1200 milliseconds. Increasing this value will typically be used to better address the short voicemail greeting scenarios. For short voicemails, there is typically 1000-2000ms of audio followed by 1200-2400ms of silence and then additional audio before the beep. Increasing the MachineDetectionSpeechEndThreshold to ~2500ms will treat the 1200-2400ms of silence as a gap in the greeting but not the end of the greeting and will result in a machine detection. The downsides of such a change include: - Increasing the delay for human detection by the amount you increase this parameter, e.g., a change of 1200ms to 2500ms increases human detection delay by 1300ms. - Cases where a human has two utterances separated by a period of silence (e.g. a "Hello", then 2000ms of silence, and another "Hello") may be interpreted as a machine. Decreasing this value will result in faster human detection. The consequence is that it can lead to increased False Human (detected human, actually machine) detections because a silence gap in a voicemail greeting (not necessarily just in short voicemail scenarios) can be incorrectly interpreted as the end of speech. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 1200 - `machineDetectionSilenceTimeout` (double, optional) — The number of milliseconds of initial silence after which an unknown AnsweredBy result will be returned. Default is 5000 milliseconds. Increasing this value will result in waiting for a longer period of initial silence before returning an 'unknown' AMD result. Decreasing this value will result in waiting for a shorter period of initial silence before returning an 'unknown' AMD result. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 5000 ### VapiVoicemailDetectionPlan Configuration for detecting voicemail with Vapi, including detection type, maximum beep wait, and retry backoff. - `provider` (enum, required) — This is the provider to use for voicemail detection. - Allowed values: `vapi` - `beepMaxAwaitSeconds` (double, optional, default: 30) — 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 - `backoffPlan` (VoicemailDetectionBackoffPlan, optional) — This is the backoff plan for the voicemail detection. - `type` (enum, optional) — 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) - Allowed values: `audio`, `transcript` ### TransportConfigurationTwilio Configuration passed to Twilio for assistant calls, including ring timeout and Twilio recording behavior. - `provider` (enum, required) — Selects Twilio as the call transport provider. - Allowed values: `twilio` - `timeout` (double, optional) — The integer number of seconds that we should allow the phone to ring before assuming there is no answer. The default is `60` seconds and the maximum is `600` seconds. For some call flows, we will add a 5-second buffer to the timeout value you provide. For this reason, a timeout value of 10 seconds could result in an actual timeout closer to 15 seconds. You can set this to a short time, such as `15` seconds, to hang up before reaching an answering machine or voicemail. @default 60 - `record` (boolean, optional) — Whether to record the call. Can be `true` to record the phone call, or `false` to not. The default is `false`. @default false - `recordingChannels` (enum, optional) — 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' - Allowed values: `mono`, `dual` ### LangfuseObservabilityPlanMetadata 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. ### UpdateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockAuthenticationPlan Authentication method - either direct IAM credentials or cross-account role assumption. ### AzureBlobStorageBucketPlan Azure Blob Storage container configuration for call artifacts, including its connection string, container name, and storage path. - `connectionString` (string, required) — This is the blob storage connection string for the Azure resource. - `containerName` (string, required) — This is the container name for the Azure blob storage. - `path` (string, optional) — 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 "/" ### SipTrunkGateway Network and routing settings for a SIP trunk gateway, including address, port, netmask, inbound and outbound use, signaling protocol, and OPTIONS health checks. - `ip` (string, required) — This is the address of the gateway. Inbound gateways require an IPv4 address like 1.1.1.1. Outbound-only gateways can also use a fully qualified domain name like my-sip-trunk.pstn.twilio.com. - `port` (double, optional) — This is the port number of the gateway. Default is 5060. @default 5060 - `netmask` (double, optional) — This is the netmask of the gateway. Defaults to 32. @default 32 - `inboundEnabled` (boolean, optional) — This is whether inbound calls are allowed from this gateway. Default is true. @default true - `outboundEnabled` (boolean, optional) — 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` (enum, optional) — This is the protocol to use for SIP signaling outbound calls. Default is udp. @default udp - Allowed values: `tls/srtp`, `tcp`, `tls`, `udp` - `optionsPingEnabled` (boolean, optional) — 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 ### SipTrunkOutboundAuthenticationPlan Credentials and optional SIP REGISTER settings used to authenticate outbound calls with a SIP trunk. - `authPassword` (string, optional) — This is not returned in the API. - `authUsername` (string, optional) — Username used to authenticate outbound SIP requests. - `sipRegisterPlan` (SipTrunkOutboundSipRegisterPlan, optional) — This can be used to configure if SIP register is required by the SIP trunk. If not provided, no SIP registration will be attempted. ### CloudflareR2BucketPlan Cloudflare R2 bucket configuration for call-artifact storage, including access keys, base URL, bucket name, and path. - `name` (string, required) — This is the name of the bucket. - `accessKeyId` (string, optional) — Cloudflare R2 Access key ID. - `secretAccessKey` (string, optional) — Cloudflare R2 access key secret. This is not returned in the API. - `url` (string, optional) — Cloudflare R2 base url. - `path` (string, optional) — 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 "/" ### OAuth2AuthenticationPlan Client-credentials configuration for obtaining an OAuth 2.0 access token used to authenticate outbound requests. - `url` (string, required) — This is the OAuth2 URL. - `clientId` (string, required) — This is the OAuth2 client ID. - `clientSecret` (string, required) — This is the OAuth2 client secret. - `scope` (string, optional) — This is the scope of the OAuth2 token. ### GcpKey Google Cloud service-account key used to authenticate access to Google Cloud resources. - `type` (string, required) — This is the type of the key. Most likely, this is "service_account". - `projectId` (string, required) — This is the ID of the Google Cloud project associated with this key. - `privateKeyId` (string, required) — This is the unique identifier for the private key. - `privateKey` (string, required) — This is the private key in PEM format. Note: This is not returned in the API. - `clientEmail` (string, required) — This is the email address associated with the service account. - `clientId` (string, required) — This is the unique identifier for the client. - `authUri` (string, required) — This is the URI for the auth provider's authorization endpoint. - `tokenUri` (string, required) — This is the URI for the auth provider's token endpoint. - `authProviderX509CertUrl` (string, required) — This is the URL of the public x509 certificate for the auth provider. - `clientX509CertUrl` (string, required) — This is the URL of the public x509 certificate for the client. - `universeDomain` (string, required) — This is the domain associated with the universe this service account belongs to. ### BucketPlan Google Cloud Storage bucket configuration for call artifacts, including bucket name, region, path, and optional HMAC credentials. - `name` (string, required) — This is the name of the bucket. - `region` (string, optional) — 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` (string, optional) — 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` (string, optional) — 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` (string, optional) — 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. ### S3CompatibleBucketPlan - `url` (string, required) — S3-compatible endpoint URL, such as https://s3.us-west-004.backblazeb2.com. Must be public HTTPS. - `region` (string, required) — SigV4 signing region expected by the object store. Most stores accept us-east-1. - `accessKeyId` (string, required) — S3 access key ID. - `secretAccessKey` (string, required) — S3 secret access key. This is not returned in the API. - `name` (string, required) — Bucket name. - `path` (string, optional) — Optional key prefix inside the bucket, such as recordings/. ### SupabaseBucketPlan Supabase S3-compatible bucket configuration for call artifacts, including region, endpoint, access keys, bucket name, and path. - `region` (enum, required) — 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 - Allowed values: `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` (string, required) — This is the S3 compatible URL for Supabase S3 This should look like https\://\.supabase.co/storage/v1/s3 - `accessKeyId` (string, required) — This is the Supabase S3 Access Key ID. The user creates this in the Supabase project Storage settings - `secretAccessKey` (string, required) — 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` (string, required) — 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` (string, optional) — 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" ### UpdateWorkflowDtoCredentialsItemsDiscriminatorMappingWebhookAuthenticationPlan This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. - `type`: `oauth2` (oauth2) - `clientId` (string, required) — This is the OAuth2 client ID. - `clientSecret` (string, required) — This is the OAuth2 client secret. - `url` (string, required) — This is the OAuth2 URL. - `scope` (string, optional) — This is the scope of the OAuth2 token. - `type`: `hmac` (hmac) - `algorithm` (enum, required) — This is the HMAC algorithm to use for signing. - Allowed values: `sha256`, `sha512`, `sha1` - `secretKey` (string, required) — This is the HMAC secret key used to sign requests. - `includeTimestamp` (boolean, optional) — Whether to include a timestamp in the signature payload. Defaults to true. - `messageIdHeader` (string, optional) — This is the header name where the unique message ID will be sent. Used for Svix-style webhooks. - `payloadFormat` (string, optional) — 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}'. - `secretIsBase64` (boolean, optional) — Whether the secret key is base64-encoded and should be decoded before use. Defaults to false. - `signatureEncoding` (enum, optional) — The encoding format for the signature. Defaults to 'hex'. - Allowed values: `hex`, `base64` - `signatureHeader` (string, optional) — This is the header name where the signature will be sent. Defaults to 'x-signature'. - `signaturePrefix` (string, optional) — This is the prefix for the signature. For example, 'sha256=' for GitHub-style signatures. - `timestampHeader` (string, optional) — This is the header name where the timestamp will be sent. Defaults to 'x-timestamp'. - `type`: `bearer` (bearer) - `token` (string, required) — This is the bearer token value. - `bearerPrefixEnabled` (boolean, optional) — Whether to include the 'Bearer ' prefix in the header value. Defaults to true. - `headerName` (string, optional) — This is the header name where the bearer token will be sent. Defaults to 'Authorization'. ### CreateCustomCredentialDtoAuthenticationPlan This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. - `type`: `oauth2` (oauth2) - `clientId` (string, required) — This is the OAuth2 client ID. - `clientSecret` (string, required) — This is the OAuth2 client secret. - `url` (string, required) — This is the OAuth2 URL. - `scope` (string, optional) — This is the scope of the OAuth2 token. - `type`: `hmac` (hmac) - `algorithm` (enum, required) — This is the HMAC algorithm to use for signing. - Allowed values: `sha256`, `sha512`, `sha1` - `secretKey` (string, required) — This is the HMAC secret key used to sign requests. - `includeTimestamp` (boolean, optional) — Whether to include a timestamp in the signature payload. Defaults to true. - `messageIdHeader` (string, optional) — This is the header name where the unique message ID will be sent. Used for Svix-style webhooks. - `payloadFormat` (string, optional) — 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}'. - `secretIsBase64` (boolean, optional) — Whether the secret key is base64-encoded and should be decoded before use. Defaults to false. - `signatureEncoding` (enum, optional) — The encoding format for the signature. Defaults to 'hex'. - Allowed values: `hex`, `base64` - `signatureHeader` (string, optional) — This is the header name where the signature will be sent. Defaults to 'x-signature'. - `signaturePrefix` (string, optional) — This is the prefix for the signature. For example, 'sha256=' for GitHub-style signatures. - `timestampHeader` (string, optional) — This is the header name where the timestamp will be sent. Defaults to 'x-timestamp'. - `type`: `bearer` (bearer) - `token` (string, required) — This is the bearer token value. - `bearerPrefixEnabled` (boolean, optional) — Whether to include the 'Bearer ' prefix in the header value. Defaults to true. - `headerName` (string, optional) — This is the header name where the bearer token will be sent. Defaults to 'Authorization'. ### PublicKeyEncryptionPlan Configuration for encrypting sensitive outbound request data with a public key. - `type` (enum, required) — The type of encryption plan. - Allowed values: `public-key` - `algorithm` (enum, required) — The encryption algorithm to use. - Allowed values: `RSA-OAEP-256` - `publicKey` (SpkiPemPublicKeyConfig, required) — The public key configuration. ### Oauth2AuthenticationSession OAuth 2.0 session tokens and expiration used to authenticate integration requests. - `accessToken` (string, optional) — This is the OAuth2 access token. - `expiresAt` (datetime, optional) — This is the OAuth2 access token expiration. - `refreshToken` (string, optional) — This is the OAuth2 refresh token. ### CallHookCallEnding Runs configured actions when a call is ending, optionally only when its filters match. - `on` (enum, required) — This is the event that triggers this hook - Allowed values: `call.ending` - `do` (list of CallHookCallEndingDoItems, required) — This is the set of actions to perform when the hook triggers - `filters` (list of CallHookFilter, optional) — This is the set of filters that must match for the hook to trigger ### CallHookAssistantSpeechInterrupted Runs configured actions when the customer's speech interrupts the assistant. - `on` (enum, required) — This is the event that triggers this hook - Allowed values: `assistant.speech.interrupted` - `do` (list of CallHookAssistantSpeechInterruptedDoItems, required) — This is the set of actions to perform when the hook triggers ### CallHookCustomerSpeechInterrupted Runs configured actions when the assistant interrupts the customer's speech. - `on` (enum, required) — This is the event that triggers this hook - Allowed values: `customer.speech.interrupted` - `do` (list of CallHookCustomerSpeechInterruptedDoItems, required) — This is the set of actions to perform when the hook triggers ### CallHookCustomerSpeechTimeout Runs configured actions when the customer does not speak before the configured timeout, with support for trigger limits and named instances. - `on` (string, required) — Must be either "customer.speech.timeout" or match the pattern "customer.speech.timeout[property=value]" - `do` (list of CallHookCustomerSpeechTimeoutDoItems, required) — This is the set of actions to perform when the hook triggers - `options` (CustomerSpeechTimeoutOptions, optional) — Controls the speech timeout, maximum trigger count, and counter reset behavior for this hook. - `name` (string, optional) — 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 ### SessionCreatedHook - `on` (enum, required) — This is the event that triggers this hook - Allowed values: `session.created` - `do` (list of SessionCreatedHookDoItems, required) — This is the set of actions to perform when the hook triggers. - `name` (string, optional) — Optional name for this hook instance. If no name is provided, the hook will be auto generated as UUID. @default UUID ### SecurityFilterPlan Controls filtering of transcripts for security threats before content is sent to the assistant's language model, including filter selection, handling mode, and replacement text. - `enabled` (boolean, optional, default: false) — Whether the security filter is enabled. @default false - `filters` (list of SecurityFilterBase, optional) — Array of security filter types to apply. If array is not empty, only those security filters are run. - `mode` (enum, optional, default: sanitize) — 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' - Allowed values: `sanitize`, `reject`, `replace` - `replacementText` (string, optional, default: [FILTERED]) — Text to use when replacing filtered content. @default '[FILTERED]' ### CompliancePlanRecordingConsentPlan Controls how recording consent is requested before the assistant joins the call. - `type`: `stay-on-line` (stay-on-line) - `message` (string, required) — This is the message asking for consent to record the call. If the type is `stay-on-line`, the message should ask the user to hang up if they do not consent. If the type is `verbal`, the message should ask the user to verbally consent or decline. - `firstMessageMode` (enum, optional, default: assistant-speaks-first) — 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' - Allowed values: `assistant-speaks-first`, `assistant-waits-for-user` - `voice` (CompliancePlanRecordingConsentPlanDiscriminatorMappingStayOnLineVoice, optional) — 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. - `waitSeconds` (double, optional, default: 3) — Number of seconds to wait before transferring to the assistant if user stays on the call - `type`: `verbal` (verbal) - `message` (string, required) — This is the message asking for consent to record the call. If the type is `stay-on-line`, the message should ask the user to hang up if they do not consent. If the type is `verbal`, the message should ask the user to verbally consent or decline. - `declineTool` (CompliancePlanRecordingConsentPlanDiscriminatorMappingVerbalDeclineTool, optional) — Tool to execute if user verbally declines recording consent - `declineToolId` (string, optional) — ID of existing tool to execute if user verbally declines recording consent - `firstMessageMode` (enum, optional, default: assistant-speaks-first) — 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' - Allowed values: `assistant-speaks-first`, `assistant-waits-for-user` - `voice` (CompliancePlanRecordingConsentPlanDiscriminatorMappingVerbalVoice, optional) — 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. ### SmartDenoisingPlan Controls whether Krisp smart denoising filters background speech and noise. - `enabled` (boolean, optional, default: true) — Whether smart denoising using Krisp is enabled. ### FourierDenoisingPlan Configuration for Fourier denoising, including media detection, thresholds, baseline calculation, and analysis window. - `enabled` (boolean, optional, default: false) — Whether Fourier denoising is enabled. Note that this is experimental and may not work as expected. - `mediaDetectionEnabled` (boolean, optional, default: true) — Whether automatic media detection is enabled. When enabled, the filter will automatically detect consistent background TV/music/radio and switch to more aggressive filtering settings. Only applies when enabled is true. - `staticThreshold` (double, optional, default: -35) — Static threshold in dB used as fallback when no baseline is established. - `baselineOffsetDb` (double, optional, default: -15) — How far below the rolling baseline to filter audio, in dB. Lower values (e.g., -10) are more aggressive, higher values (e.g., -20) are more conservative. - `windowSizeMs` (double, optional, default: 3000) — Rolling window size in milliseconds for calculating the audio baseline. Larger windows adapt more slowly but are more stable. - `baselinePercentile` (double, optional, default: 85) — 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. ### TranscriptPlan Controls whether the call transcript is stored and the speaker names used in the transcript. - `enabled` (boolean, optional) — This determines whether the transcript is stored in `call.artifact.transcript`. Defaults to true. @default true - `assistantName` (string, optional) — This is the name of the assistant in the transcript. Defaults to 'AI'. Usage: - If you want to change the name of the assistant in the transcript, set this. Example, here is what the transcript would look like with `assistantName` set to 'Buyer': ``` User: Hello, how are you? Buyer: I'm fine. User: Do you want to buy a car? Buyer: No. ``` @default 'AI' - `userName` (string, optional) — 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' ### CreateStructuredOutputDTO Configuration used to create a structured-output definition that extracts validated data from calls using an AI model or regular expression. - `name` (string, required) — This is the name of the structured output. - `schema` (JsonSchema, required) — 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 - `type` (enum, optional, default: ai) — 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. - Allowed values: `ai`, `regex` - `regex` (string, optional) — This is the regex pattern to match against the transcript. Simulation evaluations use a canonical transcript built from recorded messages: User: and AI: dialogue, AI: tool_calls: JSON name/arguments records, and AI: tool_call_results: JSON results. System messages are excluded. These fixed labels apply even when custom artifact transcript labels are configured. Tool payloads participate in first-match and all-match extraction in event order. An empty message array falls back to the supplied transcript verbatim. Production-call extraction and call preview use their existing transcripts, so previewing the same output on a simulation's call can return a different result. 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 - `model` (CreateStructuredOutputDtoModel, optional) — 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. - `compliancePlan` (ComplianceOverride, optional) — Compliance configuration for this output. Only enable overrides if no sensitive data will be stored. - `conditions` (list of CreateStructuredOutputDtoConditionsItems, optional, nullable) — These are the conditions that gate the execution of this structured output. Every condition must pass for the structured output to run (AND semantics). When omitted or empty, no user-defined conditions gate this output. Send null to clear a previously saved gate. - `description` (string, optional) — 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` (list of string, optional) — 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. - `workflowIds` (list of string, optional) — 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. ### CreateScorecardDTO Configuration used to create a scorecard containing evaluation metrics, scoring conditions, and optional assistant associations. - `metrics` (list of ScorecardMetric, required) — 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. - `name` (string, optional) — This is the name of the scorecard. It is only for user reference and will not be used for any evaluation. - `description` (string, optional) — This is the description of the scorecard. It is only for user reference and will not be used for any evaluation. - `assistantIds` (list of string, optional) — 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. ### StartSpeakingPlanSmartEndpointingPlan 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. ### StartSpeakingPlanCustomEndpointingRulesItems ### TranscriptionEndpointingPlan Controls endpointing delays based on whether customer speech ends with punctuation, without punctuation, or with a number. - `onPunctuationSeconds` (double, optional) — The minimum number of seconds to wait after transcription ending with punctuation before sending a request to the model. Defaults to 0.1. This setting exists because the transcriber punctuates the transcription when it's more confident that customer has completed a thought. @default 0.1 - `onNoPunctuationSeconds` (double, optional) — The minimum number of seconds to wait after transcription ending without punctuation before sending a request to the model. Defaults to 1.5. This setting exists to catch the cases where the transcriber was not confident enough to punctuate the transcription, but the customer is done and has been silent for a long time. @default 1.5 - `onNumberSeconds` (double, optional) — 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 ### StartSpeakingPlanSmartEndpointingEnabled ### StructuredDataPlan Controls extraction of post-call structured data, including prompt messages, JSON schema, enablement, and request timeout. - `messages` (list of StructuredDataPlanMessagesItems, optional) — These are the messages used to generate the structured data. @default: ` [ \{ "role": "system", "content": "You are an expert data extractor. You will be given a transcript of a call. Extract structured data per the JSON Schema. DO NOT return anything except the structured data.\n\nJson Schema:\\n\{\{schema}}\n\nOnly respond with the JSON." }, \{ "role": "user", "content": "Here is the transcript:\n\n\{\{transcript}}\n\n. Here is the ended reason of the call:\n\n\{\{endedReason}}\n\n" } ]` You can customize by providing any messages you want. Here are the template variables available: * \{\{transcript}}: the transcript of the call from `call.artifact.transcript`- \{\{systemPrompt}}: the system prompt of the call from `assistant.model.messages[type=system].content`- \{\{messages}}: the messages of the call from `assistant.model.messages`- \{\{schema}}: the schema of the structured data from `structuredDataPlan.schema`- \{\{endedReason}}: the ended reason of the call from `call.endedReason` - `enabled` (boolean, optional) — This determines whether structured data is generated and stored in `call.analysis.structuredData`. Defaults to false. Usage: - If you want to extract structured data, set this to true and provide a `schema`. @default false - `schema` (JsonSchema, optional) — 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). - `timeoutSeconds` (double, optional) — This is how long the request is tried before giving up. When request times out, `call.analysis.structuredData` will be empty. Usage: - To guarantee the structured data is generated, set this value high. Note, this will delay the end of call report in cases where model is slow to respond. @default 5 seconds ### StructuredDataMultiPlan Associates a catalog key with a structured data extraction plan. - `key` (string, required) — This is the key of the structured data plan in the catalog. - `plan` (StructuredDataPlan, required) — This is an individual structured data plan in the catalog. ### SuccessEvaluationPlan Controls post-call success evaluation, including the rubric, prompt messages, enablement, and request timeout. - `rubric` (enum, optional) — 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'. - Allowed values: `NumericScale`, `DescriptiveScale`, `Checklist`, `Matrix`, `PercentageScale`, `LikertScale`, `AutomaticRubric`, `PassFail` - `messages` (list of SuccessEvaluationPlanMessagesItems, optional) — These are the messages used to generate the success evaluation. @default: ` [ \{ "role": "system", "content": "You are an expert call evaluator. You will be given a transcript of a call and the system prompt of the AI participant. Determine if the call was successful based on the objectives inferred from the system prompt. DO NOT return anything except the result.\n\nRubric:\\n\{\{rubric}}\n\nOnly respond with the result." }, \{ "role": "user", "content": "Here is the transcript:\n\n\{\{transcript}}\n\n" }, \{ "role": "user", "content": "Here was the system prompt of the call:\n\n\{\{systemPrompt}}\n\n. Here is the ended reason of the call:\n\n\{\{endedReason}}\n\n" } ]` You can customize by providing any messages you want. Here are the template variables available: * \{\{transcript}}: the transcript of the call from `call.artifact.transcript`- \{\{systemPrompt}}: the system prompt of the call from `assistant.model.messages[type=system].content`- \{\{messages}}: the messages of the call from `assistant.model.messages`- \{\{rubric}}: the rubric of the success evaluation from `successEvaluationPlan.rubric`- \{\{endedReason}}: the ended reason of the call from `call.endedReason` - `enabled` (boolean, optional) — 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` (double, optional) — 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 ### CreateApiRequestToolDTO Configuration for a reusable tool that sends HTTP requests to an API and supports authentication and response variable extraction. - `method` (enum, required) — The HTTP method used for the API request. - Allowed values: `POST`, `GET`, `PUT`, `PATCH`, `DELETE` - `url` (string, required) — This is where the request will be sent. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingApiRequestMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `name` (string, optional) — 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. - `timeoutSeconds` (double, optional) — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20 - `credentialId` (string, optional) — The credential ID for API request authentication - `encryptedPaths` (list of string, optional) — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined. - `parameters` (list of ToolParameter, optional) — Static key-value pairs merged into the request body. Values support Liquid templates. - `description` (string, optional) — This is the description of the tool. This will be passed to the model. - `body` (JsonSchema, optional) — This is the body of the request. - `headers` (JsonSchema, optional) — These are the headers to send with the request. - `backoffPlan` (BackoffPlan, optional) — A backoff plan can be saved on an API Request Tool, but API Request Tools do not currently retry after a non-2xx response or a timeout. - `variableExtractionPlan` (VariableExtractionPlan, optional) — This is the plan to extract variables from the tool's response. These will be accessible during the call and stored in `call.artifact.variableValues` after the call. Usage: 1. Use `aliases` to extract variables from the tool's response body. (Most common case) ```json { "aliases": [ { "key": "customerName", "value": "{{customer.name}}" }, { "key": "customerAge", "value": "{{customer.age}}" } ] } ``` The tool response body is made available to the liquid template. 2. Use `aliases` to extract variables from the tool's response body if the response is an array. ```json { "aliases": [ { "key": "customerName", "value": "{{$[0].name}}" }, { "key": "customerAge", "value": "{{$[0].age}}" } ] } ``` $ is a shorthand for the tool's response body. `$\[0]`is the first item in the array.`$[n]` is the nth item in the array. Note, $ is available regardless of the response body type (both object and array). 3. Use `aliases` to extract variables from the tool's response headers. ```json { "aliases": [ { "key": "customerName", "value": "{{tool.response.headers.customer-name}}" }, { "key": "customerAge", "value": "{{tool.response.headers.customer-age}}" } ] } ``` `tool.response` is made available to the liquid template. Particularly, both `tool.response.headers` and `tool.response.body` are available. Note, `tool.response` is available regardless of the response body type (both object and array). 4. Use `schema` to extract a large portion of the tool's response body. 4.1. If you hit example.com and it returns `{"name": "John", "age": 30}`, then you can specify the schema as: ```json { "schema": { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "number" } } } } ``` These will be extracted as `{{ name }}` and `{{ age }}` respectively. To emphasize, object properties are extracted as direct global variables. 4.2. If you hit example.com and it returns `{"name": {"first": "John", "last": "Doe"}}`, then you can specify the schema as: ```json { "schema": { "type": "object", "properties": { "name": { "type": "object", "properties": { "first": { "type": "string" }, "last": { "type": "string" } } } } } } ``` These will be extracted as `{{ name }}`. And, `{{ name.first }}` and `{{ name.last }}` will be accessible. 4.3. If you hit example.com and it returns `["94123", "94124"]`, then you can specify the schema as: ```json { "schema": { "type": "array", "title": "zipCodes", "items": { "type": "string" } } } ``` This will be extracted as `{{ zipCodes }}`. To access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`. 4.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: ```json { "schema": { "type": "array", "title": "people", "items": { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "number" }, "zipCodes": { "type": "array", "items": { "type": "string" } } } } } } ``` This will be extracted as `{{ people }}`. To access the array items, you can use `{{ people[n].name }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{ people[n].zipCodes[1] }}`. Note: Both `aliases` and `schema` can be used together. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateBashToolDTO Configuration used to create a tool that executes shell commands in a configured environment. - `subType` (enum, required) — The sub type of tool. - Allowed values: `bash_20241022` - `name` (enum, required, default: bash) — The name of the tool, fixed to 'bash' - Allowed values: `bash` - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingBashMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `server` (Server, optional) — This is the server where a `tool-calls` webhook will be sent. Notes: * Webhook is sent to this server when a tool call is made. * Webhook contains the call, assistant, and phone number objects. * Webhook contains the variables set on the assistant. * Webhook is sent to the first available URL in this order: \{\{tool.server.url}}, \{\{assistant.server.url}}, \{\{phoneNumber.server.url}}, \{\{org.server.url}}. * Webhook expects a response with tool call result. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateCodeToolDTO Configuration used to create a reusable tool that executes TypeScript code with configured credentials, environment variables, and timeout. - `type` (enum, required) — The type of tool. "code" for Code tool. - Allowed values: `code` - `code` (string, required) — TypeScript code to execute when the tool is called - `messages` (list of CreateCodeToolDtoMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `async` (boolean, optional) — This determines if the tool is async. If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server. If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server. Defaults to synchronous (`false`). - `server` (Server, optional) — This is the server where a `tool-calls` webhook will be sent. Notes: * Webhook is sent to this server when a tool call is made. * Webhook contains the call, assistant, and phone number objects. * Webhook contains the variables set on the assistant. * Webhook is sent to the first available URL in this order: \{\{tool.server.url}}, \{\{assistant.server.url}}, \{\{phoneNumber.server.url}}, \{\{org.server.url}}. * Webhook expects a response with tool call result. - `environmentVariables` (list of CodeToolEnvironmentVariable, optional) — Environment variables available in code via `env` object - `timeoutSeconds` (double, optional) — This is the timeout in seconds for the code execution. Defaults to 10 seconds. Maximum is 30 seconds to prevent abuse. @default 10 - `credentialId` (string, optional) — Credential ID containing the Val Town API key - `variableExtractionPlan` (VariableExtractionPlan, optional) — Plan to extract variables from the tool response - `function` (OpenAIFunction, optional) — 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. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateComputerToolDTO Configuration used to create a tool that lets the model interact with a computer display through screen, pointer, and keyboard actions. - `subType` (enum, required) — The sub type of tool. - Allowed values: `computer_20241022` - `name` (enum, required, default: computer) — The name of the tool, fixed to 'computer' - Allowed values: `computer` - `displayWidthPx` (double, required) — The display width in pixels - `displayHeightPx` (double, required) — The display height in pixels - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingComputerMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `server` (Server, optional) — This is the server where a `tool-calls` webhook will be sent. Notes: * Webhook is sent to this server when a tool call is made. * Webhook contains the call, assistant, and phone number objects. * Webhook contains the variables set on the assistant. * Webhook is sent to the first available URL in this order: \{\{tool.server.url}}, \{\{assistant.server.url}}, \{\{phoneNumber.server.url}}, \{\{org.server.url}}. * Webhook expects a response with tool call result. - `displayNumber` (double, optional) — Optional display number - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateDtmfToolDTO Configuration used to create a tool that lets an assistant send DTMF keypad tones during a call. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingDtmfMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `sipInfoDtmfEnabled` (boolean, optional, default: false) — 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. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateEndCallToolDTO Configuration used to create a tool that lets an assistant end the active call. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingEndCallMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateFunctionToolDTO Configuration used to create a custom function tool that sends model-generated arguments to a server and returns the result to the assistant. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingFunctionMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `async` (boolean, optional) — This determines if the tool is async. If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server. If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server. Defaults to synchronous (`false`). - `server` (Server, optional) — This is the server where a `tool-calls` webhook will be sent. Notes: * Webhook is sent to this server when a tool call is made. * Webhook contains the call, assistant, and phone number objects. * Webhook contains the variables set on the assistant. * Webhook is sent to the first available URL in this order: \{\{tool.server.url}}, \{\{assistant.server.url}}, \{\{phoneNumber.server.url}}, \{\{org.server.url}}. * Webhook expects a response with tool call result. - `variableExtractionPlan` (VariableExtractionPlan, optional) — Plan to extract variables from the tool response - `parameters` (list of ToolParameter, optional) — Static key-value pairs merged into the request body. Values support Liquid templates. - `function` (OpenAIFunction, optional) — This is the function definition of the tool. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateGoHighLevelCalendarAvailabilityToolDTO Configuration used to create a tool that checks calendar availability in a connected GoHighLevel account. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGohighlevelCalendarAvailabilityCheckMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateGoHighLevelCalendarEventCreateToolDTO Configuration used to create a tool that adds calendar events to a connected GoHighLevel account. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGohighlevelCalendarEventCreateMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateGoHighLevelContactCreateToolDTO Configuration used to create a tool that adds contacts to a connected GoHighLevel account. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGohighlevelContactCreateMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateGoHighLevelContactGetToolDTO Configuration used to create a tool that retrieves contacts from a connected GoHighLevel account. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGohighlevelContactGetMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateGoogleCalendarCheckAvailabilityToolDTO Configuration used to create a tool that checks availability in a connected Google Calendar. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGoogleCalendarAvailabilityCheckMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateGoogleCalendarCreateEventToolDTO Configuration used to create a tool that adds events to a connected Google Calendar. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGoogleCalendarEventCreateMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateGoogleSheetsRowAppendToolDTO Configuration used to create a tool that appends rows to a connected Google Sheet. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGoogleSheetsRowAppendMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateHandoffToolDTO Configuration used to create a tool that hands a conversation to another assistant, squad, or dynamically selected destination. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingHandoffMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `defaultResult` (string, optional) — This is the default local tool result message used when no runtime handoff result override is returned. - `destinations` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingHandoffDestinationsItems, optional) — These are the destinations that the call can be handed off to. Usage: 1. Single destination Use `assistantId` to handoff the call to a saved assistant, or `assistantName` to handoff the call to an assistant in the same squad. ```json { "tools": [ { "type": "handoff", "destinations": [ { "type": "assistant", "assistantId": "assistant-123", // or "assistantName": "Assistant123" "description": "customer wants to be handed off to assistant-123", "contextEngineeringPlan": { "type": "all" } } ], } ] } ``` 2. Multiple destinations 2.1. Multiple Tools, Each With One Destination (OpenAI recommended) ```json { "tools": [ { "type": "handoff", "destinations": [ { "type": "assistant", "assistantId": "assistant-123", "description": "customer wants to be handed off to assistant-123", "contextEngineeringPlan": { "type": "all" } }, ], }, { "type": "handoff", "destinations": [ { "type": "assistant", "assistantId": "assistant-456", "description": "customer wants to be handed off to assistant-456", "contextEngineeringPlan": { "type": "all" } } ], } ] } ``` 2.2. One Tool, Multiple Destinations (Anthropic recommended) ```json { "tools": [ { "type": "handoff", "destinations": [ { "type": "assistant", "assistantId": "assistant-123", "description": "customer wants to be handed off to assistant-123", "contextEngineeringPlan": { "type": "all" } }, { "type": "assistant", "assistantId": "assistant-456", "description": "customer wants to be handed off to assistant-456", "contextEngineeringPlan": { "type": "all" } } ], } ] } ``` 3. Dynamic destination 3.1 To determine the destination dynamically, supply a `dynamic` handoff destination type and a `server` object. VAPI will send a handoff-destination-request webhook to the `server.url`. The response from the server will be used as the destination (if valid). ```json { "tools": [ { "type": "handoff", "destinations": [ { "type": "dynamic", "server": { "url": "https://example.com" } } ], } ] } ``` 3.2. To pass custom parameters to the server, you can use the `function` object. ```json { "tools": [ { "type": "handoff", "destinations": [ { "type": "dynamic", "server": { "url": "https://example.com" }, } ], "function": { "name": "handoff", "description": "Call this function when the customer is ready to be handed off to the next assistant", "parameters": { "type": "object", "properties": { "destination": { "type": "string", "description": "Use dynamic when customer is ready to be handed off to the next assistant", "enum": ["dynamic"] }, "customerAreaCode": { "type": "number", "description": "Area code of the customer" }, "customerIntent": { "type": "string", "enum": ["new-customer", "existing-customer"], "description": "Use new-customer when customer is a new customer, existing-customer when customer is an existing customer" }, "customerSentiment": { "type": "string", "enum": ["positive", "negative", "neutral"], "description": "Use positive when customer is happy, negative when customer is unhappy, neutral when customer is neutral" } } } } } ] } ``` The properties `customerAreaCode`, `customerIntent`, and `customerSentiment` will be passed to the server in the webhook request body. - `function` (OpenAIFunction, optional) — This is the optional function definition that will be passed to the LLM. If this is not defined, we will construct this based on the other properties. For example, given the following tools definition: ```json { "tools": [ { "type": "handoff", "destinations": [ { "type": "assistant", "assistantId": "assistant-123", "description": "customer wants to be handed off to assistant-123", "contextEngineeringPlan": { "type": "all" } }, { "type": "assistant", "assistantId": "assistant-456", "description": "customer wants to be handed off to assistant-456", "contextEngineeringPlan": { "type": "all" } } ], } ] } ``` We will construct the following function definition: ```json { "function": { "name": "handoff_to_assistant-123", "description": " Use this function to handoff the call to the next assistant. Only use it when instructions explicitly ask you to use the handoff_to_assistant function. DO NOT call this function unless you are instructed to do so. Here are the destinations you can handoff the call to: 1. assistant-123. When: customer wants to be handed off to assistant-123 2. assistant-456. When: customer wants to be handed off to assistant-456 ", "parameters": { "type": "object", "properties": { "destination": { "type": "string", "description": "Options: assistant-123 (customer wants to be handed off to assistant-123), assistant-456 (customer wants to be handed off to assistant-456)", "enum": ["assistant-123", "assistant-456"] }, }, "required": ["destination"] } } } ``` To override this function, please provide an OpenAI function definition and refer to it in the system prompt. You may override parts of the function definition (i.e. you may only want to change the function name for your prompt). If 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`. To pass custom parameters to the server in a dynamic handoff, you can use the function parameters, with `dynamic` as the destination. ```json { "function": { "name": "dynamic_handoff", "description": " Call this function when the customer is ready to be handed off to the next assistant ", "parameters": { "type": "object", "properties": { "destination": { "type": "string", "enum": ["dynamic"] }, "customerAreaCode": { "type": "number", "description": "Area code of the customer" }, "customerIntent": { "type": "string", "enum": ["new-customer", "existing-customer"], "description": "Use new-customer when customer is a new customer, existing-customer when customer is an existing customer" }, "customerSentiment": { "type": "string", "enum": ["positive", "negative", "neutral"], "description": "Use positive when customer is happy, negative when customer is unhappy, neutral when customer is neutral" } }, "required": ["destination", "customerAreaCode", "customerIntent", "customerSentiment"] } } } ``` - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateMcpToolDTO Configuration used to create a tool that connects an assistant to a Model Context Protocol server and exposes its available tools. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingMcpMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `server` (Server, optional) — This is the server where a `tool-calls` webhook will be sent. Notes: * Webhook is sent to this server when a tool call is made. * Webhook contains the call, assistant, and phone number objects. * Webhook contains the variables set on the assistant. * Webhook is sent to the first available URL in this order: \{\{tool.server.url}}, \{\{assistant.server.url}}, \{\{phoneNumber.server.url}}, \{\{org.server.url}}. * Webhook expects a response with tool call result. - `toolMessages` (list of McpToolMessages, optional) — 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. - `metadata` (McpToolMetadata, optional) — Connection metadata for the MCP server, including its communication protocol. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateQueryToolDTO Configuration used to create a tool that searches configured knowledge bases and returns relevant content to the assistant. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingQueryMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `knowledgeBases` (list of KnowledgeBase, optional) — The knowledge bases to query - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateSlackSendMessageToolDTO Configuration used to create a tool that lets an assistant send a message to Slack. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingSlackMessageSendMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateSmsToolDTO Configuration used to create a tool that lets an assistant send an SMS message during a call. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingSmsMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateTextEditorToolDTO Configuration used to create a tool that reads and edits text files in a configured environment. - `subType` (enum, required) — The sub type of tool. - Allowed values: `text_editor_20241022` - `name` (enum, required, default: str_replace_editor) — The name of the tool, fixed to 'str_replace_editor' - Allowed values: `str_replace_editor` - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingTextEditorMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `server` (Server, optional) — This is the server where a `tool-calls` webhook will be sent. Notes: * Webhook is sent to this server when a tool call is made. * Webhook contains the call, assistant, and phone number objects. * Webhook contains the variables set on the assistant. * Webhook is sent to the first available URL in this order: \{\{tool.server.url}}, \{\{assistant.server.url}}, \{\{phoneNumber.server.url}}, \{\{org.server.url}}. * Webhook expects a response with tool call result. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateTransferCallToolDTO Configuration used to create a tool that transfers the active call to one of its configured destinations. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingTransferCallMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `destinations` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingTransferCallDestinationsItems, optional) — 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. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateSipRequestToolDTO Configuration used to create a tool that sends SIP `INFO`, `MESSAGE`, or `NOTIFY` requests with configured headers and body. - `verb` (enum, required) — The SIP method to send. - Allowed values: `INFO`, `MESSAGE`, `NOTIFY` - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingSipRequestMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `headers` (JsonSchema, optional) — JSON schema for headers the model should populate when sending the SIP request. - `body` (ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingSipRequestBody, optional) — 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. - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### CreateVoicemailToolDTO Configuration used to create a voicemail-detection tool with optional beep detection for supported calls. - `messages` (list of ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingVoicemailMessagesItems, optional) — Messages spoken while the tool is running. Multiple request-start messages are variants. For request-response-delayed, same timing means variants and different timings mean staged updates. - `beepDetectionEnabled` (boolean, optional, default: false) — This is the flag that enables beep detection for voicemail detection and applies only for twilio based calls. @default false - `rejectionPlan` (ToolRejectionPlan, optional) — This is the plan to reject a tool call based on the conversation state. // Example 1: Reject endCall if user didn't say goodbye ```json { conditions: [{ type: 'regex', regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', target: { position: -1, role: 'user' }, negate: true // Reject if pattern does NOT match }] } ``` // Example 2: Reject transfer if user is actually asking a question ```json { conditions: [{ type: 'regex', regex: '\\?', target: { position: -1, role: 'user' } }] } ``` // Example 3: Reject transfer if user didn't mention transfer recently ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 5 %} {% assign userMessages = recentMessages | where: 'role', 'user' %} {% assign mentioned = false %} {% for msg in userMessages %} {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} {% assign mentioned = true %} {% break %} {% endif %} {% endfor %} {% if mentioned %} false {% else %} true {% endif %}` }] } ``` // Example 4: Reject endCall if the bot is looping and trying to exit ```json { conditions: [{ type: 'liquid', liquid: `{% assign recentMessages = messages | last: 6 %} {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} {% if userMessages.size < 3 %} false {% else %} {% assign msg1 = userMessages[0].content | downcase %} {% assign msg2 = userMessages[1].content | downcase %} {% assign msg3 = userMessages[2].content | downcase %} {% comment %} Check for repetitive messages {% endcomment %} {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} true {% comment %} Check for common loop phrases {% endcomment %} {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} true {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} true {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} true {% else %} false {% endif %} {% endif %}` }] } ``` ### SquadMemberDtoAssistantDestinationsItems ### FallbackTranscriberPlan Lists backup transcriber configurations that can be used if the primary transcriber fails. - `transcribers` (list of FallbackTranscriberPlanTranscribersItems, optional) — Transcriber configurations available when the primary transcriber fails. ### ElevenLabsTranscriberModel This is the model that will be used for the transcription. ### GladiaTranscriberModel This is the Gladia model that will be used. Default is 'fast' ### GladiaTranscriberLanguageBehaviour Defines how the transcription model detects the audio language. Default value is 'automatic single language'. ### GladiaCustomVocabularyConfigDTO Custom vocabulary configuration for Gladia transcription, including vocabulary items and default recognition intensity. - `vocabulary` (list of GladiaCustomVocabularyConfigDtoVocabularyItems, required) — Array of vocabulary items (strings or objects with value, pronunciations, intensity, language) - `defaultIntensity` (double, optional, default: 0.5) — Default intensity for vocabulary items (0.0 to 1.0) ### SpeechmaticsCustomVocabularyItem A word or phrase to prioritize during Speechmatics transcription, with optional phonetic alternatives. - `content` (string, required) — The word or phrase to add to the custom vocabulary. - `soundsLike` (list of string, optional) — Alternative phonetic representations of how the word might sound. This helps recognition when the word might be pronounced differently. ### SonioxContextGeneralItem - `key` (string, required) — The key describing the type of context (e.g., "domain", "topic", "doctor", "organization"). - `value` (string, required) — The value for the context key (e.g., "Healthcare", "Diabetes management consultation"). ### OpenAIMessage A conversation message represented in OpenAI chat format. - `content` (string, required, nullable) — Content of the conversation message. - `role` (enum, required) — Role associated with the conversation message. - Allowed values: `assistant`, `function`, `user`, `system`, `tool` ### AnthropicModelToolsItems ### ToolRef - `toolId` (string, required) — This is the unique identifier of the tool whose version is being pinned. - `version` (string, required) — Public version label of the tool, e.g. "v3" ### AnthropicModelKnowledgeBase These are the options for the knowledge base. ### AnthropicThinkingConfig Enables Anthropic extended thinking with a maximum thinking-token budget. - `type` (enum, required) — Enables Anthropic extended thinking. - Allowed values: `enabled` - `budgetTokens` (double, required) — The maximum number of tokens to allocate for thinking. Must be between 1024 and 100000 tokens. ### AnthropicBedrockModelToolsItems ### AnthropicBedrockModelKnowledgeBase These are the options for the knowledge base. ### AnyscaleModelToolsItems ### AnyscaleModelKnowledgeBase These are the options for the knowledge base. ### CerebrasModelToolsItems ### CerebrasModelKnowledgeBase These are the options for the knowledge base. ### CustomLlmModelToolsItems ### CustomLlmModelKnowledgeBase These are the options for the knowledge base. ### DeepInfraModelToolsItems ### DeepInfraModelKnowledgeBase These are the options for the knowledge base. ### DeepSeekModelToolsItems ### DeepSeekModelKnowledgeBase These are the options for the knowledge base. ### GoogleModelToolsItems ### GoogleModelKnowledgeBase These are the options for the knowledge base. ### GoogleRealtimeConfig Realtime Gemini generation and speech-output settings, including sampling, repetition penalties, and voice configuration. - `topP` (double, optional) — 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` (double, optional) — 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` (double, optional) — 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` (double, optional) — This is the frequency penalty parameter that influences the model's likelihood to repeat tokens by penalizing them based on their frequency in the text. Only applicable with the Gemini Flash 2.0 Multimodal Live API. - `speechConfig` (GeminiMultimodalLiveSpeechConfig, optional) — 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. ### GroqModelToolsItems ### GroqModelKnowledgeBase These are the options for the knowledge base. ### InflectionAiModelToolsItems ### InflectionAiModelKnowledgeBase These are the options for the knowledge base. ### MinimaxLlmModelToolsItems ### MinimaxLlmModelKnowledgeBase These are the options for the knowledge base. ### OpenAiModelToolsItems ### OpenAiModelKnowledgeBase These are the options for the knowledge base. ### OpenAISpeaker - `instructions` (string, optional) — Omit to use model.systemPrompt, or system-role messages when systemPrompt is absent. An explicit empty string is preserved. - `personalityPacks` (list of enum, optional) — Personality packs append speaking-style guidance to the speaker prompt. Set to an array of pack IDs and test one pack at a time. These are prompt instructions, not fixed speed controls. - Allowed values: `eager-listener`, `idle-hummer`, `bouncy`, `unhurried` ### OpenAIReasoner - `provider` (enum, optional, default: openai) — The reasoner uses OpenAI. Omit to use OpenAI. - Allowed values: `openai` - `model` (enum, optional, default: gpt-5.6-terra) — The delegated reasoning model. Omit to use GPT-5.6 Terra. - Allowed values: `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna` - `reasoningEffort` (enum, optional, default: low) — Higher effort can increase response time. Omit to use low. - Allowed values: `none`, `low`, `medium`, `high`, `xhigh`, `max` - `instructions` (string, optional) — Complete reasoner instructions. An explicit empty string is preserved. Omit to use Vapi's default reasoner instructions. No behavioral instructions are appended unless skills are configured; skill loading guidance and active skill content are then composed with these instructions. - `skills` (list of OpenAIReasonerSkill, optional) — Inline skills whose instructions and tools the GPT-Live reasoner loads on demand. ### OpenRouterModelToolsItems ### OpenRouterModelKnowledgeBase These are the options for the knowledge base. ### PerplexityAiModelToolsItems ### PerplexityAiModelKnowledgeBase These are the options for the knowledge base. ### TogetherAiModelToolsItems ### TogetherAiModelKnowledgeBase These are the options for the knowledge base. ### XaiModelToolsItems ### XaiModelKnowledgeBase These are the options for the knowledge base. ### VapiModelToolsItems ### VapiModelKnowledgeBase These are the options for the knowledge base. ### WorkflowUserEditable - `nodes` (list of WorkflowUserEditableNodesItems, required) - `name` (string, required) - `edges` (list of Edge, required) - `model` (WorkflowUserEditableModel, optional) — This is the model for the workflow. This can be overridden at node level using `nodes[n].model`. - `transcriber` (WorkflowUserEditableTranscriber, optional) — This is the transcriber for the workflow. This can be overridden at node level using `nodes[n].transcriber`. - `voice` (WorkflowUserEditableVoice, optional) — This is the voice for the workflow. This can be overridden at node level using `nodes[n].voice`. - `observabilityPlan` (LangfuseObservabilityPlan, optional) — This is the plan for observability of workflow's calls. Currently, only Langfuse is supported. - `backgroundSound` (WorkflowUserEditableBackgroundSound, optional) — 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. - `hooks` (list of WorkflowUserEditableHooksItems, optional) — This is a set of actions that will be performed on certain events. - `credentials` (list of WorkflowUserEditableCredentialsItems, optional) — These are dynamic credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials. - `voicemailDetection` (WorkflowUserEditableVoicemailDetection, optional) — This is the voicemail detection plan for the workflow. - `maxDurationSeconds` (double, optional) — This is the maximum duration of the call in seconds. After this duration, the call will automatically end. Default is 1800 (30 minutes), max is 43200 (12 hours), and min is 10 seconds. - `globalPrompt` (string, optional) - `server` (Server, optional) — 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. tool.server 2. workflow.server / assistant.server 3. phoneNumber.server 4. org.server - `compliancePlan` (CompliancePlan, optional) — This is the compliance plan for the workflow. It allows you to configure HIPAA and other compliance settings. - `analysisPlan` (AnalysisPlan, optional) — This is the plan for analysis of workflow's calls. Stored in `call.analysis`. - `artifactPlan` (ArtifactPlan, optional) — This is the plan for artifacts generated during workflow's calls. Stored in `call.artifact`. - `startSpeakingPlan` (StartSpeakingPlan, optional) — This is the plan for when the workflow nodes should start talking. You should configure this if you're running into these issues: - The assistant is too slow to start talking after the customer is done speaking. - The assistant is too fast to start talking after the customer is done speaking. - The assistant is so fast that it's actually interrupting the customer. - `stopSpeakingPlan` (StopSpeakingPlan, optional) — This is the plan for when workflow nodes should stop talking on customer interruption. You should configure this if you're running into these issues: - The assistant is too slow to recognize customer's interruption. - The assistant is too fast to recognize customer's interruption. - The assistant is getting interrupted by phrases that are just acknowledgments. - The assistant is getting interrupted by background noises. - The assistant is not properly stopping -- it starts talking right after getting interrupted. - `monitorPlan` (MonitorPlan, optional) — This is the plan for real-time monitoring of the workflow's calls. Usage: - To enable live listening of the workflow's calls, set `monitorPlan.listenEnabled` to `true`. - To enable live control of the workflow's calls, set `monitorPlan.controlEnabled` to `true`. - `backgroundSpeechDenoisingPlan` (BackgroundSpeechDenoisingPlan, optional) — This enables filtering of noise and background speech while the user is talking. Features: - Smart denoising using Krisp - Fourier denoising Both can be used together. Order of precedence: - Smart denoising - Fourier denoising - `credentialIds` (list of string, optional) — These are the credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can provide a subset using this. - `keypadInputPlan` (KeypadInputPlan, optional) — This is the plan for keypad input handling during workflow calls. - `voicemailMessage` (string, optional) — This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up. ### AzureVoiceId This is the provider-specific ID that will be used. ### ChunkPlan Controls how model output is split into chunks before voice synthesis, including minimum length, punctuation boundaries, and formatting. - `enabled` (boolean, optional) — 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 - `minCharacters` (double, optional) — This is the minimum number of characters in a chunk. Usage: - To increase quality, set this to a higher value. - To decrease latency, set this to a lower value. @default 30 - `punctuationBoundaries` (enum, optional) — 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. - Allowed values: `。`, `,`, `.`, `!`, `?`, `;`, `)`, `،`, `۔`, `।`, `॥`, `|`, `||`, `,`, `:` - `formatPlan` (FormatPlan, optional) — This is the plan for formatting the chunk before it is sent to the voice provider. ### FallbackPlan Lists backup voice configurations that can be used if the primary voice provider fails. - `voices` (list of FallbackPlanVoicesItems, required) — This is the list of voices to fallback to in the event that the primary voice provider fails. ### CartesiaExperimentalControls Cartesia voice controls for speed and emotion. - `speed` (CartesiaSpeedControl, optional) — Speaking-speed control expressed as a preset or a value from -1 to 1. - `emotion` (enum, optional) — Emotion and intensity applied to the Cartesia voice. - Allowed values: `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` ### CartesiaGenerationConfig Generation controls for Cartesia Sonic 3 voices, including speed, volume, and accent localization. - `speed` (double, optional, default: 1) — Fine-grained speed control for sonic-3. Only available for sonic-3 model. - `volume` (double, optional, default: 1) — Fine-grained volume control for sonic-3. Only available for sonic-3 model. - `experimental` (CartesiaGenerationConfigExperimental, optional) — Experimental model controls for sonic-3. These are subject to breaking changes. ### ElevenLabsVoiceId This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice Library. ### ElevenLabsPronunciationDictionaryLocator Identifies a specific version of an ElevenLabs pronunciation dictionary. - `pronunciationDictionaryId` (string, required) — This is the ID of the pronunciation dictionary to use. - `versionId` (string, optional) — This is the version ID of the pronunciation dictionary to use. Omit to use the dictionary's latest version. ### LMNTVoiceId This is the provider-specific ID that will be used. ### NeuphonicVoiceLanguage This is the language (ISO 639-1) that is enforced for the model. ### OpenAIVoiceId This is the provider-specific ID that will be used. Voice availability depends on the selected model. quartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder are only supported with GPT-Live models. ### PlayHTVoiceId This is the provider-specific ID that will be used. ### RimeAIVoiceId This is the provider-specific ID that will be used. ### SmallestAIVoiceId This is the provider-specific ID that will be used. ### TavusVoiceVoiceId This is the provider-specific ID that will be used. ### TavusConversationProperties Tavus conversation behavior and media settings, including duration, participant timeouts, recording, transcription, background, language, and recording storage. - `maxCallDuration` (double, optional) — 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` (double, optional) — The duration in seconds after which the call will be automatically shut down once the last participant leaves. - `participantAbsentTimeout` (double, optional) — Starting from conversation creation, the duration in seconds after which the call will be automatically shut down if no participant joins the call. Default is 300 seconds (5 minutes). - `enableRecording` (boolean, optional) — If true, the user will be able to record the conversation. - `enableTranscription` (boolean, optional) — If true, the user will be able to transcribe the conversation. You can find more instructions on displaying transcriptions if you are using your custom DailyJS components here. You need to have an event listener on Daily that listens for `app-messages`. - `applyGreenscreen` (boolean, optional) — If true, the background will be replaced with a greenscreen (RGB values: `[0, 255, 155]`). You can use WebGL on the frontend to make the greenscreen transparent or change its color. - `language` (string, optional) — The language of the conversation. Please provide the **full language name**, not the two-letter code. If you are using your own TTS voice, please ensure it supports the language you provide. If you are using a stock replica or default persona, please note that only ElevenLabs and Cartesia supported languages are available. You can find a full list of supported languages for Cartesia here, for ElevenLabs here, and for PlayHT here. - `recordingS3BucketName` (string, optional) — The name of the S3 bucket where the recording will be stored. - `recordingS3BucketRegion` (string, optional) — The region of the S3 bucket where the recording will be stored. - `awsAssumeRoleArn` (string, optional) — The ARN of the role that will be assumed to access the S3 bucket. ### VapiPronunciationDictionaryLocator Identifies a pronunciation dictionary and optional version used for voice synthesis. - `pronunciationDictId` (string, required) — The pronunciation dictionary ID - `versionId` (string, optional) — Version ID (only used by ElevenLabs, ignored for Cartesia) - `provider` (enum, optional) — Provider that hosts this pronunciation dictionary - Allowed values: `cartesia`, `11labs` ### VoicemailDetectionBackoffPlan Controls voicemail-detection retry timing, including when retries start, retry frequency, and maximum attempts. - `startAtSeconds` (double, optional, default: 5) — This is the number of seconds to wait before starting the first retry attempt. - `frequencySeconds` (double, optional, default: 5) — This is the interval in seconds between retry attempts. - `maxRetries` (double, optional, default: 6) — This is the maximum number of retry attempts before giving up. ### AWSIAMCredentialsAuthenticationPlan Direct AWS IAM credentials used to authenticate requests. - `type` (enum, required) — Selects direct AWS IAM credential authentication. - Allowed values: `aws-iam` - `awsAccessKeyId` (string, required) — AWS Access Key ID. This is not returned in the API. - `awsSecretAccessKey` (string, required) — AWS Secret Access Key. This is not returned in the API. ### AWSStsAuthenticationPlan AWS Security Token Service role-assumption configuration used to authenticate requests. - `type` (enum, required) — This is the type of authentication plan - Allowed values: `aws-sts` - `roleArn` (string, required) — This is the role ARN for the AWS credential - `externalId` (string, optional) — Optional external ID for additional security in the role trust policy. ### SipTrunkOutboundSipRegisterPlan Registration settings used when the SIP trunk requires SIP REGISTER. - `domain` (string, optional) — SIP registrar domain used for registration. - `username` (string, optional) — Username sent with the SIP REGISTER request. - `realm` (string, optional) — Authentication realm used for SIP registration. ### SpkiPemPublicKeyConfig An SPKI public key in PEM format used to encrypt sensitive request data. - `format` (enum, required) — The format of the public key. - Allowed values: `spki-pem` - `pem` (string, required) — The PEM-encoded public key. - `name` (string, optional) — Optional name of the key for identification purposes. ### CallHookCallEndingDoItems ### CallHookFilter Matches a call field against one or more allowed values to determine whether a hook runs. - `type` (enum, required) — This is the type of filter - currently only "oneOf" is supported - Allowed values: `oneOf` - `key` (string, required) — This is the key to filter on (e.g. "call.endedReason") - `oneOf` (list of string, required) — This is the array of possible values to match against ### CallHookAssistantSpeechInterruptedDoItems ### CallHookCustomerSpeechInterruptedDoItems ### CallHookCustomerSpeechTimeoutDoItems ### CustomerSpeechTimeoutOptions Controls how long a hook waits for customer speech, how often it can trigger, and when its trigger counter resets. - `timeoutSeconds` (double, required) — 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 - `triggerResetMode` (enum, optional) — Controls whether the hook's trigger counter resets after the customer speaks. Defaults to `never`. - Allowed values: `onUserSpeech`, `never` - `triggerMaxCount` (double, optional) — This is the maximum number of times the hook will trigger in a call. @default 3 ### SessionCreatedHookDoItems ### SecurityFilterBase Base configuration for a security filter applied to transcripts before model processing. ### CompliancePlanRecordingConsentPlanDiscriminatorMappingStayOnLineVoice 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. ### CompliancePlanRecordingConsentPlanDiscriminatorMappingVerbalDeclineTool Tool to execute if user verbally declines recording consent ### CompliancePlanRecordingConsentPlanDiscriminatorMappingVerbalVoice 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. ### CreateStructuredOutputDtoModel 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. ### ComplianceOverride Overrides storage behavior for an output when HIPAA compliance is enabled. - `forceStoreOnHipaaEnabled` (boolean, optional) — Force storage for this output under HIPAA. Only enable if output contains no sensitive data. ### CreateStructuredOutputDtoConditionsItems ### ScorecardMetric A scorecard metric that awards points when a structured output meets its configured conditions. - `conditions` (list of ScorecardMetricConditionsItems, required) — 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. - `structuredOutputId` (string, required) — 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. ### VapiSmartEndpointingPlan Selects Vapi smart endpointing to determine when customer speech is complete. - `provider` (enum, required) — This is the provider for the smart endpointing plan. - Allowed values: `vapi`, `livekit`, `custom-endpointing-model` ### LivekitSmartEndpointingPlan Configuration for using LiveKit smart endpointing, including provider selection and wait-function behavior. - `provider` (enum, required) — This is the provider for the smart endpointing plan. - Allowed values: `vapi`, `livekit`, `custom-endpointing-model` - `waitFunction` (string, optional) — This expression describes how long the bot will wait to start speaking based on the likelihood that the user has reached an endpoint. This is a millisecond valued function. It maps probabilities (real numbers on [0,1]) to milliseconds that the bot should wait before speaking ([0, \infty]). Any negative values that are returned are set to zero (the bot can't start talking in the past). A probability of zero represents very high confidence that the caller has stopped speaking, and would like the bot to speak to them. A probability of one represents very high confidence that the caller is still speaking. Under the hood, this is parsed into a mathjs expression. Whatever you use to write your expression needs to be valid with respect to mathjs @default "20 + 500 * sqrt(x) + 2500 * x^3" ### CustomEndpointingModelSmartEndpointingPlan Configuration for using a custom endpointing model, including its provider identifier and server connection. - `provider` (enum, required) — This is the provider for the smart endpointing plan. Use `custom-endpointing-model` for custom endpointing providers that are not natively supported. - Allowed values: `vapi`, `livekit`, `custom-endpointing-model` - `server` (Server, optional) — This is where the endpointing request will be sent. If not provided, will be sent to `assistant.server`. If that does not exist either, will be sent to `org.server`. Request Example: POST https\://\{server.url} Content-Type: application/json \{ "message": \{ "type": "call.endpointing.request", "messages": \[ \{ "role": "user", "message": "Hello, how are you?", "time": 1234567890, "secondsFromStart": 0 } ], ...other metadata about the call... } } Response Expected: \{ "timeoutSeconds": 0.5 } The timeout is the number of seconds to wait before considering the user's speech as finished. The endpointing timeout is automatically reset each time a new transcript is received (and another `call.endpointing.request` is sent). ### AssistantCustomEndpointingRule A custom endpointing rule that matches the assistant's last message and applies a configured timeout. - `type` (enum, required) — 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. - Allowed values: `assistant` - `regex` (string, required) — 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$". - `timeoutSeconds` (double, required) — This is the endpointing timeout in seconds, if the rule is matched. - `regexOptions` (list of RegexOption, optional) — These are the options for the regex match. Defaults to all disabled. @default [] ### CustomerCustomEndpointingRule A custom endpointing rule that matches the customer's current speech and applies a configured timeout. - `type` (enum, required) — 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. - Allowed values: `customer` - `regex` (string, required) — 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$". - `timeoutSeconds` (double, required) — This is the endpointing timeout in seconds, if the rule is matched. - `regexOptions` (list of RegexOption, optional) — These are the options for the regex match. Defaults to all disabled. @default [] ### BothCustomEndpointingRule A custom endpointing rule that matches both the assistant's last message and the customer's current speech before applying a configured timeout. - `type` (enum, required) — 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. - Allowed values: `both` - `assistantRegex` (string, required) — 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$". - `customerRegex` (string, required) — The regular expression pattern matched against the customer's speech. - `timeoutSeconds` (double, required) — This is the endpointing timeout in seconds, if the rule is matched. - `assistantRegexOptions` (list of RegexOption, optional) — These are the options for the assistant's message regex match. Defaults to all disabled. @default [] - `customerRegexOptions` (list of RegexOption, optional) — These are the options for the customer's message regex match. Defaults to all disabled. @default [] ### StructuredDataPlanMessagesItems ### SuccessEvaluationPlanMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingApiRequestMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingBashMessagesItems ### CreateCodeToolDtoMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingComputerMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingDtmfMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingEndCallMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingFunctionMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGohighlevelCalendarAvailabilityCheckMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGohighlevelCalendarEventCreateMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGohighlevelContactCreateMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGohighlevelContactGetMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGoogleCalendarAvailabilityCheckMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGoogleCalendarEventCreateMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingGoogleSheetsRowAppendMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingHandoffMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingHandoffDestinationsItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingMcpMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingQueryMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingSlackMessageSendMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingSmsMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingTextEditorMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingTransferCallMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingTransferCallDestinationsItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingSipRequestMessagesItems ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingSipRequestBody 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. ### ToolPostRequestBodyContentApplicationJsonSchemaDiscriminatorMappingVoicemailMessagesItems ### FallbackTranscriberPlanTranscribersItems ### GladiaCustomVocabularyConfigDtoVocabularyItems ### CreateCustomKnowledgeBaseDTO Configuration for connecting a custom knowledge-base implementation through a customer-hosted server. - `provider` (enum, required) — This knowledge base is bring your own knowledge base implementation. - Allowed values: `custom-knowledge-base` - `server` (Server, required) — This is where the knowledge base request will be sent. Request Example: POST https\://\{server.url} Content-Type: application/json \{ "messsage": \{ "type": "knowledge-base-request", "messages": \[ \{ "role": "user", "content": "Why is ocean blue?" } ], ...other metadata about the call... } } Response Expected: ``` \{ "message": \{ "role": "assistant", "content": "The ocean is blue because water absorbs everything but blue.", }, // YOU CAN RETURN THE EXACT RESPONSE TO SPEAK "documents": [ \{ "content": "The ocean is blue primarily because water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible to our eyes.", "similarity": 1 }, \{ "content": "Blue light is scattered more by the water molecules than other colors, enhancing the blue appearance of the ocean.", "similarity": .5 } ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL } ``` ### GeminiMultimodalLiveSpeechConfig Speech-output configuration for Gemini Multimodal Live. - `voiceConfig` (GeminiMultimodalLiveVoiceConfig, required) — Voice configuration used for Gemini Multimodal Live speech output. ### OpenAIReasonerSkill - `name` (string, required) — Unique name within this assistant. - `description` (string, required) — Explain when the reasoner should load this skill. Always visible in its catalog. - `content` (string, required) — Full skill instructions, loaded only while this skill is active. - `tools` (list of OpenAiReasonerSkillToolsItems, optional) — Tools available only after loading this skill. Can be combined with toolIds. - `toolIds` (list of string, optional) — Existing organization-owned tools available only after loading this skill. ### WorkflowUserEditableNodesItems ### Edge A directed connection between two workflow nodes, with an optional AI-evaluated transition condition. - `from` (string, required) — Name of the source workflow node. - `to` (string, required) — Name of the destination workflow node. - `condition` (EdgeCondition, optional) — Condition that must evaluate to true to follow this edge. - `metadata` (EdgeMetadata, optional) — This is for metadata you want to store on the edge. ### WorkflowUserEditableModel This is the model for the workflow. This can be overridden at node level using `nodes[n].model`. ### WorkflowUserEditableTranscriber This is the transcriber for the workflow. This can be overridden at node level using `nodes[n].transcriber`. ### WorkflowUserEditableVoice This is the voice for the workflow. This can be overridden at node level using `nodes[n].voice`. ### WorkflowUserEditableBackgroundSound 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. ### WorkflowUserEditableHooksItems ### WorkflowUserEditableCredentialsItems - `provider`: `11labs` (CreateElevenLabsCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `apiUrl` (enum, optional, nullable) — ElevenLabs-only API environment for this key: the global endpoint or the EU data residency endpoint. In EU deployments, new credentials must explicitly use the EU data residency endpoint; existing credentials may omit this field on update to retain their saved endpoint. Outside EU deployments, Vapi detects an omitted endpoint automatically and null on update clears and re-detects the endpoint. - Allowed values: `https://api.elevenlabs.io`, `https://api.eu.residency.elevenlabs.io` - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `anthropic` (CreateAnthropicCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `anthropic-bedrock` (anthropic-bedrock) - `authenticationPlan` (UpdateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockAuthenticationPlan, required) — Authentication method - either direct IAM credentials or cross-account role assumption. - `region` (enum, required) — AWS region where Bedrock is configured. - Allowed values: `us-east-1`, `us-west-2`, `eu-central-1`, `eu-west-1`, `eu-west-3`, `ap-northeast-1`, `ap-southeast-2` - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `anyscale` (CreateAnyscaleCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `assembly-ai` (CreateAssemblyAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `azure-openai` (CreateAzureOpenAICredentialDTO) - `models` (enum, required) — Azure OpenAI models available through this credential. - Allowed values: `gpt-5.6-luna-2026-07-09`, `gpt-5.6-terra-2026-07-09`, `gpt-5.6-sol-2026-07-09`, `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`, `gpt-4o`, `gpt-4.1`, `gpt-5.4-mini-2026-03-17` - `openAIEndpoint` (string, required) — Endpoint URL for the Azure OpenAI resource. - `openAIKey` (string, required) — This is not returned in the API. - `region` (enum, required) — Azure region that hosts the OpenAI resource. - Allowed values: `australiaeast`, `canadaeast`, `canadacentral`, `centralus`, `eastus2`, `eastus`, `france`, `germanywestcentral`, `india`, `japaneast`, `japanwest`, `northcentralus`, `norway`, `polandcentral`, `southcentralus`, `spaincentral`, `swedencentral`, `switzerland`, `switzerlandnorth`, `switzerlandwest`, `uaenorth`, `uk`, `westeurope`, `westus`, `westus3` - `name` (string, optional) — This is the name of credential. This is just for your reference. - `ocpApimSubscriptionKey` (string, optional) — This is not returned in the API. - `provider`: `azure` (CreateAzureCredentialDTO) - `service` (enum, required, default: speech) — This is the service being used in Azure. - Allowed values: `speech`, `blob_storage` - `apiKey` (string, optional) — This is not returned in the API. - `bucketPlan` (AzureBlobStorageBucketPlan, optional) — This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage. - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `region` (enum, optional) — This is the region of the Azure resource. - Allowed values: `australiaeast`, `canadaeast`, `canadacentral`, `centralus`, `eastus2`, `eastus`, `france`, `germanywestcentral`, `india`, `japaneast`, `japanwest`, `northcentralus`, `norway`, `polandcentral`, `southcentralus`, `spaincentral`, `swedencentral`, `switzerland`, `switzerlandnorth`, `switzerlandwest`, `uaenorth`, `uk`, `westeurope`, `westus`, `westus3` - `provider`: `byo-sip-trunk` (CreateByoSipTrunkCredentialDTO) - `gateways` (list of SipTrunkGateway, required) — This is the list of SIP trunk's gateways. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `outboundAuthenticationPlan` (SipTrunkOutboundAuthenticationPlan, optional) — This can be used to configure the outbound authentication if required by the SIP trunk. - `outboundLeadingPlusEnabled` (boolean, optional) — 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 - `sipDiversionHeader` (string, optional) — 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. - `techPrefix` (string, optional) — This can be used to configure the tech prefix on outbound calls. This is an advanced property. - `provider`: `cartesia` (CreateCartesiaCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `apiUrl` (string, optional) — This can be used to point to an onprem Cartesia instance. Defaults to api.cartesia.ai. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `cerebras` (CreateCerebrasCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `cloudflare` (CreateCloudflareCredentialDTO) - `accountEmail` (string, optional) — Cloudflare Account Email. - `accountId` (string, optional) — Cloudflare Account Id. - `apiKey` (string, optional) — Cloudflare API Key / Token. - `bucketPlan` (CloudflareR2BucketPlan, optional) — This is the bucket plan that can be provided to store call artifacts in R2 - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `custom-llm` (CreateCustomLLMCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `authenticationPlan` (OAuth2AuthenticationPlan, optional) — This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `deepgram` (CreateDeepgramCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `apiUrl` (string, optional) — This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `deepinfra` (CreateDeepInfraCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `deep-seek` (CreateDeepSeekCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `gcp` (CreateGcpCredentialDTO) - `gcpKey` (GcpKey, required) — This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at [https://console.cloud.google.com/iam-admin/serviceaccounts/details/\<service-account-id\>/keys](https://console.cloud.google.com/iam-admin/serviceaccounts/details/\<service-account-id\>/keys). The schema is identical to the JSON that GCP outputs. - `bucketPlan` (BucketPlan, optional) — Bucket configuration used to store call artifacts in Google Cloud Storage. - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `region` (string, optional) — This is the region of the GCP resource. - `provider`: `gladia` (CreateGladiaCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `gohighlevel` (CreateGoHighLevelCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `google` (CreateGoogleCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `groq` (CreateGroqCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `inflection-ai` (CreateInflectionAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `langfuse` (CreateLangfuseCredentialDTO) - `apiKey` (string, required) — The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API. - `apiUrl` (string, required) — The host URL for Langfuse project. Eg: https://cloud.langfuse.com - `publicKey` (string, required) — The public key for Langfuse project. Eg: pk-lf-... - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `lmnt` (CreateLmntCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `make` (CreateMakeCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `region` (string, required) — Region of your application. For example: eu1, eu2, us1, us2 - `teamId` (string, required) — Team ID - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `openai` (CreateOpenAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `openrouter` (CreateOpenRouterCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `perplexity-ai` (CreatePerplexityAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `playht` (CreatePlayHTCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `userId` (string, required) — PlayHT user identifier associated with the API key. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `rime-ai` (CreateRimeAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `runpod` (CreateRunpodCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `s3` (CreateS3CredentialDTO) - `awsAccessKeyId` (string, required) — AWS access key ID. - `awsSecretAccessKey` (string, required) — AWS access key secret. This is not returned in the API. - `region` (string, required) — AWS region in which the S3 bucket is located. - `s3BucketName` (string, required) — AWS S3 bucket name. - `s3PathPrefix` (string, required) — The path prefix for the uploaded recording. Ex. "recordings/" - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `s3-compatible` (s3-compatible) - `bucketPlan` (S3CompatibleBucketPlan, required) - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `supabase` (CreateSupabaseCredentialDTO) - `bucketPlan` (SupabaseBucketPlan, optional) — Supabase S3-compatible bucket configuration used to store call artifacts. - `fallbackIndex` (double, optional) — This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `smallest-ai` (CreateSmallestAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `tavus` (CreateTavusCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `together-ai` (CreateTogetherAICredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `twilio` (CreateTwilioCredentialDTO) - `accountSid` (string, required) — Twilio Account SID associated with the credential. - `apiKey` (string, optional) — This is not returned in the API. - `apiSecret` (string, optional) — This is not returned in the API. - `authToken` (string, optional) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `vonage` (CreateVonageCredentialDTO) - `apiKey` (string, required) — Vonage API key associated with the credential. - `apiSecret` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `webhook` (CreateWebhookCredentialDTO) - `authenticationPlan` (UpdateWorkflowDtoCredentialsItemsDiscriminatorMappingWebhookAuthenticationPlan, required) — This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `custom-credential` (custom-credential) - `authenticationPlan` (CreateCustomCredentialDtoAuthenticationPlan, required) — This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. - `encryptionPlan` (PublicKeyEncryptionPlan, optional) — This is the encryption plan for encrypting sensitive data. Currently supports public-key encryption. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `xai` (CreateXAiCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `microsoft` (microsoft) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `region` (string, optional) — Azure region for the Speech resource. Defaults to `eastus` when omitted. MAI-Voice-2 is preview and region-limited. - `provider`: `neuphonic` (CreateNeuphonicCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `hume` (CreateHumeCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `mistral` (CreateMistralCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `speechmatics` (CreateSpeechmaticsCredentialDTO) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `soniox` (soniox) - `apiKey` (string, required) — This is not returned in the API. - `apiUrl` (string, optional) — 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` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `google.calendar.oauth2-client` (CreateGoogleCalendarOAuth2ClientCredentialDTO) - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `google.calendar.oauth2-authorization` (CreateGoogleCalendarOAuth2AuthorizationCredentialDTO) - `authorizationId` (string, required) — The authorization ID for the OAuth2 authorization - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `google.sheets.oauth2-authorization` (CreateGoogleSheetsOAuth2AuthorizationCredentialDTO) - `authorizationId` (string, required) — The authorization ID for the OAuth2 authorization - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `slack.oauth2-authorization` (CreateSlackOAuth2AuthorizationCredentialDTO) - `authorizationId` (string, required) — The authorization ID for the OAuth2 authorization - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `ghl.oauth2-authorization` (CreateGoHighLevelMCPCredentialDTO) - `authenticationSession` (Oauth2AuthenticationSession, required) — This is the authentication session for the credential. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `inworld` (inworld) - `apiKey` (string, required) — This is the Inworld Basic (Base64) authentication token. This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `minimax` (minimax) - `apiKey` (string, required) — This is not returned in the API. - `groupId` (string, required) — This is the Minimax Group ID. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `wellsaid` (wellsaid) - `apiKey` (string, required) — This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `email` (email) - `email` (string, required) — The recipient email address for alerts - `name` (string, optional) — This is the name of credential. This is just for your reference. - `provider`: `slack-webhook` (slack-webhook) - `webhookUrl` (string, required) — Slack incoming webhook URL. See https://api.slack.com/messaging/webhooks for setup instructions. This is not returned in the API. - `name` (string, optional) — This is the name of credential. This is just for your reference. ### WorkflowUserEditableVoicemailDetection This is the voicemail detection plan for the workflow. ### FormatPlan Controls text normalization before voice synthesis, including built-in formatters, number handling, and custom replacements. - `enabled` (boolean, optional) — 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 - `numberToDigitsCutoff` (double, optional) — 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 - `replacements` (list of FormatPlanReplacementsItems, optional) — 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 \[] - `formattersEnabled` (enum, optional) — 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 - Allowed values: `markdown`, `asterisk`, `quote`, `dash`, `newline`, `colon`, `acronym`, `dollarAmount`, `email`, `date`, `time`, `distance`, `unit`, `percentage`, `phoneNumber`, `number`, `stripAsterisk` ### FallbackPlanVoicesItems ### CartesiaSpeedControl Speaking-speed control expressed as a preset or a value from -1 to 1. ### CartesiaGenerationConfigExperimental Cartesia Sonic 3 generation controls, including accent localization. - `accentLocalization` (integer, optional, default: 0) — 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. ### ToolCallHookAction A hook action that invokes an inline tool or an existing tool when the hook triggers. - `type` (enum, required) — This is the type of action - must be "tool" - Allowed values: `tool` - `tool` (ToolCallHookActionTool, optional) — This is the tool to call. To use an existing tool, send `toolId` instead. - `toolId` (string, optional) — This is the tool to call. To use a transient tool, send `tool` instead. ### MessageAddHookAction A hook action that adds an OpenAI-format message to the conversation and can trigger an assistant response. - `type` (enum, required) — This is the type of action - must be "message.add" - Allowed values: `message.add` - `message` (OpenAIMessage, required) — The message to add to the conversation in OpenAI format - `triggerResponseEnabled` (boolean, optional, default: true) — Whether to trigger an assistant response after adding the message ### SayHookAction A hook action that makes the assistant speak exact text or generate a response from a prompt. - `type` (enum, required) — This is the type of action - must be "say" - Allowed values: `say` - `exact` (SayHookActionExact, optional) — This is the exact message to say. When a string array is provided, one is randomly selected. - `prompt` (SayHookActionPrompt, optional) — 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. ### WorkflowOpenAIModel Workflow model configuration for OpenAI, including model selection, temperature, and maximum output tokens. - `provider` (enum, required) — This is the provider of the model (`openai`). - Allowed values: `openai` - `model` (enum, required) — This is the OpenAI model that will be used. When using Vapi OpenAI or your own Azure Credentials, you have the option to specify the region for the selected model. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest region that make sense. This is helpful when you are required to comply with Data Residency rules. Learn more about Azure regions here https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/. - Allowed values: `gpt-6-luna`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-5.5`, `chat-latest`, `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-5.6-luna:westus3`, `gpt-5.6-terra:westus3`, `gpt-5.6-sol:westus3`, `gpt-5.4:eastus2`, `gpt-5.4:swedencentral`, `gpt-5.4-mini:eastus2`, `gpt-5.4-mini:swedencentral`, `gpt-5.4-nano:eastus2`, `gpt-5.4-nano:swedencentral`, `gpt-5.2:eastus2`, `gpt-5.2:swedencentral`, `gpt-5.1:eastus2`, `gpt-5.1:swedencentral`, `gpt-5:eastus2`, `gpt-5:swedencentral`, `gpt-5:canadaeast`, `gpt-5:eastus`, `gpt-5:westeurope`, `gpt-5:germanywestcentral`, `gpt-5:polandcentral`, `gpt-5:spaincentral`, `gpt-5-mini:eastus2`, `gpt-5-mini:swedencentral`, `gpt-5-mini:westeurope`, `gpt-5-mini:germanywestcentral`, `gpt-5-mini:polandcentral`, `gpt-5-mini:spaincentral`, `gpt-5-nano:eastus2`, `gpt-5-nano:swedencentral`, `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`, `gpt-4.1:australiaeast`, `gpt-4o:australiaeast`, `gpt-5.4-mini:australiaeast` - `messages` (list of OpenAIMessage, optional) — These are the messages used to customize the prompt used for structured output extraction. When provided, these messages replace the default prompts. Message contents support LiquidJS templating with the following variables: * `{{transcript}}` or `{{messages}}` to reference the conversation (one is required) * `{{structuredOutput.name}}`, `{{structuredOutput.description}}`, or `{{structuredOutput.schema}}` to reference the structured output definition (one is required) * `{{systemPrompt}}`, `{{callEndedReason}}`, `{{duration}}`, `{{startedAt}}`, `{{endedAt}}`, and any `assistantOverrides.variableValues` `{{messages}}` is the full message history including tool calls; `{{transcript}}` is the spoken text only, which uses significantly fewer tokens. If not provided, default system and user prompts are used. - `temperature` (double, optional) — This is the temperature of the model. - `maxTokens` (double, optional) — This is the max tokens of the model. ### WorkflowAnthropicModel Workflow model configuration for Anthropic, including model selection, thinking, temperature, and maximum output tokens. - `provider` (enum, required) — This is the provider of the model (`anthropic`). - Allowed values: `anthropic` - `model` (enum, required) — This is the specific model that will be used. - Allowed values: `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-sonnet-5`, `claude-haiku-4-5-20251001` - `messages` (list of OpenAIMessage, optional) — These are the messages used to customize the prompt used for structured output extraction. When provided, these messages replace the default prompts. Message contents support LiquidJS templating with the following variables: * `{{transcript}}` or `{{messages}}` to reference the conversation (one is required) * `{{structuredOutput.name}}`, `{{structuredOutput.description}}`, or `{{structuredOutput.schema}}` to reference the structured output definition (one is required) * `{{systemPrompt}}`, `{{callEndedReason}}`, `{{duration}}`, `{{startedAt}}`, `{{endedAt}}`, and any `assistantOverrides.variableValues` `{{messages}}` is the full message history including tool calls; `{{transcript}}` is the spoken text only, which uses significantly fewer tokens. If not provided, default system and user prompts are used. - `thinking` (AnthropicThinkingConfig, optional) — This is the optional configuration for Anthropic's thinking feature. - If provided, `maxTokens` must be greater than `thinking.budgetTokens`. - `temperature` (double, optional) — This is the temperature of the model. - `maxTokens` (double, optional) — This is the max tokens of the model. ### WorkflowAnthropicBedrockModel Workflow model configuration for Anthropic through Amazon Bedrock, including model selection, thinking, temperature, and maximum output tokens. - `provider` (enum, required) — This is the provider of the model (`anthropic-bedrock`). - Allowed values: `anthropic-bedrock` - `model` (enum, required) — This is the specific model that will be used. - Allowed values: `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`, `global.anthropic.claude-haiku-4-5-20251001-v1:0` - `messages` (list of OpenAIMessage, optional) — These are the messages used to customize the prompt used for structured output extraction. When provided, these messages replace the default prompts. Message contents support LiquidJS templating with the following variables: * `{{transcript}}` or `{{messages}}` to reference the conversation (one is required) * `{{structuredOutput.name}}`, `{{structuredOutput.description}}`, or `{{structuredOutput.schema}}` to reference the structured output definition (one is required) * `{{systemPrompt}}`, `{{callEndedReason}}`, `{{duration}}`, `{{startedAt}}`, `{{endedAt}}`, and any `assistantOverrides.variableValues` `{{messages}}` is the full message history including tool calls; `{{transcript}}` is the spoken text only, which uses significantly fewer tokens. If not provided, default system and user prompts are used. - `thinking` (AnthropicThinkingConfig, optional) — This is the optional configuration for Anthropic's thinking feature. - If provided, `maxTokens` must be greater than `thinking.budgetTokens`. - `temperature` (double, optional) — This is the temperature of the model. - `maxTokens` (double, optional) — This is the max tokens of the model. ### WorkflowGoogleModel Workflow model configuration for Google, including model selection, temperature, and maximum output tokens. - `provider` (enum, required) — This is the provider of the model (`google`). - Allowed values: `google` - `model` (enum, required) — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b - Allowed values: `gemini-3.5-flash`, `gemini-3.1-flash-lite`, `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` - `messages` (list of OpenAIMessage, optional) — These are the messages used to customize the prompt used for structured output extraction. When provided, these messages replace the default prompts. Message contents support LiquidJS templating with the following variables: * `{{transcript}}` or `{{messages}}` to reference the conversation (one is required) * `{{structuredOutput.name}}`, `{{structuredOutput.description}}`, or `{{structuredOutput.schema}}` to reference the structured output definition (one is required) * `{{systemPrompt}}`, `{{callEndedReason}}`, `{{duration}}`, `{{startedAt}}`, `{{endedAt}}`, and any `assistantOverrides.variableValues` `{{messages}}` is the full message history including tool calls; `{{transcript}}` is the spoken text only, which uses significantly fewer tokens. If not provided, default system and user prompts are used. - `temperature` (double, optional) — This is the temperature of the model. - `maxTokens` (double, optional) — This is the max tokens of the model. ### WorkflowCustomModel Workflow model configuration for a custom language model endpoint, including URL, headers, metadata delivery, timeout, model, temperature, and maximum output tokens. - `provider` (enum, required) — This is the provider of the model (`custom-llm`). - Allowed values: `custom-llm` - `url` (string, required) — These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1 - `model` (string, required) — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b - `messages` (list of OpenAIMessage, optional) — These are the messages used to customize the prompt used for structured output extraction. When provided, these messages replace the default prompts. Message contents support LiquidJS templating with the following variables: * `{{transcript}}` or `{{messages}}` to reference the conversation (one is required) * `{{structuredOutput.name}}`, `{{structuredOutput.description}}`, or `{{structuredOutput.schema}}` to reference the structured output definition (one is required) * `{{systemPrompt}}`, `{{callEndedReason}}`, `{{duration}}`, `{{startedAt}}`, `{{endedAt}}`, and any `assistantOverrides.variableValues` `{{messages}}` is the full message history including tool calls; `{{transcript}}` is the spoken text only, which uses significantly fewer tokens. If not provided, default system and user prompts are used. - `metadataSendMode` (enum, optional) — 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`. - Allowed values: `off`, `variable`, `destructured` - `headers` (WorkflowCustomModelHeaders, optional) — These are the headers we'll use for the OpenAI client's `headers`. - `timeoutSeconds` (double, optional) — This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds. - `temperature` (double, optional) — This is the temperature of the model. - `maxTokens` (double, optional) — This is the max tokens of the model. ### MinMessagesCondition - `type` (enum, required) — This is the type discriminator for the minMessages condition. - Allowed values: `minMessages` - `count` (double, required) — This is the minimum number of conversation messages required for the structured output to run. A count of 0 removes the runtime default minimum, so the structured output runs regardless of how few messages the conversation has. ### MinCallDurationCondition - `type` (enum, required) — This is the type discriminator for the minCallDuration condition. - Allowed values: `minCallDuration` - `seconds` (double, required) — This is the minimum call duration in seconds required for the structured output to run. When timestamps are unavailable (for example, chat sessions have no call timestamps), this check passes and does not block the structured output. ### EndedReasonCondition - `type` (enum, required) — This is the type discriminator for the endedReason condition. - Allowed values: `endedReason` - `operator` (enum, required) — This is the membership operator applied against `values`. - 'oneOf': the structured output runs only if the call's ended reason is in `values`. - 'notOneOf': the structured output runs only if the call's ended reason is NOT in `values`. - Allowed values: `oneOf`, `notOneOf` - `values` (list of string, required) — These are the ended reasons compared against the call's ended reason. Any string is accepted so configurations never break when new ended reasons are introduced. Must contain at least one value. ### ScorecardMetricConditionsItems ### RegexOption Enables or disables one regular-expression matching option for a text replacement. - `type` (enum, required) — 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. - Allowed values: `ignore-case`, `whole-word`, `multi-line` - `enabled` (boolean, required) — This is whether to enable the option. @default false ### FallbackAssemblyAITranscriber Fallback configuration for transcribing speech with AssemblyAI, including language, streaming model, endpointing, and vocabulary. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `assembly-ai` - `language` (enum, optional) — This is the language that will be set for the transcription. - Allowed values: `multi`, `en` - `confidenceThreshold` (double, optional) — Transcripts below this confidence threshold will be discarded. @default 0.4 - `formatTurns` (boolean, optional) — This enables formatting of transcripts. @default true - `endOfTurnConfidenceThreshold` (double, optional) — This is the end of turn confidence threshold. The minimum confidence that the end of turn is detected. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @min 0 @max 1 @default 0.7 - `minEndOfTurnSilenceWhenConfident` (double, optional) — This is the minimum end of turn silence when confident in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 160 - `maxTurnSilence` (double, optional) — This is the maximum turn silence time in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 400 - `vadAssistedEndpointingEnabled` (boolean, optional) — 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 - `mode` (enum, optional) — This is the transcription mode used by the Universal Pro speech models. Only applies to `universal-3-5-pro` and `universal-3-6-pro`. @default 'balanced' - Allowed values: `max_accuracy`, `min_latency`, `balanced` - `prompt` (string, optional) — This is a prompt that provides additional context to the transcription model. Only applies to `universal-3-5-pro` and `universal-3-6-pro`. - `agentContext` (string, optional) — This is context about the voice agent that guides the transcription model. Only applies to `universal-3-5-pro` and `universal-3-6-pro`. - `agentContextAutoUpdateEnabled` (boolean, optional, default: false) — When true, the text the assistant just spoke is sent to AssemblyAI as `agent_context` after every assistant turn, replacing the previous value, so the user's reply is transcribed in the context of the question it answers. `agentContext` still seeds the first turn. Text longer than 1750 characters keeps its last 1750 characters. Turns the user interrupted are not sent when the interruption is detected by voice activity (the default, `stopSpeakingPlan.numWords: 0`). Only applies to `universal-3-5-pro` and `universal-3-6-pro`. @default false - `languageCodes` (list of enum, optional) — These are language codes used to steer automatic language detection. Only applies to `universal-3-5-pro` and `universal-3-6-pro`. `ur`, `ru`, `ko`, `ca`, `gl`, `ro`, `et`, `fa`, `yue`, `af`, `mr`, `zu`, `xh` and `nn` were added with `universal-3-6-pro`. - Allowed values: `en`, `es`, `fr`, `de`, `it`, `pt`, `tr`, `nl`, `sv`, `no`, `da`, `fi`, `hi`, `vi`, `ar`, `he`, `ja`, `zh`, `ur`, `ru`, `ko`, `ca`, `gl`, `ro`, `et`, `fa`, `yue`, `af`, `mr`, `zu`, `xh`, `nn` - `speechModel` (enum, optional) — This is the speech model used for the streaming session. Keyterms prompting is supported on universal-streaming-english, universal-3-5-pro and universal-3-6-pro. universal-3-6-pro is AssemblyAI's newest and most accurate voice-agent model. @default 'universal-streaming-english' - Allowed values: `universal-streaming-english`, `universal-streaming-multilingual`, `universal-3-5-pro`, `universal-3-6-pro` - `realtimeUrl` (string, optional) — The WebSocket URL that the transcriber connects to. - `wordBoost` (list of string, optional) — Add up to 2500 characters of custom vocabulary. - `keytermsPrompt` (list of string, optional) — 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 on universal-streaming-english and is included at no extra cost on the Universal Pro models (universal-3-5-pro, universal-3-6-pro). - `endUtteranceSilenceThreshold` (double, optional) — The duration of the end utterance silence threshold in milliseconds. - `disablePartialTranscripts` (boolean, optional) — Disable partial transcripts. Set to `true` to not receive partial transcripts. Defaults to `false`. - `wordFinalizationMaxWaitTime` (double, optional, deprecated) ### FallbackAzureSpeechTranscriber Fallback configuration for transcribing speech with Azure Speech, including language and segmentation. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `azure` - `language` (enum, optional) — 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 - Allowed values: `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` (enum, optional) — Controls how phrase boundaries are detected, enabling either simple time/silence heuristics or more advanced semantic segmentation. - Allowed values: `Default`, `Time`, `Semantic` - `segmentationSilenceTimeoutMs` (double, optional) — Duration of detected silence after which the service finalizes a phrase. Configure to adjust sensitivity to pauses in speech. - `segmentationMaximumTimeMs` (double, optional) — Maximum duration a segment can reach before being cut off when using time-based segmentation. ### FallbackCustomTranscriber Fallback configuration for sending conversation audio to a custom WebSocket transcription server. - `provider` (enum, required) — This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported. - Allowed values: `custom-transcriber` - `server` (Server, required) — This is where the transcription request will be sent. Usage: 1. Vapi will initiate a websocket connection with `server.url`. 2. Vapi will send an initial text frame with the sample rate. Format: ``` { "type": "start", "encoding": "linear16", // 16-bit raw PCM format "container": "raw", "sampleRate": {{sampleRate}}, "channels": 2 // customer is channel 0, assistant is channel 1 } ``` 3. Vapi will send the audio data in 16-bit raw PCM format as binary frames. 4. You can read the messages something like this: ``` ws.on('message', (data, isBinary) => { if (isBinary) { pcmBuffer = Buffer.concat([pcmBuffer, data]); console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`); } else { console.log('Received message:', JSON.parse(data.toString())); } }); ``` 5. You will respond with transcriptions as you have them. Format: ``` { "type": "transcriber-response", "transcription": "Hello, world!", "channel": "customer" | "assistant" } ``` ### FallbackDeepgramTranscriber Fallback configuration for transcribing speech with Deepgram, including model, language, formatting, endpointing, and vocabulary. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `deepgram` - `model` (enum, optional) — 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 - Allowed values: `flux-general-en`, `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` - `language` (enum, optional) — 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 - Allowed values: `bg`, `ca`, `cs`, `da`, `da-DK`, `de`, `de-CH`, `el`, `en`, `en-AU`, `en-GB`, `en-IN`, `en-NZ`, `en-US`, `es`, `es-419`, `es-LATAM`, `et`, `fi`, `fr`, `fr-CA`, `hi`, `hi-Latn`, `hu`, `id`, `it`, `ja`, `ko`, `ko-KR`, `lt`, `lv`, `ms`, `multi`, `nl`, `nl-BE`, `no`, `pl`, `pt`, `pt-BR`, `ro`, `ru`, `sk`, `sv`, `sv-SE`, `ta`, `taq`, `th`, `th-TH`, `tr`, `uk`, `vi`, `zh`, `zh-CN`, `zh-Hans`, `zh-Hant`, `zh-TW` - `smartFormat` (boolean, optional) — This will be use smart format option provided by Deepgram. It's default disabled because it can sometimes format numbers as times but it's getting better. - `mipOptOut` (boolean, optional, default: false) — 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 only applies to your own Deepgram API key. Requests on Vapi's key always opt out, whatever this is set to. @default false - `numerals` (boolean, optional) — 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 - `profanityFilter` (boolean, optional) — If set to true, Deepgram will replace profanity in transcripts with surrounding asterisks, e.g. "f***". @default false - `redaction` (enum, optional) — 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. - Allowed values: `pci`, `pii`, `phi`, `numbers` - `confidenceThreshold` (double, optional) — Transcripts below this confidence threshold will be discarded. @default 0.4 - `eotThreshold` (double, optional) — End-of-turn confidence required to finish a turn. Only used with Flux models. @default 0.7 - `eotTimeoutMs` (double, optional) — A turn will be finished when this much time has passed after speech, regardless of EOT confidence. Only used with Flux models. @default 5000 - `languages` (list of string, optional) — 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`. - `keywords` (list of string, optional) — These keywords are passed to the transcription model to help it pick up use-case specific words. Anything that may not be a common word, like your company name, should be added here. - `keyterm` (list of string, optional) — Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%. - `endpointing` (double, optional) — 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 ### FallbackElevenLabsTranscriber Fallback configuration for transcribing speech with ElevenLabs, including model, language, and speech thresholds. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `11labs` - `model` (FallbackElevenLabsTranscriberModel, optional) — This is the model that will be used for the transcription. - `language` (enum, optional) — This is the language that will be used for the transcription. - Allowed values: `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` (double, optional) — This is the number of seconds of silence before VAD commits (0.3-3.0). - `confidenceThreshold` (double, optional) — This is the VAD sensitivity (0.1-0.9, lower indicates more sensitive). - `minSpeechDurationMs` (double, optional) — This is the minimum speech duration for VAD (50-2000ms). - `minSilenceDurationMs` (double, optional) — This is the minimum silence duration for VAD (50-2000ms). ### FallbackGladiaTranscriber Fallback configuration for transcribing speech with Gladia, including language behavior, audio processing, endpointing, vocabulary, and region. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `gladia` - `model` (FallbackGladiaTranscriberModel, optional) — This is the Gladia model that will be used. Default is 'fast' - `languageBehaviour` (FallbackGladiaTranscriberLanguageBehaviour, optional) — Defines how the transcription model detects the audio language. Default value is 'automatic single language'. - `language` (enum, optional) — Defines the language to use for the transcription. Required when languageBehaviour is 'manual'. - Allowed values: `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` (list of enum, optional) — Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'. - Allowed values: `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` (string, optional) — Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words, technical terms, names, etc. If empty, this argument is ignored. ⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit. - `prosody` (boolean, optional) — If prosody is true, you will get a transcription that can contain prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)… Default value is false. - `audioEnhancer` (boolean, optional) — If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false. - `confidenceThreshold` (double, optional) — Transcripts below this confidence threshold will be discarded. @default 0.4 - `endpointing` (double, optional) — Endpointing time in seconds - time to wait before considering speech ended - `speechThreshold` (double, optional) — Speech threshold - sensitivity configuration for speech detection (0.0 to 1.0) - `customVocabularyEnabled` (boolean, optional) — Enable custom vocabulary for improved accuracy - `customVocabularyConfig` (GladiaCustomVocabularyConfigDTO, optional) — Custom vocabulary configuration - `region` (enum, optional) — Region for processing audio (us-west or eu-west) - Allowed values: `us-west`, `eu-west` - `receivePartialTranscripts` (boolean, optional) — Enable partial transcripts for low-latency streaming transcription ### FallbackGoogleTranscriber Fallback configuration for transcribing speech with Google, including model and language. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `google` - `model` (enum, optional) — This is the model that will be used for the transcription. - Allowed values: `gemini-3.5-flash`, `gemini-3.1-flash-lite`, `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` (enum, optional) — This is the language that will be set for the transcription. - Allowed values: `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` ### FallbackTalkscriberTranscriber Fallback configuration for transcribing speech with Talkscriber, including model and language. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `talkscriber` - `model` (enum, optional) — This is the model that will be used for the transcription. - Allowed values: `whisper` - `language` (enum, optional) — 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 - Allowed values: `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` ### FallbackSpeechmaticsTranscriber Fallback configuration for transcribing speech with Speechmatics, including language, region, diarization, vocabulary, endpointing, and formatting. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `speechmatics` - `customVocabulary` (list of SpeechmaticsCustomVocabularyItem, required) — Words and phrases that Speechmatics should recognize more accurately, with optional phonetic alternatives. - `model` (enum, optional) — This is the model that will be used for the transcription. - Allowed values: `default` - `language` (enum, optional) — Language used for transcription. Set to `auto` to detect the language automatically. - Allowed values: `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` (enum, optional, default: enhanced) — This is the operating point for the transcription. Choose between `standard` for faster turnaround with strong accuracy or `enhanced` for highest accuracy when precision is critical. @default 'enhanced' - Allowed values: `standard`, `enhanced` - `region` (enum, optional, default: eu) — 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' - Allowed values: `eu`, `us` - `enableDiarization` (boolean, optional, default: false) — This enables speaker diarization, which identifies and separates speakers in the transcription. Essential for multi-speaker conversations and conference calls. @default false - `maxDelay` (double, optional, default: 3000) — This sets the maximum delay in milliseconds for partial transcripts. Balances latency and accuracy. @default 3000 - `numeralStyle` (enum, optional, default: written) — This controls how numbers, dates, currencies, and other entities are formatted in the transcription output. @default 'written' - Allowed values: `written`, `spoken` - `endOfTurnSensitivity` (double, optional, default: 0.5) — This is the sensitivity level for end-of-turn detection, which determines when a speaker has finished talking. Higher values are more sensitive. @default 0.5 - `removeDisfluencies` (boolean, optional, default: false) — 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 - `minimumSpeechDuration` (double, optional, default: 0) — 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 ### FallbackOpenAITranscriber Fallback configuration for transcribing speech with OpenAI, including model and language. - `provider` (enum, required) — This is the transcription provider that will be used. - Allowed values: `openai` - `model` (enum, required) — This is the model that will be used for the transcription. - Allowed values: `gpt-4o-transcribe`, `gpt-4o-mini-transcribe` - `language` (enum, optional) — This is the language that will be set for the transcription. - Allowed values: `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` ### FallbackCartesiaTranscriber Fallback configuration for transcribing speech with Cartesia, including model and language. - `provider` (enum, required) — Selects Cartesia for speech-to-text transcription. - Allowed values: `cartesia` - `model` (enum, optional) — The Cartesia speech-to-text model used for transcription. - Allowed values: `ink-whisper`, `ink-2` - `language` (enum, optional) — The language code used for transcription. - Allowed values: `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` ### FallbackSonioxTranscriber Fallback configuration for transcribing speech with Soniox, including model, language detection, endpointing, and vocabulary. - `provider` (enum, required) — Selects Soniox for speech-to-text transcription. - Allowed values: `soniox` - `model` (enum, optional) — The Soniox model to use for transcription. - Allowed values: `stt-rt-v4`, `stt-rt-v5` - `language` (enum, optional) — 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. - Allowed values: `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` - `languages` (list of enum, optional) — 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. - Allowed values: `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` (boolean, optional) — 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` (double, optional) — 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. - `endpointSensitivity` (double, optional) — How likely Soniox is to emit an endpoint (end the caller turn). Higher values make endpoints more likely for faster turn-taking; negative values make them less likely, which helps when callers pause mid-sentence (e.g. reading numbers group by group). Range: -1.0 to 1.0. Default: 0.3 (the platform low-latency voice profile; Soniox's own default is 0.0). Supported by stt-rt-v5; omitted from the Soniox request on explicit stt-rt-v4. Soniox recommends tuning endpointLatencyAdjustmentLevel first, and advises against negative sensitivity while the level is above 0 (the settings work against each other). - `endpointLatencyAdjustmentLevel` (double, optional) — How aggressively Soniox reduces endpoint latency. 0 is Soniox's default semantic endpointing; 3 is the most aggressive. Higher levels return endpoints sooner but may split speech into more segments and slightly reduce accuracy. Integer. Range: 0-3. Default: 2 (the platform low-latency voice profile; Soniox's own default is 0). Supported by stt-rt-v5; omitted from the Soniox request on explicit stt-rt-v4. - `customVocabulary` (list of string, optional) — Custom vocabulary terms to boost recognition accuracy. Useful for brand names, product names, and domain-specific terminology. Maps to Soniox context.terms. - `contextGeneral` (list of SonioxContextGeneralItem, optional) — 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. - `confidenceThreshold` (double, optional) — Transcripts below this confidence are discarded. For a discarded final, an `assistant.transcriber.endpointedSpeechLowConfidence` hook whose range covers the confidence runs (by default `[threshold - 0.2, threshold)`); if none does, the assistant does not respond to that utterance. Confidence is the mean of the per-token scores, and a transcript with an unscored token counts as 1. When unset, nothing is discarded by this setting. ### FallbackXaiTranscriber - `provider` (enum, required) - Allowed values: `xai` - `model` (enum, optional) — The xAI speech-to-text model to use. xAI currently exposes a single STT model — placeholder for future model selection. - Allowed values: `default` - `language` (enum, optional) — 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. - Allowed values: `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` ### GladiaVocabularyItemDTO A Gladia custom vocabulary word or phrase with optional pronunciations, intensity, and language. - `value` (string, required) — The vocabulary word or phrase - `pronunciations` (list of string, optional) — Alternative pronunciations for the vocabulary item - `intensity` (double, optional) — Intensity for this specific vocabulary item (0.0 to 1.0) - `language` (string, optional) — Language code for this vocabulary item (ISO 639-1) ### GeminiMultimodalLiveVoiceConfig Voice selection configuration for Gemini Multimodal Live. - `prebuiltVoiceConfig` (GeminiMultimodalLivePrebuiltVoiceConfig, required) — Prebuilt voice used for Gemini Multimodal Live speech output. ### OpenAiReasonerSkillToolsItems ### ConversationNode A workflow node where the assistant conducts a conversation using optional node-specific providers, tools, prompt, and variable extraction. - `type` (enum, required) — This is the Conversation node. This can be used to start a conversation with the customer. The flow is: - Workflow starts the conversation node - Model is active with the `prompt` and global context. - Model will call a tool to exit this node. - Workflow will extract variables from the conversation. - Workflow continues. - Allowed values: `conversation` - `name` (string, required) — Unique name used to identify this workflow node. - `model` (ConversationNodeModel, optional) — This is the model for the node. This overrides `workflow.model`. - `transcriber` (ConversationNodeTranscriber, optional) — This is the transcriber for the node. This overrides `workflow.transcriber`. - `voice` (ConversationNodeVoice, optional) — This is the voice for the node. This overrides `workflow.voice`. - `tools` (list of ConversationNodeToolsItems, optional) — These are the tools that the conversation node can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together. - `toolIds` (list of string, optional) — These are the tools that the conversation node can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together. - `prompt` (string, optional) — Prompt that guides the assistant while this node is active. - `globalNodePlan` (GlobalNodePlan, optional) — This is the plan for the global node. - `variableExtractionPlan` (VariableExtractionPlan, optional) — This is the plan that controls the variable extraction from the user's responses. Usage: Use `schema` to specify what you want to extract from the user's responses. ```json { "schema": { "type": "object", "properties": { "user": { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "number" } } } } } } ``` This will be extracted as `{{ user.name }}` and `{{ user.age }}` respectively. (Optional) Use `aliases` to create new variables. ```json { "aliases": [ { "key": "userAge", "value": "{{user.age}}" }, { "key": "userName", "value": "{{user.name}}" } ] } ``` This will be extracted as `{{ userAge }}` and `{{ userName }}` respectively. Note: The `schema` field is required for Conversation nodes if you want to extract variables from the user's responses. `aliases` is just a convenience. - `isStart` (boolean, optional) — This is whether or not the node is the start of the workflow. - `metadata` (ConversationNodeMetadata, optional) — This is for metadata you want to store on the task. ### ToolNode A workflow node that invokes an inline tool or an existing saved tool. - `type` (enum, required) — This is the Tool node. This can be used to call a tool in your workflow. The flow is: - Workflow starts the tool node - Model is called to extract parameters needed by the tool from the conversation history - Tool is called with the parameters - Server returns a response - Workflow continues with the response - Allowed values: `tool` - `name` (string, required) — Unique name used to identify this workflow node. - `tool` (ToolNodeTool, optional) — This is the tool to call. To use an existing tool, send `toolId` instead. - `toolId` (string, optional) — This is the tool to call. To use a transient tool, send `tool` instead. - `isStart` (boolean, optional) — This is whether or not the node is the start of the workflow. - `metadata` (ToolNodeMetadata, optional) — This is for metadata you want to store on the task. ### EdgeCondition Condition that must evaluate to true to follow this edge. ### EdgeMetadata This is for metadata you want to store on the edge. ### CallHookModelResponseTimeout Runs configured actions when the language model does not respond before its timeout. - `on` (enum, required) — This is the event that triggers this hook - Allowed values: `model.response.timeout` - `do` (list of CallHookModelResponseTimeoutDoItems, required) — This is the set of actions to perform when the hook triggers ### FormatPlanReplacementsItems ### FallbackAzureVoice Fallback configuration for synthesizing assistant speech with Azure, including voice selection, speed, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `azure` - `voiceId` (FallbackAzureVoiceId, required) — This is the provider-specific ID that will be used. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `speed` (double, optional) — This is the speed multiplier that will be used. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. - `oneOf` (any, optional) ### FallbackCartesiaVoice Fallback configuration for synthesizing assistant speech with Cartesia, including voice and model selection, language, generation controls, pronunciation dictionaries, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `cartesia` - `voiceId` (string, required) — The ID of the particular voice you want to use. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used. This is optional and will default to the correct model for the voiceId. - Allowed values: `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` - `language` (enum, optional) — This is the language that will be used. This is optional and will default to the correct language for the voiceId. - Allowed values: `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` - `experimentalControls` (CartesiaExperimentalControls, optional) — Experimental controls for Cartesia voice generation - `generationConfig` (CartesiaGenerationConfig, optional) — Generation config for fine-grained control of sonic-3 voice output (speed, volume, and experimental controls). Only available for sonic-3 model. - `pronunciationDictId` (string, optional) — Pronunciation dictionary ID for sonic-3. Allows custom pronunciations for specific words. Only available for sonic-3 model. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackHumeVoice Fallback configuration for synthesizing assistant speech with Hume, including model and voice selection, custom voice metadata, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `hume` - `voiceId` (string, required) — The ID of the particular voice you want to use. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used. - Allowed values: `octave`, `octave2` - `isCustomHumeVoice` (boolean, optional) — Indicates whether the chosen voice is a preset Hume AI voice or a custom voice. - `description` (string, optional) — 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` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackCustomVoice Fallback configuration for synthesizing assistant speech through a custom server, including voice selection, server connection, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. Use `custom-voice` for providers that are not natively supported. - Allowed values: `custom-voice` - `server` (Server, required) — This is where the voice request will be sent. Request Example: POST https\://\{server.url} Content-Type: application/json \{ "message": \{ "type": "voice-request", "text": "Hello, world!", "sampleRate": 24000, ...other metadata about the call... } } Response Expected: 1-channel 16-bit raw PCM audio at the sample rate specified in the request. Here is how the response will be piped to the transport: ``` response.on('data', (chunk: Buffer) => \{ outputStream.write(chunk); }); ``` - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `voiceId` (string, optional) — 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` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackDeepgramVoice Fallback configuration for synthesizing assistant speech with Deepgram, including voice and model selection, model-improvement preferences, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `deepgram` - `voiceId` (enum, required) — This is the provider-specific ID that will be used. - Allowed values: `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`, `viktoria`, `kara`, `fabian`, `julius`, `lara`, `elara`, `aurelia`, `hannah`, `kit`, `alexis`, `cliff`, `sienna`, `cole`, `brooke`, `colin`, `gemma`, `haley`, `heather`, `miles`, `sean`, `bree`, `brittany`, `bruce`, `conor`, `donovan`, `drew`, `elise`, `jack`, `kai`, `kelsey`, `maeve`, `marcelo`, `marcus`, `meena`, `meghan`, `naveen`, `paige`, `priya`, `rufus`, `sharon`, `tanner`, `wade`, `wes` - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used. Defaults to 'aura' when not specified. - Allowed values: `aura`, `aura-2`, `flux` - `mipOptOut` (boolean, optional, default: false) — 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 only applies to your own Deepgram API key. Requests on Vapi's key always opt out, whatever this is set to. @default false - `speed` (double, optional, default: 1) — This is the speed multiplier that will be used. Aura-2 accepts 0.7 to 1.5; Flux accepts 0.5 to 1.5 in steps of 0.05. Aura does not support speed. @default 1 - `expressivity` (double, optional, default: 0) — This is the expressivity level for Flux voices, from -2 (flat) to 2 (lively). Deepgram marks this control as beta and may retune the scale. Aura and Aura-2 do not support it. @default 0 - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackElevenLabsVoice Fallback configuration for synthesizing assistant speech with ElevenLabs, including voice and model selection, language, voice tuning, streaming, Speech Synthesis Markup Language parsing, pronunciation dictionaries, chunking, and caching. - `provider` ("11labs", required) — This is the voice provider that will be used. - `voiceId` (FallbackElevenLabsVoiceId, required) — This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice Library. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `stability` (double, optional) — Defines the stability for voice settings. - `similarityBoost` (double, optional) — Defines the similarity boost for voice settings. Ignored by `eleven_v4_turbo`. - `style` (double, optional) — Defines the style for voice settings. Ignored by `eleven_v4_turbo`. - `useSpeakerBoost` (boolean, optional) — Defines the use speaker boost for voice settings. Ignored by `eleven_v4_turbo`. - `speed` (double, optional) — Defines the speed for voice settings. Ignored by `eleven_v4_turbo`. - `optimizeStreamingLatency` (double, optional) — Defines the optimize streaming latency for voice settings. Defaults to 3. Ignored by `eleven_v4_turbo`. - `enableSsmlParsing` (boolean, optional) — This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency. Ignored by `eleven_v4_turbo`. @default false - `autoMode` (boolean, optional) — Defines the auto mode for voice settings. Defaults to false. Ignored by `eleven_v4_turbo`. - `model` (enum, optional) — This is the model that will be used. Defaults to 'eleven_turbo_v2' if not specified. - Allowed values: `eleven_multilingual_v2`, `eleven_turbo_v2`, `eleven_turbo_v2_5`, `eleven_flash_v2`, `eleven_flash_v2_5`, `eleven_monolingual_v1`, `eleven_v3`, `eleven_v4_turbo` - `language` (string, optional) — This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5, Flash v2.5 and v4 Turbo support language enforcement; other models ignore it. - `pronunciationDictionaryLocators` (list of ElevenLabsPronunciationDictionaryLocator, optional) — This is the pronunciation dictionary locators to use. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackVapiVoice Fallback configuration for synthesizing assistant speech with Vapi, including voice selection, speed, pronunciation dictionary, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `vapi` - `voiceId` (string, required) — The voice to use: a built-in Vapi voice name, or a cloned voice id (used with version 2). - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `version` (enum, optional) — The Vapi voice routing generation. `latest` auto-updates to the newest generation; version 1 uses legacy mappings; version 2 can use xAI-backed voices when available. When omitted, Version 1 is used. Accepts the string channel ('latest', '1', '2'); legacy numeric values (1, 2) are also accepted and coerced to their string form. - Allowed values: `1`, `2`, `latest` - `speed` (double, optional, default: 1) — This is the speed multiplier that will be used. @default 1 - `language` (enum, optional) — Language for Vapi voice synthesis. For Version 2, omit this field or set `auto` for automatic language detection. Version 1 supports legacy Vapi language values. - Allowed values: `en-US`, `en-GB`, `en-AU`, `en-CA`, `ja`, `zh`, `de`, `hi`, `fr-FR`, `fr-CA`, `ko`, `pt-BR`, `pt-PT`, `it`, `es-ES`, `es-MX`, `id`, `nl`, `tr`, `fil`, `pl`, `sv`, `bg`, `ro`, `ar-SA`, `ar-AE`, `cs`, `el`, `fi`, `hr`, `ms`, `sk`, `da`, `ta`, `uk`, `ru`, `hu`, `no`, `vi`, `auto`, `en`, `ar`, `ar-EG`, `bn`, `es`, `fr`, `gu`, `he`, `ka`, `kn`, `ml`, `mr`, `pa`, `pt`, `te`, `th`, `tl` - `pronunciationDictionary` (list of VapiPronunciationDictionaryLocator, optional) — List of pronunciation dictionary locators for custom word pronunciations. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackLMNTVoice Fallback configuration for synthesizing assistant speech with LMNT, including voice selection, language, speed, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `lmnt` - `voiceId` (FallbackLMNTVoiceId, required) — This is the provider-specific ID that will be used. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `speed` (double, optional) — This is the speed multiplier that will be used. - `language` (enum, optional) — Two letter ISO 639-1 language code. Use "auto" for auto-detection. - Allowed values: `aa`, `ab`, `ae`, `af`, `ak`, `am`, `an`, `ar`, `as`, `av`, `ay`, `az`, `ba`, `be`, `bg`, `bh`, `bi`, `bm`, `bn`, `bo`, `br`, `bs`, `ca`, `ce`, `ch`, `co`, `cr`, `cs`, `cu`, `cv`, `cy`, `da`, `de`, `dv`, `dz`, `ee`, `el`, `en`, `eo`, `es`, `et`, `eu`, `fa`, `ff`, `fi`, `fj`, `fo`, `fr`, `fy`, `ga`, `gd`, `gl`, `gn`, `gu`, `gv`, `ha`, `he`, `hi`, `ho`, `hr`, `ht`, `hu`, `hy`, `hz`, `ia`, `id`, `ie`, `ig`, `ii`, `ik`, `io`, `is`, `it`, `iu`, `ja`, `jv`, `ka`, `kg`, `ki`, `kj`, `kk`, `kl`, `km`, `kn`, `ko`, `kr`, `ks`, `ku`, `kv`, `kw`, `ky`, `la`, `lb`, `lg`, `li`, `ln`, `lo`, `lt`, `lu`, `lv`, `mg`, `mh`, `mi`, `mk`, `ml`, `mn`, `mr`, `ms`, `mt`, `my`, `na`, `nb`, `nd`, `ne`, `ng`, `nl`, `nn`, `no`, `nr`, `nv`, `ny`, `oc`, `oj`, `om`, `or`, `os`, `pa`, `pi`, `pl`, `ps`, `pt`, `qu`, `rm`, `rn`, `ro`, `ru`, `rw`, `sa`, `sc`, `sd`, `se`, `sg`, `si`, `sk`, `sl`, `sm`, `sn`, `so`, `sq`, `sr`, `ss`, `st`, `su`, `sv`, `sw`, `ta`, `te`, `tg`, `th`, `ti`, `tk`, `tl`, `tn`, `to`, `tr`, `ts`, `tt`, `tw`, `ty`, `ug`, `uk`, `ur`, `uz`, `ve`, `vi`, `vo`, `wa`, `wo`, `xh`, `yi`, `yue`, `yo`, `za`, `zh`, `zu`, `auto` - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackOpenAIVoice Fallback configuration for synthesizing assistant speech with OpenAI, including voice and model selection, delivery instructions, speed, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `openai` - `voiceId` (FallbackOpenAIVoiceId, required) — This is the provider-specific ID that will be used. Voice availability depends on the selected model. quartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder are only supported with GPT-Live models. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used for text-to-speech. - Allowed values: `tts-1`, `tts-1-hd`, `gpt-4o-mini-tts` - `instructions` (string, optional) — This is a prompt that allows you to control the voice of your generated audio. Does not work with 'tts-1' or 'tts-1-hd' models. - `speed` (double, optional) — This is the speed multiplier that will be used. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackPlayHTVoice Fallback configuration for synthesizing assistant speech with PlayHT, including voice and model selection, language, emotion and style guidance, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `playht` - `voiceId` (FallbackPlayHTVoiceId, required) — This is the provider-specific ID that will be used. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `speed` (double, optional) — This is the speed multiplier that will be used. - `temperature` (double, optional) — A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the model's default temperature will be used. The temperature parameter controls variance. Lower temperatures result in more predictable results, higher temperatures allow each run to vary more, so the voice may sound less like the baseline voice. - `emotion` (enum, optional) — An emotion to be applied to the speech. - Allowed values: `female_happy`, `female_sad`, `female_angry`, `female_fearful`, `female_disgust`, `female_surprised`, `male_happy`, `male_sad`, `male_angry`, `male_fearful`, `male_disgust`, `male_surprised` - `voiceGuidance` (double, optional) — A number between 1 and 6. Use lower numbers to reduce how unique your chosen voice will be compared to other voices. - `styleGuidance` (double, optional) — A number between 1 and 30. Use lower numbers to to reduce how strong your chosen emotion will be. Higher numbers will create a very emotional performance. - `textGuidance` (double, optional) — A number between 1 and 2. This number influences how closely the generated speech adheres to the input text. Use lower values to create more fluid speech, but with a higher chance of deviating from the input text. Higher numbers will make the generated speech more accurate to the input text, ensuring that the words spoken align closely with the provided text. - `model` (enum, optional) — Playht voice model/engine to use. - Allowed values: `PlayHT2.0`, `PlayHT2.0-turbo`, `Play3.0-mini`, `PlayDialog` - `language` (enum, optional) — The language to use for the speech. - Allowed values: `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` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackWellSaidVoice Fallback configuration for synthesizing assistant speech with WellSaid, including voice and model selection, Speech Synthesis Markup Language support, voice libraries, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `wellsaid` - `voiceId` (string, required) — The WellSaid speaker ID to synthesize. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used. - Allowed values: `caruso`, `legacy` - `enableSsml` (boolean, optional) — Enables limited SSML translation for input text. - `libraryIds` (list of string, optional) — Array of library IDs to use for voice synthesis. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackRimeAIVoice Fallback configuration for synthesizing assistant speech with Rime AI, including voice and model selection, language, speed, pauses, phonemization, latency, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `rime-ai` - `voiceId` (FallbackRimeAIVoiceId, required) — This is the provider-specific ID that will be used. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used. Defaults to 'arcana' when not specified. - Allowed values: `arcana`, `coda`, `mistv2`, `mistv3`, `mist` - `speed` (double, optional) — This is the speed multiplier that will be used. - `pauseBetweenBrackets` (boolean, optional) — This is a flag that controls whether to add slight pauses using angle brackets. Example: "Hi. \<200> I'd love to have a conversation with you." adds a 200ms pause between the first and second sentences. - `phonemizeBetweenBrackets` (boolean, optional) — This is a flag that controls whether text inside brackets should be phonemized (converted to phonetic pronunciation) - Example: "\{h'El.o} World" will pronounce "Hello" as expected. - `reduceLatency` (boolean, optional) — This is a flag that controls whether to optimize for reduced latency in streaming. https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency - `inlineSpeedAlpha` (string, optional) — This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha - `language` (enum, optional) — Language for speech synthesis. Uses ISO 639 codes. Supported: en, es, de, fr, ar, hi, ja, he, pt, ta, si. - Allowed values: `en`, `es`, `de`, `fr`, `ar`, `hi`, `ja`, `he`, `pt`, `ta`, `si` - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackSmallestAIVoice Fallback configuration for synthesizing assistant speech with Smallest AI, including voice and model selection, speed, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `smallest-ai` - `voiceId` (FallbackSmallestAIVoiceId, required) — This is the provider-specific ID that will be used. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — Smallest AI voice model to use. Defaults to 'lightning' when not specified. - Allowed values: `lightning` - `speed` (double, optional) — This is the speed multiplier that will be used. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackTavusVoice Fallback configuration for using Tavus as the assistant's voice provider, including persona, callback, context, greeting, conversation properties, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `tavus` - `voiceId` (FallbackTavusVoiceVoiceId, required) — This is the provider-specific ID that will be used. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `personaId` (string, optional) — This is the unique identifier for the persona that the replica will use in the conversation. - `callbackUrl` (string, optional) — This is the url that will receive webhooks with updates regarding the conversation state. - `conversationName` (string, optional) — This is the name for the conversation. - `conversationalContext` (string, optional) — This is the context that will be appended to any context provided in the persona, if one is provided. - `customGreeting` (string, optional) — This is the custom greeting that the replica will give once a participant joines the conversation. - `properties` (TavusConversationProperties, optional) — These are optional properties used to customize the conversation. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackNeuphonicVoice Fallback configuration for synthesizing assistant speech with Neuphonic, including voice and model selection, language, speed, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `neuphonic` - `voiceId` (string, required) — This is the provider-specific ID that will be used. - `language` (FallbackNeuphonicVoiceLanguage, required) — This is the language (ISO 639-1) that is enforced for the model. - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional) — This is the model that will be used. Defaults to 'neu_fast' if not specified. - Allowed values: `neu_hq`, `neu_fast` - `speed` (double, optional) — This is the speed multiplier that will be used. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackSesameVoice Fallback configuration for synthesizing assistant speech with Sesame, including voice and model selection, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `sesame` - `voiceId` (string, required) — This is the provider-specific ID that will be used. - `model` (enum, required) — This is the model that will be used. - Allowed values: `csm-1b` - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackInworldVoice Fallback configuration for synthesizing assistant speech with Inworld, including voice and model selection, language, temperature, speaking rate, chunking, and caching. - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `inworld` - `voiceId` (enum, required) — Available voices by language: • en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun, Theodore, Timothy, Wendy, Dominus, 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 - Allowed values: `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` - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `model` (enum, optional, default: inworld-tts-1) — This is the model that will be used. - Allowed values: `inworld-tts-1` - `languageCode` (enum, optional, default: en) — Language code for Inworld TTS synthesis - Allowed values: `en`, `zh`, `ko`, `nl`, `fr`, `es`, `ja`, `de`, `it`, `pl`, `pt`, `ru`, `hi`, `he`, `ar` - `temperature` (double, optional, default: 1.1) — 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. - `speakingRate` (double, optional, default: 1) — 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. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackXaiVoice - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `xai` - `voiceId` (enum, required) — Built-in voices: eve, ara, rex, sal, leo. Cloned voice IDs are also accepted. - Allowed values: `eve`, `ara`, `rex`, `sal`, `leo` - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `language` (enum, optional, default: en) — BCP-47 language code for xAI TTS synthesis. - Allowed values: `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` - `speed` (double, optional, default: 1.1) — Speed multiplier for xAI TTS synthesis. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### FallbackMicrosoftVoice - `provider` (enum, required) — This is the voice provider that will be used. - Allowed values: `microsoft` - `voiceId` (enum, required) — MAI-Voice-2 voice ID. Built-in voices listed in enum. - Allowed values: `de-DE-Klaus:MAI-Voice-2`, `de-DE-Mia:MAI-Voice-2`, `en-AU-Lisa:MAI-Voice-2`, `en-US-Ethan:MAI-Voice-2`, `en-US-Grant:MAI-Voice-2`, `en-US-Harper:MAI-Voice-2`, `en-US-Iris:MAI-Voice-2`, `en-US-Jasper:MAI-Voice-2`, `en-US-Olivia:MAI-Voice-2`, `es-ES-Marta:MAI-Voice-2`, `es-MX-Alejo:MAI-Voice-2`, `es-MX-Valeria:MAI-Voice-2`, `fr-FR-Marc:MAI-Voice-2`, `fr-FR-Soleil:MAI-Voice-2`, `hi-IN-Arjun:MAI-Voice-2`, `hi-IN-Dhruv:MAI-Voice-2`, `hi-IN-Kavya:MAI-Voice-2`, `hi-IN-Priya:MAI-Voice-2`, `hu-HU-Bence:MAI-Voice-2`, `hu-HU-Levente:MAI-Voice-2`, `hu-HU-Lilla:MAI-Voice-2`, `hu-HU-Réka:MAI-Voice-2`, `it-IT-Luca:MAI-Voice-2`, `it-IT-Rosa:MAI-Voice-2`, `ko-KR-Hana:MAI-Voice-2`, `ko-KR-Junho:MAI-Voice-2`, `nl-NL-Fleur:MAI-Voice-2`, `nl-NL-Sander:MAI-Voice-2`, `pt-BR-Caio:MAI-Voice-2`, `pt-BR-Luana:MAI-Voice-2`, `pt-BR-Pedro:MAI-Voice-2`, `pt-BR-Rafael:MAI-Voice-2`, `pt-PT-Rui:MAI-Voice-2`, `ro-RO-Andrei:MAI-Voice-2`, `ro-RO-Elena:MAI-Voice-2`, `ro-RO-Ioana:MAI-Voice-2`, `ro-RO-Radu:MAI-Voice-2`, `ru-RU-Lev:MAI-Voice-2`, `ru-RU-Masha:MAI-Voice-2`, `th-TH-Krit:MAI-Voice-2`, `th-TH-Nattapong:MAI-Voice-2`, `tr-TR-Aydin:MAI-Voice-2`, `tr-TR-Elif:MAI-Voice-2`, `zh-CN-Bo:MAI-Voice-2`, `zh-CN-Lan:MAI-Voice-2`, `zh-CN-Mei:MAI-Voice-2` - `cachingEnabled` (boolean, optional, default: true) — This is the flag to toggle voice caching for the assistant. - `style` (enum, optional) — Speaking style applied via mstts:express-as on every request. Unknown styles are ignored by Azure and fall back to neutral. - Allowed values: `adventurous`, `angry`, `caring`, `cheerful`, `confused`, `curious`, `determined`, `disappointed`, `disgusted`, `embarrassed`, `empathy`, `encouraging`, `excited`, `fearful`, `friendly`, `happy`, `hopeful`, `jealous`, `joyful`, `nostalgic`, `reflective`, `regretful`, `relieved`, `sad`, `serious`, `shouting`, `softvoice`, `surprised`, `whispering` - `styleDegree` (double, optional, default: 1) — Style intensity (0.01–2). Default 1 = the predefined style strength. Only applies when `style` is set. - `role` (enum, optional) — Role-play (age/gender imitation). Requires `style` to be set; ignored otherwise. - Allowed values: `Girl`, `Boy`, `YoungAdultFemale`, `YoungAdultMale`, `OlderAdultFemale`, `OlderAdultMale`, `SeniorFemale`, `SeniorMale` - `speed` (double, optional) — This is the speed multiplier that will be used. - `chunkPlan` (ChunkPlan, optional) — This is the plan for chunking the model output before it is sent to the voice provider. ### ToolCallHookActionTool This is the tool to call. To use an existing tool, send `toolId` instead. ### SayHookActionExact This is the exact message to say. When a string array is provided, one is randomly selected. ### SayHookActionPrompt 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. ### WorkflowCustomModelHeaders These are the headers we'll use for the OpenAI client's `headers`. ### NumberComparatorScorecardMetricCondition - `type` (enum, required) — This is the type of the condition. Currently only 'comparator' is supported. - Allowed values: `comparator` - `comparator` (enum, required) — This is the comparator that will be used to compare the result of the structured output with the value specified. Only '=', '!=', '>', '\<', '>=', and '\<=' are supported for number conditions Only '=' is supported for boolean conditions. - Allowed values: `=`, `!=`, `>`, `<`, `>=`, `<=` - `value` (double, required) — This is the value that will be used to compare the result of the structured output with the comparator. If the result of the comparison is true, the points will be added to the overall score. - `points` (double, required) — These are the points that will be added to the overall score if the condition is met. The points must be between 0 and 100. ### BooleanComparatorScorecardMetricCondition - `type` (enum, required) — This is the type of the condition. Currently only 'comparator' is supported. - Allowed values: `comparator` - `comparator` (enum, required) — The comparator can only be '=' for boolean conditions. - Allowed values: `=` - `value` (boolean, required) — This is the value that will be used to compare the result of the structured output with the comparator. If the result of the comparison is true, the points will be added to the overall score. - `points` (double, required) — These are the points that will be added to the overall score if the condition is met. The points must be between 0 and 100. ### FallbackElevenLabsTranscriberModel This is the model that will be used for the transcription. ### FallbackGladiaTranscriberModel This is the Gladia model that will be used. Default is 'fast' ### FallbackGladiaTranscriberLanguageBehaviour Defines how the transcription model detects the audio language. Default value is 'automatic single language'. ### GeminiMultimodalLivePrebuiltVoiceConfig Selects a prebuilt voice for Gemini Multimodal Live audio output. - `voiceName` (enum, required) — Prebuilt Gemini voice used for audio output. - Allowed values: `Puck`, `Charon`, `Kore`, `Fenrir`, `Aoede` ### ConversationNodeModel This is the model for the node. This overrides `workflow.model`. ### ConversationNodeTranscriber This is the transcriber for the node. This overrides `workflow.transcriber`. ### ConversationNodeVoice This is the voice for the node. This overrides `workflow.voice`. ### ConversationNodeToolsItems ### GlobalNodePlan Controls whether a conversation node can be entered globally and the condition evaluated before that node runs. - `enabled` (boolean, optional, default: false) — This is the flag to determine if this node is a global node @default false - `enterCondition` (string, optional, default: ) — This is the condition that will be checked to determine if the global node should be executed. @default '' ### ConversationNodeMetadata This is for metadata you want to store on the task. ### ToolNodeTool This is the tool to call. To use an existing tool, send `toolId` instead. ### ToolNodeMetadata This is for metadata you want to store on the task. ### AIEdgeCondition An AI-evaluated boolean condition that determines whether a workflow follows an edge. - `type` (enum, required) — Selects an AI-evaluated workflow edge condition. - Allowed values: `ai` - `prompt` (string, required) — This is the prompt for the AI edge condition. It should evaluate to a boolean. ### CallHookModelResponseTimeoutDoItems ### ExactReplacement Replaces an exact word or phrase before text is sent to a voice provider. - `type` (enum, required) — 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' } - Allowed values: `exact` - `key` (string, required) — This is the key to replace. - `value` (string, required) — This is the value that will replace the match. - `replaceAllEnabled` (boolean, optional, default: false) — 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 ### RegexReplacement Replaces text matching a regular expression before it is sent to a voice provider. - `type` (enum, required) — 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() } - Allowed values: `regex` - `regex` (string, required) — 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. - `value` (string, required) — This is the value that will replace the match. - `options` (list of RegexOption, optional) — These are the options for the regex replacement. Defaults to all disabled. @default [] ### FallbackAzureVoiceId This is the provider-specific ID that will be used. ### FallbackElevenLabsVoiceId This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice Library. ### FallbackLMNTVoiceId This is the provider-specific ID that will be used. ### FallbackOpenAIVoiceId This is the provider-specific ID that will be used. Voice availability depends on the selected model. quartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder are only supported with GPT-Live models. ### FallbackPlayHTVoiceId This is the provider-specific ID that will be used. ### FallbackRimeAIVoiceId This is the provider-specific ID that will be used. ### FallbackSmallestAIVoiceId This is the provider-specific ID that will be used. ### FallbackTavusVoiceVoiceId This is the provider-specific ID that will be used. ### FallbackNeuphonicVoiceLanguage This is the language (ISO 639-1) that is enforced for the model. ## Examples **Response** ```json { "type": "apiRequest", "createdAt": "2024-01-15T09:30:00Z", "id": "string", "method": "POST", "orgId": "string", "updatedAt": "2024-01-15T09:30:00Z", "url": "string", "backoffPlan": { "type": "fixed", "maxRetries": 0, "baseDelaySeconds": 1, "excludedStatusCodes": [ 400, 401, 403, 404 ] }, "body": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": {}, "items": {}, "properties": {}, "description": {}, "pattern": {}, "format": {}, "required": {}, "enum": {}, "title": {} }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "credentialId": "550e8400-e29b-41d4-a716-446655440000", "description": "string", "encryptedPaths": [ "string" ], "headers": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": {}, "items": {}, "properties": {}, "description": {}, "pattern": {}, "format": {}, "required": {}, "enum": {}, "title": {} }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "latestVersion": "string", "messages": [ { "blocking": false, "conditions": [ { "operator": "eq", "param": "string", "value": "string" } ], "content": "string", "contents": [ { "language": "aa", "text": "string", "type": "text" } ], "type": "request-start" } ], "name": "string", "parameters": [ { "key": "string", "value": {} } ], "rejectionPlan": { "conditions": [ { "regex": "\\\\b(cancel|stop|wait)\\\\b - Matches whole words", "type": "regex" } ] }, "timeoutSeconds": 20, "variableExtractionPlan": { "schema": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": "string", "items": { "type": {}, "items": {}, "properties": {}, "description": {}, "pattern": {}, "format": {}, "required": {}, "enum": {}, "title": {} }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "properties": {}, "description": "string", "pattern": "string", "format": "date-time", "required": [ "string" ], "enum": [ "string" ], "title": "string" }, "aliases": [ { "key": "string", "value": "string" } ] } } ```