---
title: "Delete Tool"
method: DELETE
path: "/tool/{id}"
tags: ["Tools"]
---

# Delete Tool

`DELETE /tool/{id}`

## Path parameters

- `id` string, uuid, required

## Response `200`

- union
  - ApiRequestTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'apiRequest', required — The type of tool. "apiRequest" for API request tool.
    - `name` string — 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.
    - `method` 'POST' | 'GET' | 'PUT' | 'PATCH' | 'DELETE', required
    - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
    - `credentialId` string — The credential ID for API request authentication
    - `encryptedPaths` string[] — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined.
    - `parameters` ToolParameter[] — Static key-value pairs merged into the request body. Values support Liquid templates.
      - `key` string, required — This is the key of the parameter.
      - `value` union, required — The value of the parameter. Any JSON type. String values support Liquid templates.
        - string
        - number
        - boolean
        - object
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
    - `description` string — This is the description of the tool. This will be passed to the model.
    - `url` string, required — This is where the request will be sent.
    - `body` JsonSchema
      - `type` 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object', required — This is the type of output you'd like. `string`, `number`, `integer`, `boolean` are the primitive types and should be obvious. `array` and `object` are more interesting and quite powerful. They allow you to define nested structures. For `array`, you can define the schema of the items in the array using the `items` property. For `object`, you can define the properties of the object using the `properties` property.
      - `items` JsonSchema — recursive
      - `properties` object — 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 — This is the description to help the model understand what it needs to output.
      - `pattern` string — This is the pattern of the string. This is a regex that will be used to validate the data in question. To use a common format, use the `format` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs#supported-properties
      - `format` 'date-time' | 'time' | 'date' | 'duration' | 'email' | 'hostname' | 'ipv4' | 'ipv6' | 'uuid' — This is the format of the string. To pass a regex, use the `pattern` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat&type-restrictions=string-restrictions
      - `required` string[] — This is a list of properties that are required. This only makes sense if the type is "object".
      - `enum` string[] — This array specifies the allowed values that can be used to restrict the output of the model.
      - `title` string — This is the title of the schema.
    - `headers` JsonSchema
      - `type` 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object', required — This is the type of output you'd like. `string`, `number`, `integer`, `boolean` are the primitive types and should be obvious. `array` and `object` are more interesting and quite powerful. They allow you to define nested structures. For `array`, you can define the schema of the items in the array using the `items` property. For `object`, you can define the properties of the object using the `properties` property.
      - `items` JsonSchema — recursive
      - `properties` object — 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 — This is the description to help the model understand what it needs to output.
      - `pattern` string — This is the pattern of the string. This is a regex that will be used to validate the data in question. To use a common format, use the `format` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs#supported-properties
      - `format` 'date-time' | 'time' | 'date' | 'duration' | 'email' | 'hostname' | 'ipv4' | 'ipv6' | 'uuid' — This is the format of the string. To pass a regex, use the `pattern` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat&type-restrictions=string-restrictions
      - `required` string[] — This is a list of properties that are required. This only makes sense if the type is "object".
      - `enum` string[] — This array specifies the allowed values that can be used to restrict the output of the model.
      - `title` string — This is the title of the schema.
    - `backoffPlan` BackoffPlan
      - `type` object, required — This is the type of backoff plan to use. Defaults to fixed. @default fixed
      - `maxRetries` number, required — This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries). @default 0
      - `baseDelaySeconds` number, required — This is the base delay in seconds. For linear backoff, this is the delay between each retry. For exponential backoff, this is the initial delay.
      - `excludedStatusCodes` object[] — This is the excluded status codes. If the response status code is in this list, the request will not be retried. By default, the request will be retried for any non-2xx status code.
    - `variableExtractionPlan` VariableExtractionPlan
      - `schema` JsonSchema
        - `type` 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object', required — This is the type of output you'd like. `string`, `number`, `integer`, `boolean` are the primitive types and should be obvious. `array` and `object` are more interesting and quite powerful. They allow you to define nested structures. For `array`, you can define the schema of the items in the array using the `items` property. For `object`, you can define the properties of the object using the `properties` property.
        - `items` JsonSchema — recursive
        - `properties` object — 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 — This is the description to help the model understand what it needs to output.
        - `pattern` string — This is the pattern of the string. This is a regex that will be used to validate the data in question. To use a common format, use the `format` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs#supported-properties
        - `format` 'date-time' | 'time' | 'date' | 'duration' | 'email' | 'hostname' | 'ipv4' | 'ipv6' | 'uuid' — This is the format of the string. To pass a regex, use the `pattern` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat&type-restrictions=string-restrictions
        - `required` string[] — This is a list of properties that are required. This only makes sense if the type is "object".
        - `enum` string[] — This array specifies the allowed values that can be used to restrict the output of the model.
        - `title` string — This is the title of the schema.
      - `aliases` VariableExtractionAlias[] — 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}}`.
        - `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}}"
  - CodeTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'code', required — The type of tool. "code" for Code tool.
    - `async` boolean — 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
      - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
      - `credentialId` string — The credential ID for server authentication
      - `staticIpAddressesEnabled` boolean — If enabled, requests will originate from a static set of IPs owned and managed by Vapi. @default false
      - `encryptedPaths` string[] — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined.
      - `url` string — This is where the request will be sent.
      - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
      - `backoffPlan` BackoffPlan
        - `type` object, required — This is the type of backoff plan to use. Defaults to fixed. @default fixed
        - `maxRetries` number, required — This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries). @default 0
        - `baseDelaySeconds` number, required — This is the base delay in seconds. For linear backoff, this is the delay between each retry. For exponential backoff, this is the initial delay.
        - `excludedStatusCodes` object[] — This is the excluded status codes. If the response status code is in this list, the request will not be retried. By default, the request will be retried for any non-2xx status code.
    - `code` string, required — TypeScript code to execute when the tool is called
    - `environmentVariables` CodeToolEnvironmentVariable[] — Environment variables available in code via `env` object
      - `name` string, required — Name of the environment variable
      - `value` string, required — Value of the environment variable. Supports Liquid templates.
    - `timeoutSeconds` number — 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 — Credential ID containing the Val Town API key
    - `variableExtractionPlan` VariableExtractionPlan
      - `schema` JsonSchema
        - `type` 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object', required — This is the type of output you'd like. `string`, `number`, `integer`, `boolean` are the primitive types and should be obvious. `array` and `object` are more interesting and quite powerful. They allow you to define nested structures. For `array`, you can define the schema of the items in the array using the `items` property. For `object`, you can define the properties of the object using the `properties` property.
        - `items` JsonSchema — recursive
        - `properties` object — 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 — This is the description to help the model understand what it needs to output.
        - `pattern` string — This is the pattern of the string. This is a regex that will be used to validate the data in question. To use a common format, use the `format` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs#supported-properties
        - `format` 'date-time' | 'time' | 'date' | 'duration' | 'email' | 'hostname' | 'ipv4' | 'ipv6' | 'uuid' — This is the format of the string. To pass a regex, use the `pattern` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat&type-restrictions=string-restrictions
        - `required` string[] — This is a list of properties that are required. This only makes sense if the type is "object".
        - `enum` string[] — This array specifies the allowed values that can be used to restrict the output of the model.
        - `title` string — This is the title of the schema.
      - `aliases` VariableExtractionAlias[] — 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}}`.
        - `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}}"
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
    - `function` OpenAIFunction
      - `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 — 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 — This is the description of what the function does, used by the AI to choose when and how to call the function.
      - `parameters` OpenAIFunctionParameters
        - `type` 'object', required — This must be set to 'object'. It instructs the model to return a JSON object containing the function call properties.
        - `properties` object, 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` string[] — This specifies the properties that are required by the function.
  - DtmfTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'dtmf', required — The type of tool. "dtmf" for DTMF tool.
    - `sipInfoDtmfEnabled` boolean — 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.
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
  - EndCallTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'endCall', required — The type of tool. "endCall" for End Call tool.
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
  - FunctionTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'function', required — The type of tool. "function" for Function tool.
    - `async` boolean — 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
      - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
      - `credentialId` string — The credential ID for server authentication
      - `staticIpAddressesEnabled` boolean — If enabled, requests will originate from a static set of IPs owned and managed by Vapi. @default false
      - `encryptedPaths` string[] — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined.
      - `url` string — This is where the request will be sent.
      - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
      - `backoffPlan` BackoffPlan
        - `type` object, required — This is the type of backoff plan to use. Defaults to fixed. @default fixed
        - `maxRetries` number, required — This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries). @default 0
        - `baseDelaySeconds` number, required — This is the base delay in seconds. For linear backoff, this is the delay between each retry. For exponential backoff, this is the initial delay.
        - `excludedStatusCodes` object[] — This is the excluded status codes. If the response status code is in this list, the request will not be retried. By default, the request will be retried for any non-2xx status code.
    - `variableExtractionPlan` VariableExtractionPlan
      - `schema` JsonSchema
        - `type` 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object', required — This is the type of output you'd like. `string`, `number`, `integer`, `boolean` are the primitive types and should be obvious. `array` and `object` are more interesting and quite powerful. They allow you to define nested structures. For `array`, you can define the schema of the items in the array using the `items` property. For `object`, you can define the properties of the object using the `properties` property.
        - `items` JsonSchema — recursive
        - `properties` object — 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 — This is the description to help the model understand what it needs to output.
        - `pattern` string — This is the pattern of the string. This is a regex that will be used to validate the data in question. To use a common format, use the `format` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs#supported-properties
        - `format` 'date-time' | 'time' | 'date' | 'duration' | 'email' | 'hostname' | 'ipv4' | 'ipv6' | 'uuid' — This is the format of the string. To pass a regex, use the `pattern` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat&type-restrictions=string-restrictions
        - `required` string[] — This is a list of properties that are required. This only makes sense if the type is "object".
        - `enum` string[] — This array specifies the allowed values that can be used to restrict the output of the model.
        - `title` string — This is the title of the schema.
      - `aliases` VariableExtractionAlias[] — 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}}`.
        - `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}}"
    - `parameters` ToolParameter[] — Static key-value pairs merged into the request body. Values support Liquid templates.
      - `key` string, required — This is the key of the parameter.
      - `value` union, required — The value of the parameter. Any JSON type. String values support Liquid templates.
        - string
        - number
        - boolean
        - object
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
    - `function` OpenAIFunction
      - `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 — 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 — This is the description of what the function does, used by the AI to choose when and how to call the function.
      - `parameters` OpenAIFunctionParameters
        - `type` 'object', required — This must be set to 'object'. It instructs the model to return a JSON object containing the function call properties.
        - `properties` object, 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` string[] — This specifies the properties that are required by the function.
  - KnowledgeBaseTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'knowledgeBase', required — A Vapi-hosted knowledge base retrieval tool.
    - `knowledgeBaseId` string, uuid, nullable, required — 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.
    - `function` KnowledgeBaseToolFunction, required
      - `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 — 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, 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
        - `type` 'object', required — This must be set to 'object'. It instructs the model to return a JSON object containing the function call properties.
        - `properties` object, 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` string[] — This specifies the properties that are required by the function.
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
  - GhlTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'ghl', required — The type of tool. "ghl" for GHL tool.
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
    - `metadata` GhlToolMetadata, required
      - `workflowId` string
      - `locationId` string
  - TransferCallTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'transferCall', required
    - `destinations` union[] — 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.
      - union
        - TransferDestinationAssistant
          - `message` union — This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.
            - string
            - CustomMessage
              - …
          - `type` 'assistant', required
          - `transferMode` 'rolling-history' | 'swap-system-message-in-history' | 'swap-system-message-in-history-and-remove-transfer-tool-messages' | 'delete-history' — 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'
          - `assistantName` string, required — This is the assistant to transfer the call to.
          - `name` string — 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 — This is the description of the destination, used by the AI to choose when and how to transfer the call.
        - TransferDestinationNumber
          - `message` union — This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.
            - string
            - CustomMessage
              - …
          - `type` 'number', required
          - `numberE164CheckEnabled` boolean — This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it. Use cases: - `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks. - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). @default true (E164 check is enabled)
          - `number` string, required — This is the phone number to transfer the call to.
          - `extension` string — This is the extension to dial after transferring the call to the `number`.
          - `callerId` string — This is the caller ID to use when transferring the call to the `number`. Usage: - If not provided, the caller ID will be the number the call is coming **from**. Example: 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. For Twilio, you can read up more here: https://www.twilio.com/docs/voice/twiml/dial#callerid
          - `transferPlan` TransferPlan
            - `mode` 'blind-transfer' | 'blind-transfer-add-summary-to-sip-header' | 'warm-transfer-say-message' | 'warm-transfer-say-summary' | 'warm-transfer-twiml' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-message' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary' | 'warm-transfer-experimental', required — This configures how transfer is executed and the experience of the destination party receiving the call. Usage: - `blind-transfer`: The assistant forwards the call to the destination without any message or summary. - `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP header X-Transfer-Summary to the call to include the summary. - `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call. - `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer. - `warm-transfer-twiml`: The assistant dials the destination, executes the twiml instructions on the destination call leg, connects the customer, and leaves the call. - `warm-transfer-experimental`: The assistant puts the customer on hold, dials the destination, and if the destination answers (and is human), delivers a message or summary before connecting the customer. If the destination is unreachable or not human (e.g., with voicemail detection), the assistant delivers the `fallbackMessage` to the customer and optionally ends the call. @default 'blind-transfer'
            - `message` union — This is the message the assistant will deliver to the destination party before connecting the customer. Usage: - Used only when `mode` is `blind-transfer-add-summary-to-sip-header`, `warm-transfer-say-message`, `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`, or `warm-transfer-experimental`.
              - …
            - `timeout` number — This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary @default 60
            - `sipVerb` object — This specifies the SIP verb to use while transferring the call. - 'refer': Uses SIP REFER to transfer the call (default) - 'bye': Ends current call with SIP BYE - 'dial': Uses SIP DIAL to transfer the call
            - `dialTimeout` number — 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 — This is the URL to an audio file played while the customer is on hold during transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the customer. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV. - If not provided, the default hold audio will be used.
            - `transferCompleteAudioUrl` string — This is the URL to an audio file played after the warm transfer message or summary is delivered to the destination party. It can be used to play a custom sound like 'beep' to notify that the transfer is complete. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the destination party. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV.
            - `contextEngineeringPlan` union — 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 — This is the TwiML instructions to execute on the destination call leg before connecting the customer. Usage: - Used only when `mode` is `warm-transfer-twiml`. - Supports only `Play`, `Say`, `Gather`, `Hangup` and `Pause` verbs. - Maximum length is 4096 characters. Example: ``` <Say voice="alice" language="en-US">Hello, transferring a customer to you.</Say> <Pause length="2"/> <Say>They called about billing questions.</Say> ```
            - `summaryPlan` SummaryPlan
              - …
            - `sipHeadersInReferToEnabled` boolean — This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params. @default false
            - `fallbackPlan` TransferFallbackPlan
              - …
          - `name` string — 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 — This is the description of the destination, used by the AI to choose when and how to transfer the call.
        - TransferDestinationSip
          - `message` union — This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.
            - string
            - CustomMessage
              - …
          - `type` 'sip', required
          - `sipUri` string, required — This is the SIP URI to transfer the call to.
          - `callerId` string — 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
            - `mode` 'blind-transfer' | 'blind-transfer-add-summary-to-sip-header' | 'warm-transfer-say-message' | 'warm-transfer-say-summary' | 'warm-transfer-twiml' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-message' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary' | 'warm-transfer-experimental', required — This configures how transfer is executed and the experience of the destination party receiving the call. Usage: - `blind-transfer`: The assistant forwards the call to the destination without any message or summary. - `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP header X-Transfer-Summary to the call to include the summary. - `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call. - `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer. - `warm-transfer-twiml`: The assistant dials the destination, executes the twiml instructions on the destination call leg, connects the customer, and leaves the call. - `warm-transfer-experimental`: The assistant puts the customer on hold, dials the destination, and if the destination answers (and is human), delivers a message or summary before connecting the customer. If the destination is unreachable or not human (e.g., with voicemail detection), the assistant delivers the `fallbackMessage` to the customer and optionally ends the call. @default 'blind-transfer'
            - `message` union — This is the message the assistant will deliver to the destination party before connecting the customer. Usage: - Used only when `mode` is `blind-transfer-add-summary-to-sip-header`, `warm-transfer-say-message`, `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`, or `warm-transfer-experimental`.
              - …
            - `timeout` number — This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary @default 60
            - `sipVerb` object — This specifies the SIP verb to use while transferring the call. - 'refer': Uses SIP REFER to transfer the call (default) - 'bye': Ends current call with SIP BYE - 'dial': Uses SIP DIAL to transfer the call
            - `dialTimeout` number — 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 — This is the URL to an audio file played while the customer is on hold during transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the customer. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV. - If not provided, the default hold audio will be used.
            - `transferCompleteAudioUrl` string — This is the URL to an audio file played after the warm transfer message or summary is delivered to the destination party. It can be used to play a custom sound like 'beep' to notify that the transfer is complete. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the destination party. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV.
            - `contextEngineeringPlan` union — 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 — This is the TwiML instructions to execute on the destination call leg before connecting the customer. Usage: - Used only when `mode` is `warm-transfer-twiml`. - Supports only `Play`, `Say`, `Gather`, `Hangup` and `Pause` verbs. - Maximum length is 4096 characters. Example: ``` <Say voice="alice" language="en-US">Hello, transferring a customer to you.</Say> <Pause length="2"/> <Say>They called about billing questions.</Say> ```
            - `summaryPlan` SummaryPlan
              - …
            - `sipHeadersInReferToEnabled` boolean — This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params. @default false
            - `fallbackPlan` TransferFallbackPlan
              - …
          - `sipHeaders` object — These are custom headers to be added to SIP refer during transfer call.
          - `name` string — 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 — This is the description of the destination, used by the AI to choose when and how to transfer the call.
    - `id` string, required — This is the unique identifier for the tool.
    - `orgId` string, required — This is the unique identifier for the organization that this tool belongs to.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
  - HandoffTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'handoff', required — This is the type of the tool. When you're using handoff tool, we recommend adding this to your system prompt --- # System context You are part of a multi-agent system designed to make agent coordination and execution easy. Agents uses two primary abstraction: **Agents** and **Handoffs**. An agent encompasses instructions and tools and can hand off a conversation to another agent when appropriate. Handoffs are achieved by calling a handoff function, generally named `handoff_to_<agent_name>`. Handoffs between agents are handled seamlessly in the background; do not mention or draw attention to these handoffs in your conversation with the user. # Agent context {put your agent system prompt here} ---
    - `defaultResult` string — This is the default local tool result message used when no runtime handoff result override is returned.
    - `destinations` union[] — 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.
      - union
        - HandoffDestinationAssistant
          - `type` 'assistant', required
          - `contextEngineeringPlan` union — This is the plan for manipulating the message context before handing off the call to the next assistant.
            - ContextEngineeringPlanLastNMessages
              - …
            - ContextEngineeringPlanNone
              - …
            - ContextEngineeringPlanAll
              - …
            - ContextEngineeringPlanUserAndAssistantMessages
              - …
            - ContextEngineeringPlanPreviousAssistantMessages
              - …
          - `assistantName` string — This is the assistant to transfer the call to. You must provide either assistantName or assistantId.
          - `assistantId` string — This is the assistant id to transfer the call to. You must provide either assistantName or assistantId.
          - `assistant` CreateAssistantDTO
            - `transcriber` union — These are the options for the assistant's transcriber.
              - …
            - `model` union — These are the options for the assistant's LLM.
              - …
            - `voice` union — These are the options for the assistant's voice.
              - …
            - `firstMessage` string — This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If unspecified, assistant will wait for user to speak and use the model to respond once they speak.
            - `firstMessageInterruptionsEnabled` boolean
            - `firstMessageMode` 'assistant-speaks-first' | 'assistant-speaks-first-with-model-generated-message' | 'assistant-waits-for-user' — This is the mode for the first message. Default is 'assistant-speaks-first'. Use: - 'assistant-speaks-first' to have the assistant speak first. - 'assistant-waits-for-user' to have the assistant wait for the user to speak first. - 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points). @default 'assistant-speaks-first'
            - `voicemailDetection` union — These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool]. By default, voicemail detection is disabled.
              - …
            - `clientMessages` string[] — These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started. You can check the shape of the messages in ClientMessage schema.
            - `serverMessages` string[] — These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started. You can check the shape of the messages in ServerMessage schema.
            - `maxDurationSeconds` number — This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes)
            - `backgroundSound` union — This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'. You can also provide a custom sound by providing a URL to an audio file.
              - …
            - `modelOutputInMessagesEnabled` boolean — This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. @default false
            - `transportConfigurations` TransportConfigurationTwilio[] — These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.
              - …
            - `observabilityPlan` LangfuseObservabilityPlan
              - …
            - `credentials` union[] — These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.
              - …
            - `hooks` union[] — This is a set of actions that will be performed on certain events.
              - …
            - `name` string — This is the name of the assistant. This is required when you want to transfer between assistants in a call.
            - `voicemailMessage` string — This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up.
            - `endCallMessage` string — This is the message that the assistant will say if it ends the call. If unspecified, it will hang up without saying anything.
            - `endCallPhrases` string[] — This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.
            - `compliancePlan` CompliancePlan
              - …
            - `metadata` object — This is for metadata you want to store on the assistant.
            - `backgroundSpeechDenoisingPlan` BackgroundSpeechDenoisingPlan
              - …
            - `analysisPlan` AnalysisPlan
              - …
            - `artifactPlan` ArtifactPlan
              - …
            - `startSpeakingPlan` StartSpeakingPlan
              - …
            - `stopSpeakingPlan` StopSpeakingPlan
              - …
            - `monitorPlan` MonitorPlan
              - …
            - `credentialIds` string[] — These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.
            - `server` Server
              - …
            - `keypadInputPlan` KeypadInputPlan
              - …
          - `variableExtractionPlan` VariableExtractionPlan
            - `schema` JsonSchema
              - …
            - `aliases` VariableExtractionAlias[] — 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}}`.
              - …
          - `assistantOverrides` AssistantOverrides
            - `transcriber` union — These are the options for the assistant's transcriber.
              - …
            - `model` union — These are the options for the assistant's LLM.
              - …
            - `voice` union — These are the options for the assistant's voice.
              - …
            - `firstMessage` string — This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If unspecified, assistant will wait for user to speak and use the model to respond once they speak.
            - `firstMessageInterruptionsEnabled` boolean
            - `firstMessageMode` 'assistant-speaks-first' | 'assistant-speaks-first-with-model-generated-message' | 'assistant-waits-for-user' — This is the mode for the first message. Default is 'assistant-speaks-first'. Use: - 'assistant-speaks-first' to have the assistant speak first. - 'assistant-waits-for-user' to have the assistant wait for the user to speak first. - 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points). @default 'assistant-speaks-first'
            - `voicemailDetection` union — These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool]. By default, voicemail detection is disabled.
              - …
            - `clientMessages` string[] — These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started. You can check the shape of the messages in ClientMessage schema.
            - `serverMessages` string[] — These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started. You can check the shape of the messages in ServerMessage schema.
            - `maxDurationSeconds` number — This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes)
            - `backgroundSound` union — This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'. You can also provide a custom sound by providing a URL to an audio file.
              - …
            - `modelOutputInMessagesEnabled` boolean — This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. @default false
            - `transportConfigurations` TransportConfigurationTwilio[] — These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.
              - …
            - `observabilityPlan` LangfuseObservabilityPlan
              - …
            - `credentials` union[] — These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.
              - …
            - `hooks` union[] — This is a set of actions that will be performed on certain events.
              - …
            - `tools:append` union[]
              - …
            - `variableValues` object — These are values that will be used to replace the template variables in the assistant messages and other text-based fields. This uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html So for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`. `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will be replaced with the current date and time in New York. Some VAPI reserved defaults: - *customer* - the customer object
            - `name` string — This is the name of the assistant. This is required when you want to transfer between assistants in a call.
            - `voicemailMessage` string — This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up.
            - `endCallMessage` string — This is the message that the assistant will say if it ends the call. If unspecified, it will hang up without saying anything.
            - `endCallPhrases` string[] — This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.
            - `compliancePlan` CompliancePlan
              - …
            - `metadata` object — This is for metadata you want to store on the assistant.
            - `backgroundSpeechDenoisingPlan` BackgroundSpeechDenoisingPlan
              - …
            - `analysisPlan` AnalysisPlan
              - …
            - `artifactPlan` ArtifactPlan
              - …
            - `startSpeakingPlan` StartSpeakingPlan
              - …
            - `stopSpeakingPlan` StopSpeakingPlan
              - …
            - `monitorPlan` MonitorPlan
              - …
            - `credentialIds` string[] — These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.
            - `server` Server
              - …
            - `keypadInputPlan` KeypadInputPlan
              - …
          - `description` string — This is the description of the destination, used by the AI to choose when and how to transfer the call.
        - HandoffDestinationDynamic
          - `type` 'dynamic', required
          - `server` Server
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `staticIpAddressesEnabled` boolean — If enabled, requests will originate from a static set of IPs owned and managed by Vapi. @default false
            - `encryptedPaths` string[] — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined.
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
          - `description` string — This is the description of the destination, used by the AI to choose when and how to transfer the call.
        - HandoffDestinationSquad
          - `type` 'squad', required
          - `contextEngineeringPlan` union — This is the plan for manipulating the message context before handing off the call to the squad.
            - ContextEngineeringPlanLastNMessages
              - …
            - ContextEngineeringPlanNone
              - …
            - ContextEngineeringPlanAll
              - …
            - ContextEngineeringPlanUserAndAssistantMessages
              - …
            - ContextEngineeringPlanPreviousAssistantMessages
              - …
          - `squadId` string — This is the squad id to transfer the call to.
          - `squad` CreateSquadDTO
            - `name` string — This is the name of the squad.
            - `members` SquadMemberDTO[], required — This is the list of assistants that make up the squad. The call will start with the first assistant in the list.
              - …
            - `membersOverrides` AssistantOverrides
              - …
          - `entryAssistantName` string — 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
            - `schema` JsonSchema
              - …
            - `aliases` VariableExtractionAlias[] — 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}}`.
              - …
          - `squadOverrides` AssistantOverrides
            - `transcriber` union — These are the options for the assistant's transcriber.
              - …
            - `model` union — These are the options for the assistant's LLM.
              - …
            - `voice` union — These are the options for the assistant's voice.
              - …
            - `firstMessage` string — This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If unspecified, assistant will wait for user to speak and use the model to respond once they speak.
            - `firstMessageInterruptionsEnabled` boolean
            - `firstMessageMode` 'assistant-speaks-first' | 'assistant-speaks-first-with-model-generated-message' | 'assistant-waits-for-user' — This is the mode for the first message. Default is 'assistant-speaks-first'. Use: - 'assistant-speaks-first' to have the assistant speak first. - 'assistant-waits-for-user' to have the assistant wait for the user to speak first. - 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points). @default 'assistant-speaks-first'
            - `voicemailDetection` union — These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool]. By default, voicemail detection is disabled.
              - …
            - `clientMessages` string[] — These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started. You can check the shape of the messages in ClientMessage schema.
            - `serverMessages` string[] — These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started. You can check the shape of the messages in ServerMessage schema.
            - `maxDurationSeconds` number — This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes)
            - `backgroundSound` union — This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'. You can also provide a custom sound by providing a URL to an audio file.
              - …
            - `modelOutputInMessagesEnabled` boolean — This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. @default false
            - `transportConfigurations` TransportConfigurationTwilio[] — These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.
              - …
            - `observabilityPlan` LangfuseObservabilityPlan
              - …
            - `credentials` union[] — These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.
              - …
            - `hooks` union[] — This is a set of actions that will be performed on certain events.
              - …
            - `tools:append` union[]
              - …
            - `variableValues` object — These are values that will be used to replace the template variables in the assistant messages and other text-based fields. This uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html So for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`. `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will be replaced with the current date and time in New York. Some VAPI reserved defaults: - *customer* - the customer object
            - `name` string — This is the name of the assistant. This is required when you want to transfer between assistants in a call.
            - `voicemailMessage` string — This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up.
            - `endCallMessage` string — This is the message that the assistant will say if it ends the call. If unspecified, it will hang up without saying anything.
            - `endCallPhrases` string[] — This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.
            - `compliancePlan` CompliancePlan
              - …
            - `metadata` object — This is for metadata you want to store on the assistant.
            - `backgroundSpeechDenoisingPlan` BackgroundSpeechDenoisingPlan
              - …
            - `analysisPlan` AnalysisPlan
              - …
            - `artifactPlan` ArtifactPlan
              - …
            - `startSpeakingPlan` StartSpeakingPlan
              - …
            - `stopSpeakingPlan` StopSpeakingPlan
              - …
            - `monitorPlan` MonitorPlan
              - …
            - `credentialIds` string[] — These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.
            - `server` Server
              - …
            - `keypadInputPlan` KeypadInputPlan
              - …
          - `description` string — This is the description of the destination, used by the AI to choose when and how to transfer the call.
    - `id` string, required — This is the unique identifier for the tool.
    - `orgId` string, required — This is the unique identifier for the organization that this tool belongs to.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
    - `function` OpenAIFunction
      - `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 — 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 — This is the description of what the function does, used by the AI to choose when and how to call the function.
      - `parameters` OpenAIFunctionParameters
        - `type` 'object', required — This must be set to 'object'. It instructs the model to return a JSON object containing the function call properties.
        - `properties` object, 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` string[] — This specifies the properties that are required by the function.
  - BashTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'bash', required — The type of tool. "bash" for Bash tool.
    - `subType` 'bash_20241022', required — The sub type of tool.
    - `server` Server
      - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
      - `credentialId` string — The credential ID for server authentication
      - `staticIpAddressesEnabled` boolean — If enabled, requests will originate from a static set of IPs owned and managed by Vapi. @default false
      - `encryptedPaths` string[] — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined.
      - `url` string — This is where the request will be sent.
      - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
      - `backoffPlan` BackoffPlan
        - `type` object, required — This is the type of backoff plan to use. Defaults to fixed. @default fixed
        - `maxRetries` number, required — This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries). @default 0
        - `baseDelaySeconds` number, required — This is the base delay in seconds. For linear backoff, this is the delay between each retry. For exponential backoff, this is the initial delay.
        - `excludedStatusCodes` object[] — This is the excluded status codes. If the response status code is in this list, the request will not be retried. By default, the request will be retried for any non-2xx status code.
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
    - `name` 'bash', required — The name of the tool, fixed to 'bash'
  - ComputerTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'computer', required — The type of tool. "computer" for Computer tool.
    - `subType` 'computer_20241022', required — The sub type of tool.
    - `server` Server
      - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
      - `credentialId` string — The credential ID for server authentication
      - `staticIpAddressesEnabled` boolean — If enabled, requests will originate from a static set of IPs owned and managed by Vapi. @default false
      - `encryptedPaths` string[] — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined.
      - `url` string — This is where the request will be sent.
      - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
      - `backoffPlan` BackoffPlan
        - `type` object, required — This is the type of backoff plan to use. Defaults to fixed. @default fixed
        - `maxRetries` number, required — This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries). @default 0
        - `baseDelaySeconds` number, required — This is the base delay in seconds. For linear backoff, this is the delay between each retry. For exponential backoff, this is the initial delay.
        - `excludedStatusCodes` object[] — This is the excluded status codes. If the response status code is in this list, the request will not be retried. By default, the request will be retried for any non-2xx status code.
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
    - `name` 'computer', required — The name of the tool, fixed to 'computer'
    - `displayWidthPx` number, required — The display width in pixels
    - `displayHeightPx` number, required — The display height in pixels
    - `displayNumber` number — Optional display number
  - TextEditorTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'textEditor', required — The type of tool. "textEditor" for Text Editor tool.
    - `subType` 'text_editor_20241022', required — The sub type of tool.
    - `server` Server
      - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
      - `credentialId` string — The credential ID for server authentication
      - `staticIpAddressesEnabled` boolean — If enabled, requests will originate from a static set of IPs owned and managed by Vapi. @default false
      - `encryptedPaths` string[] — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined.
      - `url` string — This is where the request will be sent.
      - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
      - `backoffPlan` BackoffPlan
        - `type` object, required — This is the type of backoff plan to use. Defaults to fixed. @default fixed
        - `maxRetries` number, required — This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries). @default 0
        - `baseDelaySeconds` number, required — This is the base delay in seconds. For linear backoff, this is the delay between each retry. For exponential backoff, this is the initial delay.
        - `excludedStatusCodes` object[] — This is the excluded status codes. If the response status code is in this list, the request will not be retried. By default, the request will be retried for any non-2xx status code.
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
    - `name` 'str_replace_editor', required — The name of the tool, fixed to 'str_replace_editor'
  - QueryTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'query', required — The type of tool. "query" for Query tool.
    - `knowledgeBases` KnowledgeBase[] — The knowledge bases to query
      - `name` string, required — The name of the knowledge base
      - `provider` 'google', required — The provider of the knowledge base
      - `model` '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' — The model to use for the knowledge base
      - `description` string, required — A description of the knowledge base
      - `fileIds` string[], required — The file IDs associated with this knowledge base
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
  - GoogleCalendarCreateEventTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'google.calendar.event.create', required — The type of tool. "google.calendar.event.create" for Google Calendar Create Event tool.
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
  - GoogleSheetsRowAppendTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'google.sheets.row.append', required — The type of tool. "google.sheets.row.append" for Google Sheets Row Append tool.
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
  - GoogleCalendarCheckAvailabilityTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'google.calendar.availability.check', required — The type of tool. "google.calendar.availability.check" for Google Calendar Check Availability tool.
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
  - SlackSendMessageTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'slack.message.send', required — The type of tool. "slack.message.send" for Slack Send Message tool.
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
    - `rejectionPlan` ToolRejectionPlan
      - `conditions` union[] — 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
        - union
          - RegexCondition
            - `type` 'regex', required — This is the type discriminator for regex condition
            - `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
              - …
            - `negate` boolean — 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
            - `type` 'liquid', required — This is the type discriminator for liquid condition
            - `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
            - `type` 'group', required — This is the type discriminator for group condition
            - `operator` 'AND' | 'OR', required — This is the logical operator for combining conditions in this group
            - `conditions` union[], required — This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.
              - …
  - SmsTool
    - `latestVersion` string, nullable
    - `messages` union[] — 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.
      - union
        - ToolMessageStart
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-start', 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.
          - `blocking` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageComplete
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-complete', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageFailed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-failed', 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.
          - `role` 'assistant' | 'system' — 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.
          - `endCallAfterSpokenEnabled` boolean — 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 — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
        - ToolMessageDelayed
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'request-response-delayed', required — This message is triggered when the tool call is delayed. Same timing means variants; different timings mean staged updates.
          - `timingMilliseconds` number — The number of milliseconds to wait for the server response before saying this delayed message.
          - `content` string — This is the content that the assistant says when this message is triggered.
          - `conditions` Condition[] — This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.
            - `operator` 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', required — This is the operator you want to use to compare the parameter and value.
            - `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.
    - `type` 'sms', required — The type of tool. "sms" for Twilio SMS sending tool.
    - `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.
    - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was created.
    - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the tool was last updated.
- … truncated; see the full OpenAPI document linked below

## Other responses

- `409`

## Changes

> 57 revisions in range; 2 not diffed, 14 could not be searched.

- **2026-03-07** `de31e89ab2f9` — 238 info
  - added the optional property `oneOf[subschema #1: ApiRequestTool]/parameters` to the response with the `200` status
  - added the optional property `oneOf[subschema #5: FunctionTool]/parameters` to the response with the `200` status
  - added the optional property `oneOf[subschema #8: HandoffTool]/destinations/items/oneOf[subschema #1: Assistant]/assistant/allOf[#/components/schemas/CreateAssistantDTO]/hooks/items/oneOf[subschema #1: CallHookCallEnding]/do/items/oneOf[subschema #1: ToolCallHookAction]/tool/oneOf[subschema #1: ApiRequestTool]/parameters` to the response with the `200` status
  - added the optional property `oneOf[subschema #8: HandoffTool]/destinations/items/oneOf[subschema #1: Assistant]/assistant/allOf[#/components/schemas/CreateAssistantDTO]/hooks/items/oneOf[subschema #1: CallHookCallEnding]/do/items/oneOf[subschema #1: ToolCallHookAction]/tool/oneOf[subschema #7: FunctionTool]/parameters` to the response with the `200` status
  - …234 more
- …earlier changes not shown

[Full history](https://skmtc.dev/vapiai/apis/vapi-api/changes/tool/:id/delete.md)

---

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