@vapi-ai/web 2.3.1 → 2.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/api.d.ts CHANGED
@@ -184,6 +184,14 @@ export interface Recording {
184
184
  /** This is the mono recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`. */
185
185
  mono?: Mono;
186
186
  }
187
+ export interface NodeArtifact {
188
+ /** This is the node id. */
189
+ nodeName?: string;
190
+ /** This is the messages that were spoken during the node. */
191
+ messages?: object[];
192
+ /** This is the object containing the variables extracted from the node. */
193
+ variables?: object;
194
+ }
187
195
  export interface Artifact {
188
196
  /** These are the messages that were spoken during the call. */
189
197
  messages?: (UserMessage | SystemMessage | BotMessage | ToolCallMessage | ToolCallResultMessage)[];
@@ -215,6 +223,10 @@ export interface Artifact {
215
223
  transcript?: string;
216
224
  /** This is the packet capture url for the call. This is only available for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`. */
217
225
  pcapUrl?: string;
226
+ /** This is the history of workflow nodes that were executed during the call. */
227
+ nodes?: NodeArtifact[];
228
+ /** This is the state of variables at the end of the workflow execution. */
229
+ variables?: object;
218
230
  }
219
231
  export interface FallbackTranscriberPlan {
220
232
  transcribers: (FallbackAssemblyAITranscriber | FallbackAzureSpeechTranscriber | FallbackCustomTranscriber | FallbackDeepgramTranscriber | FallbackElevenLabsTranscriber | FallbackGladiaTranscriber | FallbackGoogleTranscriber | FallbackTalkscriberTranscriber | FallbackSpeechmaticsTranscriber | FallbackOpenAITranscriber)[];
@@ -233,6 +245,13 @@ export interface AssemblyAITranscriber {
233
245
  * @example 0.4
234
246
  */
235
247
  confidenceThreshold?: number;
248
+ /**
249
+ * Uses Assembly AI's new Universal Streaming API. See: https://www.assemblyai.com/docs/speech-to-text/universal-streaming
250
+ *
251
+ * @default false
252
+ * @example false
253
+ */
254
+ enableUniversalStreamingApi?: boolean;
236
255
  /** The WebSocket URL that the transcriber connects to. */
237
256
  realtimeUrl?: string;
238
257
  /** Add up to 2500 characters of custom vocabulary. */
@@ -458,11 +477,13 @@ export interface GladiaTranscriber {
458
477
  /** This is the transcription provider that will be used. */
459
478
  provider: 'gladia';
460
479
  /** This is the Gladia model that will be used. Default is 'fast' */
461
- model?: 'fast' | 'accurate';
480
+ model?: 'fast' | 'accurate' | 'solaria-1';
462
481
  /** Defines how the transcription model detects the audio language. Default value is 'automatic single language'. */
463
482
  languageBehaviour?: 'manual' | 'automatic single language' | 'automatic multiple languages';
464
483
  /** Defines the language to use for the transcription. Required when languageBehaviour is 'manual'. */
465
484
  language?: 'af' | 'sq' | 'am' | 'ar' | 'hy' | 'as' | 'az' | 'ba' | 'eu' | 'be' | 'bn' | 'bs' | 'br' | 'bg' | 'ca' | 'zh' | 'hr' | 'cs' | 'da' | 'nl' | 'en' | 'et' | 'fo' | 'fi' | 'fr' | 'gl' | 'ka' | 'de' | 'el' | 'gu' | 'ht' | 'ha' | 'haw' | 'he' | 'hi' | 'hu' | 'is' | 'id' | 'it' | 'ja' | 'jv' | 'kn' | 'kk' | 'km' | 'ko' | 'lo' | 'la' | 'lv' | 'ln' | 'lt' | 'lb' | 'mk' | 'mg' | 'ms' | 'ml' | 'mt' | 'mi' | 'mr' | 'mn' | 'my' | 'ne' | 'no' | 'nn' | 'oc' | 'ps' | 'fa' | 'pl' | 'pt' | 'pa' | 'ro' | 'ru' | 'sa' | 'sr' | 'sn' | 'sd' | 'si' | 'sk' | 'sl' | 'so' | 'es' | 'su' | 'sw' | 'sv' | 'tl' | 'tg' | 'ta' | 'tt' | 'te' | 'th' | 'bo' | 'tr' | 'tk' | 'uk' | 'ur' | 'uz' | 'vi' | 'cy' | 'yi' | 'yo';
485
+ /** Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'. */
486
+ languages?: 'af' | 'sq' | 'am' | 'ar' | 'hy' | 'as' | 'az' | 'ba' | 'eu' | 'be' | 'bn' | 'bs' | 'br' | 'bg' | 'ca' | 'zh' | 'hr' | 'cs' | 'da' | 'nl' | 'en' | 'et' | 'fo' | 'fi' | 'fr' | 'gl' | 'ka' | 'de' | 'el' | 'gu' | 'ht' | 'ha' | 'haw' | 'he' | 'hi' | 'hu' | 'is' | 'id' | 'it' | 'ja' | 'jv' | 'kn' | 'kk' | 'km' | 'ko' | 'lo' | 'la' | 'lv' | 'ln' | 'lt' | 'lb' | 'mk' | 'mg' | 'ms' | 'ml' | 'mt' | 'mi' | 'mr' | 'mn' | 'my' | 'ne' | 'no' | 'nn' | 'oc' | 'ps' | 'fa' | 'pl' | 'pt' | 'pa' | 'ro' | 'ru' | 'sa' | 'sr' | 'sn' | 'sd' | 'si' | 'sk' | 'sl' | 'so' | 'es' | 'su' | 'sw' | 'sv' | 'tl' | 'tg' | 'ta' | 'tt' | 'te' | 'th' | 'bo' | 'tr' | 'tk' | 'uk' | 'ur' | 'uz' | 'vi' | 'cy' | 'yi' | 'yo';
466
487
  /**
467
488
  * Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words, technical terms, names, etc. If empty, this argument is ignored.
468
489
  * ⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit.
@@ -515,7 +536,7 @@ export interface GoogleTranscriber {
515
536
  /** This is the transcription provider that will be used. */
516
537
  provider: 'google';
517
538
  /** This is the model that will be used for the transcription. */
518
- model?: 'gemini-2.5-pro-preview-05-06' | 'gemini-2.5-flash-preview-04-17' | 'gemini-2.0-flash-thinking-exp' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-preview-02-05' | 'gemini-2.0-flash-exp' | 'gemini-2.0-flash-realtime-exp' | 'gemini-1.5-flash' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro';
539
+ model?: 'gemini-2.5-pro-preview-05-06' | 'gemini-2.5-flash-preview-05-20' | 'gemini-2.5-flash-preview-04-17' | 'gemini-2.0-flash-thinking-exp' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-preview-02-05' | 'gemini-2.0-flash-exp' | 'gemini-2.0-flash-realtime-exp' | 'gemini-1.5-flash' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro';
519
540
  /** This is the language that will be set for the transcription. */
520
541
  language?: 'Multilingual' | 'Arabic' | 'Bengali' | 'Bulgarian' | 'Chinese' | 'Croatian' | 'Czech' | 'Danish' | 'Dutch' | 'English' | 'Estonian' | 'Finnish' | 'French' | 'German' | 'Greek' | 'Hebrew' | 'Hindi' | 'Hungarian' | 'Indonesian' | 'Italian' | 'Japanese' | 'Korean' | 'Latvian' | 'Lithuanian' | 'Norwegian' | 'Polish' | 'Portuguese' | 'Romanian' | 'Russian' | 'Serbian' | 'Slovak' | 'Slovenian' | 'Spanish' | 'Swahili' | 'Swedish' | 'Thai' | 'Turkish' | 'Ukrainian' | 'Vietnamese';
521
542
  /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */
@@ -545,6 +566,13 @@ export interface FallbackAssemblyAITranscriber {
545
566
  * @example 0.4
546
567
  */
547
568
  confidenceThreshold?: number;
569
+ /**
570
+ * Uses Assembly AI's new Universal Streaming API. See: https://www.assemblyai.com/docs/speech-to-text/universal-streaming
571
+ *
572
+ * @default false
573
+ * @example false
574
+ */
575
+ enableUniversalStreamingApi?: boolean;
548
576
  /** The WebSocket URL that the transcriber connects to. */
549
577
  realtimeUrl?: string;
550
578
  /** Add up to 2500 characters of custom vocabulary. */
@@ -710,11 +738,13 @@ export interface FallbackGladiaTranscriber {
710
738
  /** This is the transcription provider that will be used. */
711
739
  provider: 'gladia';
712
740
  /** This is the Gladia model that will be used. Default is 'fast' */
713
- model?: 'fast' | 'accurate';
741
+ model?: 'fast' | 'accurate' | 'solaria-1';
714
742
  /** Defines how the transcription model detects the audio language. Default value is 'automatic single language'. */
715
743
  languageBehaviour?: 'manual' | 'automatic single language' | 'automatic multiple languages';
716
744
  /** Defines the language to use for the transcription. Required when languageBehaviour is 'manual'. */
717
745
  language?: 'af' | 'sq' | 'am' | 'ar' | 'hy' | 'as' | 'az' | 'ba' | 'eu' | 'be' | 'bn' | 'bs' | 'br' | 'bg' | 'ca' | 'zh' | 'hr' | 'cs' | 'da' | 'nl' | 'en' | 'et' | 'fo' | 'fi' | 'fr' | 'gl' | 'ka' | 'de' | 'el' | 'gu' | 'ht' | 'ha' | 'haw' | 'he' | 'hi' | 'hu' | 'is' | 'id' | 'it' | 'ja' | 'jv' | 'kn' | 'kk' | 'km' | 'ko' | 'lo' | 'la' | 'lv' | 'ln' | 'lt' | 'lb' | 'mk' | 'mg' | 'ms' | 'ml' | 'mt' | 'mi' | 'mr' | 'mn' | 'my' | 'ne' | 'no' | 'nn' | 'oc' | 'ps' | 'fa' | 'pl' | 'pt' | 'pa' | 'ro' | 'ru' | 'sa' | 'sr' | 'sn' | 'sd' | 'si' | 'sk' | 'sl' | 'so' | 'es' | 'su' | 'sw' | 'sv' | 'tl' | 'tg' | 'ta' | 'tt' | 'te' | 'th' | 'bo' | 'tr' | 'tk' | 'uk' | 'ur' | 'uz' | 'vi' | 'cy' | 'yi' | 'yo';
746
+ /** Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'. */
747
+ languages?: 'af' | 'sq' | 'am' | 'ar' | 'hy' | 'as' | 'az' | 'ba' | 'eu' | 'be' | 'bn' | 'bs' | 'br' | 'bg' | 'ca' | 'zh' | 'hr' | 'cs' | 'da' | 'nl' | 'en' | 'et' | 'fo' | 'fi' | 'fr' | 'gl' | 'ka' | 'de' | 'el' | 'gu' | 'ht' | 'ha' | 'haw' | 'he' | 'hi' | 'hu' | 'is' | 'id' | 'it' | 'ja' | 'jv' | 'kn' | 'kk' | 'km' | 'ko' | 'lo' | 'la' | 'lv' | 'ln' | 'lt' | 'lb' | 'mk' | 'mg' | 'ms' | 'ml' | 'mt' | 'mi' | 'mr' | 'mn' | 'my' | 'ne' | 'no' | 'nn' | 'oc' | 'ps' | 'fa' | 'pl' | 'pt' | 'pa' | 'ro' | 'ru' | 'sa' | 'sr' | 'sn' | 'sd' | 'si' | 'sk' | 'sl' | 'so' | 'es' | 'su' | 'sw' | 'sv' | 'tl' | 'tg' | 'ta' | 'tt' | 'te' | 'th' | 'bo' | 'tr' | 'tk' | 'uk' | 'ur' | 'uz' | 'vi' | 'cy' | 'yi' | 'yo';
718
748
  /**
719
749
  * Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words, technical terms, names, etc. If empty, this argument is ignored.
720
750
  * ⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit.
@@ -761,7 +791,7 @@ export interface FallbackGoogleTranscriber {
761
791
  /** This is the transcription provider that will be used. */
762
792
  provider: 'google';
763
793
  /** This is the model that will be used for the transcription. */
764
- model?: 'gemini-2.5-pro-preview-05-06' | 'gemini-2.5-flash-preview-04-17' | 'gemini-2.0-flash-thinking-exp' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-preview-02-05' | 'gemini-2.0-flash-exp' | 'gemini-2.0-flash-realtime-exp' | 'gemini-1.5-flash' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro';
794
+ model?: 'gemini-2.5-pro-preview-05-06' | 'gemini-2.5-flash-preview-05-20' | 'gemini-2.5-flash-preview-04-17' | 'gemini-2.0-flash-thinking-exp' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-preview-02-05' | 'gemini-2.0-flash-exp' | 'gemini-2.0-flash-realtime-exp' | 'gemini-1.5-flash' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro';
765
795
  /** This is the language that will be set for the transcription. */
766
796
  language?: 'Multilingual' | 'Arabic' | 'Bengali' | 'Bulgarian' | 'Chinese' | 'Croatian' | 'Czech' | 'Danish' | 'Dutch' | 'English' | 'Estonian' | 'Finnish' | 'French' | 'German' | 'Greek' | 'Hebrew' | 'Hindi' | 'Hungarian' | 'Indonesian' | 'Italian' | 'Japanese' | 'Korean' | 'Latvian' | 'Lithuanian' | 'Norwegian' | 'Polish' | 'Portuguese' | 'Romanian' | 'Russian' | 'Serbian' | 'Slovak' | 'Slovenian' | 'Spanish' | 'Swahili' | 'Swedish' | 'Thai' | 'Turkish' | 'Ukrainian' | 'Vietnamese';
767
797
  }
@@ -1000,8 +1030,6 @@ export interface JsonSchema {
1000
1030
  * This only makes sense if the type is "object".
1001
1031
  */
1002
1032
  required?: string[];
1003
- /** This is a regex that will be used to validate data in question. */
1004
- regex?: string;
1005
1033
  /** This the value that will be used in filling the property. */
1006
1034
  value?: string;
1007
1035
  /** This the target variable that will be filled with the value of this property. */
@@ -1052,17 +1080,6 @@ export interface OpenAIFunction {
1052
1080
  parameters?: OpenAIFunctionParameters;
1053
1081
  }
1054
1082
  export interface CreateDtmfToolDTO {
1055
- /**
1056
- * This determines if the tool is async.
1057
- *
1058
- * 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.
1059
- *
1060
- * 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.
1061
- *
1062
- * Defaults to synchronous (`false`).
1063
- * @example false
1064
- */
1065
- async?: boolean;
1066
1083
  /**
1067
1084
  * These are the messages that will be spoken to the user as the tool is running.
1068
1085
  *
@@ -1079,27 +1096,8 @@ export interface CreateDtmfToolDTO {
1079
1096
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1080
1097
  */
1081
1098
  function?: OpenAIFunction;
1082
- /**
1083
- * This is the server that will be hit when this tool is requested by the model.
1084
- *
1085
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1086
- *
1087
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1088
- */
1089
- server?: Server;
1090
1099
  }
1091
1100
  export interface CreateEndCallToolDTO {
1092
- /**
1093
- * This determines if the tool is async.
1094
- *
1095
- * 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.
1096
- *
1097
- * 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.
1098
- *
1099
- * Defaults to synchronous (`false`).
1100
- * @example false
1101
- */
1102
- async?: boolean;
1103
1101
  /**
1104
1102
  * These are the messages that will be spoken to the user as the tool is running.
1105
1103
  *
@@ -1116,27 +1114,8 @@ export interface CreateEndCallToolDTO {
1116
1114
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1117
1115
  */
1118
1116
  function?: OpenAIFunction;
1119
- /**
1120
- * This is the server that will be hit when this tool is requested by the model.
1121
- *
1122
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1123
- *
1124
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1125
- */
1126
- server?: Server;
1127
1117
  }
1128
1118
  export interface CreateVoicemailToolDTO {
1129
- /**
1130
- * This determines if the tool is async.
1131
- *
1132
- * 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.
1133
- *
1134
- * 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.
1135
- *
1136
- * Defaults to synchronous (`false`).
1137
- * @example false
1138
- */
1139
- async?: boolean;
1140
1119
  /**
1141
1120
  * These are the messages that will be spoken to the user as the tool is running.
1142
1121
  *
@@ -1156,35 +1135,39 @@ export interface CreateVoicemailToolDTO {
1156
1135
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1157
1136
  */
1158
1137
  function?: OpenAIFunction;
1138
+ }
1139
+ export interface CreateFunctionToolDTO {
1159
1140
  /**
1160
- * This is the server that will be hit when this tool is requested by the model.
1161
- *
1162
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1141
+ * These are the messages that will be spoken to the user as the tool is running.
1163
1142
  *
1164
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1143
+ * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.
1165
1144
  */
1166
- server?: Server;
1167
- }
1168
- export interface CreateFunctionToolDTO {
1145
+ messages?: (ToolMessageStart | ToolMessageComplete | ToolMessageFailed | ToolMessageDelayed)[];
1146
+ /** The type of tool. "function" for Function tool. */
1147
+ type: 'function';
1169
1148
  /**
1170
1149
  * This determines if the tool is async.
1171
1150
  *
1172
- * 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.
1151
+ * 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.
1173
1152
  *
1174
- * 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.
1153
+ * 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.
1175
1154
  *
1176
- * Defaults to synchronous (`false`).
1155
+ * Defaults to synchronous (`false`).
1177
1156
  * @example false
1178
1157
  */
1179
1158
  async?: boolean;
1180
1159
  /**
1181
- * These are the messages that will be spoken to the user as the tool is running.
1182
1160
  *
1183
- * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.
1161
+ * This is the server where a `tool-calls` webhook will be sent.
1162
+ *
1163
+ * Notes:
1164
+ * - Webhook is sent to this server when a tool call is made.
1165
+ * - Webhook contains the call, assistant, and phone number objects.
1166
+ * - Webhook contains the variables set on the assistant.
1167
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
1168
+ * - Webhook expects a response with tool call result.
1184
1169
  */
1185
- messages?: (ToolMessageStart | ToolMessageComplete | ToolMessageFailed | ToolMessageDelayed)[];
1186
- /** The type of tool. "function" for Function tool. */
1187
- type: 'function';
1170
+ server?: Server;
1188
1171
  /**
1189
1172
  * This is the function definition of the tool.
1190
1173
  *
@@ -1193,31 +1176,12 @@ export interface CreateFunctionToolDTO {
1193
1176
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1194
1177
  */
1195
1178
  function?: OpenAIFunction;
1196
- /**
1197
- * This is the server that will be hit when this tool is requested by the model.
1198
- *
1199
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1200
- *
1201
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1202
- */
1203
- server?: Server;
1204
1179
  }
1205
1180
  export interface GhlToolMetadata {
1206
1181
  workflowId?: string;
1207
1182
  locationId?: string;
1208
1183
  }
1209
1184
  export interface CreateGhlToolDTO {
1210
- /**
1211
- * This determines if the tool is async.
1212
- *
1213
- * 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.
1214
- *
1215
- * 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.
1216
- *
1217
- * Defaults to synchronous (`false`).
1218
- * @example false
1219
- */
1220
- async?: boolean;
1221
1185
  /**
1222
1186
  * These are the messages that will be spoken to the user as the tool is running.
1223
1187
  *
@@ -1235,31 +1199,12 @@ export interface CreateGhlToolDTO {
1235
1199
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1236
1200
  */
1237
1201
  function?: OpenAIFunction;
1238
- /**
1239
- * This is the server that will be hit when this tool is requested by the model.
1240
- *
1241
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1242
- *
1243
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1244
- */
1245
- server?: Server;
1246
1202
  }
1247
1203
  export interface MakeToolMetadata {
1248
1204
  scenarioId?: number;
1249
1205
  triggerHookId?: number;
1250
1206
  }
1251
1207
  export interface CreateMakeToolDTO {
1252
- /**
1253
- * This determines if the tool is async.
1254
- *
1255
- * 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.
1256
- *
1257
- * 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.
1258
- *
1259
- * Defaults to synchronous (`false`).
1260
- * @example false
1261
- */
1262
- async?: boolean;
1263
1208
  /**
1264
1209
  * These are the messages that will be spoken to the user as the tool is running.
1265
1210
  *
@@ -1277,14 +1222,6 @@ export interface CreateMakeToolDTO {
1277
1222
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1278
1223
  */
1279
1224
  function?: OpenAIFunction;
1280
- /**
1281
- * This is the server that will be hit when this tool is requested by the model.
1282
- *
1283
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1284
- *
1285
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1286
- */
1287
- server?: Server;
1288
1225
  }
1289
1226
  export interface CustomMessage {
1290
1227
  /**
@@ -1493,6 +1430,15 @@ export interface TransferPlan {
1493
1430
  * - 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`.
1494
1431
  */
1495
1432
  message?: string | CustomMessage;
1433
+ /**
1434
+ * This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary
1435
+ *
1436
+ * @default 60
1437
+ * @min 1
1438
+ * @max 600
1439
+ * @default 60
1440
+ */
1441
+ timeout?: number;
1496
1442
  /**
1497
1443
  * This specifies the SIP verb to use while transferring the call.
1498
1444
  * - 'refer': Uses SIP REFER to transfer the call (default)
@@ -1512,6 +1458,17 @@ export interface TransferPlan {
1512
1458
  * - If not provided, the default hold audio will be used.
1513
1459
  */
1514
1460
  holdAudioUrl?: string;
1461
+ /**
1462
+ * This is the URL to an audio file played after the warm transfer message or summary is delivered to the destination party.
1463
+ * It can be used to play a custom sound like 'beep' to notify that the transfer is complete.
1464
+ *
1465
+ * Usage:
1466
+ * - Used only when `mode` is `warm-transfer-experimental`.
1467
+ * - Used when transferring calls to play hold audio for the destination party.
1468
+ * - Must be a publicly accessible URL to an audio file.
1469
+ * - Supported formats: MP3 and WAV.
1470
+ */
1471
+ transferCompleteAudioUrl?: string;
1515
1472
  /**
1516
1473
  * This is the TwiML instructions to execute on the destination call leg before connecting the customer.
1517
1474
  *
@@ -1637,17 +1594,6 @@ export interface TransferDestinationSip {
1637
1594
  description?: string;
1638
1595
  }
1639
1596
  export interface CreateTransferCallToolDTO {
1640
- /**
1641
- * This determines if the tool is async.
1642
- *
1643
- * 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.
1644
- *
1645
- * 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.
1646
- *
1647
- * Defaults to synchronous (`false`).
1648
- * @example false
1649
- */
1650
- async?: boolean;
1651
1597
  /**
1652
1598
  * These are the messages that will be spoken to the user as the tool is running.
1653
1599
  *
@@ -1665,14 +1611,6 @@ export interface CreateTransferCallToolDTO {
1665
1611
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1666
1612
  */
1667
1613
  function?: OpenAIFunction;
1668
- /**
1669
- * This is the server that will be hit when this tool is requested by the model.
1670
- *
1671
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1672
- *
1673
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1674
- */
1675
- server?: Server;
1676
1614
  }
1677
1615
  export interface CreateCustomKnowledgeBaseDTO {
1678
1616
  /** This knowledge base is bring your own knowledge base implementation. */
@@ -1732,24 +1670,13 @@ export interface KnowledgeBase {
1732
1670
  */
1733
1671
  provider: 'google';
1734
1672
  /** The model to use for the knowledge base */
1735
- model?: 'gemini-2.5-pro-preview-05-06' | 'gemini-2.5-flash-preview-04-17' | 'gemini-2.0-flash-thinking-exp' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-preview-02-05' | 'gemini-2.0-flash-exp' | 'gemini-2.0-flash-realtime-exp' | 'gemini-1.5-flash' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro';
1673
+ model?: 'gemini-2.5-pro-preview-05-06' | 'gemini-2.5-flash-preview-05-20' | 'gemini-2.5-flash-preview-04-17' | 'gemini-2.0-flash-thinking-exp' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-preview-02-05' | 'gemini-2.0-flash-exp' | 'gemini-2.0-flash-realtime-exp' | 'gemini-1.5-flash' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro';
1736
1674
  /** A description of the knowledge base */
1737
1675
  description: string;
1738
1676
  /** The file IDs associated with this knowledge base */
1739
1677
  fileIds: string[];
1740
1678
  }
1741
1679
  export interface CreateQueryToolDTO {
1742
- /**
1743
- * This determines if the tool is async.
1744
- *
1745
- * 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.
1746
- *
1747
- * 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.
1748
- *
1749
- * Defaults to synchronous (`false`).
1750
- * @example false
1751
- */
1752
- async?: boolean;
1753
1680
  /**
1754
1681
  * These are the messages that will be spoken to the user as the tool is running.
1755
1682
  *
@@ -1768,27 +1695,8 @@ export interface CreateQueryToolDTO {
1768
1695
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1769
1696
  */
1770
1697
  function?: OpenAIFunction;
1771
- /**
1772
- * This is the server that will be hit when this tool is requested by the model.
1773
- *
1774
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1775
- *
1776
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1777
- */
1778
- server?: Server;
1779
1698
  }
1780
1699
  export interface CreateGoogleCalendarCreateEventToolDTO {
1781
- /**
1782
- * This determines if the tool is async.
1783
- *
1784
- * 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.
1785
- *
1786
- * 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.
1787
- *
1788
- * Defaults to synchronous (`false`).
1789
- * @example false
1790
- */
1791
- async?: boolean;
1792
1700
  /**
1793
1701
  * These are the messages that will be spoken to the user as the tool is running.
1794
1702
  *
@@ -1805,27 +1713,8 @@ export interface CreateGoogleCalendarCreateEventToolDTO {
1805
1713
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1806
1714
  */
1807
1715
  function?: OpenAIFunction;
1808
- /**
1809
- * This is the server that will be hit when this tool is requested by the model.
1810
- *
1811
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1812
- *
1813
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1814
- */
1815
- server?: Server;
1816
1716
  }
1817
1717
  export interface CreateGoogleSheetsRowAppendToolDTO {
1818
- /**
1819
- * This determines if the tool is async.
1820
- *
1821
- * 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.
1822
- *
1823
- * 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.
1824
- *
1825
- * Defaults to synchronous (`false`).
1826
- * @example false
1827
- */
1828
- async?: boolean;
1829
1718
  /**
1830
1719
  * These are the messages that will be spoken to the user as the tool is running.
1831
1720
  *
@@ -1842,27 +1731,8 @@ export interface CreateGoogleSheetsRowAppendToolDTO {
1842
1731
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1843
1732
  */
1844
1733
  function?: OpenAIFunction;
1845
- /**
1846
- * This is the server that will be hit when this tool is requested by the model.
1847
- *
1848
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1849
- *
1850
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1851
- */
1852
- server?: Server;
1853
1734
  }
1854
1735
  export interface CreateGoogleCalendarCheckAvailabilityToolDTO {
1855
- /**
1856
- * This determines if the tool is async.
1857
- *
1858
- * 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.
1859
- *
1860
- * 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.
1861
- *
1862
- * Defaults to synchronous (`false`).
1863
- * @example false
1864
- */
1865
- async?: boolean;
1866
1736
  /**
1867
1737
  * These are the messages that will be spoken to the user as the tool is running.
1868
1738
  *
@@ -1879,27 +1749,8 @@ export interface CreateGoogleCalendarCheckAvailabilityToolDTO {
1879
1749
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1880
1750
  */
1881
1751
  function?: OpenAIFunction;
1882
- /**
1883
- * This is the server that will be hit when this tool is requested by the model.
1884
- *
1885
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1886
- *
1887
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1888
- */
1889
- server?: Server;
1890
1752
  }
1891
1753
  export interface CreateSlackSendMessageToolDTO {
1892
- /**
1893
- * This determines if the tool is async.
1894
- *
1895
- * 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.
1896
- *
1897
- * 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.
1898
- *
1899
- * Defaults to synchronous (`false`).
1900
- * @example false
1901
- */
1902
- async?: boolean;
1903
1754
  /**
1904
1755
  * These are the messages that will be spoken to the user as the tool is running.
1905
1756
  *
@@ -1916,27 +1767,8 @@ export interface CreateSlackSendMessageToolDTO {
1916
1767
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1917
1768
  */
1918
1769
  function?: OpenAIFunction;
1919
- /**
1920
- * This is the server that will be hit when this tool is requested by the model.
1921
- *
1922
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1923
- *
1924
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1925
- */
1926
- server?: Server;
1927
1770
  }
1928
1771
  export interface CreateMcpToolDTO {
1929
- /**
1930
- * This determines if the tool is async.
1931
- *
1932
- * 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.
1933
- *
1934
- * 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.
1935
- *
1936
- * Defaults to synchronous (`false`).
1937
- * @example false
1938
- */
1939
- async?: boolean;
1940
1772
  /**
1941
1773
  * These are the messages that will be spoken to the user as the tool is running.
1942
1774
  *
@@ -1946,34 +1778,27 @@ export interface CreateMcpToolDTO {
1946
1778
  /** The type of tool. "mcp" for MCP tool. */
1947
1779
  type: 'mcp';
1948
1780
  /**
1949
- * This is the function definition of the tool.
1950
1781
  *
1951
- * For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.
1782
+ * This is the server where a `tool-calls` webhook will be sent.
1952
1783
  *
1953
- * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1784
+ * Notes:
1785
+ * - Webhook is sent to this server when a tool call is made.
1786
+ * - Webhook contains the call, assistant, and phone number objects.
1787
+ * - Webhook contains the variables set on the assistant.
1788
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
1789
+ * - Webhook expects a response with tool call result.
1954
1790
  */
1955
- function?: OpenAIFunction;
1791
+ server?: Server;
1956
1792
  /**
1957
- * This is the server that will be hit when this tool is requested by the model.
1793
+ * This is the function definition of the tool.
1958
1794
  *
1959
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1795
+ * For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.
1960
1796
  *
1961
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1797
+ * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1962
1798
  */
1963
- server?: Server;
1799
+ function?: OpenAIFunction;
1964
1800
  }
1965
1801
  export interface CreateGoHighLevelCalendarAvailabilityToolDTO {
1966
- /**
1967
- * This determines if the tool is async.
1968
- *
1969
- * 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.
1970
- *
1971
- * 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.
1972
- *
1973
- * Defaults to synchronous (`false`).
1974
- * @example false
1975
- */
1976
- async?: boolean;
1977
1802
  /**
1978
1803
  * These are the messages that will be spoken to the user as the tool is running.
1979
1804
  *
@@ -1990,27 +1815,8 @@ export interface CreateGoHighLevelCalendarAvailabilityToolDTO {
1990
1815
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
1991
1816
  */
1992
1817
  function?: OpenAIFunction;
1993
- /**
1994
- * This is the server that will be hit when this tool is requested by the model.
1995
- *
1996
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
1997
- *
1998
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
1999
- */
2000
- server?: Server;
2001
1818
  }
2002
1819
  export interface CreateGoHighLevelCalendarEventCreateToolDTO {
2003
- /**
2004
- * This determines if the tool is async.
2005
- *
2006
- * 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.
2007
- *
2008
- * 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.
2009
- *
2010
- * Defaults to synchronous (`false`).
2011
- * @example false
2012
- */
2013
- async?: boolean;
2014
1820
  /**
2015
1821
  * These are the messages that will be spoken to the user as the tool is running.
2016
1822
  *
@@ -2027,27 +1833,8 @@ export interface CreateGoHighLevelCalendarEventCreateToolDTO {
2027
1833
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
2028
1834
  */
2029
1835
  function?: OpenAIFunction;
2030
- /**
2031
- * This is the server that will be hit when this tool is requested by the model.
2032
- *
2033
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
2034
- *
2035
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
2036
- */
2037
- server?: Server;
2038
1836
  }
2039
1837
  export interface CreateGoHighLevelContactCreateToolDTO {
2040
- /**
2041
- * This determines if the tool is async.
2042
- *
2043
- * 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.
2044
- *
2045
- * 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.
2046
- *
2047
- * Defaults to synchronous (`false`).
2048
- * @example false
2049
- */
2050
- async?: boolean;
2051
1838
  /**
2052
1839
  * These are the messages that will be spoken to the user as the tool is running.
2053
1840
  *
@@ -2064,27 +1851,8 @@ export interface CreateGoHighLevelContactCreateToolDTO {
2064
1851
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
2065
1852
  */
2066
1853
  function?: OpenAIFunction;
2067
- /**
2068
- * This is the server that will be hit when this tool is requested by the model.
2069
- *
2070
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
2071
- *
2072
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
2073
- */
2074
- server?: Server;
2075
1854
  }
2076
1855
  export interface CreateGoHighLevelContactGetToolDTO {
2077
- /**
2078
- * This determines if the tool is async.
2079
- *
2080
- * 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.
2081
- *
2082
- * 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.
2083
- *
2084
- * Defaults to synchronous (`false`).
2085
- * @example false
2086
- */
2087
- async?: boolean;
2088
1856
  /**
2089
1857
  * These are the messages that will be spoken to the user as the tool is running.
2090
1858
  *
@@ -2101,14 +1869,6 @@ export interface CreateGoHighLevelContactGetToolDTO {
2101
1869
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
2102
1870
  */
2103
1871
  function?: OpenAIFunction;
2104
- /**
2105
- * This is the server that will be hit when this tool is requested by the model.
2106
- *
2107
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
2108
- *
2109
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
2110
- */
2111
- server?: Server;
2112
1872
  }
2113
1873
  export interface AnyscaleModel {
2114
1874
  /** This is the starting state for the conversation. */
@@ -2516,7 +2276,7 @@ export interface GoogleModel {
2516
2276
  /** This is the ID of the knowledge base the model will use. */
2517
2277
  knowledgeBaseId?: string;
2518
2278
  /** This is the Google model that will be used. */
2519
- model: 'gemini-2.5-pro-preview-05-06' | 'gemini-2.5-flash-preview-04-17' | 'gemini-2.0-flash-thinking-exp' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-preview-02-05' | 'gemini-2.0-flash-exp' | 'gemini-2.0-flash-realtime-exp' | 'gemini-1.5-flash' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro';
2279
+ model: 'gemini-2.5-pro-preview-05-06' | 'gemini-2.5-flash-preview-05-20' | 'gemini-2.5-flash-preview-04-17' | 'gemini-2.0-flash-thinking-exp' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-preview-02-05' | 'gemini-2.0-flash-exp' | 'gemini-2.0-flash-realtime-exp' | 'gemini-1.5-flash' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro';
2520
2280
  provider: 'google';
2521
2281
  /**
2522
2282
  * This is the session configuration for the Gemini Flash 2.0 Multimodal Live API.
@@ -2678,13 +2438,29 @@ export interface OpenAIModel {
2678
2438
  knowledgeBaseId?: string;
2679
2439
  /** This is the provider that will be used for the model. */
2680
2440
  provider: 'openai';
2681
- /** This is the OpenAI model that will be used. */
2682
- model: 'gpt-4.1' | 'gpt-4.1-mini' | 'gpt-4.1-nano' | 'gpt-4.5-preview' | 'chatgpt-4o-latest' | 'o3' | 'o3-mini' | 'o4-mini' | 'o1-preview' | 'o1-preview-2024-09-12' | 'o1-mini' | 'o1-mini-2024-09-12' | 'gpt-4o-realtime-preview-2024-10-01' | 'gpt-4o-realtime-preview-2024-12-17' | 'gpt-4o-mini-realtime-preview-2024-12-17' | 'gpt-4o-mini-2024-07-18' | 'gpt-4o-mini' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo-1106' | 'gpt-3.5-turbo-16k' | 'gpt-3.5-turbo-0613';
2441
+ /**
2442
+ * This is the OpenAI model that will be used.
2443
+ *
2444
+ * When using Vapi OpenAI or your own Azure Credentials, you have the option to specify the region for the selected model. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest region that make sense.
2445
+ * This is helpful when you are required to comply with Data Residency rules. Learn more about Azure regions here https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/.
2446
+ *
2447
+ * @default undefined
2448
+ */
2449
+ model: 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4.1' | 'gpt-4.1-mini' | 'gpt-4.1-nano' | 'gpt-4.5-preview' | 'chatgpt-4o-latest' | 'o3' | 'o3-mini' | 'o4-mini' | 'o1-preview' | 'o1-preview-2024-09-12' | 'o1-mini' | 'o1-mini-2024-09-12' | 'gpt-4o-realtime-preview-2024-10-01' | 'gpt-4o-realtime-preview-2024-12-17' | 'gpt-4o-mini-realtime-preview-2024-12-17' | 'gpt-4o-mini-2024-07-18' | 'gpt-4o-mini' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo-1106' | 'gpt-3.5-turbo-16k' | 'gpt-3.5-turbo-0613' | 'gpt-4.1-2025-04-14:westus' | 'gpt-4.1-2025-04-14:eastus2' | 'gpt-4.1-2025-04-14:eastus' | 'gpt-4.1-2025-04-14:westus3' | 'gpt-4.1-2025-04-14:northcentralus' | 'gpt-4.1-2025-04-14:southcentralus' | 'gpt-4.1-mini-2025-04-14:westus' | 'gpt-4.1-mini-2025-04-14:eastus2' | 'gpt-4.1-mini-2025-04-14:eastus' | 'gpt-4.1-mini-2025-04-14:westus3' | 'gpt-4.1-mini-2025-04-14:northcentralus' | 'gpt-4.1-mini-2025-04-14:southcentralus' | 'gpt-4.1-nano-2025-04-14:westus' | 'gpt-4.1-nano-2025-04-14:eastus2' | 'gpt-4.1-nano-2025-04-14:westus3' | 'gpt-4.1-nano-2025-04-14:northcentralus' | 'gpt-4.1-nano-2025-04-14:southcentralus' | 'gpt-4o-2024-11-20:swedencentral' | 'gpt-4o-2024-11-20:westus' | 'gpt-4o-2024-11-20:eastus2' | 'gpt-4o-2024-11-20:eastus' | 'gpt-4o-2024-11-20:westus3' | 'gpt-4o-2024-11-20:southcentralus' | 'gpt-4o-2024-08-06:westus' | 'gpt-4o-2024-08-06:westus3' | 'gpt-4o-2024-08-06:eastus' | 'gpt-4o-2024-08-06:eastus2' | 'gpt-4o-2024-08-06:northcentralus' | 'gpt-4o-2024-08-06:southcentralus' | 'gpt-4o-mini-2024-07-18:westus' | 'gpt-4o-mini-2024-07-18:westus3' | 'gpt-4o-mini-2024-07-18:eastus' | 'gpt-4o-mini-2024-07-18:eastus2' | 'gpt-4o-mini-2024-07-18:northcentralus' | 'gpt-4o-mini-2024-07-18:southcentralus' | 'gpt-4o-2024-05-13:eastus2' | 'gpt-4o-2024-05-13:eastus' | 'gpt-4o-2024-05-13:northcentralus' | 'gpt-4o-2024-05-13:southcentralus' | 'gpt-4o-2024-05-13:westus3' | 'gpt-4o-2024-05-13:westus' | 'gpt-4-turbo-2024-04-09:eastus2' | 'gpt-4-0125-preview:eastus' | 'gpt-4-0125-preview:northcentralus' | 'gpt-4-0125-preview:southcentralus' | 'gpt-4-1106-preview:australia' | 'gpt-4-1106-preview:canadaeast' | 'gpt-4-1106-preview:france' | 'gpt-4-1106-preview:india' | 'gpt-4-1106-preview:norway' | 'gpt-4-1106-preview:swedencentral' | 'gpt-4-1106-preview:uk' | 'gpt-4-1106-preview:westus' | 'gpt-4-1106-preview:westus3' | 'gpt-4-0613:canadaeast' | 'gpt-3.5-turbo-0125:canadaeast' | 'gpt-3.5-turbo-0125:northcentralus' | 'gpt-3.5-turbo-0125:southcentralus' | 'gpt-3.5-turbo-1106:canadaeast' | 'gpt-3.5-turbo-1106:westus';
2683
2450
  /**
2684
2451
  * These are the fallback models that will be used if the primary model fails. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest fallbacks that make sense.
2685
2452
  * @example ["gpt-4-0125-preview","gpt-4-0613"]
2686
2453
  */
2687
- fallbackModels?: 'gpt-4.1' | 'gpt-4.1-mini' | 'gpt-4.1-nano' | 'gpt-4.5-preview' | 'chatgpt-4o-latest' | 'o3' | 'o3-mini' | 'o4-mini' | 'o1-preview' | 'o1-preview-2024-09-12' | 'o1-mini' | 'o1-mini-2024-09-12' | 'gpt-4o-realtime-preview-2024-10-01' | 'gpt-4o-realtime-preview-2024-12-17' | 'gpt-4o-mini-realtime-preview-2024-12-17' | 'gpt-4o-mini-2024-07-18' | 'gpt-4o-mini' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo-1106' | 'gpt-3.5-turbo-16k' | 'gpt-3.5-turbo-0613';
2454
+ fallbackModels?: 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4.1' | 'gpt-4.1-mini' | 'gpt-4.1-nano' | 'gpt-4.5-preview' | 'chatgpt-4o-latest' | 'o3' | 'o3-mini' | 'o4-mini' | 'o1-preview' | 'o1-preview-2024-09-12' | 'o1-mini' | 'o1-mini-2024-09-12' | 'gpt-4o-realtime-preview-2024-10-01' | 'gpt-4o-realtime-preview-2024-12-17' | 'gpt-4o-mini-realtime-preview-2024-12-17' | 'gpt-4o-mini-2024-07-18' | 'gpt-4o-mini' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo-1106' | 'gpt-3.5-turbo-16k' | 'gpt-3.5-turbo-0613' | 'gpt-4.1-2025-04-14:westus' | 'gpt-4.1-2025-04-14:eastus2' | 'gpt-4.1-2025-04-14:eastus' | 'gpt-4.1-2025-04-14:westus3' | 'gpt-4.1-2025-04-14:northcentralus' | 'gpt-4.1-2025-04-14:southcentralus' | 'gpt-4.1-mini-2025-04-14:westus' | 'gpt-4.1-mini-2025-04-14:eastus2' | 'gpt-4.1-mini-2025-04-14:eastus' | 'gpt-4.1-mini-2025-04-14:westus3' | 'gpt-4.1-mini-2025-04-14:northcentralus' | 'gpt-4.1-mini-2025-04-14:southcentralus' | 'gpt-4.1-nano-2025-04-14:westus' | 'gpt-4.1-nano-2025-04-14:eastus2' | 'gpt-4.1-nano-2025-04-14:westus3' | 'gpt-4.1-nano-2025-04-14:northcentralus' | 'gpt-4.1-nano-2025-04-14:southcentralus' | 'gpt-4o-2024-11-20:swedencentral' | 'gpt-4o-2024-11-20:westus' | 'gpt-4o-2024-11-20:eastus2' | 'gpt-4o-2024-11-20:eastus' | 'gpt-4o-2024-11-20:westus3' | 'gpt-4o-2024-11-20:southcentralus' | 'gpt-4o-2024-08-06:westus' | 'gpt-4o-2024-08-06:westus3' | 'gpt-4o-2024-08-06:eastus' | 'gpt-4o-2024-08-06:eastus2' | 'gpt-4o-2024-08-06:northcentralus' | 'gpt-4o-2024-08-06:southcentralus' | 'gpt-4o-mini-2024-07-18:westus' | 'gpt-4o-mini-2024-07-18:westus3' | 'gpt-4o-mini-2024-07-18:eastus' | 'gpt-4o-mini-2024-07-18:eastus2' | 'gpt-4o-mini-2024-07-18:northcentralus' | 'gpt-4o-mini-2024-07-18:southcentralus' | 'gpt-4o-2024-05-13:eastus2' | 'gpt-4o-2024-05-13:eastus' | 'gpt-4o-2024-05-13:northcentralus' | 'gpt-4o-2024-05-13:southcentralus' | 'gpt-4o-2024-05-13:westus3' | 'gpt-4o-2024-05-13:westus' | 'gpt-4-turbo-2024-04-09:eastus2' | 'gpt-4-0125-preview:eastus' | 'gpt-4-0125-preview:northcentralus' | 'gpt-4-0125-preview:southcentralus' | 'gpt-4-1106-preview:australia' | 'gpt-4-1106-preview:canadaeast' | 'gpt-4-1106-preview:france' | 'gpt-4-1106-preview:india' | 'gpt-4-1106-preview:norway' | 'gpt-4-1106-preview:swedencentral' | 'gpt-4-1106-preview:uk' | 'gpt-4-1106-preview:westus' | 'gpt-4-1106-preview:westus3' | 'gpt-4-0613:canadaeast' | 'gpt-3.5-turbo-0125:canadaeast' | 'gpt-3.5-turbo-0125:northcentralus' | 'gpt-3.5-turbo-0125:southcentralus' | 'gpt-3.5-turbo-1106:canadaeast' | 'gpt-3.5-turbo-1106:westus';
2455
+ /**
2456
+ * Azure OpenAI doesn't support `maxLength` right now https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs?tabs=python-secure%2Cdotnet-entra-id&pivots=programming-language-csharp#unsupported-type-specific-keywords. Need to strip.
2457
+ *
2458
+ * - `strip-parameters-with-unsupported-validation` will strip parameters with unsupported validation.
2459
+ * - `strip-unsupported-validation` will keep the parameters but strip unsupported validation.
2460
+ *
2461
+ * @default `strip-unsupported-validation`
2462
+ */
2463
+ toolStrictCompatibilityMode?: 'strip-parameters-with-unsupported-validation' | 'strip-unsupported-validation';
2688
2464
  /**
2689
2465
  * This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.
2690
2466
  * @min 0
@@ -2884,10 +2660,13 @@ export interface WorkflowOpenAIModel {
2884
2660
  /** This is the provider of the model (`openai`). */
2885
2661
  provider: 'openai';
2886
2662
  /**
2887
- * This is the specific OpenAI model that will be used.
2663
+ * This is the OpenAI model that will be used.
2664
+ *
2665
+ * When using Vapi OpenAI or your own Azure Credentials, you have the option to specify the region for the selected model. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest region that make sense.
2666
+ * This is helpful when you are required to comply with Data Residency rules. Learn more about Azure regions here https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/.
2888
2667
  * @maxLength 100
2889
2668
  */
2890
- model: 'gpt-4.1' | 'gpt-4.1-mini' | 'gpt-4.1-nano' | 'gpt-4.5-preview' | 'chatgpt-4o-latest' | 'o3' | 'o3-mini' | 'o4-mini' | 'o1-preview' | 'o1-preview-2024-09-12' | 'o1-mini' | 'o1-mini-2024-09-12' | 'gpt-4o-realtime-preview-2024-10-01' | 'gpt-4o-realtime-preview-2024-12-17' | 'gpt-4o-mini-realtime-preview-2024-12-17' | 'gpt-4o-mini-2024-07-18' | 'gpt-4o-mini' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo-1106' | 'gpt-3.5-turbo-16k' | 'gpt-3.5-turbo-0613';
2669
+ model: 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4.1' | 'gpt-4.1-mini' | 'gpt-4.1-nano' | 'gpt-4.5-preview' | 'chatgpt-4o-latest' | 'o3' | 'o3-mini' | 'o4-mini' | 'o1-preview' | 'o1-preview-2024-09-12' | 'o1-mini' | 'o1-mini-2024-09-12' | 'gpt-4o-realtime-preview-2024-10-01' | 'gpt-4o-realtime-preview-2024-12-17' | 'gpt-4o-mini-realtime-preview-2024-12-17' | 'gpt-4o-mini-2024-07-18' | 'gpt-4o-mini' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo-1106' | 'gpt-3.5-turbo-16k' | 'gpt-3.5-turbo-0613' | 'gpt-4.1-2025-04-14:westus' | 'gpt-4.1-2025-04-14:eastus2' | 'gpt-4.1-2025-04-14:eastus' | 'gpt-4.1-2025-04-14:westus3' | 'gpt-4.1-2025-04-14:northcentralus' | 'gpt-4.1-2025-04-14:southcentralus' | 'gpt-4.1-mini-2025-04-14:westus' | 'gpt-4.1-mini-2025-04-14:eastus2' | 'gpt-4.1-mini-2025-04-14:eastus' | 'gpt-4.1-mini-2025-04-14:westus3' | 'gpt-4.1-mini-2025-04-14:northcentralus' | 'gpt-4.1-mini-2025-04-14:southcentralus' | 'gpt-4.1-nano-2025-04-14:westus' | 'gpt-4.1-nano-2025-04-14:eastus2' | 'gpt-4.1-nano-2025-04-14:westus3' | 'gpt-4.1-nano-2025-04-14:northcentralus' | 'gpt-4.1-nano-2025-04-14:southcentralus' | 'gpt-4o-2024-11-20:swedencentral' | 'gpt-4o-2024-11-20:westus' | 'gpt-4o-2024-11-20:eastus2' | 'gpt-4o-2024-11-20:eastus' | 'gpt-4o-2024-11-20:westus3' | 'gpt-4o-2024-11-20:southcentralus' | 'gpt-4o-2024-08-06:westus' | 'gpt-4o-2024-08-06:westus3' | 'gpt-4o-2024-08-06:eastus' | 'gpt-4o-2024-08-06:eastus2' | 'gpt-4o-2024-08-06:northcentralus' | 'gpt-4o-2024-08-06:southcentralus' | 'gpt-4o-mini-2024-07-18:westus' | 'gpt-4o-mini-2024-07-18:westus3' | 'gpt-4o-mini-2024-07-18:eastus' | 'gpt-4o-mini-2024-07-18:eastus2' | 'gpt-4o-mini-2024-07-18:northcentralus' | 'gpt-4o-mini-2024-07-18:southcentralus' | 'gpt-4o-2024-05-13:eastus2' | 'gpt-4o-2024-05-13:eastus' | 'gpt-4o-2024-05-13:northcentralus' | 'gpt-4o-2024-05-13:southcentralus' | 'gpt-4o-2024-05-13:westus3' | 'gpt-4o-2024-05-13:westus' | 'gpt-4-turbo-2024-04-09:eastus2' | 'gpt-4-0125-preview:eastus' | 'gpt-4-0125-preview:northcentralus' | 'gpt-4-0125-preview:southcentralus' | 'gpt-4-1106-preview:australia' | 'gpt-4-1106-preview:canadaeast' | 'gpt-4-1106-preview:france' | 'gpt-4-1106-preview:india' | 'gpt-4-1106-preview:norway' | 'gpt-4-1106-preview:swedencentral' | 'gpt-4-1106-preview:uk' | 'gpt-4-1106-preview:westus' | 'gpt-4-1106-preview:westus3' | 'gpt-4-0613:canadaeast' | 'gpt-3.5-turbo-0125:canadaeast' | 'gpt-3.5-turbo-0125:northcentralus' | 'gpt-3.5-turbo-0125:southcentralus' | 'gpt-3.5-turbo-1106:canadaeast' | 'gpt-3.5-turbo-1106:westus';
2891
2670
  /**
2892
2671
  * This is the temperature of the model.
2893
2672
  * @min 0
@@ -2946,28 +2725,7 @@ export interface GlobalNodePlan {
2946
2725
  */
2947
2726
  enterCondition?: string;
2948
2727
  }
2949
- export interface VariableExtractionSchema {
2950
- /**
2951
- * This is the type of output you'd like.
2952
- *
2953
- * `string`, `number`, `boolean` are primitive types.
2954
- */
2955
- type: 'string' | 'number' | 'integer' | 'boolean';
2956
- /**
2957
- * This is the title of the variable.
2958
- *
2959
- * It can only contain letters, numbers, and underscores.
2960
- * @pattern /^[a-zA-Z0-9_]+$/
2961
- */
2962
- title: string;
2963
- /** This is the description to help the model understand what it needs to output. */
2964
- description: string;
2965
- /** This is the enum values to choose from. Only used if the type is `string`. */
2966
- enum?: string[];
2967
- }
2968
- export interface VariableExtractionPlan {
2969
- output: VariableExtractionSchema[];
2970
- }
2728
+ export type VariableExtractionPlan = object;
2971
2729
  export interface ConversationNode {
2972
2730
  /**
2973
2731
  * This is the Conversation node. This can be used to start a conversation with the customer.
@@ -3049,11 +2807,12 @@ export interface Edge {
3049
2807
  }
3050
2808
  export interface WorkflowUserEditable {
3051
2809
  nodes: (ConversationNode | ToolNode)[];
3052
- /** These are the options for the workflow's LLM. */
3053
2810
  model?: WorkflowOpenAIModel | WorkflowAnthropicModel;
3054
2811
  /** @maxLength 80 */
3055
2812
  name: string;
3056
2813
  edges: Edge[];
2814
+ /** @maxLength 5000 */
2815
+ globalPrompt?: string;
3057
2816
  }
3058
2817
  export interface VapiModel {
3059
2818
  /** This is the starting state for the conversation. */
@@ -3897,13 +3656,6 @@ export interface VapiVoice {
3897
3656
  * @default 1
3898
3657
  */
3899
3658
  speed?: number;
3900
- /**
3901
- * This is the language code (ISO 639-1) that will be used.
3902
- *
3903
- * @default 'en-US'
3904
- * @default "en-US"
3905
- */
3906
- language?: 'en-US' | 'en-GB' | 'en-AU' | 'en-CA' | 'ja' | 'zh' | 'de' | 'hi' | 'fr-FR' | 'fr-CA' | 'ko' | 'pt-BR' | 'pt-PT' | 'it' | 'es-ES' | 'es-MX' | 'id' | 'nl' | 'tr' | 'fil' | 'pl' | 'sv' | 'bg' | 'ro' | 'ar-SA' | 'ar-AE' | 'cs' | 'el' | 'fi' | 'hr' | 'ms' | 'sk' | 'da' | 'ta' | 'uk' | 'ru' | 'hu' | 'no' | 'vi';
3907
3659
  /** This is the plan for chunking the model output before it is sent to the voice provider. */
3908
3660
  chunkPlan?: ChunkPlan;
3909
3661
  /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */
@@ -4401,13 +4153,6 @@ export interface FallbackVapiVoice {
4401
4153
  * @default 1
4402
4154
  */
4403
4155
  speed?: number;
4404
- /**
4405
- * This is the language code (ISO 639-1) that will be used.
4406
- *
4407
- * @default 'en-US'
4408
- * @default "en-US"
4409
- */
4410
- language?: 'en-US' | 'en-GB' | 'en-AU' | 'en-CA' | 'ja' | 'zh' | 'de' | 'hi' | 'fr-FR' | 'fr-CA' | 'ko' | 'pt-BR' | 'pt-PT' | 'it' | 'es-ES' | 'es-MX' | 'id' | 'nl' | 'tr' | 'fil' | 'pl' | 'sv' | 'bg' | 'ro' | 'ar-SA' | 'ar-AE' | 'cs' | 'el' | 'fi' | 'hr' | 'ms' | 'sk' | 'da' | 'ta' | 'uk' | 'ru' | 'hu' | 'no' | 'vi';
4411
4156
  /** This is the plan for chunking the model output before it is sent to the voice provider. */
4412
4157
  chunkPlan?: ChunkPlan;
4413
4158
  }
@@ -5201,25 +4946,37 @@ export interface TransferAssistantHookAction {
5201
4946
  destination?: TransferDestinationNumber | TransferDestinationSip;
5202
4947
  }
5203
4948
  export interface FunctionCallAssistantHookAction {
4949
+ /**
4950
+ * These are the messages that will be spoken to the user as the tool is running.
4951
+ *
4952
+ * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.
4953
+ */
4954
+ messages?: (ToolMessageStart | ToolMessageComplete | ToolMessageFailed | ToolMessageDelayed)[];
4955
+ /** The type of tool. "function" for Function tool. */
4956
+ type: 'function';
5204
4957
  /**
5205
4958
  * This determines if the tool is async.
5206
4959
  *
5207
- * 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.
4960
+ * 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.
5208
4961
  *
5209
- * 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.
4962
+ * 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.
5210
4963
  *
5211
- * Defaults to synchronous (`false`).
4964
+ * Defaults to synchronous (`false`).
5212
4965
  * @example false
5213
4966
  */
5214
4967
  async?: boolean;
5215
4968
  /**
5216
- * These are the messages that will be spoken to the user as the tool is running.
5217
4969
  *
5218
- * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.
4970
+ * This is the server where a `tool-calls` webhook will be sent.
4971
+ *
4972
+ * Notes:
4973
+ * - Webhook is sent to this server when a tool call is made.
4974
+ * - Webhook contains the call, assistant, and phone number objects.
4975
+ * - Webhook contains the variables set on the assistant.
4976
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
4977
+ * - Webhook expects a response with tool call result.
5219
4978
  */
5220
- messages?: (ToolMessageStart | ToolMessageComplete | ToolMessageFailed | ToolMessageDelayed)[];
5221
- /** The type of tool. "function" for Function tool. */
5222
- type: 'function';
4979
+ server?: Server;
5223
4980
  /**
5224
4981
  * This is the function definition of the tool.
5225
4982
  *
@@ -5228,14 +4985,6 @@ export interface FunctionCallAssistantHookAction {
5228
4985
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
5229
4986
  */
5230
4987
  function?: OpenAIFunction;
5231
- /**
5232
- * This is the server that will be hit when this tool is requested by the model.
5233
- *
5234
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
5235
- *
5236
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
5237
- */
5238
- server?: Server;
5239
4988
  }
5240
4989
  export interface SayAssistantHookAction {
5241
4990
  /** This is the type of action - must be "say" */
@@ -5578,6 +5327,13 @@ export interface SuccessEvaluationPlan {
5578
5327
  timeoutSeconds?: number;
5579
5328
  }
5580
5329
  export interface AnalysisPlan {
5330
+ /**
5331
+ * The minimum number of messages required to run the analysis plan.
5332
+ * If the number of messages is less than this, analysis will be skipped.
5333
+ * @default 2
5334
+ * @min 0
5335
+ */
5336
+ minMessagesThreshold?: number;
5581
5337
  /** This is the plan for generating the summary of the call. This outputs to `call.analysis.summary`. */
5582
5338
  summaryPlan?: SummaryPlan;
5583
5339
  /** This is the plan for generating the structured data from the call. This outputs to `call.analysis.structuredData`. */
@@ -6594,11 +6350,24 @@ export interface CreateSquadDTO {
6594
6350
  }
6595
6351
  export interface CreateWorkflowDTO {
6596
6352
  nodes: (ConversationNode | ToolNode)[];
6597
- /** These are the options for the workflow's LLM. */
6598
6353
  model?: WorkflowOpenAIModel | WorkflowAnthropicModel;
6599
6354
  /** @maxLength 80 */
6600
6355
  name: string;
6601
6356
  edges: Edge[];
6357
+ /** @maxLength 5000 */
6358
+ globalPrompt?: string;
6359
+ }
6360
+ export interface WorkflowOverrides {
6361
+ /**
6362
+ * These are values that will be used to replace the template variables in the workflow messages and other text-based fields.
6363
+ * This uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html
6364
+ *
6365
+ * So for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`.
6366
+ * `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will be replaced with the current date and time in New York.
6367
+ * Some VAPI reserved defaults:
6368
+ * - *customer* - the customer object
6369
+ */
6370
+ variableValues?: object;
6602
6371
  }
6603
6372
  export interface TransferPhoneNumberHookAction {
6604
6373
  /** This is the type of action - must be "transfer" */
@@ -6768,7 +6537,7 @@ export interface Call {
6768
6537
  /** This is the status of the call. */
6769
6538
  status?: 'scheduled' | 'queued' | 'ringing' | 'in-progress' | 'forwarding' | 'ended';
6770
6539
  /** This is the explanation for how the call ended. */
6771
- endedReason?: 'call-start-error-neither-assistant-nor-server-set' | 'assistant-request-failed' | 'assistant-request-returned-error' | 'assistant-request-returned-unspeakable-error' | 'assistant-request-returned-invalid-assistant' | 'assistant-request-returned-no-assistant' | 'assistant-request-returned-forwarding-phone-number' | 'call.start.error-get-org' | 'call.start.error-get-subscription' | 'call.start.error-get-assistant' | 'call.start.error-get-phone-number' | 'call.start.error-get-customer' | 'call.start.error-get-resources-validation' | 'call.start.error-vapi-number-international' | 'call.start.error-vapi-number-outbound-daily-limit' | 'call.start.error-get-transport' | 'assistant-not-valid' | 'database-error' | 'assistant-not-found' | 'pipeline-error-openai-voice-failed' | 'pipeline-error-cartesia-voice-failed' | 'pipeline-error-deepgram-voice-failed' | 'pipeline-error-eleven-labs-voice-failed' | 'pipeline-error-playht-voice-failed' | 'pipeline-error-lmnt-voice-failed' | 'pipeline-error-azure-voice-failed' | 'pipeline-error-rime-ai-voice-failed' | 'pipeline-error-smallest-ai-voice-failed' | 'pipeline-error-neuphonic-voice-failed' | 'pipeline-error-hume-voice-failed' | 'pipeline-error-sesame-voice-failed' | 'pipeline-error-tavus-video-failed' | 'call.in-progress.error-vapifault-openai-voice-failed' | 'call.in-progress.error-vapifault-cartesia-voice-failed' | 'call.in-progress.error-vapifault-deepgram-voice-failed' | 'call.in-progress.error-vapifault-eleven-labs-voice-failed' | 'call.in-progress.error-vapifault-playht-voice-failed' | 'call.in-progress.error-vapifault-lmnt-voice-failed' | 'call.in-progress.error-vapifault-azure-voice-failed' | 'call.in-progress.error-vapifault-rime-ai-voice-failed' | 'call.in-progress.error-vapifault-smallest-ai-voice-failed' | 'call.in-progress.error-vapifault-neuphonic-voice-failed' | 'call.in-progress.error-vapifault-hume-voice-failed' | 'call.in-progress.error-vapifault-sesame-voice-failed' | 'call.in-progress.error-vapifault-tavus-video-failed' | 'pipeline-error-vapi-llm-failed' | 'pipeline-error-vapi-400-bad-request-validation-failed' | 'pipeline-error-vapi-401-unauthorized' | 'pipeline-error-vapi-403-model-access-denied' | 'pipeline-error-vapi-429-exceeded-quota' | 'pipeline-error-vapi-500-server-error' | 'pipeline-error-vapi-503-server-overloaded-error' | 'call.in-progress.error-vapifault-vapi-llm-failed' | 'call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-vapi-401-unauthorized' | 'call.in-progress.error-vapifault-vapi-403-model-access-denied' | 'call.in-progress.error-vapifault-vapi-429-exceeded-quota' | 'call.in-progress.error-providerfault-vapi-500-server-error' | 'call.in-progress.error-providerfault-vapi-503-server-overloaded-error' | 'pipeline-error-deepgram-transcriber-failed' | 'call.in-progress.error-vapifault-deepgram-transcriber-failed' | 'pipeline-error-gladia-transcriber-failed' | 'call.in-progress.error-vapifault-gladia-transcriber-failed' | 'pipeline-error-speechmatics-transcriber-failed' | 'call.in-progress.error-vapifault-speechmatics-transcriber-failed' | 'pipeline-error-assembly-ai-transcriber-failed' | 'pipeline-error-assembly-ai-returning-400-insufficent-funds' | 'pipeline-error-assembly-ai-returning-400-paid-only-feature' | 'pipeline-error-assembly-ai-returning-401-invalid-credentials' | 'pipeline-error-assembly-ai-returning-500-invalid-schema' | 'pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed' | 'call.in-progress.error-vapifault-assembly-ai-transcriber-failed' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature' | 'call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed' | 'pipeline-error-talkscriber-transcriber-failed' | 'call.in-progress.error-vapifault-talkscriber-transcriber-failed' | 'pipeline-error-azure-speech-transcriber-failed' | 'call.in-progress.error-vapifault-azure-speech-transcriber-failed' | 'call.in-progress.error-pipeline-no-available-llm-model' | 'worker-shutdown' | 'unknown-error' | 'vonage-disconnected' | 'vonage-failed-to-connect-call' | 'vonage-completed' | 'phone-call-provider-bypass-enabled-but-no-call-received' | 'call.in-progress.error-providerfault-transport-never-connected' | 'call.in-progress.error-vapifault-worker-not-available' | 'call.in-progress.error-vapifault-transport-never-connected' | 'call.in-progress.error-vapifault-transport-connected-but-call-not-active' | 'call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing' | 'call.in-progress.error-vapifault-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-groq-llm-failed' | 'call.in-progress.error-vapifault-google-llm-failed' | 'call.in-progress.error-vapifault-xai-llm-failed' | 'call.in-progress.error-vapifault-mistral-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-cerebras-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-llm-failed' | 'pipeline-error-openai-400-bad-request-validation-failed' | 'pipeline-error-openai-401-unauthorized' | 'pipeline-error-openai-401-incorrect-api-key' | 'pipeline-error-openai-401-account-not-in-organization' | 'pipeline-error-openai-403-model-access-denied' | 'pipeline-error-openai-429-exceeded-quota' | 'pipeline-error-openai-429-rate-limit-reached' | 'pipeline-error-openai-500-server-error' | 'pipeline-error-openai-503-server-overloaded-error' | 'pipeline-error-openai-llm-failed' | 'call.in-progress.error-vapifault-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openai-401-unauthorized' | 'call.in-progress.error-vapifault-openai-401-incorrect-api-key' | 'call.in-progress.error-vapifault-openai-401-account-not-in-organization' | 'call.in-progress.error-vapifault-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-openai-429-exceeded-quota' | 'call.in-progress.error-vapifault-openai-429-rate-limit-reached' | 'call.in-progress.error-providerfault-openai-500-server-error' | 'call.in-progress.error-providerfault-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-400-bad-request-validation-failed' | 'pipeline-error-azure-openai-401-unauthorized' | 'pipeline-error-azure-openai-403-model-access-denied' | 'pipeline-error-azure-openai-429-exceeded-quota' | 'pipeline-error-azure-openai-500-server-error' | 'pipeline-error-azure-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-azure-openai-401-unauthorized' | 'call.in-progress.error-vapifault-azure-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-azure-openai-429-exceeded-quota' | 'call.in-progress.error-providerfault-azure-openai-500-server-error' | 'call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error' | 'pipeline-error-google-400-bad-request-validation-failed' | 'pipeline-error-google-401-unauthorized' | 'pipeline-error-google-403-model-access-denied' | 'pipeline-error-google-429-exceeded-quota' | 'pipeline-error-google-500-server-error' | 'pipeline-error-google-503-server-overloaded-error' | 'pipeline-error-google-llm-failed' | 'call.in-progress.error-vapifault-google-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-google-401-unauthorized' | 'call.in-progress.error-vapifault-google-403-model-access-denied' | 'call.in-progress.error-vapifault-google-429-exceeded-quota' | 'call.in-progress.error-providerfault-google-500-server-error' | 'call.in-progress.error-providerfault-google-503-server-overloaded-error' | 'pipeline-error-xai-400-bad-request-validation-failed' | 'pipeline-error-xai-401-unauthorized' | 'pipeline-error-xai-403-model-access-denied' | 'pipeline-error-xai-429-exceeded-quota' | 'pipeline-error-xai-500-server-error' | 'pipeline-error-xai-503-server-overloaded-error' | 'pipeline-error-xai-llm-failed' | 'call.in-progress.error-vapifault-xai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-xai-401-unauthorized' | 'call.in-progress.error-vapifault-xai-403-model-access-denied' | 'call.in-progress.error-vapifault-xai-429-exceeded-quota' | 'call.in-progress.error-providerfault-xai-500-server-error' | 'call.in-progress.error-providerfault-xai-503-server-overloaded-error' | 'pipeline-error-mistral-400-bad-request-validation-failed' | 'pipeline-error-mistral-401-unauthorized' | 'pipeline-error-mistral-403-model-access-denied' | 'pipeline-error-mistral-429-exceeded-quota' | 'pipeline-error-mistral-500-server-error' | 'pipeline-error-mistral-503-server-overloaded-error' | 'pipeline-error-mistral-llm-failed' | 'call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-mistral-401-unauthorized' | 'call.in-progress.error-vapifault-mistral-403-model-access-denied' | 'call.in-progress.error-vapifault-mistral-429-exceeded-quota' | 'call.in-progress.error-providerfault-mistral-500-server-error' | 'call.in-progress.error-providerfault-mistral-503-server-overloaded-error' | 'pipeline-error-inflection-ai-400-bad-request-validation-failed' | 'pipeline-error-inflection-ai-401-unauthorized' | 'pipeline-error-inflection-ai-403-model-access-denied' | 'pipeline-error-inflection-ai-429-exceeded-quota' | 'pipeline-error-inflection-ai-500-server-error' | 'pipeline-error-inflection-ai-503-server-overloaded-error' | 'pipeline-error-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-inflection-ai-401-unauthorized' | 'call.in-progress.error-vapifault-inflection-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-inflection-ai-500-server-error' | 'call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error' | 'pipeline-error-deep-seek-400-bad-request-validation-failed' | 'pipeline-error-deep-seek-401-unauthorized' | 'pipeline-error-deep-seek-403-model-access-denied' | 'pipeline-error-deep-seek-429-exceeded-quota' | 'pipeline-error-deep-seek-500-server-error' | 'pipeline-error-deep-seek-503-server-overloaded-error' | 'pipeline-error-deep-seek-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deep-seek-401-unauthorized' | 'call.in-progress.error-vapifault-deep-seek-403-model-access-denied' | 'call.in-progress.error-vapifault-deep-seek-429-exceeded-quota' | 'call.in-progress.error-providerfault-deep-seek-500-server-error' | 'call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error' | 'pipeline-error-groq-400-bad-request-validation-failed' | 'pipeline-error-groq-401-unauthorized' | 'pipeline-error-groq-403-model-access-denied' | 'pipeline-error-groq-429-exceeded-quota' | 'pipeline-error-groq-500-server-error' | 'pipeline-error-groq-503-server-overloaded-error' | 'pipeline-error-groq-llm-failed' | 'call.in-progress.error-vapifault-groq-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-groq-401-unauthorized' | 'call.in-progress.error-vapifault-groq-403-model-access-denied' | 'call.in-progress.error-vapifault-groq-429-exceeded-quota' | 'call.in-progress.error-providerfault-groq-500-server-error' | 'call.in-progress.error-providerfault-groq-503-server-overloaded-error' | 'pipeline-error-cerebras-400-bad-request-validation-failed' | 'pipeline-error-cerebras-401-unauthorized' | 'pipeline-error-cerebras-403-model-access-denied' | 'pipeline-error-cerebras-429-exceeded-quota' | 'pipeline-error-cerebras-500-server-error' | 'pipeline-error-cerebras-503-server-overloaded-error' | 'pipeline-error-cerebras-llm-failed' | 'call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-cerebras-401-unauthorized' | 'call.in-progress.error-vapifault-cerebras-403-model-access-denied' | 'call.in-progress.error-vapifault-cerebras-429-exceeded-quota' | 'call.in-progress.error-providerfault-cerebras-500-server-error' | 'call.in-progress.error-providerfault-cerebras-503-server-overloaded-error' | 'pipeline-error-anthropic-400-bad-request-validation-failed' | 'pipeline-error-anthropic-401-unauthorized' | 'pipeline-error-anthropic-403-model-access-denied' | 'pipeline-error-anthropic-429-exceeded-quota' | 'pipeline-error-anthropic-500-server-error' | 'pipeline-error-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-500-server-error' | 'call.in-progress.error-providerfault-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-400-bad-request-validation-failed' | 'pipeline-error-anthropic-bedrock-401-unauthorized' | 'pipeline-error-anthropic-bedrock-403-model-access-denied' | 'pipeline-error-anthropic-bedrock-429-exceeded-quota' | 'pipeline-error-anthropic-bedrock-500-server-error' | 'pipeline-error-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-bedrock-500-server-error' | 'call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-400-bad-request-validation-failed' | 'pipeline-error-anthropic-vertex-401-unauthorized' | 'pipeline-error-anthropic-vertex-403-model-access-denied' | 'pipeline-error-anthropic-vertex-429-exceeded-quota' | 'pipeline-error-anthropic-vertex-500-server-error' | 'pipeline-error-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-vertex-500-server-error' | 'call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-together-ai-400-bad-request-validation-failed' | 'pipeline-error-together-ai-401-unauthorized' | 'pipeline-error-together-ai-403-model-access-denied' | 'pipeline-error-together-ai-429-exceeded-quota' | 'pipeline-error-together-ai-500-server-error' | 'pipeline-error-together-ai-503-server-overloaded-error' | 'pipeline-error-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-together-ai-401-unauthorized' | 'call.in-progress.error-vapifault-together-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-together-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-together-ai-500-server-error' | 'call.in-progress.error-providerfault-together-ai-503-server-overloaded-error' | 'pipeline-error-anyscale-400-bad-request-validation-failed' | 'pipeline-error-anyscale-401-unauthorized' | 'pipeline-error-anyscale-403-model-access-denied' | 'pipeline-error-anyscale-429-exceeded-quota' | 'pipeline-error-anyscale-500-server-error' | 'pipeline-error-anyscale-503-server-overloaded-error' | 'pipeline-error-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anyscale-401-unauthorized' | 'call.in-progress.error-vapifault-anyscale-403-model-access-denied' | 'call.in-progress.error-vapifault-anyscale-429-exceeded-quota' | 'call.in-progress.error-providerfault-anyscale-500-server-error' | 'call.in-progress.error-providerfault-anyscale-503-server-overloaded-error' | 'pipeline-error-openrouter-400-bad-request-validation-failed' | 'pipeline-error-openrouter-401-unauthorized' | 'pipeline-error-openrouter-403-model-access-denied' | 'pipeline-error-openrouter-429-exceeded-quota' | 'pipeline-error-openrouter-500-server-error' | 'pipeline-error-openrouter-503-server-overloaded-error' | 'pipeline-error-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openrouter-401-unauthorized' | 'call.in-progress.error-vapifault-openrouter-403-model-access-denied' | 'call.in-progress.error-vapifault-openrouter-429-exceeded-quota' | 'call.in-progress.error-providerfault-openrouter-500-server-error' | 'call.in-progress.error-providerfault-openrouter-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-400-bad-request-validation-failed' | 'pipeline-error-perplexity-ai-401-unauthorized' | 'pipeline-error-perplexity-ai-403-model-access-denied' | 'pipeline-error-perplexity-ai-429-exceeded-quota' | 'pipeline-error-perplexity-ai-500-server-error' | 'pipeline-error-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-perplexity-ai-401-unauthorized' | 'call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-perplexity-ai-500-server-error' | 'call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-deepinfra-400-bad-request-validation-failed' | 'pipeline-error-deepinfra-401-unauthorized' | 'pipeline-error-deepinfra-403-model-access-denied' | 'pipeline-error-deepinfra-429-exceeded-quota' | 'pipeline-error-deepinfra-500-server-error' | 'pipeline-error-deepinfra-503-server-overloaded-error' | 'pipeline-error-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deepinfra-401-unauthorized' | 'call.in-progress.error-vapifault-deepinfra-403-model-access-denied' | 'call.in-progress.error-vapifault-deepinfra-429-exceeded-quota' | 'call.in-progress.error-providerfault-deepinfra-500-server-error' | 'call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error' | 'pipeline-error-runpod-400-bad-request-validation-failed' | 'pipeline-error-runpod-401-unauthorized' | 'pipeline-error-runpod-403-model-access-denied' | 'pipeline-error-runpod-429-exceeded-quota' | 'pipeline-error-runpod-500-server-error' | 'pipeline-error-runpod-503-server-overloaded-error' | 'pipeline-error-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-runpod-401-unauthorized' | 'call.in-progress.error-vapifault-runpod-403-model-access-denied' | 'call.in-progress.error-vapifault-runpod-429-exceeded-quota' | 'call.in-progress.error-providerfault-runpod-500-server-error' | 'call.in-progress.error-providerfault-runpod-503-server-overloaded-error' | 'pipeline-error-custom-llm-400-bad-request-validation-failed' | 'pipeline-error-custom-llm-401-unauthorized' | 'pipeline-error-custom-llm-403-model-access-denied' | 'pipeline-error-custom-llm-429-exceeded-quota' | 'pipeline-error-custom-llm-500-server-error' | 'pipeline-error-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-custom-llm-401-unauthorized' | 'call.in-progress.error-vapifault-custom-llm-403-model-access-denied' | 'call.in-progress.error-vapifault-custom-llm-429-exceeded-quota' | 'call.in-progress.error-providerfault-custom-llm-500-server-error' | 'call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-voice-failed' | 'pipeline-error-cartesia-socket-hang-up' | 'pipeline-error-cartesia-requested-payment' | 'pipeline-error-cartesia-500-server-error' | 'pipeline-error-cartesia-503-server-error' | 'pipeline-error-cartesia-522-server-error' | 'call.in-progress.error-vapifault-cartesia-socket-hang-up' | 'call.in-progress.error-vapifault-cartesia-requested-payment' | 'call.in-progress.error-providerfault-cartesia-500-server-error' | 'call.in-progress.error-providerfault-cartesia-503-server-error' | 'call.in-progress.error-providerfault-cartesia-522-server-error' | 'pipeline-error-eleven-labs-voice-not-found' | 'pipeline-error-eleven-labs-quota-exceeded' | 'pipeline-error-eleven-labs-unauthorized-access' | 'pipeline-error-eleven-labs-unauthorized-to-access-model' | 'pipeline-error-eleven-labs-professional-voices-only-for-creator-plus' | 'pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'pipeline-error-eleven-labs-system-busy-and-requested-upgrade' | 'pipeline-error-eleven-labs-voice-not-fine-tuned' | 'pipeline-error-eleven-labs-invalid-api-key' | 'pipeline-error-eleven-labs-invalid-voice-samples' | 'pipeline-error-eleven-labs-voice-disabled-by-owner' | 'pipeline-error-eleven-labs-blocked-account-in-probation' | 'pipeline-error-eleven-labs-blocked-content-against-their-policy' | 'pipeline-error-eleven-labs-missing-samples-for-voice-clone' | 'pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'pipeline-error-eleven-labs-voice-not-allowed-for-free-users' | 'pipeline-error-eleven-labs-max-character-limit-exceeded' | 'pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'pipeline-error-eleven-labs-500-server-error' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-found' | 'call.in-progress.error-vapifault-eleven-labs-quota-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-access' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model' | 'call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus' | 'call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned' | 'call.in-progress.error-vapifault-eleven-labs-invalid-api-key' | 'call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples' | 'call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner' | 'call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation' | 'call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy' | 'call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users' | 'call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'call.in-progress.error-providerfault-eleven-labs-500-server-error' | 'pipeline-error-playht-request-timed-out' | 'pipeline-error-playht-invalid-voice' | 'pipeline-error-playht-unexpected-error' | 'pipeline-error-playht-out-of-credits' | 'pipeline-error-playht-invalid-emotion' | 'pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri' | 'pipeline-error-playht-401-unauthorized' | 'pipeline-error-playht-403-forbidden-out-of-characters' | 'pipeline-error-playht-403-forbidden-api-access-not-available' | 'pipeline-error-playht-429-exceeded-quota' | 'pipeline-error-playht-502-gateway-error' | 'pipeline-error-playht-504-gateway-error' | 'call.in-progress.error-vapifault-playht-request-timed-out' | 'call.in-progress.error-vapifault-playht-invalid-voice' | 'call.in-progress.error-vapifault-playht-unexpected-error' | 'call.in-progress.error-vapifault-playht-out-of-credits' | 'call.in-progress.error-vapifault-playht-invalid-emotion' | 'call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri' | 'call.in-progress.error-vapifault-playht-401-unauthorized' | 'call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters' | 'call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available' | 'call.in-progress.error-vapifault-playht-429-exceeded-quota' | 'call.in-progress.error-providerfault-playht-502-gateway-error' | 'call.in-progress.error-providerfault-playht-504-gateway-error' | 'pipeline-error-custom-transcriber-failed' | 'call.in-progress.error-vapifault-custom-transcriber-failed' | 'pipeline-error-eleven-labs-transcriber-failed' | 'call.in-progress.error-vapifault-eleven-labs-transcriber-failed' | 'pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination' | 'pipeline-error-deepgram-returning-401-invalid-credentials' | 'pipeline-error-deepgram-returning-403-model-access-denied' | 'pipeline-error-deepgram-returning-404-not-found' | 'pipeline-error-deepgram-returning-500-invalid-json' | 'pipeline-error-deepgram-returning-502-network-error' | 'pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach' | 'call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination' | 'call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-deepgram-returning-404-not-found' | 'call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied' | 'call.in-progress.error-providerfault-deepgram-returning-500-invalid-json' | 'call.in-progress.error-providerfault-deepgram-returning-502-network-error' | 'call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach' | 'pipeline-error-google-transcriber-failed' | 'call.in-progress.error-vapifault-google-transcriber-failed' | 'pipeline-error-openai-transcriber-failed' | 'call.in-progress.error-vapifault-openai-transcriber-failed' | 'assistant-ended-call' | 'assistant-said-end-call-phrase' | 'assistant-ended-call-with-hangup-task' | 'assistant-ended-call-after-message-spoken' | 'assistant-forwarded-call' | 'assistant-join-timed-out' | 'call.in-progress.error-assistant-did-not-receive-customer-audio' | 'customer-busy' | 'customer-ended-call' | 'customer-did-not-answer' | 'customer-did-not-give-microphone-permission' | 'exceeded-max-duration' | 'manually-canceled' | 'phone-call-provider-closed-websocket' | 'call.forwarding.operator-busy' | 'silence-timed-out' | 'call.in-progress.error-sip-telephony-provider-failed-to-connect-call' | 'call.ringing.hook-executed-say' | 'call.ringing.hook-executed-transfer' | 'twilio-failed-to-connect-call' | 'twilio-reported-customer-misdialed' | 'vonage-rejected' | 'voicemail';
6540
+ endedReason?: 'call-start-error-neither-assistant-nor-server-set' | 'assistant-request-failed' | 'assistant-request-returned-error' | 'assistant-request-returned-unspeakable-error' | 'assistant-request-returned-invalid-assistant' | 'assistant-request-returned-no-assistant' | 'assistant-request-returned-forwarding-phone-number' | 'call.start.error-get-org' | 'call.start.error-get-subscription' | 'call.start.error-get-assistant' | 'call.start.error-get-phone-number' | 'call.start.error-get-customer' | 'call.start.error-get-resources-validation' | 'call.start.error-vapi-number-international' | 'call.start.error-vapi-number-outbound-daily-limit' | 'call.start.error-get-transport' | 'assistant-not-valid' | 'database-error' | 'assistant-not-found' | 'pipeline-error-openai-voice-failed' | 'pipeline-error-cartesia-voice-failed' | 'pipeline-error-deepgram-voice-failed' | 'pipeline-error-eleven-labs-voice-failed' | 'pipeline-error-playht-voice-failed' | 'pipeline-error-lmnt-voice-failed' | 'pipeline-error-azure-voice-failed' | 'pipeline-error-rime-ai-voice-failed' | 'pipeline-error-smallest-ai-voice-failed' | 'pipeline-error-neuphonic-voice-failed' | 'pipeline-error-hume-voice-failed' | 'pipeline-error-sesame-voice-failed' | 'pipeline-error-tavus-video-failed' | 'call.in-progress.error-vapifault-openai-voice-failed' | 'call.in-progress.error-vapifault-cartesia-voice-failed' | 'call.in-progress.error-vapifault-deepgram-voice-failed' | 'call.in-progress.error-vapifault-eleven-labs-voice-failed' | 'call.in-progress.error-vapifault-playht-voice-failed' | 'call.in-progress.error-vapifault-lmnt-voice-failed' | 'call.in-progress.error-vapifault-azure-voice-failed' | 'call.in-progress.error-vapifault-rime-ai-voice-failed' | 'call.in-progress.error-vapifault-smallest-ai-voice-failed' | 'call.in-progress.error-vapifault-neuphonic-voice-failed' | 'call.in-progress.error-vapifault-hume-voice-failed' | 'call.in-progress.error-vapifault-sesame-voice-failed' | 'call.in-progress.error-vapifault-tavus-video-failed' | 'pipeline-error-vapi-llm-failed' | 'pipeline-error-vapi-400-bad-request-validation-failed' | 'pipeline-error-vapi-401-unauthorized' | 'pipeline-error-vapi-403-model-access-denied' | 'pipeline-error-vapi-429-exceeded-quota' | 'pipeline-error-vapi-500-server-error' | 'pipeline-error-vapi-503-server-overloaded-error' | 'call.in-progress.error-vapifault-vapi-llm-failed' | 'call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-vapi-401-unauthorized' | 'call.in-progress.error-vapifault-vapi-403-model-access-denied' | 'call.in-progress.error-vapifault-vapi-429-exceeded-quota' | 'call.in-progress.error-providerfault-vapi-500-server-error' | 'call.in-progress.error-providerfault-vapi-503-server-overloaded-error' | 'pipeline-error-deepgram-transcriber-failed' | 'call.in-progress.error-vapifault-deepgram-transcriber-failed' | 'pipeline-error-gladia-transcriber-failed' | 'call.in-progress.error-vapifault-gladia-transcriber-failed' | 'pipeline-error-speechmatics-transcriber-failed' | 'call.in-progress.error-vapifault-speechmatics-transcriber-failed' | 'pipeline-error-assembly-ai-transcriber-failed' | 'pipeline-error-assembly-ai-returning-400-insufficent-funds' | 'pipeline-error-assembly-ai-returning-400-paid-only-feature' | 'pipeline-error-assembly-ai-returning-401-invalid-credentials' | 'pipeline-error-assembly-ai-returning-500-invalid-schema' | 'pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed' | 'call.in-progress.error-vapifault-assembly-ai-transcriber-failed' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature' | 'call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed' | 'pipeline-error-talkscriber-transcriber-failed' | 'call.in-progress.error-vapifault-talkscriber-transcriber-failed' | 'pipeline-error-azure-speech-transcriber-failed' | 'call.in-progress.error-vapifault-azure-speech-transcriber-failed' | 'call.in-progress.error-pipeline-no-available-llm-model' | 'worker-shutdown' | 'unknown-error' | 'vonage-disconnected' | 'vonage-failed-to-connect-call' | 'vonage-completed' | 'phone-call-provider-bypass-enabled-but-no-call-received' | 'call.in-progress.error-providerfault-transport-never-connected' | 'call.in-progress.error-vapifault-worker-not-available' | 'call.in-progress.error-vapifault-transport-never-connected' | 'call.in-progress.error-vapifault-transport-connected-but-call-not-active' | 'call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing' | 'call.in-progress.error-vapifault-worker-died' | 'call.in-progress.error-vapifault-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-groq-llm-failed' | 'call.in-progress.error-vapifault-google-llm-failed' | 'call.in-progress.error-vapifault-xai-llm-failed' | 'call.in-progress.error-vapifault-mistral-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-cerebras-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-llm-failed' | 'pipeline-error-openai-400-bad-request-validation-failed' | 'pipeline-error-openai-401-unauthorized' | 'pipeline-error-openai-401-incorrect-api-key' | 'pipeline-error-openai-401-account-not-in-organization' | 'pipeline-error-openai-403-model-access-denied' | 'pipeline-error-openai-429-exceeded-quota' | 'pipeline-error-openai-429-rate-limit-reached' | 'pipeline-error-openai-500-server-error' | 'pipeline-error-openai-503-server-overloaded-error' | 'pipeline-error-openai-llm-failed' | 'call.in-progress.error-vapifault-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openai-401-unauthorized' | 'call.in-progress.error-vapifault-openai-401-incorrect-api-key' | 'call.in-progress.error-vapifault-openai-401-account-not-in-organization' | 'call.in-progress.error-vapifault-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-openai-429-exceeded-quota' | 'call.in-progress.error-vapifault-openai-429-rate-limit-reached' | 'call.in-progress.error-providerfault-openai-500-server-error' | 'call.in-progress.error-providerfault-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-400-bad-request-validation-failed' | 'pipeline-error-azure-openai-401-unauthorized' | 'pipeline-error-azure-openai-403-model-access-denied' | 'pipeline-error-azure-openai-429-exceeded-quota' | 'pipeline-error-azure-openai-500-server-error' | 'pipeline-error-azure-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-azure-openai-401-unauthorized' | 'call.in-progress.error-vapifault-azure-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-azure-openai-429-exceeded-quota' | 'call.in-progress.error-providerfault-azure-openai-500-server-error' | 'call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error' | 'pipeline-error-google-400-bad-request-validation-failed' | 'pipeline-error-google-401-unauthorized' | 'pipeline-error-google-403-model-access-denied' | 'pipeline-error-google-429-exceeded-quota' | 'pipeline-error-google-500-server-error' | 'pipeline-error-google-503-server-overloaded-error' | 'pipeline-error-google-llm-failed' | 'call.in-progress.error-vapifault-google-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-google-401-unauthorized' | 'call.in-progress.error-vapifault-google-403-model-access-denied' | 'call.in-progress.error-vapifault-google-429-exceeded-quota' | 'call.in-progress.error-providerfault-google-500-server-error' | 'call.in-progress.error-providerfault-google-503-server-overloaded-error' | 'pipeline-error-xai-400-bad-request-validation-failed' | 'pipeline-error-xai-401-unauthorized' | 'pipeline-error-xai-403-model-access-denied' | 'pipeline-error-xai-429-exceeded-quota' | 'pipeline-error-xai-500-server-error' | 'pipeline-error-xai-503-server-overloaded-error' | 'pipeline-error-xai-llm-failed' | 'call.in-progress.error-vapifault-xai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-xai-401-unauthorized' | 'call.in-progress.error-vapifault-xai-403-model-access-denied' | 'call.in-progress.error-vapifault-xai-429-exceeded-quota' | 'call.in-progress.error-providerfault-xai-500-server-error' | 'call.in-progress.error-providerfault-xai-503-server-overloaded-error' | 'pipeline-error-mistral-400-bad-request-validation-failed' | 'pipeline-error-mistral-401-unauthorized' | 'pipeline-error-mistral-403-model-access-denied' | 'pipeline-error-mistral-429-exceeded-quota' | 'pipeline-error-mistral-500-server-error' | 'pipeline-error-mistral-503-server-overloaded-error' | 'pipeline-error-mistral-llm-failed' | 'call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-mistral-401-unauthorized' | 'call.in-progress.error-vapifault-mistral-403-model-access-denied' | 'call.in-progress.error-vapifault-mistral-429-exceeded-quota' | 'call.in-progress.error-providerfault-mistral-500-server-error' | 'call.in-progress.error-providerfault-mistral-503-server-overloaded-error' | 'pipeline-error-inflection-ai-400-bad-request-validation-failed' | 'pipeline-error-inflection-ai-401-unauthorized' | 'pipeline-error-inflection-ai-403-model-access-denied' | 'pipeline-error-inflection-ai-429-exceeded-quota' | 'pipeline-error-inflection-ai-500-server-error' | 'pipeline-error-inflection-ai-503-server-overloaded-error' | 'pipeline-error-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-inflection-ai-401-unauthorized' | 'call.in-progress.error-vapifault-inflection-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-inflection-ai-500-server-error' | 'call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error' | 'pipeline-error-deep-seek-400-bad-request-validation-failed' | 'pipeline-error-deep-seek-401-unauthorized' | 'pipeline-error-deep-seek-403-model-access-denied' | 'pipeline-error-deep-seek-429-exceeded-quota' | 'pipeline-error-deep-seek-500-server-error' | 'pipeline-error-deep-seek-503-server-overloaded-error' | 'pipeline-error-deep-seek-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deep-seek-401-unauthorized' | 'call.in-progress.error-vapifault-deep-seek-403-model-access-denied' | 'call.in-progress.error-vapifault-deep-seek-429-exceeded-quota' | 'call.in-progress.error-providerfault-deep-seek-500-server-error' | 'call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error' | 'pipeline-error-groq-400-bad-request-validation-failed' | 'pipeline-error-groq-401-unauthorized' | 'pipeline-error-groq-403-model-access-denied' | 'pipeline-error-groq-429-exceeded-quota' | 'pipeline-error-groq-500-server-error' | 'pipeline-error-groq-503-server-overloaded-error' | 'pipeline-error-groq-llm-failed' | 'call.in-progress.error-vapifault-groq-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-groq-401-unauthorized' | 'call.in-progress.error-vapifault-groq-403-model-access-denied' | 'call.in-progress.error-vapifault-groq-429-exceeded-quota' | 'call.in-progress.error-providerfault-groq-500-server-error' | 'call.in-progress.error-providerfault-groq-503-server-overloaded-error' | 'pipeline-error-cerebras-400-bad-request-validation-failed' | 'pipeline-error-cerebras-401-unauthorized' | 'pipeline-error-cerebras-403-model-access-denied' | 'pipeline-error-cerebras-429-exceeded-quota' | 'pipeline-error-cerebras-500-server-error' | 'pipeline-error-cerebras-503-server-overloaded-error' | 'pipeline-error-cerebras-llm-failed' | 'call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-cerebras-401-unauthorized' | 'call.in-progress.error-vapifault-cerebras-403-model-access-denied' | 'call.in-progress.error-vapifault-cerebras-429-exceeded-quota' | 'call.in-progress.error-providerfault-cerebras-500-server-error' | 'call.in-progress.error-providerfault-cerebras-503-server-overloaded-error' | 'pipeline-error-anthropic-400-bad-request-validation-failed' | 'pipeline-error-anthropic-401-unauthorized' | 'pipeline-error-anthropic-403-model-access-denied' | 'pipeline-error-anthropic-429-exceeded-quota' | 'pipeline-error-anthropic-500-server-error' | 'pipeline-error-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-500-server-error' | 'call.in-progress.error-providerfault-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-400-bad-request-validation-failed' | 'pipeline-error-anthropic-bedrock-401-unauthorized' | 'pipeline-error-anthropic-bedrock-403-model-access-denied' | 'pipeline-error-anthropic-bedrock-429-exceeded-quota' | 'pipeline-error-anthropic-bedrock-500-server-error' | 'pipeline-error-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-bedrock-500-server-error' | 'call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-400-bad-request-validation-failed' | 'pipeline-error-anthropic-vertex-401-unauthorized' | 'pipeline-error-anthropic-vertex-403-model-access-denied' | 'pipeline-error-anthropic-vertex-429-exceeded-quota' | 'pipeline-error-anthropic-vertex-500-server-error' | 'pipeline-error-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-vertex-500-server-error' | 'call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-together-ai-400-bad-request-validation-failed' | 'pipeline-error-together-ai-401-unauthorized' | 'pipeline-error-together-ai-403-model-access-denied' | 'pipeline-error-together-ai-429-exceeded-quota' | 'pipeline-error-together-ai-500-server-error' | 'pipeline-error-together-ai-503-server-overloaded-error' | 'pipeline-error-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-together-ai-401-unauthorized' | 'call.in-progress.error-vapifault-together-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-together-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-together-ai-500-server-error' | 'call.in-progress.error-providerfault-together-ai-503-server-overloaded-error' | 'pipeline-error-anyscale-400-bad-request-validation-failed' | 'pipeline-error-anyscale-401-unauthorized' | 'pipeline-error-anyscale-403-model-access-denied' | 'pipeline-error-anyscale-429-exceeded-quota' | 'pipeline-error-anyscale-500-server-error' | 'pipeline-error-anyscale-503-server-overloaded-error' | 'pipeline-error-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anyscale-401-unauthorized' | 'call.in-progress.error-vapifault-anyscale-403-model-access-denied' | 'call.in-progress.error-vapifault-anyscale-429-exceeded-quota' | 'call.in-progress.error-providerfault-anyscale-500-server-error' | 'call.in-progress.error-providerfault-anyscale-503-server-overloaded-error' | 'pipeline-error-openrouter-400-bad-request-validation-failed' | 'pipeline-error-openrouter-401-unauthorized' | 'pipeline-error-openrouter-403-model-access-denied' | 'pipeline-error-openrouter-429-exceeded-quota' | 'pipeline-error-openrouter-500-server-error' | 'pipeline-error-openrouter-503-server-overloaded-error' | 'pipeline-error-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openrouter-401-unauthorized' | 'call.in-progress.error-vapifault-openrouter-403-model-access-denied' | 'call.in-progress.error-vapifault-openrouter-429-exceeded-quota' | 'call.in-progress.error-providerfault-openrouter-500-server-error' | 'call.in-progress.error-providerfault-openrouter-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-400-bad-request-validation-failed' | 'pipeline-error-perplexity-ai-401-unauthorized' | 'pipeline-error-perplexity-ai-403-model-access-denied' | 'pipeline-error-perplexity-ai-429-exceeded-quota' | 'pipeline-error-perplexity-ai-500-server-error' | 'pipeline-error-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-perplexity-ai-401-unauthorized' | 'call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-perplexity-ai-500-server-error' | 'call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-deepinfra-400-bad-request-validation-failed' | 'pipeline-error-deepinfra-401-unauthorized' | 'pipeline-error-deepinfra-403-model-access-denied' | 'pipeline-error-deepinfra-429-exceeded-quota' | 'pipeline-error-deepinfra-500-server-error' | 'pipeline-error-deepinfra-503-server-overloaded-error' | 'pipeline-error-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deepinfra-401-unauthorized' | 'call.in-progress.error-vapifault-deepinfra-403-model-access-denied' | 'call.in-progress.error-vapifault-deepinfra-429-exceeded-quota' | 'call.in-progress.error-providerfault-deepinfra-500-server-error' | 'call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error' | 'pipeline-error-runpod-400-bad-request-validation-failed' | 'pipeline-error-runpod-401-unauthorized' | 'pipeline-error-runpod-403-model-access-denied' | 'pipeline-error-runpod-429-exceeded-quota' | 'pipeline-error-runpod-500-server-error' | 'pipeline-error-runpod-503-server-overloaded-error' | 'pipeline-error-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-runpod-401-unauthorized' | 'call.in-progress.error-vapifault-runpod-403-model-access-denied' | 'call.in-progress.error-vapifault-runpod-429-exceeded-quota' | 'call.in-progress.error-providerfault-runpod-500-server-error' | 'call.in-progress.error-providerfault-runpod-503-server-overloaded-error' | 'pipeline-error-custom-llm-400-bad-request-validation-failed' | 'pipeline-error-custom-llm-401-unauthorized' | 'pipeline-error-custom-llm-403-model-access-denied' | 'pipeline-error-custom-llm-429-exceeded-quota' | 'pipeline-error-custom-llm-500-server-error' | 'pipeline-error-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-custom-llm-401-unauthorized' | 'call.in-progress.error-vapifault-custom-llm-403-model-access-denied' | 'call.in-progress.error-vapifault-custom-llm-429-exceeded-quota' | 'call.in-progress.error-providerfault-custom-llm-500-server-error' | 'call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-voice-failed' | 'pipeline-error-cartesia-socket-hang-up' | 'pipeline-error-cartesia-requested-payment' | 'pipeline-error-cartesia-500-server-error' | 'pipeline-error-cartesia-503-server-error' | 'pipeline-error-cartesia-522-server-error' | 'call.in-progress.error-vapifault-cartesia-socket-hang-up' | 'call.in-progress.error-vapifault-cartesia-requested-payment' | 'call.in-progress.error-providerfault-cartesia-500-server-error' | 'call.in-progress.error-providerfault-cartesia-503-server-error' | 'call.in-progress.error-providerfault-cartesia-522-server-error' | 'pipeline-error-eleven-labs-voice-not-found' | 'pipeline-error-eleven-labs-quota-exceeded' | 'pipeline-error-eleven-labs-unauthorized-access' | 'pipeline-error-eleven-labs-unauthorized-to-access-model' | 'pipeline-error-eleven-labs-professional-voices-only-for-creator-plus' | 'pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'pipeline-error-eleven-labs-system-busy-and-requested-upgrade' | 'pipeline-error-eleven-labs-voice-not-fine-tuned' | 'pipeline-error-eleven-labs-invalid-api-key' | 'pipeline-error-eleven-labs-invalid-voice-samples' | 'pipeline-error-eleven-labs-voice-disabled-by-owner' | 'pipeline-error-eleven-labs-blocked-account-in-probation' | 'pipeline-error-eleven-labs-blocked-content-against-their-policy' | 'pipeline-error-eleven-labs-missing-samples-for-voice-clone' | 'pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'pipeline-error-eleven-labs-voice-not-allowed-for-free-users' | 'pipeline-error-eleven-labs-max-character-limit-exceeded' | 'pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'pipeline-error-eleven-labs-500-server-error' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-found' | 'call.in-progress.error-vapifault-eleven-labs-quota-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-access' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model' | 'call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus' | 'call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned' | 'call.in-progress.error-vapifault-eleven-labs-invalid-api-key' | 'call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples' | 'call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner' | 'call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation' | 'call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy' | 'call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users' | 'call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'call.in-progress.error-providerfault-eleven-labs-500-server-error' | 'pipeline-error-playht-request-timed-out' | 'pipeline-error-playht-invalid-voice' | 'pipeline-error-playht-unexpected-error' | 'pipeline-error-playht-out-of-credits' | 'pipeline-error-playht-invalid-emotion' | 'pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri' | 'pipeline-error-playht-401-unauthorized' | 'pipeline-error-playht-403-forbidden-out-of-characters' | 'pipeline-error-playht-403-forbidden-api-access-not-available' | 'pipeline-error-playht-429-exceeded-quota' | 'pipeline-error-playht-502-gateway-error' | 'pipeline-error-playht-504-gateway-error' | 'call.in-progress.error-vapifault-playht-request-timed-out' | 'call.in-progress.error-vapifault-playht-invalid-voice' | 'call.in-progress.error-vapifault-playht-unexpected-error' | 'call.in-progress.error-vapifault-playht-out-of-credits' | 'call.in-progress.error-vapifault-playht-invalid-emotion' | 'call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri' | 'call.in-progress.error-vapifault-playht-401-unauthorized' | 'call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters' | 'call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available' | 'call.in-progress.error-vapifault-playht-429-exceeded-quota' | 'call.in-progress.error-providerfault-playht-502-gateway-error' | 'call.in-progress.error-providerfault-playht-504-gateway-error' | 'pipeline-error-custom-transcriber-failed' | 'call.in-progress.error-vapifault-custom-transcriber-failed' | 'pipeline-error-eleven-labs-transcriber-failed' | 'call.in-progress.error-vapifault-eleven-labs-transcriber-failed' | 'pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination' | 'pipeline-error-deepgram-returning-401-invalid-credentials' | 'pipeline-error-deepgram-returning-403-model-access-denied' | 'pipeline-error-deepgram-returning-404-not-found' | 'pipeline-error-deepgram-returning-500-invalid-json' | 'pipeline-error-deepgram-returning-502-network-error' | 'pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach' | 'call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination' | 'call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-deepgram-returning-404-not-found' | 'call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied' | 'call.in-progress.error-providerfault-deepgram-returning-500-invalid-json' | 'call.in-progress.error-providerfault-deepgram-returning-502-network-error' | 'call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach' | 'pipeline-error-google-transcriber-failed' | 'call.in-progress.error-vapifault-google-transcriber-failed' | 'pipeline-error-openai-transcriber-failed' | 'call.in-progress.error-vapifault-openai-transcriber-failed' | 'assistant-ended-call' | 'assistant-said-end-call-phrase' | 'assistant-ended-call-with-hangup-task' | 'assistant-ended-call-after-message-spoken' | 'assistant-forwarded-call' | 'assistant-join-timed-out' | 'call.in-progress.error-assistant-did-not-receive-customer-audio' | 'customer-busy' | 'customer-ended-call' | 'customer-did-not-answer' | 'customer-did-not-give-microphone-permission' | 'exceeded-max-duration' | 'manually-canceled' | 'phone-call-provider-closed-websocket' | 'call.forwarding.operator-busy' | 'silence-timed-out' | 'call.in-progress.error-sip-inbound-call-failed-to-connect' | 'call.in-progress.error-providerfault-outbound-sip-403-forbidden' | 'call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required' | 'call.in-progress.error-providerfault-outbound-sip-503-service-unavailable' | 'call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable' | 'call.in-progress.error-sip-outbound-call-failed-to-connect' | 'call.ringing.hook-executed-say' | 'call.ringing.hook-executed-transfer' | 'twilio-failed-to-connect-call' | 'twilio-reported-customer-misdialed' | 'vonage-rejected' | 'voicemail';
6772
6541
  /** This is the destination where the call ended up being transferred to. If the call was not transferred, this will be empty. */
6773
6542
  destination?: TransferDestinationNumber | TransferDestinationSip;
6774
6543
  /** This is the unique identifier for the call. */
@@ -6853,8 +6622,6 @@ export interface Call {
6853
6622
  */
6854
6623
  squad?: CreateSquadDTO;
6855
6624
  /**
6856
- * [BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.
6857
- *
6858
6625
  * This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.
6859
6626
  *
6860
6627
  * To start a call with:
@@ -6864,8 +6631,6 @@ export interface Call {
6864
6631
  */
6865
6632
  workflowId?: string;
6866
6633
  /**
6867
- * [BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.
6868
- *
6869
6634
  * This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.
6870
6635
  *
6871
6636
  * To start a call with:
@@ -6874,6 +6639,8 @@ export interface Call {
6874
6639
  * - Workflow, use `workflow` or `workflowId`
6875
6640
  */
6876
6641
  workflow?: CreateWorkflowDTO;
6642
+ /** These are the overrides for the `workflow` or `workflowId`'s settings and template variables. */
6643
+ workflowOverrides?: WorkflowOverrides;
6877
6644
  /**
6878
6645
  * This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.
6879
6646
  *
@@ -6973,8 +6740,6 @@ export interface CreateCallDTO {
6973
6740
  */
6974
6741
  squad?: CreateSquadDTO;
6975
6742
  /**
6976
- * [BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.
6977
- *
6978
6743
  * This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.
6979
6744
  *
6980
6745
  * To start a call with:
@@ -6984,8 +6749,6 @@ export interface CreateCallDTO {
6984
6749
  */
6985
6750
  workflowId?: string;
6986
6751
  /**
6987
- * [BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.
6988
- *
6989
6752
  * This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.
6990
6753
  *
6991
6754
  * To start a call with:
@@ -6994,6 +6757,8 @@ export interface CreateCallDTO {
6994
6757
  * - Workflow, use `workflow` or `workflowId`
6995
6758
  */
6996
6759
  workflow?: CreateWorkflowDTO;
6760
+ /** These are the overrides for the `workflow` or `workflowId`'s settings and template variables. */
6761
+ workflowOverrides?: WorkflowOverrides;
6997
6762
  /**
6998
6763
  * This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.
6999
6764
  *
@@ -7083,8 +6848,6 @@ export interface CreateOutboundCallDTO {
7083
6848
  */
7084
6849
  squad?: CreateSquadDTO;
7085
6850
  /**
7086
- * [BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.
7087
- *
7088
6851
  * This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.
7089
6852
  *
7090
6853
  * To start a call with:
@@ -7094,8 +6857,6 @@ export interface CreateOutboundCallDTO {
7094
6857
  */
7095
6858
  workflowId?: string;
7096
6859
  /**
7097
- * [BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.
7098
- *
7099
6860
  * This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.
7100
6861
  *
7101
6862
  * To start a call with:
@@ -7104,6 +6865,8 @@ export interface CreateOutboundCallDTO {
7104
6865
  * - Workflow, use `workflow` or `workflowId`
7105
6866
  */
7106
6867
  workflow?: CreateWorkflowDTO;
6868
+ /** These are the overrides for the `workflow` or `workflowId`'s settings and template variables. */
6869
+ workflowOverrides?: WorkflowOverrides;
7107
6870
  /**
7108
6871
  * This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.
7109
6872
  *
@@ -7169,8 +6932,6 @@ export interface CreateWebCallDTO {
7169
6932
  */
7170
6933
  squad?: CreateSquadDTO;
7171
6934
  /**
7172
- * [BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.
7173
- *
7174
6935
  * This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.
7175
6936
  *
7176
6937
  * To start a call with:
@@ -7180,8 +6941,6 @@ export interface CreateWebCallDTO {
7180
6941
  */
7181
6942
  workflowId?: string;
7182
6943
  /**
7183
- * [BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.
7184
- *
7185
6944
  * This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.
7186
6945
  *
7187
6946
  * To start a call with:
@@ -7190,6 +6949,8 @@ export interface CreateWebCallDTO {
7190
6949
  * - Workflow, use `workflow` or `workflowId`
7191
6950
  */
7192
6951
  workflow?: CreateWorkflowDTO;
6952
+ /** These are the overrides for the `workflow` or `workflowId`'s settings and template variables. */
6953
+ workflowOverrides?: WorkflowOverrides;
7193
6954
  }
7194
6955
  export interface UpdateCallDTO {
7195
6956
  /**
@@ -7199,7 +6960,10 @@ export interface UpdateCallDTO {
7199
6960
  name?: string;
7200
6961
  }
7201
6962
  export interface DeveloperMessage {
7202
- /** This is the role of the message author */
6963
+ /**
6964
+ * This is the role of the message author
6965
+ * @default "developer"
6966
+ */
7203
6967
  role: 'developer';
7204
6968
  /**
7205
6969
  * This is the content of the developer message
@@ -7254,7 +7018,10 @@ export interface ToolCall {
7254
7018
  function: ToolCallFunction;
7255
7019
  }
7256
7020
  export interface AssistantMessage {
7257
- /** This is the role of the message author */
7021
+ /**
7022
+ * This is the role of the message author
7023
+ * @default "assistant"
7024
+ */
7258
7025
  role: 'assistant';
7259
7026
  /**
7260
7027
  * This is the content of the assistant message
@@ -7275,7 +7042,10 @@ export interface AssistantMessage {
7275
7042
  name?: string;
7276
7043
  }
7277
7044
  export interface ToolMessage {
7278
- /** This is the role of the message author */
7045
+ /**
7046
+ * This is the role of the message author
7047
+ * @default "tool"
7048
+ */
7279
7049
  role: 'tool';
7280
7050
  /**
7281
7051
  * This is the content of the tool message
@@ -7290,17 +7060,14 @@ export interface ToolMessage {
7290
7060
  */
7291
7061
  name?: string;
7292
7062
  }
7293
- export interface CreateChatStreamResponse {
7294
- /** This is the unique identifier for the streaming response. */
7295
- id: string;
7063
+ export interface FunctionCall {
7064
+ /** This is the arguments to call the function with */
7065
+ arguments: string;
7296
7066
  /**
7297
- * This is the path to the content being updated.
7298
- * Format: `chat.output[{contentIndex}].content` where contentIndex identifies the specific content item.
7299
- * @example "chat.output[0].content"
7067
+ * This is the name of the function to call
7068
+ * @maxLength 40
7300
7069
  */
7301
- path: string;
7302
- /** This is the incremental content chunk being streamed. */
7303
- delta: string;
7070
+ name: string;
7304
7071
  }
7305
7072
  export interface Chat {
7306
7073
  /** This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead. */
@@ -7317,7 +7084,10 @@ export interface Chat {
7317
7084
  * Mutually exclusive with previousChatId.
7318
7085
  */
7319
7086
  sessionId?: string;
7320
- /** Chat input as a string or an array of messages. When using message array, each message requires a role and content. */
7087
+ /**
7088
+ * This is the input text for the chat.
7089
+ * Can be a string or an array of chat messages.
7090
+ */
7321
7091
  input?: string | (SystemMessage | UserMessage | AssistantMessage | ToolMessage | DeveloperMessage)[];
7322
7092
  /**
7323
7093
  * This is a flag that determines whether the response should be streamed.
@@ -7335,9 +7105,12 @@ export interface Chat {
7335
7105
  id: string;
7336
7106
  /** This is the unique identifier for the org that this chat belongs to. */
7337
7107
  orgId: string;
7338
- /** Array of messages used as context for the chat */
7108
+ /**
7109
+ * This is an array of messages used as context for the chat.
7110
+ * Used to provide message history for multi-turn conversations.
7111
+ */
7339
7112
  messages?: (SystemMessage | UserMessage | AssistantMessage | ToolMessage | DeveloperMessage)[];
7340
- /** Output messages generated by the system in response to the input */
7113
+ /** This is the output messages generated by the system in response to the input. */
7341
7114
  output?: (SystemMessage | UserMessage | AssistantMessage | ToolMessage | DeveloperMessage)[];
7342
7115
  /**
7343
7116
  * This is the ISO 8601 date-time string of when the chat was created.
@@ -7350,10 +7123,6 @@ export interface Chat {
7350
7123
  */
7351
7124
  updatedAt: string;
7352
7125
  }
7353
- export interface ChatPaginatedResponse {
7354
- results: Chat[];
7355
- metadata: PaginationMeta;
7356
- }
7357
7126
  export interface CreateChatDTO {
7358
7127
  /** This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead. */
7359
7128
  assistantId?: string;
@@ -7369,7 +7138,11 @@ export interface CreateChatDTO {
7369
7138
  * Mutually exclusive with previousChatId.
7370
7139
  */
7371
7140
  sessionId?: string;
7372
- /** Chat input as a string or an array of messages. When using message array, each message requires a role and content. */
7141
+ /**
7142
+ * This is the input text for the chat.
7143
+ * Can be a string or an array of chat messages.
7144
+ * This field is REQUIRED for chat creation.
7145
+ */
7373
7146
  input: string | (SystemMessage | UserMessage | AssistantMessage | ToolMessage | DeveloperMessage)[];
7374
7147
  /**
7375
7148
  * This is a flag that determines whether the response should be streamed.
@@ -7384,6 +7157,83 @@ export interface CreateChatDTO {
7384
7157
  */
7385
7158
  previousChatId?: string;
7386
7159
  }
7160
+ export interface GetChatPaginatedDTO {
7161
+ /** This is the unique identifier for the assistant that will be used for the chat. */
7162
+ assistantId?: string;
7163
+ /** This is the unique identifier for the workflow that will be used for the chat. */
7164
+ workflowId?: string;
7165
+ /** This is the unique identifier for the session that will be used for the chat. */
7166
+ sessionId?: string;
7167
+ /**
7168
+ * This is the page number to return. Defaults to 1.
7169
+ * @min 1
7170
+ */
7171
+ page?: number;
7172
+ /** This is the sort order for pagination. Defaults to 'DESC'. */
7173
+ sortOrder?: 'ASC' | 'DESC';
7174
+ /**
7175
+ * This is the maximum number of items to return. Defaults to 100.
7176
+ * @min 0
7177
+ * @max 1000
7178
+ */
7179
+ limit?: number;
7180
+ /**
7181
+ * This will return items where the createdAt is greater than the specified value.
7182
+ * @format date-time
7183
+ */
7184
+ createdAtGt?: string;
7185
+ /**
7186
+ * This will return items where the createdAt is less than the specified value.
7187
+ * @format date-time
7188
+ */
7189
+ createdAtLt?: string;
7190
+ /**
7191
+ * This will return items where the createdAt is greater than or equal to the specified value.
7192
+ * @format date-time
7193
+ */
7194
+ createdAtGe?: string;
7195
+ /**
7196
+ * This will return items where the createdAt is less than or equal to the specified value.
7197
+ * @format date-time
7198
+ */
7199
+ createdAtLe?: string;
7200
+ /**
7201
+ * This will return items where the updatedAt is greater than the specified value.
7202
+ * @format date-time
7203
+ */
7204
+ updatedAtGt?: string;
7205
+ /**
7206
+ * This will return items where the updatedAt is less than the specified value.
7207
+ * @format date-time
7208
+ */
7209
+ updatedAtLt?: string;
7210
+ /**
7211
+ * This will return items where the updatedAt is greater than or equal to the specified value.
7212
+ * @format date-time
7213
+ */
7214
+ updatedAtGe?: string;
7215
+ /**
7216
+ * This will return items where the updatedAt is less than or equal to the specified value.
7217
+ * @format date-time
7218
+ */
7219
+ updatedAtLe?: string;
7220
+ }
7221
+ export interface ChatPaginatedResponse {
7222
+ results: Chat[];
7223
+ metadata: PaginationMeta;
7224
+ }
7225
+ export interface CreateChatStreamResponse {
7226
+ /** This is the unique identifier for the streaming response. */
7227
+ id: string;
7228
+ /**
7229
+ * This is the path to the content being updated.
7230
+ * Format: `chat.output[{contentIndex}].content` where contentIndex identifies the specific content item.
7231
+ * @example "chat.output[0].content"
7232
+ */
7233
+ path: string;
7234
+ /** This is the incremental content chunk being streamed. */
7235
+ delta: string;
7236
+ }
7387
7237
  export interface OpenAIResponsesRequest {
7388
7238
  /** This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead. */
7389
7239
  assistantId?: string;
@@ -7399,7 +7249,11 @@ export interface OpenAIResponsesRequest {
7399
7249
  * Mutually exclusive with previousChatId.
7400
7250
  */
7401
7251
  sessionId?: string;
7402
- /** Chat input as a string or an array of messages. When using message array, each message requires a role and content. */
7252
+ /**
7253
+ * This is the input text for the chat.
7254
+ * Can be a string or an array of chat messages.
7255
+ * This field is REQUIRED for chat creation.
7256
+ */
7403
7257
  input: string | (SystemMessage | UserMessage | AssistantMessage | ToolMessage | DeveloperMessage)[];
7404
7258
  /**
7405
7259
  * Whether to stream the response or not.
@@ -7413,7 +7267,136 @@ export interface OpenAIResponsesRequest {
7413
7267
  */
7414
7268
  previousChatId?: string;
7415
7269
  }
7416
- export interface CreateSessionDTO {
7270
+ export interface ResponseOutputText {
7271
+ /**
7272
+ * Annotations in the text output
7273
+ * @default []
7274
+ */
7275
+ annotations: object[];
7276
+ /** The text output from the model */
7277
+ text: string;
7278
+ /**
7279
+ * The type of the output text
7280
+ * @default "output_text"
7281
+ */
7282
+ type: 'output_text';
7283
+ }
7284
+ export interface ResponseOutputMessage {
7285
+ /** The unique ID of the output message */
7286
+ id: string;
7287
+ /** Content of the output message */
7288
+ content: ResponseOutputText[];
7289
+ /**
7290
+ * The role of the output message
7291
+ * @default "assistant"
7292
+ */
7293
+ role: 'assistant';
7294
+ /** The status of the message */
7295
+ status: 'in_progress' | 'completed' | 'incomplete';
7296
+ /**
7297
+ * The type of the output message
7298
+ * @default "message"
7299
+ */
7300
+ type: 'message';
7301
+ }
7302
+ export interface ResponseObject {
7303
+ /** Unique identifier for this Response */
7304
+ id: string;
7305
+ /**
7306
+ * The object type
7307
+ * @default "response"
7308
+ */
7309
+ object: 'response';
7310
+ /** Unix timestamp (in seconds) of when this Response was created */
7311
+ created_at: number;
7312
+ /** Status of the response */
7313
+ status: 'completed' | 'failed' | 'in_progress' | 'incomplete';
7314
+ /**
7315
+ * Error message if the response failed
7316
+ * @default null
7317
+ */
7318
+ error?: string | null;
7319
+ /** Output messages from the model */
7320
+ output: ResponseOutputMessage[];
7321
+ }
7322
+ export interface ResponseTextDeltaEvent {
7323
+ /** Index of the content part */
7324
+ content_index: number;
7325
+ /** Text delta being added */
7326
+ delta: string;
7327
+ /** ID of the output item */
7328
+ item_id: string;
7329
+ /** Index of the output item */
7330
+ output_index: number;
7331
+ /**
7332
+ * Event type
7333
+ * @default "response.output_text.delta"
7334
+ */
7335
+ type: 'response.output_text.delta';
7336
+ }
7337
+ export interface ResponseTextDoneEvent {
7338
+ /** Index of the content part */
7339
+ content_index: number;
7340
+ /** ID of the output item */
7341
+ item_id: string;
7342
+ /** Index of the output item */
7343
+ output_index: number;
7344
+ /** Complete text content */
7345
+ text: string;
7346
+ /**
7347
+ * Event type
7348
+ * @default "response.output_text.done"
7349
+ */
7350
+ type: 'response.output_text.done';
7351
+ }
7352
+ export interface ResponseCompletedEvent {
7353
+ /** The completed response */
7354
+ response: ResponseObject;
7355
+ /**
7356
+ * Event type
7357
+ * @default "response.completed"
7358
+ */
7359
+ type: 'response.completed';
7360
+ }
7361
+ export interface ResponseErrorEvent {
7362
+ /**
7363
+ * Event type
7364
+ * @default "error"
7365
+ */
7366
+ type: 'error';
7367
+ /**
7368
+ * Error code
7369
+ * @example "ERR_SOMETHING"
7370
+ */
7371
+ code: string;
7372
+ /**
7373
+ * Error message
7374
+ * @example "Something went wrong"
7375
+ */
7376
+ message: string;
7377
+ /** Parameter that caused the error */
7378
+ param?: string | null;
7379
+ /**
7380
+ * Sequence number of the event
7381
+ * @example 1
7382
+ */
7383
+ sequence_number: number;
7384
+ }
7385
+ export interface Session {
7386
+ /** This is the unique identifier for the session. */
7387
+ id: string;
7388
+ /** This is the unique identifier for the organization that owns this session. */
7389
+ orgId: string;
7390
+ /**
7391
+ * This is the ISO 8601 timestamp indicating when the session was created.
7392
+ * @format date-time
7393
+ */
7394
+ createdAt: string;
7395
+ /**
7396
+ * This is the ISO 8601 timestamp indicating when the session was last updated.
7397
+ * @format date-time
7398
+ */
7399
+ updatedAt: string;
7417
7400
  /**
7418
7401
  * This is a user-defined name for the session. Maximum length is 40 characters.
7419
7402
  * @maxLength 40
@@ -7421,6 +7404,13 @@ export interface CreateSessionDTO {
7421
7404
  name?: string;
7422
7405
  /** This is the current status of the session. Can be either 'active' or 'completed'. */
7423
7406
  status?: 'active' | 'completed';
7407
+ /**
7408
+ * Session expiration time in seconds. Defaults to 24 hours (86400 seconds) if not set.
7409
+ * @min 60
7410
+ * @max 2592000
7411
+ * @example 86400
7412
+ */
7413
+ expirationSeconds?: number;
7424
7414
  /** This is the ID of the assistant associated with this session. Use this when referencing an existing assistant. */
7425
7415
  assistantId?: string;
7426
7416
  /**
@@ -7428,7 +7418,7 @@ export interface CreateSessionDTO {
7428
7418
  * If assistantId is provided, this will be ignored.
7429
7419
  */
7430
7420
  assistant?: CreateAssistantDTO;
7431
- /** Array of chat messages in the session */
7421
+ /** This is an array of chat messages in the session. */
7432
7422
  messages?: (SystemMessage | UserMessage | AssistantMessage | ToolMessage | DeveloperMessage)[];
7433
7423
  /** This is the customer information associated with this session. */
7434
7424
  customer?: CreateCustomerDTO;
@@ -7437,21 +7427,7 @@ export interface CreateSessionDTO {
7437
7427
  /** This is the phone number configuration for this session. */
7438
7428
  phoneNumber?: ImportTwilioPhoneNumberDTO;
7439
7429
  }
7440
- export interface Session {
7441
- /** This is the unique identifier for the session. */
7442
- id: string;
7443
- /** This is the unique identifier for the organization that owns this session. */
7444
- orgId: string;
7445
- /**
7446
- * This is the ISO 8601 timestamp indicating when the session was created.
7447
- * @format date-time
7448
- */
7449
- createdAt: string;
7450
- /**
7451
- * This is the ISO 8601 timestamp indicating when the session was last updated.
7452
- * @format date-time
7453
- */
7454
- updatedAt: string;
7430
+ export interface CreateSessionDTO {
7455
7431
  /**
7456
7432
  * This is a user-defined name for the session. Maximum length is 40 characters.
7457
7433
  * @maxLength 40
@@ -7459,6 +7435,13 @@ export interface Session {
7459
7435
  name?: string;
7460
7436
  /** This is the current status of the session. Can be either 'active' or 'completed'. */
7461
7437
  status?: 'active' | 'completed';
7438
+ /**
7439
+ * Session expiration time in seconds. Defaults to 24 hours (86400 seconds) if not set.
7440
+ * @min 60
7441
+ * @max 2592000
7442
+ * @example 86400
7443
+ */
7444
+ expirationSeconds?: number;
7462
7445
  /** This is the ID of the assistant associated with this session. Use this when referencing an existing assistant. */
7463
7446
  assistantId?: string;
7464
7447
  /**
@@ -7466,7 +7449,7 @@ export interface Session {
7466
7449
  * If assistantId is provided, this will be ignored.
7467
7450
  */
7468
7451
  assistant?: CreateAssistantDTO;
7469
- /** Array of chat messages in the session */
7452
+ /** This is an array of chat messages in the session. */
7470
7453
  messages?: (SystemMessage | UserMessage | AssistantMessage | ToolMessage | DeveloperMessage)[];
7471
7454
  /** This is the customer information associated with this session. */
7472
7455
  customer?: CreateCustomerDTO;
@@ -7475,10 +7458,6 @@ export interface Session {
7475
7458
  /** This is the phone number configuration for this session. */
7476
7459
  phoneNumber?: ImportTwilioPhoneNumberDTO;
7477
7460
  }
7478
- export interface SessionPaginatedResponse {
7479
- results: Session[];
7480
- metadata: PaginationMeta;
7481
- }
7482
7461
  export interface UpdateSessionDTO {
7483
7462
  /**
7484
7463
  * This is the new name for the session. Maximum length is 40 characters.
@@ -7487,24 +7466,96 @@ export interface UpdateSessionDTO {
7487
7466
  name?: string;
7488
7467
  /** This is the new status for the session. */
7489
7468
  status?: 'active' | 'completed';
7490
- /** Array of updated chat messages */
7469
+ /**
7470
+ * Session expiration time in seconds. Defaults to 24 hours (86400 seconds) if not set.
7471
+ * @min 60
7472
+ * @max 2592000
7473
+ * @example 86400
7474
+ */
7475
+ expirationSeconds?: number;
7476
+ /** This is the updated array of chat messages. */
7491
7477
  messages?: (SystemMessage | UserMessage | AssistantMessage | ToolMessage | DeveloperMessage)[];
7492
7478
  }
7493
- export interface Assistant {
7494
- /** These are the options for the assistant's transcriber. */
7495
- transcriber?: AssemblyAITranscriber | AzureSpeechTranscriber | CustomTranscriber | DeepgramTranscriber | ElevenLabsTranscriber | GladiaTranscriber | GoogleTranscriber | SpeechmaticsTranscriber | TalkscriberTranscriber | OpenAITranscriber;
7496
- /** These are the options for the assistant's LLM. */
7497
- model?: AnthropicModel | AnyscaleModel | CerebrasModel | CustomLLMModel | DeepInfraModel | DeepSeekModel | GoogleModel | GroqModel | InflectionAIModel | OpenAIModel | OpenRouterModel | PerplexityAIModel | TogetherAIModel | XaiModel;
7498
- /** These are the options for the assistant's voice. */
7499
- voice?: AzureVoice | CartesiaVoice | CustomVoice | DeepgramVoice | ElevenLabsVoice | HumeVoice | LMNTVoice | NeuphonicVoice | OpenAIVoice | PlayHTVoice | RimeAIVoice | SmallestAIVoice | TavusVoice | VapiVoice | SesameVoice;
7479
+ export interface GetSessionPaginatedDTO {
7480
+ /** This is the name of the session to filter by. */
7481
+ name?: string;
7482
+ /** This is the ID of the assistant to filter sessions by. */
7483
+ assistantId?: string;
7484
+ /** This is the ID of the workflow to filter sessions by. */
7485
+ workflowId?: string;
7500
7486
  /**
7501
- * This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).
7502
- *
7503
- * If unspecified, assistant will wait for user to speak and use the model to respond once they speak.
7504
- * @example "Hello! How can I help you today?"
7487
+ * This is the page number to return. Defaults to 1.
7488
+ * @min 1
7505
7489
  */
7506
- firstMessage?: string;
7507
- /** @default false */
7490
+ page?: number;
7491
+ /** This is the sort order for pagination. Defaults to 'DESC'. */
7492
+ sortOrder?: 'ASC' | 'DESC';
7493
+ /**
7494
+ * This is the maximum number of items to return. Defaults to 100.
7495
+ * @min 0
7496
+ * @max 1000
7497
+ */
7498
+ limit?: number;
7499
+ /**
7500
+ * This will return items where the createdAt is greater than the specified value.
7501
+ * @format date-time
7502
+ */
7503
+ createdAtGt?: string;
7504
+ /**
7505
+ * This will return items where the createdAt is less than the specified value.
7506
+ * @format date-time
7507
+ */
7508
+ createdAtLt?: string;
7509
+ /**
7510
+ * This will return items where the createdAt is greater than or equal to the specified value.
7511
+ * @format date-time
7512
+ */
7513
+ createdAtGe?: string;
7514
+ /**
7515
+ * This will return items where the createdAt is less than or equal to the specified value.
7516
+ * @format date-time
7517
+ */
7518
+ createdAtLe?: string;
7519
+ /**
7520
+ * This will return items where the updatedAt is greater than the specified value.
7521
+ * @format date-time
7522
+ */
7523
+ updatedAtGt?: string;
7524
+ /**
7525
+ * This will return items where the updatedAt is less than the specified value.
7526
+ * @format date-time
7527
+ */
7528
+ updatedAtLt?: string;
7529
+ /**
7530
+ * This will return items where the updatedAt is greater than or equal to the specified value.
7531
+ * @format date-time
7532
+ */
7533
+ updatedAtGe?: string;
7534
+ /**
7535
+ * This will return items where the updatedAt is less than or equal to the specified value.
7536
+ * @format date-time
7537
+ */
7538
+ updatedAtLe?: string;
7539
+ }
7540
+ export interface SessionPaginatedResponse {
7541
+ results: Session[];
7542
+ metadata: PaginationMeta;
7543
+ }
7544
+ export interface Assistant {
7545
+ /** These are the options for the assistant's transcriber. */
7546
+ transcriber?: AssemblyAITranscriber | AzureSpeechTranscriber | CustomTranscriber | DeepgramTranscriber | ElevenLabsTranscriber | GladiaTranscriber | GoogleTranscriber | SpeechmaticsTranscriber | TalkscriberTranscriber | OpenAITranscriber;
7547
+ /** These are the options for the assistant's LLM. */
7548
+ model?: AnthropicModel | AnyscaleModel | CerebrasModel | CustomLLMModel | DeepInfraModel | DeepSeekModel | GoogleModel | GroqModel | InflectionAIModel | OpenAIModel | OpenRouterModel | PerplexityAIModel | TogetherAIModel | XaiModel;
7549
+ /** These are the options for the assistant's voice. */
7550
+ voice?: AzureVoice | CartesiaVoice | CustomVoice | DeepgramVoice | ElevenLabsVoice | HumeVoice | LMNTVoice | NeuphonicVoice | OpenAIVoice | PlayHTVoice | RimeAIVoice | SmallestAIVoice | TavusVoice | VapiVoice | SesameVoice;
7551
+ /**
7552
+ * This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).
7553
+ *
7554
+ * If unspecified, assistant will wait for user to speak and use the model to respond once they speak.
7555
+ * @example "Hello! How can I help you today?"
7556
+ */
7557
+ firstMessage?: string;
7558
+ /** @default false */
7508
7559
  firstMessageInterruptionsEnabled?: boolean;
7509
7560
  /**
7510
7561
  * This is the mode for the first message. Default is 'assistant-speaks-first'.
@@ -9140,17 +9191,6 @@ export interface PhoneNumberPaginatedResponse {
9140
9191
  metadata: PaginationMeta;
9141
9192
  }
9142
9193
  export interface DtmfTool {
9143
- /**
9144
- * This determines if the tool is async.
9145
- *
9146
- * 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.
9147
- *
9148
- * 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.
9149
- *
9150
- * Defaults to synchronous (`false`).
9151
- * @example false
9152
- */
9153
- async?: boolean;
9154
9194
  /**
9155
9195
  * These are the messages that will be spoken to the user as the tool is running.
9156
9196
  *
@@ -9181,27 +9221,8 @@ export interface DtmfTool {
9181
9221
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9182
9222
  */
9183
9223
  function?: OpenAIFunction;
9184
- /**
9185
- * This is the server that will be hit when this tool is requested by the model.
9186
- *
9187
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9188
- *
9189
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9190
- */
9191
- server?: Server;
9192
9224
  }
9193
9225
  export interface EndCallTool {
9194
- /**
9195
- * This determines if the tool is async.
9196
- *
9197
- * 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.
9198
- *
9199
- * 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.
9200
- *
9201
- * Defaults to synchronous (`false`).
9202
- * @example false
9203
- */
9204
- async?: boolean;
9205
9226
  /**
9206
9227
  * These are the messages that will be spoken to the user as the tool is running.
9207
9228
  *
@@ -9232,35 +9253,39 @@ export interface EndCallTool {
9232
9253
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9233
9254
  */
9234
9255
  function?: OpenAIFunction;
9256
+ }
9257
+ export interface FunctionTool {
9235
9258
  /**
9236
- * This is the server that will be hit when this tool is requested by the model.
9237
- *
9238
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9259
+ * These are the messages that will be spoken to the user as the tool is running.
9239
9260
  *
9240
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9261
+ * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.
9241
9262
  */
9242
- server?: Server;
9243
- }
9244
- export interface FunctionTool {
9263
+ messages?: (ToolMessageStart | ToolMessageComplete | ToolMessageFailed | ToolMessageDelayed)[];
9264
+ /** The type of tool. "function" for Function tool. */
9265
+ type: 'function';
9245
9266
  /**
9246
9267
  * This determines if the tool is async.
9247
9268
  *
9248
- * 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.
9269
+ * 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.
9249
9270
  *
9250
- * 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.
9271
+ * 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.
9251
9272
  *
9252
- * Defaults to synchronous (`false`).
9273
+ * Defaults to synchronous (`false`).
9253
9274
  * @example false
9254
9275
  */
9255
9276
  async?: boolean;
9256
9277
  /**
9257
- * These are the messages that will be spoken to the user as the tool is running.
9258
9278
  *
9259
- * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.
9279
+ * This is the server where a `tool-calls` webhook will be sent.
9280
+ *
9281
+ * Notes:
9282
+ * - Webhook is sent to this server when a tool call is made.
9283
+ * - Webhook contains the call, assistant, and phone number objects.
9284
+ * - Webhook contains the variables set on the assistant.
9285
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
9286
+ * - Webhook expects a response with tool call result.
9260
9287
  */
9261
- messages?: (ToolMessageStart | ToolMessageComplete | ToolMessageFailed | ToolMessageDelayed)[];
9262
- /** The type of tool. "function" for Function tool. */
9263
- type: 'function';
9288
+ server?: Server;
9264
9289
  /** This is the unique identifier for the tool. */
9265
9290
  id: string;
9266
9291
  /** This is the unique identifier for the organization that this tool belongs to. */
@@ -9283,27 +9308,8 @@ export interface FunctionTool {
9283
9308
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9284
9309
  */
9285
9310
  function?: OpenAIFunction;
9286
- /**
9287
- * This is the server that will be hit when this tool is requested by the model.
9288
- *
9289
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9290
- *
9291
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9292
- */
9293
- server?: Server;
9294
9311
  }
9295
9312
  export interface GhlTool {
9296
- /**
9297
- * This determines if the tool is async.
9298
- *
9299
- * 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.
9300
- *
9301
- * 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.
9302
- *
9303
- * Defaults to synchronous (`false`).
9304
- * @example false
9305
- */
9306
- async?: boolean;
9307
9313
  /**
9308
9314
  * These are the messages that will be spoken to the user as the tool is running.
9309
9315
  *
@@ -9334,28 +9340,9 @@ export interface GhlTool {
9334
9340
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9335
9341
  */
9336
9342
  function?: OpenAIFunction;
9337
- /**
9338
- * This is the server that will be hit when this tool is requested by the model.
9339
- *
9340
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9341
- *
9342
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9343
- */
9344
- server?: Server;
9345
9343
  metadata: GhlToolMetadata;
9346
9344
  }
9347
9345
  export interface MakeTool {
9348
- /**
9349
- * This determines if the tool is async.
9350
- *
9351
- * 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.
9352
- *
9353
- * 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.
9354
- *
9355
- * Defaults to synchronous (`false`).
9356
- * @example false
9357
- */
9358
- async?: boolean;
9359
9346
  /**
9360
9347
  * These are the messages that will be spoken to the user as the tool is running.
9361
9348
  *
@@ -9386,28 +9373,9 @@ export interface MakeTool {
9386
9373
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9387
9374
  */
9388
9375
  function?: OpenAIFunction;
9389
- /**
9390
- * This is the server that will be hit when this tool is requested by the model.
9391
- *
9392
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9393
- *
9394
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9395
- */
9396
- server?: Server;
9397
9376
  metadata: MakeToolMetadata;
9398
9377
  }
9399
9378
  export interface TransferCallTool {
9400
- /**
9401
- * This determines if the tool is async.
9402
- *
9403
- * 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.
9404
- *
9405
- * 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.
9406
- *
9407
- * Defaults to synchronous (`false`).
9408
- * @example false
9409
- */
9410
- async?: boolean;
9411
9379
  /**
9412
9380
  * These are the messages that will be spoken to the user as the tool is running.
9413
9381
  *
@@ -9439,27 +9407,8 @@ export interface TransferCallTool {
9439
9407
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9440
9408
  */
9441
9409
  function?: OpenAIFunction;
9442
- /**
9443
- * This is the server that will be hit when this tool is requested by the model.
9444
- *
9445
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9446
- *
9447
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9448
- */
9449
- server?: Server;
9450
9410
  }
9451
9411
  export interface OutputTool {
9452
- /**
9453
- * This determines if the tool is async.
9454
- *
9455
- * 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.
9456
- *
9457
- * 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.
9458
- *
9459
- * Defaults to synchronous (`false`).
9460
- * @example false
9461
- */
9462
- async?: boolean;
9463
9412
  /**
9464
9413
  * These are the messages that will be spoken to the user as the tool is running.
9465
9414
  *
@@ -9490,27 +9439,8 @@ export interface OutputTool {
9490
9439
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9491
9440
  */
9492
9441
  function?: OpenAIFunction;
9493
- /**
9494
- * This is the server that will be hit when this tool is requested by the model.
9495
- *
9496
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9497
- *
9498
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9499
- */
9500
- server?: Server;
9501
9442
  }
9502
9443
  export interface BashTool {
9503
- /**
9504
- * This determines if the tool is async.
9505
- *
9506
- * 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.
9507
- *
9508
- * 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.
9509
- *
9510
- * Defaults to synchronous (`false`).
9511
- * @example false
9512
- */
9513
- async?: boolean;
9514
9444
  /**
9515
9445
  * These are the messages that will be spoken to the user as the tool is running.
9516
9446
  *
@@ -9521,6 +9451,18 @@ export interface BashTool {
9521
9451
  type: 'bash';
9522
9452
  /** The sub type of tool. */
9523
9453
  subType: 'bash_20241022';
9454
+ /**
9455
+ *
9456
+ * This is the server where a `tool-calls` webhook will be sent.
9457
+ *
9458
+ * Notes:
9459
+ * - Webhook is sent to this server when a tool call is made.
9460
+ * - Webhook contains the call, assistant, and phone number objects.
9461
+ * - Webhook contains the variables set on the assistant.
9462
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
9463
+ * - Webhook expects a response with tool call result.
9464
+ */
9465
+ server?: Server;
9524
9466
  /** This is the unique identifier for the tool. */
9525
9467
  id: string;
9526
9468
  /** This is the unique identifier for the organization that this tool belongs to. */
@@ -9543,14 +9485,6 @@ export interface BashTool {
9543
9485
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9544
9486
  */
9545
9487
  function?: OpenAIFunction;
9546
- /**
9547
- * This is the server that will be hit when this tool is requested by the model.
9548
- *
9549
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9550
- *
9551
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9552
- */
9553
- server?: Server;
9554
9488
  /**
9555
9489
  * The name of the tool, fixed to 'bash'
9556
9490
  * @default "bash"
@@ -9558,17 +9492,6 @@ export interface BashTool {
9558
9492
  name: 'bash';
9559
9493
  }
9560
9494
  export interface ComputerTool {
9561
- /**
9562
- * This determines if the tool is async.
9563
- *
9564
- * 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.
9565
- *
9566
- * 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.
9567
- *
9568
- * Defaults to synchronous (`false`).
9569
- * @example false
9570
- */
9571
- async?: boolean;
9572
9495
  /**
9573
9496
  * These are the messages that will be spoken to the user as the tool is running.
9574
9497
  *
@@ -9579,6 +9502,18 @@ export interface ComputerTool {
9579
9502
  type: 'computer';
9580
9503
  /** The sub type of tool. */
9581
9504
  subType: 'computer_20241022';
9505
+ /**
9506
+ *
9507
+ * This is the server where a `tool-calls` webhook will be sent.
9508
+ *
9509
+ * Notes:
9510
+ * - Webhook is sent to this server when a tool call is made.
9511
+ * - Webhook contains the call, assistant, and phone number objects.
9512
+ * - Webhook contains the variables set on the assistant.
9513
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
9514
+ * - Webhook expects a response with tool call result.
9515
+ */
9516
+ server?: Server;
9582
9517
  /** This is the unique identifier for the tool. */
9583
9518
  id: string;
9584
9519
  /** This is the unique identifier for the organization that this tool belongs to. */
@@ -9601,14 +9536,6 @@ export interface ComputerTool {
9601
9536
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9602
9537
  */
9603
9538
  function?: OpenAIFunction;
9604
- /**
9605
- * This is the server that will be hit when this tool is requested by the model.
9606
- *
9607
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9608
- *
9609
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9610
- */
9611
- server?: Server;
9612
9539
  /**
9613
9540
  * The name of the tool, fixed to 'computer'
9614
9541
  * @default "computer"
@@ -9622,17 +9549,6 @@ export interface ComputerTool {
9622
9549
  displayNumber?: number;
9623
9550
  }
9624
9551
  export interface TextEditorTool {
9625
- /**
9626
- * This determines if the tool is async.
9627
- *
9628
- * 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.
9629
- *
9630
- * 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.
9631
- *
9632
- * Defaults to synchronous (`false`).
9633
- * @example false
9634
- */
9635
- async?: boolean;
9636
9552
  /**
9637
9553
  * These are the messages that will be spoken to the user as the tool is running.
9638
9554
  *
@@ -9643,6 +9559,18 @@ export interface TextEditorTool {
9643
9559
  type: 'textEditor';
9644
9560
  /** The sub type of tool. */
9645
9561
  subType: 'text_editor_20241022';
9562
+ /**
9563
+ *
9564
+ * This is the server where a `tool-calls` webhook will be sent.
9565
+ *
9566
+ * Notes:
9567
+ * - Webhook is sent to this server when a tool call is made.
9568
+ * - Webhook contains the call, assistant, and phone number objects.
9569
+ * - Webhook contains the variables set on the assistant.
9570
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
9571
+ * - Webhook expects a response with tool call result.
9572
+ */
9573
+ server?: Server;
9646
9574
  /** This is the unique identifier for the tool. */
9647
9575
  id: string;
9648
9576
  /** This is the unique identifier for the organization that this tool belongs to. */
@@ -9665,14 +9593,6 @@ export interface TextEditorTool {
9665
9593
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9666
9594
  */
9667
9595
  function?: OpenAIFunction;
9668
- /**
9669
- * This is the server that will be hit when this tool is requested by the model.
9670
- *
9671
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9672
- *
9673
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9674
- */
9675
- server?: Server;
9676
9596
  /**
9677
9597
  * The name of the tool, fixed to 'str_replace_editor'
9678
9598
  * @default "str_replace_editor"
@@ -9680,17 +9600,6 @@ export interface TextEditorTool {
9680
9600
  name: 'str_replace_editor';
9681
9601
  }
9682
9602
  export interface QueryTool {
9683
- /**
9684
- * This determines if the tool is async.
9685
- *
9686
- * 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.
9687
- *
9688
- * 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.
9689
- *
9690
- * Defaults to synchronous (`false`).
9691
- * @example false
9692
- */
9693
- async?: boolean;
9694
9603
  /**
9695
9604
  * These are the messages that will be spoken to the user as the tool is running.
9696
9605
  *
@@ -9723,27 +9632,8 @@ export interface QueryTool {
9723
9632
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9724
9633
  */
9725
9634
  function?: OpenAIFunction;
9726
- /**
9727
- * This is the server that will be hit when this tool is requested by the model.
9728
- *
9729
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9730
- *
9731
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9732
- */
9733
- server?: Server;
9734
9635
  }
9735
9636
  export interface GoogleCalendarCreateEventTool {
9736
- /**
9737
- * This determines if the tool is async.
9738
- *
9739
- * 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.
9740
- *
9741
- * 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.
9742
- *
9743
- * Defaults to synchronous (`false`).
9744
- * @example false
9745
- */
9746
- async?: boolean;
9747
9637
  /**
9748
9638
  * These are the messages that will be spoken to the user as the tool is running.
9749
9639
  *
@@ -9774,27 +9664,8 @@ export interface GoogleCalendarCreateEventTool {
9774
9664
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9775
9665
  */
9776
9666
  function?: OpenAIFunction;
9777
- /**
9778
- * This is the server that will be hit when this tool is requested by the model.
9779
- *
9780
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9781
- *
9782
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9783
- */
9784
- server?: Server;
9785
9667
  }
9786
9668
  export interface GoogleSheetsRowAppendTool {
9787
- /**
9788
- * This determines if the tool is async.
9789
- *
9790
- * 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.
9791
- *
9792
- * 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.
9793
- *
9794
- * Defaults to synchronous (`false`).
9795
- * @example false
9796
- */
9797
- async?: boolean;
9798
9669
  /**
9799
9670
  * These are the messages that will be spoken to the user as the tool is running.
9800
9671
  *
@@ -9825,27 +9696,8 @@ export interface GoogleSheetsRowAppendTool {
9825
9696
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9826
9697
  */
9827
9698
  function?: OpenAIFunction;
9828
- /**
9829
- * This is the server that will be hit when this tool is requested by the model.
9830
- *
9831
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9832
- *
9833
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9834
- */
9835
- server?: Server;
9836
9699
  }
9837
9700
  export interface GoogleCalendarCheckAvailabilityTool {
9838
- /**
9839
- * This determines if the tool is async.
9840
- *
9841
- * 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.
9842
- *
9843
- * 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.
9844
- *
9845
- * Defaults to synchronous (`false`).
9846
- * @example false
9847
- */
9848
- async?: boolean;
9849
9701
  /**
9850
9702
  * These are the messages that will be spoken to the user as the tool is running.
9851
9703
  *
@@ -9876,31 +9728,12 @@ export interface GoogleCalendarCheckAvailabilityTool {
9876
9728
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9877
9729
  */
9878
9730
  function?: OpenAIFunction;
9879
- /**
9880
- * This is the server that will be hit when this tool is requested by the model.
9881
- *
9882
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9883
- *
9884
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9885
- */
9886
- server?: Server;
9887
9731
  }
9888
9732
  export interface SlackSendMessageTool {
9889
9733
  /**
9890
- * This determines if the tool is async.
9891
- *
9892
- * 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.
9893
- *
9894
- * 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.
9734
+ * These are the messages that will be spoken to the user as the tool is running.
9895
9735
  *
9896
- * Defaults to synchronous (`false`).
9897
- * @example false
9898
- */
9899
- async?: boolean;
9900
- /**
9901
- * These are the messages that will be spoken to the user as the tool is running.
9902
- *
9903
- * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.
9736
+ * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.
9904
9737
  */
9905
9738
  messages?: (ToolMessageStart | ToolMessageComplete | ToolMessageFailed | ToolMessageDelayed)[];
9906
9739
  /** The type of tool. "slack.message.send" for Slack send message tool. */
@@ -9927,27 +9760,8 @@ export interface SlackSendMessageTool {
9927
9760
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9928
9761
  */
9929
9762
  function?: OpenAIFunction;
9930
- /**
9931
- * This is the server that will be hit when this tool is requested by the model.
9932
- *
9933
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9934
- *
9935
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9936
- */
9937
- server?: Server;
9938
9763
  }
9939
9764
  export interface SmsTool {
9940
- /**
9941
- * This determines if the tool is async.
9942
- *
9943
- * 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.
9944
- *
9945
- * 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.
9946
- *
9947
- * Defaults to synchronous (`false`).
9948
- * @example false
9949
- */
9950
- async?: boolean;
9951
9765
  /**
9952
9766
  * These are the messages that will be spoken to the user as the tool is running.
9953
9767
  *
@@ -9978,27 +9792,8 @@ export interface SmsTool {
9978
9792
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
9979
9793
  */
9980
9794
  function?: OpenAIFunction;
9981
- /**
9982
- * This is the server that will be hit when this tool is requested by the model.
9983
- *
9984
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
9985
- *
9986
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
9987
- */
9988
- server?: Server;
9989
9795
  }
9990
9796
  export interface McpTool {
9991
- /**
9992
- * This determines if the tool is async.
9993
- *
9994
- * 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.
9995
- *
9996
- * 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.
9997
- *
9998
- * Defaults to synchronous (`false`).
9999
- * @example false
10000
- */
10001
- async?: boolean;
10002
9797
  /**
10003
9798
  * These are the messages that will be spoken to the user as the tool is running.
10004
9799
  *
@@ -10007,6 +9802,18 @@ export interface McpTool {
10007
9802
  messages?: (ToolMessageStart | ToolMessageComplete | ToolMessageFailed | ToolMessageDelayed)[];
10008
9803
  /** The type of tool. "mcp" for MCP tool. */
10009
9804
  type: 'mcp';
9805
+ /**
9806
+ *
9807
+ * This is the server where a `tool-calls` webhook will be sent.
9808
+ *
9809
+ * Notes:
9810
+ * - Webhook is sent to this server when a tool call is made.
9811
+ * - Webhook contains the call, assistant, and phone number objects.
9812
+ * - Webhook contains the variables set on the assistant.
9813
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
9814
+ * - Webhook expects a response with tool call result.
9815
+ */
9816
+ server?: Server;
10010
9817
  /** This is the unique identifier for the tool. */
10011
9818
  id: string;
10012
9819
  /** This is the unique identifier for the organization that this tool belongs to. */
@@ -10029,27 +9836,8 @@ export interface McpTool {
10029
9836
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10030
9837
  */
10031
9838
  function?: OpenAIFunction;
10032
- /**
10033
- * This is the server that will be hit when this tool is requested by the model.
10034
- *
10035
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10036
- *
10037
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10038
- */
10039
- server?: Server;
10040
9839
  }
10041
9840
  export interface GoHighLevelCalendarAvailabilityTool {
10042
- /**
10043
- * This determines if the tool is async.
10044
- *
10045
- * 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.
10046
- *
10047
- * 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.
10048
- *
10049
- * Defaults to synchronous (`false`).
10050
- * @example false
10051
- */
10052
- async?: boolean;
10053
9841
  /**
10054
9842
  * These are the messages that will be spoken to the user as the tool is running.
10055
9843
  *
@@ -10080,27 +9868,8 @@ export interface GoHighLevelCalendarAvailabilityTool {
10080
9868
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10081
9869
  */
10082
9870
  function?: OpenAIFunction;
10083
- /**
10084
- * This is the server that will be hit when this tool is requested by the model.
10085
- *
10086
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10087
- *
10088
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10089
- */
10090
- server?: Server;
10091
9871
  }
10092
9872
  export interface GoHighLevelCalendarEventCreateTool {
10093
- /**
10094
- * This determines if the tool is async.
10095
- *
10096
- * 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.
10097
- *
10098
- * 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.
10099
- *
10100
- * Defaults to synchronous (`false`).
10101
- * @example false
10102
- */
10103
- async?: boolean;
10104
9873
  /**
10105
9874
  * These are the messages that will be spoken to the user as the tool is running.
10106
9875
  *
@@ -10131,27 +9900,8 @@ export interface GoHighLevelCalendarEventCreateTool {
10131
9900
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10132
9901
  */
10133
9902
  function?: OpenAIFunction;
10134
- /**
10135
- * This is the server that will be hit when this tool is requested by the model.
10136
- *
10137
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10138
- *
10139
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10140
- */
10141
- server?: Server;
10142
9903
  }
10143
9904
  export interface GoHighLevelContactCreateTool {
10144
- /**
10145
- * This determines if the tool is async.
10146
- *
10147
- * 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.
10148
- *
10149
- * 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.
10150
- *
10151
- * Defaults to synchronous (`false`).
10152
- * @example false
10153
- */
10154
- async?: boolean;
10155
9905
  /**
10156
9906
  * These are the messages that will be spoken to the user as the tool is running.
10157
9907
  *
@@ -10182,27 +9932,8 @@ export interface GoHighLevelContactCreateTool {
10182
9932
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10183
9933
  */
10184
9934
  function?: OpenAIFunction;
10185
- /**
10186
- * This is the server that will be hit when this tool is requested by the model.
10187
- *
10188
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10189
- *
10190
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10191
- */
10192
- server?: Server;
10193
9935
  }
10194
9936
  export interface GoHighLevelContactGetTool {
10195
- /**
10196
- * This determines if the tool is async.
10197
- *
10198
- * 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.
10199
- *
10200
- * 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.
10201
- *
10202
- * Defaults to synchronous (`false`).
10203
- * @example false
10204
- */
10205
- async?: boolean;
10206
9937
  /**
10207
9938
  * These are the messages that will be spoken to the user as the tool is running.
10208
9939
  *
@@ -10233,27 +9964,8 @@ export interface GoHighLevelContactGetTool {
10233
9964
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10234
9965
  */
10235
9966
  function?: OpenAIFunction;
10236
- /**
10237
- * This is the server that will be hit when this tool is requested by the model.
10238
- *
10239
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10240
- *
10241
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10242
- */
10243
- server?: Server;
10244
9967
  }
10245
9968
  export interface CreateApiRequestToolDTO {
10246
- /**
10247
- * This determines if the tool is async.
10248
- *
10249
- * 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.
10250
- *
10251
- * 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.
10252
- *
10253
- * Defaults to synchronous (`false`).
10254
- * @example false
10255
- */
10256
- async?: boolean;
10257
9969
  /**
10258
9970
  * These are the messages that will be spoken to the user as the tool is running.
10259
9971
  *
@@ -10285,7 +9997,7 @@ export interface CreateApiRequestToolDTO {
10285
9997
  /** This is where the request will be sent. */
10286
9998
  url: string;
10287
9999
  /** This is the body of the request. */
10288
- body: JsonSchema;
10000
+ body?: JsonSchema;
10289
10001
  /** These are the headers to send in the request. */
10290
10002
  headers?: JsonSchema;
10291
10003
  /**
@@ -10302,27 +10014,8 @@ export interface CreateApiRequestToolDTO {
10302
10014
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10303
10015
  */
10304
10016
  function?: OpenAIFunction;
10305
- /**
10306
- * This is the server that will be hit when this tool is requested by the model.
10307
- *
10308
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10309
- *
10310
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10311
- */
10312
- server?: Server;
10313
10017
  }
10314
10018
  export interface CreateOutputToolDTO {
10315
- /**
10316
- * This determines if the tool is async.
10317
- *
10318
- * 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.
10319
- *
10320
- * 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.
10321
- *
10322
- * Defaults to synchronous (`false`).
10323
- * @example false
10324
- */
10325
- async?: boolean;
10326
10019
  /**
10327
10020
  * These are the messages that will be spoken to the user as the tool is running.
10328
10021
  *
@@ -10339,27 +10032,8 @@ export interface CreateOutputToolDTO {
10339
10032
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10340
10033
  */
10341
10034
  function?: OpenAIFunction;
10342
- /**
10343
- * This is the server that will be hit when this tool is requested by the model.
10344
- *
10345
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10346
- *
10347
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10348
- */
10349
- server?: Server;
10350
10035
  }
10351
10036
  export interface CreateBashToolDTO {
10352
- /**
10353
- * This determines if the tool is async.
10354
- *
10355
- * 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.
10356
- *
10357
- * 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.
10358
- *
10359
- * Defaults to synchronous (`false`).
10360
- * @example false
10361
- */
10362
- async?: boolean;
10363
10037
  /**
10364
10038
  * These are the messages that will be spoken to the user as the tool is running.
10365
10039
  *
@@ -10370,6 +10044,18 @@ export interface CreateBashToolDTO {
10370
10044
  type: 'bash';
10371
10045
  /** The sub type of tool. */
10372
10046
  subType: 'bash_20241022';
10047
+ /**
10048
+ *
10049
+ * This is the server where a `tool-calls` webhook will be sent.
10050
+ *
10051
+ * Notes:
10052
+ * - Webhook is sent to this server when a tool call is made.
10053
+ * - Webhook contains the call, assistant, and phone number objects.
10054
+ * - Webhook contains the variables set on the assistant.
10055
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
10056
+ * - Webhook expects a response with tool call result.
10057
+ */
10058
+ server?: Server;
10373
10059
  /**
10374
10060
  * The name of the tool, fixed to 'bash'
10375
10061
  * @default "bash"
@@ -10383,27 +10069,8 @@ export interface CreateBashToolDTO {
10383
10069
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10384
10070
  */
10385
10071
  function?: OpenAIFunction;
10386
- /**
10387
- * This is the server that will be hit when this tool is requested by the model.
10388
- *
10389
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10390
- *
10391
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10392
- */
10393
- server?: Server;
10394
10072
  }
10395
10073
  export interface CreateComputerToolDTO {
10396
- /**
10397
- * This determines if the tool is async.
10398
- *
10399
- * 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.
10400
- *
10401
- * 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.
10402
- *
10403
- * Defaults to synchronous (`false`).
10404
- * @example false
10405
- */
10406
- async?: boolean;
10407
10074
  /**
10408
10075
  * These are the messages that will be spoken to the user as the tool is running.
10409
10076
  *
@@ -10414,6 +10081,18 @@ export interface CreateComputerToolDTO {
10414
10081
  type: 'computer';
10415
10082
  /** The sub type of tool. */
10416
10083
  subType: 'computer_20241022';
10084
+ /**
10085
+ *
10086
+ * This is the server where a `tool-calls` webhook will be sent.
10087
+ *
10088
+ * Notes:
10089
+ * - Webhook is sent to this server when a tool call is made.
10090
+ * - Webhook contains the call, assistant, and phone number objects.
10091
+ * - Webhook contains the variables set on the assistant.
10092
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
10093
+ * - Webhook expects a response with tool call result.
10094
+ */
10095
+ server?: Server;
10417
10096
  /**
10418
10097
  * The name of the tool, fixed to 'computer'
10419
10098
  * @default "computer"
@@ -10433,27 +10112,8 @@ export interface CreateComputerToolDTO {
10433
10112
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10434
10113
  */
10435
10114
  function?: OpenAIFunction;
10436
- /**
10437
- * This is the server that will be hit when this tool is requested by the model.
10438
- *
10439
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10440
- *
10441
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10442
- */
10443
- server?: Server;
10444
10115
  }
10445
10116
  export interface CreateTextEditorToolDTO {
10446
- /**
10447
- * This determines if the tool is async.
10448
- *
10449
- * 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.
10450
- *
10451
- * 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.
10452
- *
10453
- * Defaults to synchronous (`false`).
10454
- * @example false
10455
- */
10456
- async?: boolean;
10457
10117
  /**
10458
10118
  * These are the messages that will be spoken to the user as the tool is running.
10459
10119
  *
@@ -10464,6 +10124,18 @@ export interface CreateTextEditorToolDTO {
10464
10124
  type: 'textEditor';
10465
10125
  /** The sub type of tool. */
10466
10126
  subType: 'text_editor_20241022';
10127
+ /**
10128
+ *
10129
+ * This is the server where a `tool-calls` webhook will be sent.
10130
+ *
10131
+ * Notes:
10132
+ * - Webhook is sent to this server when a tool call is made.
10133
+ * - Webhook contains the call, assistant, and phone number objects.
10134
+ * - Webhook contains the variables set on the assistant.
10135
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
10136
+ * - Webhook expects a response with tool call result.
10137
+ */
10138
+ server?: Server;
10467
10139
  /**
10468
10140
  * The name of the tool, fixed to 'str_replace_editor'
10469
10141
  * @default "str_replace_editor"
@@ -10477,27 +10149,8 @@ export interface CreateTextEditorToolDTO {
10477
10149
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10478
10150
  */
10479
10151
  function?: OpenAIFunction;
10480
- /**
10481
- * This is the server that will be hit when this tool is requested by the model.
10482
- *
10483
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10484
- *
10485
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10486
- */
10487
- server?: Server;
10488
10152
  }
10489
10153
  export interface CreateSmsToolDTO {
10490
- /**
10491
- * This determines if the tool is async.
10492
- *
10493
- * 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.
10494
- *
10495
- * 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.
10496
- *
10497
- * Defaults to synchronous (`false`).
10498
- * @example false
10499
- */
10500
- async?: boolean;
10501
10154
  /**
10502
10155
  * These are the messages that will be spoken to the user as the tool is running.
10503
10156
  *
@@ -10514,27 +10167,8 @@ export interface CreateSmsToolDTO {
10514
10167
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10515
10168
  */
10516
10169
  function?: OpenAIFunction;
10517
- /**
10518
- * This is the server that will be hit when this tool is requested by the model.
10519
- *
10520
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10521
- *
10522
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10523
- */
10524
- server?: Server;
10525
10170
  }
10526
10171
  export interface UpdateDtmfToolDTO {
10527
- /**
10528
- * This determines if the tool is async.
10529
- *
10530
- * 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.
10531
- *
10532
- * 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.
10533
- *
10534
- * Defaults to synchronous (`false`).
10535
- * @example false
10536
- */
10537
- async?: boolean;
10538
10172
  /**
10539
10173
  * These are the messages that will be spoken to the user as the tool is running.
10540
10174
  *
@@ -10549,27 +10183,8 @@ export interface UpdateDtmfToolDTO {
10549
10183
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10550
10184
  */
10551
10185
  function?: OpenAIFunction;
10552
- /**
10553
- * This is the server that will be hit when this tool is requested by the model.
10554
- *
10555
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10556
- *
10557
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10558
- */
10559
- server?: Server;
10560
10186
  }
10561
10187
  export interface UpdateEndCallToolDTO {
10562
- /**
10563
- * This determines if the tool is async.
10564
- *
10565
- * 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.
10566
- *
10567
- * 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.
10568
- *
10569
- * Defaults to synchronous (`false`).
10570
- * @example false
10571
- */
10572
- async?: boolean;
10573
10188
  /**
10574
10189
  * These are the messages that will be spoken to the user as the tool is running.
10575
10190
  *
@@ -10584,33 +10199,37 @@ export interface UpdateEndCallToolDTO {
10584
10199
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10585
10200
  */
10586
10201
  function?: OpenAIFunction;
10202
+ }
10203
+ export interface UpdateFunctionToolDTO {
10587
10204
  /**
10588
- * This is the server that will be hit when this tool is requested by the model.
10589
- *
10590
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10205
+ * These are the messages that will be spoken to the user as the tool is running.
10591
10206
  *
10592
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10207
+ * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.
10593
10208
  */
10594
- server?: Server;
10595
- }
10596
- export interface UpdateFunctionToolDTO {
10209
+ messages?: (ToolMessageStart | ToolMessageComplete | ToolMessageFailed | ToolMessageDelayed)[];
10597
10210
  /**
10598
10211
  * This determines if the tool is async.
10599
10212
  *
10600
- * 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.
10213
+ * 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.
10601
10214
  *
10602
- * 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.
10215
+ * 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.
10603
10216
  *
10604
- * Defaults to synchronous (`false`).
10217
+ * Defaults to synchronous (`false`).
10605
10218
  * @example false
10606
10219
  */
10607
10220
  async?: boolean;
10608
10221
  /**
10609
- * These are the messages that will be spoken to the user as the tool is running.
10610
10222
  *
10611
- * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.
10223
+ * This is the server where a `tool-calls` webhook will be sent.
10224
+ *
10225
+ * Notes:
10226
+ * - Webhook is sent to this server when a tool call is made.
10227
+ * - Webhook contains the call, assistant, and phone number objects.
10228
+ * - Webhook contains the variables set on the assistant.
10229
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
10230
+ * - Webhook expects a response with tool call result.
10612
10231
  */
10613
- messages?: (ToolMessageStart | ToolMessageComplete | ToolMessageFailed | ToolMessageDelayed)[];
10232
+ server?: Server;
10614
10233
  /**
10615
10234
  * This is the function definition of the tool.
10616
10235
  *
@@ -10619,27 +10238,8 @@ export interface UpdateFunctionToolDTO {
10619
10238
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10620
10239
  */
10621
10240
  function?: OpenAIFunction;
10622
- /**
10623
- * This is the server that will be hit when this tool is requested by the model.
10624
- *
10625
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10626
- *
10627
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10628
- */
10629
- server?: Server;
10630
10241
  }
10631
10242
  export interface UpdateGhlToolDTO {
10632
- /**
10633
- * This determines if the tool is async.
10634
- *
10635
- * 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.
10636
- *
10637
- * 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.
10638
- *
10639
- * Defaults to synchronous (`false`).
10640
- * @example false
10641
- */
10642
- async?: boolean;
10643
10243
  /**
10644
10244
  * These are the messages that will be spoken to the user as the tool is running.
10645
10245
  *
@@ -10654,28 +10254,9 @@ export interface UpdateGhlToolDTO {
10654
10254
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10655
10255
  */
10656
10256
  function?: OpenAIFunction;
10657
- /**
10658
- * This is the server that will be hit when this tool is requested by the model.
10659
- *
10660
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10661
- *
10662
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10663
- */
10664
- server?: Server;
10665
10257
  metadata?: GhlToolMetadata;
10666
10258
  }
10667
10259
  export interface UpdateMakeToolDTO {
10668
- /**
10669
- * This determines if the tool is async.
10670
- *
10671
- * 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.
10672
- *
10673
- * 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.
10674
- *
10675
- * Defaults to synchronous (`false`).
10676
- * @example false
10677
- */
10678
- async?: boolean;
10679
10260
  /**
10680
10261
  * These are the messages that will be spoken to the user as the tool is running.
10681
10262
  *
@@ -10690,28 +10271,9 @@ export interface UpdateMakeToolDTO {
10690
10271
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10691
10272
  */
10692
10273
  function?: OpenAIFunction;
10693
- /**
10694
- * This is the server that will be hit when this tool is requested by the model.
10695
- *
10696
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10697
- *
10698
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10699
- */
10700
- server?: Server;
10701
10274
  metadata?: MakeToolMetadata;
10702
10275
  }
10703
10276
  export interface UpdateTransferCallToolDTO {
10704
- /**
10705
- * This determines if the tool is async.
10706
- *
10707
- * 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.
10708
- *
10709
- * 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.
10710
- *
10711
- * Defaults to synchronous (`false`).
10712
- * @example false
10713
- */
10714
- async?: boolean;
10715
10277
  /**
10716
10278
  * These are the messages that will be spoken to the user as the tool is running.
10717
10279
  *
@@ -10728,27 +10290,8 @@ export interface UpdateTransferCallToolDTO {
10728
10290
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10729
10291
  */
10730
10292
  function?: OpenAIFunction;
10731
- /**
10732
- * This is the server that will be hit when this tool is requested by the model.
10733
- *
10734
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10735
- *
10736
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10737
- */
10738
- server?: Server;
10739
10293
  }
10740
10294
  export interface UpdateOutputToolDTO {
10741
- /**
10742
- * This determines if the tool is async.
10743
- *
10744
- * 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.
10745
- *
10746
- * 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.
10747
- *
10748
- * Defaults to synchronous (`false`).
10749
- * @example false
10750
- */
10751
- async?: boolean;
10752
10295
  /**
10753
10296
  * These are the messages that will be spoken to the user as the tool is running.
10754
10297
  *
@@ -10763,27 +10306,8 @@ export interface UpdateOutputToolDTO {
10763
10306
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10764
10307
  */
10765
10308
  function?: OpenAIFunction;
10766
- /**
10767
- * This is the server that will be hit when this tool is requested by the model.
10768
- *
10769
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10770
- *
10771
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10772
- */
10773
- server?: Server;
10774
10309
  }
10775
10310
  export interface UpdateBashToolDTO {
10776
- /**
10777
- * This determines if the tool is async.
10778
- *
10779
- * 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.
10780
- *
10781
- * 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.
10782
- *
10783
- * Defaults to synchronous (`false`).
10784
- * @example false
10785
- */
10786
- async?: boolean;
10787
10311
  /**
10788
10312
  * These are the messages that will be spoken to the user as the tool is running.
10789
10313
  *
@@ -10793,21 +10317,25 @@ export interface UpdateBashToolDTO {
10793
10317
  /** The sub type of tool. */
10794
10318
  subType?: 'bash_20241022';
10795
10319
  /**
10796
- * This is the function definition of the tool.
10797
10320
  *
10798
- * For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.
10321
+ * This is the server where a `tool-calls` webhook will be sent.
10799
10322
  *
10800
- * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10323
+ * Notes:
10324
+ * - Webhook is sent to this server when a tool call is made.
10325
+ * - Webhook contains the call, assistant, and phone number objects.
10326
+ * - Webhook contains the variables set on the assistant.
10327
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
10328
+ * - Webhook expects a response with tool call result.
10801
10329
  */
10802
- function?: OpenAIFunction;
10330
+ server?: Server;
10803
10331
  /**
10804
- * This is the server that will be hit when this tool is requested by the model.
10332
+ * This is the function definition of the tool.
10805
10333
  *
10806
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10334
+ * For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.
10807
10335
  *
10808
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10336
+ * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10809
10337
  */
10810
- server?: Server;
10338
+ function?: OpenAIFunction;
10811
10339
  /**
10812
10340
  * The name of the tool, fixed to 'bash'
10813
10341
  * @default "bash"
@@ -10815,17 +10343,6 @@ export interface UpdateBashToolDTO {
10815
10343
  name?: 'bash';
10816
10344
  }
10817
10345
  export interface UpdateComputerToolDTO {
10818
- /**
10819
- * This determines if the tool is async.
10820
- *
10821
- * 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.
10822
- *
10823
- * 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.
10824
- *
10825
- * Defaults to synchronous (`false`).
10826
- * @example false
10827
- */
10828
- async?: boolean;
10829
10346
  /**
10830
10347
  * These are the messages that will be spoken to the user as the tool is running.
10831
10348
  *
@@ -10835,21 +10352,25 @@ export interface UpdateComputerToolDTO {
10835
10352
  /** The sub type of tool. */
10836
10353
  subType?: 'computer_20241022';
10837
10354
  /**
10838
- * This is the function definition of the tool.
10839
10355
  *
10840
- * For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.
10356
+ * This is the server where a `tool-calls` webhook will be sent.
10841
10357
  *
10842
- * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10358
+ * Notes:
10359
+ * - Webhook is sent to this server when a tool call is made.
10360
+ * - Webhook contains the call, assistant, and phone number objects.
10361
+ * - Webhook contains the variables set on the assistant.
10362
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
10363
+ * - Webhook expects a response with tool call result.
10843
10364
  */
10844
- function?: OpenAIFunction;
10365
+ server?: Server;
10845
10366
  /**
10846
- * This is the server that will be hit when this tool is requested by the model.
10367
+ * This is the function definition of the tool.
10847
10368
  *
10848
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10369
+ * For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.
10849
10370
  *
10850
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10371
+ * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10851
10372
  */
10852
- server?: Server;
10373
+ function?: OpenAIFunction;
10853
10374
  /**
10854
10375
  * The name of the tool, fixed to 'computer'
10855
10376
  * @default "computer"
@@ -10863,17 +10384,6 @@ export interface UpdateComputerToolDTO {
10863
10384
  displayNumber?: number;
10864
10385
  }
10865
10386
  export interface UpdateTextEditorToolDTO {
10866
- /**
10867
- * This determines if the tool is async.
10868
- *
10869
- * 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.
10870
- *
10871
- * 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.
10872
- *
10873
- * Defaults to synchronous (`false`).
10874
- * @example false
10875
- */
10876
- async?: boolean;
10877
10387
  /**
10878
10388
  * These are the messages that will be spoken to the user as the tool is running.
10879
10389
  *
@@ -10883,21 +10393,25 @@ export interface UpdateTextEditorToolDTO {
10883
10393
  /** The sub type of tool. */
10884
10394
  subType?: 'text_editor_20241022';
10885
10395
  /**
10886
- * This is the function definition of the tool.
10887
10396
  *
10888
- * For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.
10397
+ * This is the server where a `tool-calls` webhook will be sent.
10889
10398
  *
10890
- * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10399
+ * Notes:
10400
+ * - Webhook is sent to this server when a tool call is made.
10401
+ * - Webhook contains the call, assistant, and phone number objects.
10402
+ * - Webhook contains the variables set on the assistant.
10403
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
10404
+ * - Webhook expects a response with tool call result.
10891
10405
  */
10892
- function?: OpenAIFunction;
10406
+ server?: Server;
10893
10407
  /**
10894
- * This is the server that will be hit when this tool is requested by the model.
10408
+ * This is the function definition of the tool.
10895
10409
  *
10896
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10410
+ * For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.
10897
10411
  *
10898
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10412
+ * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10899
10413
  */
10900
- server?: Server;
10414
+ function?: OpenAIFunction;
10901
10415
  /**
10902
10416
  * The name of the tool, fixed to 'str_replace_editor'
10903
10417
  * @default "str_replace_editor"
@@ -10905,17 +10419,6 @@ export interface UpdateTextEditorToolDTO {
10905
10419
  name?: 'str_replace_editor';
10906
10420
  }
10907
10421
  export interface UpdateQueryToolDTO {
10908
- /**
10909
- * This determines if the tool is async.
10910
- *
10911
- * 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.
10912
- *
10913
- * 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.
10914
- *
10915
- * Defaults to synchronous (`false`).
10916
- * @example false
10917
- */
10918
- async?: boolean;
10919
10422
  /**
10920
10423
  * These are the messages that will be spoken to the user as the tool is running.
10921
10424
  *
@@ -10932,27 +10435,8 @@ export interface UpdateQueryToolDTO {
10932
10435
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10933
10436
  */
10934
10437
  function?: OpenAIFunction;
10935
- /**
10936
- * This is the server that will be hit when this tool is requested by the model.
10937
- *
10938
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10939
- *
10940
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10941
- */
10942
- server?: Server;
10943
10438
  }
10944
10439
  export interface UpdateGoogleCalendarCreateEventToolDTO {
10945
- /**
10946
- * This determines if the tool is async.
10947
- *
10948
- * 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.
10949
- *
10950
- * 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.
10951
- *
10952
- * Defaults to synchronous (`false`).
10953
- * @example false
10954
- */
10955
- async?: boolean;
10956
10440
  /**
10957
10441
  * These are the messages that will be spoken to the user as the tool is running.
10958
10442
  *
@@ -10967,27 +10451,8 @@ export interface UpdateGoogleCalendarCreateEventToolDTO {
10967
10451
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
10968
10452
  */
10969
10453
  function?: OpenAIFunction;
10970
- /**
10971
- * This is the server that will be hit when this tool is requested by the model.
10972
- *
10973
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
10974
- *
10975
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10976
- */
10977
- server?: Server;
10978
10454
  }
10979
10455
  export interface UpdateGoogleSheetsRowAppendToolDTO {
10980
- /**
10981
- * This determines if the tool is async.
10982
- *
10983
- * 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.
10984
- *
10985
- * 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.
10986
- *
10987
- * Defaults to synchronous (`false`).
10988
- * @example false
10989
- */
10990
- async?: boolean;
10991
10456
  /**
10992
10457
  * These are the messages that will be spoken to the user as the tool is running.
10993
10458
  *
@@ -11002,27 +10467,8 @@ export interface UpdateGoogleSheetsRowAppendToolDTO {
11002
10467
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
11003
10468
  */
11004
10469
  function?: OpenAIFunction;
11005
- /**
11006
- * This is the server that will be hit when this tool is requested by the model.
11007
- *
11008
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
11009
- *
11010
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
11011
- */
11012
- server?: Server;
11013
10470
  }
11014
10471
  export interface UpdateGoogleCalendarCheckAvailabilityToolDTO {
11015
- /**
11016
- * This determines if the tool is async.
11017
- *
11018
- * 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.
11019
- *
11020
- * 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.
11021
- *
11022
- * Defaults to synchronous (`false`).
11023
- * @example false
11024
- */
11025
- async?: boolean;
11026
10472
  /**
11027
10473
  * These are the messages that will be spoken to the user as the tool is running.
11028
10474
  *
@@ -11037,27 +10483,8 @@ export interface UpdateGoogleCalendarCheckAvailabilityToolDTO {
11037
10483
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
11038
10484
  */
11039
10485
  function?: OpenAIFunction;
11040
- /**
11041
- * This is the server that will be hit when this tool is requested by the model.
11042
- *
11043
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
11044
- *
11045
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
11046
- */
11047
- server?: Server;
11048
10486
  }
11049
10487
  export interface UpdateSlackSendMessageToolDTO {
11050
- /**
11051
- * This determines if the tool is async.
11052
- *
11053
- * 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.
11054
- *
11055
- * 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.
11056
- *
11057
- * Defaults to synchronous (`false`).
11058
- * @example false
11059
- */
11060
- async?: boolean;
11061
10488
  /**
11062
10489
  * These are the messages that will be spoken to the user as the tool is running.
11063
10490
  *
@@ -11072,27 +10499,8 @@ export interface UpdateSlackSendMessageToolDTO {
11072
10499
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
11073
10500
  */
11074
10501
  function?: OpenAIFunction;
11075
- /**
11076
- * This is the server that will be hit when this tool is requested by the model.
11077
- *
11078
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
11079
- *
11080
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
11081
- */
11082
- server?: Server;
11083
10502
  }
11084
10503
  export interface UpdateSmsToolDTO {
11085
- /**
11086
- * This determines if the tool is async.
11087
- *
11088
- * 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.
11089
- *
11090
- * 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.
11091
- *
11092
- * Defaults to synchronous (`false`).
11093
- * @example false
11094
- */
11095
- async?: boolean;
11096
10504
  /**
11097
10505
  * These are the messages that will be spoken to the user as the tool is running.
11098
10506
  *
@@ -11107,27 +10515,8 @@ export interface UpdateSmsToolDTO {
11107
10515
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
11108
10516
  */
11109
10517
  function?: OpenAIFunction;
11110
- /**
11111
- * This is the server that will be hit when this tool is requested by the model.
11112
- *
11113
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
11114
- *
11115
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
11116
- */
11117
- server?: Server;
11118
10518
  }
11119
10519
  export interface UpdateMcpToolDTO {
11120
- /**
11121
- * This determines if the tool is async.
11122
- *
11123
- * 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.
11124
- *
11125
- * 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.
11126
- *
11127
- * Defaults to synchronous (`false`).
11128
- * @example false
11129
- */
11130
- async?: boolean;
11131
10520
  /**
11132
10521
  * These are the messages that will be spoken to the user as the tool is running.
11133
10522
  *
@@ -11135,34 +10524,27 @@ export interface UpdateMcpToolDTO {
11135
10524
  */
11136
10525
  messages?: (ToolMessageStart | ToolMessageComplete | ToolMessageFailed | ToolMessageDelayed)[];
11137
10526
  /**
11138
- * This is the function definition of the tool.
11139
10527
  *
11140
- * For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.
10528
+ * This is the server where a `tool-calls` webhook will be sent.
11141
10529
  *
11142
- * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
11143
- */
11144
- function?: OpenAIFunction;
11145
- /**
11146
- * This is the server that will be hit when this tool is requested by the model.
11147
- *
11148
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
11149
- *
11150
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
10530
+ * Notes:
10531
+ * - Webhook is sent to this server when a tool call is made.
10532
+ * - Webhook contains the call, assistant, and phone number objects.
10533
+ * - Webhook contains the variables set on the assistant.
10534
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
10535
+ * - Webhook expects a response with tool call result.
11151
10536
  */
11152
10537
  server?: Server;
11153
- }
11154
- export interface UpdateGoHighLevelCalendarAvailabilityToolDTO {
11155
10538
  /**
11156
- * This determines if the tool is async.
11157
- *
11158
- * 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.
10539
+ * This is the function definition of the tool.
11159
10540
  *
11160
- * 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.
10541
+ * For `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.
11161
10542
  *
11162
- * Defaults to synchronous (`false`).
11163
- * @example false
10543
+ * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
11164
10544
  */
11165
- async?: boolean;
10545
+ function?: OpenAIFunction;
10546
+ }
10547
+ export interface UpdateGoHighLevelCalendarAvailabilityToolDTO {
11166
10548
  /**
11167
10549
  * These are the messages that will be spoken to the user as the tool is running.
11168
10550
  *
@@ -11177,27 +10559,8 @@ export interface UpdateGoHighLevelCalendarAvailabilityToolDTO {
11177
10559
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
11178
10560
  */
11179
10561
  function?: OpenAIFunction;
11180
- /**
11181
- * This is the server that will be hit when this tool is requested by the model.
11182
- *
11183
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
11184
- *
11185
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
11186
- */
11187
- server?: Server;
11188
10562
  }
11189
10563
  export interface UpdateGoHighLevelCalendarEventCreateToolDTO {
11190
- /**
11191
- * This determines if the tool is async.
11192
- *
11193
- * 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.
11194
- *
11195
- * 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.
11196
- *
11197
- * Defaults to synchronous (`false`).
11198
- * @example false
11199
- */
11200
- async?: boolean;
11201
10564
  /**
11202
10565
  * These are the messages that will be spoken to the user as the tool is running.
11203
10566
  *
@@ -11212,27 +10575,8 @@ export interface UpdateGoHighLevelCalendarEventCreateToolDTO {
11212
10575
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
11213
10576
  */
11214
10577
  function?: OpenAIFunction;
11215
- /**
11216
- * This is the server that will be hit when this tool is requested by the model.
11217
- *
11218
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
11219
- *
11220
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
11221
- */
11222
- server?: Server;
11223
10578
  }
11224
10579
  export interface UpdateGoHighLevelContactCreateToolDTO {
11225
- /**
11226
- * This determines if the tool is async.
11227
- *
11228
- * 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.
11229
- *
11230
- * 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.
11231
- *
11232
- * Defaults to synchronous (`false`).
11233
- * @example false
11234
- */
11235
- async?: boolean;
11236
10580
  /**
11237
10581
  * These are the messages that will be spoken to the user as the tool is running.
11238
10582
  *
@@ -11247,27 +10591,8 @@ export interface UpdateGoHighLevelContactCreateToolDTO {
11247
10591
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
11248
10592
  */
11249
10593
  function?: OpenAIFunction;
11250
- /**
11251
- * This is the server that will be hit when this tool is requested by the model.
11252
- *
11253
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
11254
- *
11255
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
11256
- */
11257
- server?: Server;
11258
10594
  }
11259
10595
  export interface UpdateGoHighLevelContactGetToolDTO {
11260
- /**
11261
- * This determines if the tool is async.
11262
- *
11263
- * 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.
11264
- *
11265
- * 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.
11266
- *
11267
- * Defaults to synchronous (`false`).
11268
- * @example false
11269
- */
11270
- async?: boolean;
11271
10596
  /**
11272
10597
  * These are the messages that will be spoken to the user as the tool is running.
11273
10598
  *
@@ -11282,14 +10607,6 @@ export interface UpdateGoHighLevelContactGetToolDTO {
11282
10607
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
11283
10608
  */
11284
10609
  function?: OpenAIFunction;
11285
- /**
11286
- * This is the server that will be hit when this tool is requested by the model.
11287
- *
11288
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
11289
- *
11290
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
11291
- */
11292
- server?: Server;
11293
10610
  }
11294
10611
  export interface CreateFileDTO {
11295
10612
  /**
@@ -11528,7 +10845,6 @@ export interface TrieveKnowledgeBaseImport {
11528
10845
  }
11529
10846
  export interface Workflow {
11530
10847
  nodes: (ConversationNode | ToolNode)[];
11531
- /** These are the options for the workflow's LLM. */
11532
10848
  model?: WorkflowOpenAIModel | WorkflowAnthropicModel;
11533
10849
  id: string;
11534
10850
  orgId: string;
@@ -11539,14 +10855,17 @@ export interface Workflow {
11539
10855
  /** @maxLength 80 */
11540
10856
  name: string;
11541
10857
  edges: Edge[];
10858
+ /** @maxLength 5000 */
10859
+ globalPrompt?: string;
11542
10860
  }
11543
10861
  export interface UpdateWorkflowDTO {
11544
10862
  nodes?: (ConversationNode | ToolNode)[];
11545
- /** These are the options for the workflow's LLM. */
11546
10863
  model?: WorkflowOpenAIModel | WorkflowAnthropicModel;
11547
10864
  /** @maxLength 80 */
11548
10865
  name?: string;
11549
10866
  edges?: Edge[];
10867
+ /** @maxLength 5000 */
10868
+ globalPrompt?: string;
11550
10869
  }
11551
10870
  export interface Squad {
11552
10871
  /** This is the name of the squad. */
@@ -12015,22 +11334,6 @@ export interface UpdateTestSuiteRunDto {
12015
11334
  */
12016
11335
  name?: string;
12017
11336
  }
12018
- export interface Metrics {
12019
- orgId: string;
12020
- rangeStart: string;
12021
- rangeEnd: string;
12022
- bill: number;
12023
- billWithinBillingLimit: boolean;
12024
- billDailyBreakdown: object;
12025
- callActive: number;
12026
- callActiveWithinConcurrencyLimit: boolean;
12027
- callMinutes: number;
12028
- callMinutesDailyBreakdown: object;
12029
- callMinutesAverage: number;
12030
- callMinutesAverageDailyBreakdown: object;
12031
- callCount: number;
12032
- callCountDailyBreakdown: object;
12033
- }
12034
11337
  export interface TimeRange {
12035
11338
  /**
12036
11339
  * This is the time step for aggregations.
@@ -12264,7 +11567,7 @@ export interface Subscription {
12264
11567
  */
12265
11568
  updatedAt: string;
12266
11569
  /** This is the type / tier of the subscription. */
12267
- type: 'trial' | 'pay-as-you-go' | 'enterprise';
11570
+ type: 'trial' | 'pay-as-you-go' | 'enterprise' | 'agency' | 'startup' | 'growth' | 'scale';
12268
11571
  /**
12269
11572
  * This is the status of the subscription. Past due subscriptions are subscriptions
12270
11573
  * with past due payments.
@@ -12427,6 +11730,8 @@ export interface Org {
12427
11730
  plan?: OrgPlan;
12428
11731
  /** This is the secret key used for signing JWT tokens for the org. */
12429
11732
  jwtSecret?: string;
11733
+ /** This is the total number of call minutes used by this org across all time. */
11734
+ minutesUsed?: number;
12430
11735
  /**
12431
11736
  * This is the name of the org. This is just for your own reference.
12432
11737
  * @maxLength 40
@@ -15213,7 +14518,7 @@ export interface ServerMessageEndOfCallReport {
15213
14518
  /** This is the type of the message. "end-of-call-report" is sent when the call ends and post-processing is complete. */
15214
14519
  type: 'end-of-call-report';
15215
14520
  /** This is the reason the call ended. This can also be found at `call.endedReason` on GET /call/:id. */
15216
- endedReason: 'call-start-error-neither-assistant-nor-server-set' | 'assistant-request-failed' | 'assistant-request-returned-error' | 'assistant-request-returned-unspeakable-error' | 'assistant-request-returned-invalid-assistant' | 'assistant-request-returned-no-assistant' | 'assistant-request-returned-forwarding-phone-number' | 'call.start.error-get-org' | 'call.start.error-get-subscription' | 'call.start.error-get-assistant' | 'call.start.error-get-phone-number' | 'call.start.error-get-customer' | 'call.start.error-get-resources-validation' | 'call.start.error-vapi-number-international' | 'call.start.error-vapi-number-outbound-daily-limit' | 'call.start.error-get-transport' | 'assistant-not-valid' | 'database-error' | 'assistant-not-found' | 'pipeline-error-openai-voice-failed' | 'pipeline-error-cartesia-voice-failed' | 'pipeline-error-deepgram-voice-failed' | 'pipeline-error-eleven-labs-voice-failed' | 'pipeline-error-playht-voice-failed' | 'pipeline-error-lmnt-voice-failed' | 'pipeline-error-azure-voice-failed' | 'pipeline-error-rime-ai-voice-failed' | 'pipeline-error-smallest-ai-voice-failed' | 'pipeline-error-neuphonic-voice-failed' | 'pipeline-error-hume-voice-failed' | 'pipeline-error-sesame-voice-failed' | 'pipeline-error-tavus-video-failed' | 'call.in-progress.error-vapifault-openai-voice-failed' | 'call.in-progress.error-vapifault-cartesia-voice-failed' | 'call.in-progress.error-vapifault-deepgram-voice-failed' | 'call.in-progress.error-vapifault-eleven-labs-voice-failed' | 'call.in-progress.error-vapifault-playht-voice-failed' | 'call.in-progress.error-vapifault-lmnt-voice-failed' | 'call.in-progress.error-vapifault-azure-voice-failed' | 'call.in-progress.error-vapifault-rime-ai-voice-failed' | 'call.in-progress.error-vapifault-smallest-ai-voice-failed' | 'call.in-progress.error-vapifault-neuphonic-voice-failed' | 'call.in-progress.error-vapifault-hume-voice-failed' | 'call.in-progress.error-vapifault-sesame-voice-failed' | 'call.in-progress.error-vapifault-tavus-video-failed' | 'pipeline-error-vapi-llm-failed' | 'pipeline-error-vapi-400-bad-request-validation-failed' | 'pipeline-error-vapi-401-unauthorized' | 'pipeline-error-vapi-403-model-access-denied' | 'pipeline-error-vapi-429-exceeded-quota' | 'pipeline-error-vapi-500-server-error' | 'pipeline-error-vapi-503-server-overloaded-error' | 'call.in-progress.error-vapifault-vapi-llm-failed' | 'call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-vapi-401-unauthorized' | 'call.in-progress.error-vapifault-vapi-403-model-access-denied' | 'call.in-progress.error-vapifault-vapi-429-exceeded-quota' | 'call.in-progress.error-providerfault-vapi-500-server-error' | 'call.in-progress.error-providerfault-vapi-503-server-overloaded-error' | 'pipeline-error-deepgram-transcriber-failed' | 'call.in-progress.error-vapifault-deepgram-transcriber-failed' | 'pipeline-error-gladia-transcriber-failed' | 'call.in-progress.error-vapifault-gladia-transcriber-failed' | 'pipeline-error-speechmatics-transcriber-failed' | 'call.in-progress.error-vapifault-speechmatics-transcriber-failed' | 'pipeline-error-assembly-ai-transcriber-failed' | 'pipeline-error-assembly-ai-returning-400-insufficent-funds' | 'pipeline-error-assembly-ai-returning-400-paid-only-feature' | 'pipeline-error-assembly-ai-returning-401-invalid-credentials' | 'pipeline-error-assembly-ai-returning-500-invalid-schema' | 'pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed' | 'call.in-progress.error-vapifault-assembly-ai-transcriber-failed' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature' | 'call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed' | 'pipeline-error-talkscriber-transcriber-failed' | 'call.in-progress.error-vapifault-talkscriber-transcriber-failed' | 'pipeline-error-azure-speech-transcriber-failed' | 'call.in-progress.error-vapifault-azure-speech-transcriber-failed' | 'call.in-progress.error-pipeline-no-available-llm-model' | 'worker-shutdown' | 'unknown-error' | 'vonage-disconnected' | 'vonage-failed-to-connect-call' | 'vonage-completed' | 'phone-call-provider-bypass-enabled-but-no-call-received' | 'call.in-progress.error-providerfault-transport-never-connected' | 'call.in-progress.error-vapifault-worker-not-available' | 'call.in-progress.error-vapifault-transport-never-connected' | 'call.in-progress.error-vapifault-transport-connected-but-call-not-active' | 'call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing' | 'call.in-progress.error-vapifault-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-groq-llm-failed' | 'call.in-progress.error-vapifault-google-llm-failed' | 'call.in-progress.error-vapifault-xai-llm-failed' | 'call.in-progress.error-vapifault-mistral-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-cerebras-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-llm-failed' | 'pipeline-error-openai-400-bad-request-validation-failed' | 'pipeline-error-openai-401-unauthorized' | 'pipeline-error-openai-401-incorrect-api-key' | 'pipeline-error-openai-401-account-not-in-organization' | 'pipeline-error-openai-403-model-access-denied' | 'pipeline-error-openai-429-exceeded-quota' | 'pipeline-error-openai-429-rate-limit-reached' | 'pipeline-error-openai-500-server-error' | 'pipeline-error-openai-503-server-overloaded-error' | 'pipeline-error-openai-llm-failed' | 'call.in-progress.error-vapifault-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openai-401-unauthorized' | 'call.in-progress.error-vapifault-openai-401-incorrect-api-key' | 'call.in-progress.error-vapifault-openai-401-account-not-in-organization' | 'call.in-progress.error-vapifault-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-openai-429-exceeded-quota' | 'call.in-progress.error-vapifault-openai-429-rate-limit-reached' | 'call.in-progress.error-providerfault-openai-500-server-error' | 'call.in-progress.error-providerfault-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-400-bad-request-validation-failed' | 'pipeline-error-azure-openai-401-unauthorized' | 'pipeline-error-azure-openai-403-model-access-denied' | 'pipeline-error-azure-openai-429-exceeded-quota' | 'pipeline-error-azure-openai-500-server-error' | 'pipeline-error-azure-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-azure-openai-401-unauthorized' | 'call.in-progress.error-vapifault-azure-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-azure-openai-429-exceeded-quota' | 'call.in-progress.error-providerfault-azure-openai-500-server-error' | 'call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error' | 'pipeline-error-google-400-bad-request-validation-failed' | 'pipeline-error-google-401-unauthorized' | 'pipeline-error-google-403-model-access-denied' | 'pipeline-error-google-429-exceeded-quota' | 'pipeline-error-google-500-server-error' | 'pipeline-error-google-503-server-overloaded-error' | 'pipeline-error-google-llm-failed' | 'call.in-progress.error-vapifault-google-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-google-401-unauthorized' | 'call.in-progress.error-vapifault-google-403-model-access-denied' | 'call.in-progress.error-vapifault-google-429-exceeded-quota' | 'call.in-progress.error-providerfault-google-500-server-error' | 'call.in-progress.error-providerfault-google-503-server-overloaded-error' | 'pipeline-error-xai-400-bad-request-validation-failed' | 'pipeline-error-xai-401-unauthorized' | 'pipeline-error-xai-403-model-access-denied' | 'pipeline-error-xai-429-exceeded-quota' | 'pipeline-error-xai-500-server-error' | 'pipeline-error-xai-503-server-overloaded-error' | 'pipeline-error-xai-llm-failed' | 'call.in-progress.error-vapifault-xai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-xai-401-unauthorized' | 'call.in-progress.error-vapifault-xai-403-model-access-denied' | 'call.in-progress.error-vapifault-xai-429-exceeded-quota' | 'call.in-progress.error-providerfault-xai-500-server-error' | 'call.in-progress.error-providerfault-xai-503-server-overloaded-error' | 'pipeline-error-mistral-400-bad-request-validation-failed' | 'pipeline-error-mistral-401-unauthorized' | 'pipeline-error-mistral-403-model-access-denied' | 'pipeline-error-mistral-429-exceeded-quota' | 'pipeline-error-mistral-500-server-error' | 'pipeline-error-mistral-503-server-overloaded-error' | 'pipeline-error-mistral-llm-failed' | 'call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-mistral-401-unauthorized' | 'call.in-progress.error-vapifault-mistral-403-model-access-denied' | 'call.in-progress.error-vapifault-mistral-429-exceeded-quota' | 'call.in-progress.error-providerfault-mistral-500-server-error' | 'call.in-progress.error-providerfault-mistral-503-server-overloaded-error' | 'pipeline-error-inflection-ai-400-bad-request-validation-failed' | 'pipeline-error-inflection-ai-401-unauthorized' | 'pipeline-error-inflection-ai-403-model-access-denied' | 'pipeline-error-inflection-ai-429-exceeded-quota' | 'pipeline-error-inflection-ai-500-server-error' | 'pipeline-error-inflection-ai-503-server-overloaded-error' | 'pipeline-error-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-inflection-ai-401-unauthorized' | 'call.in-progress.error-vapifault-inflection-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-inflection-ai-500-server-error' | 'call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error' | 'pipeline-error-deep-seek-400-bad-request-validation-failed' | 'pipeline-error-deep-seek-401-unauthorized' | 'pipeline-error-deep-seek-403-model-access-denied' | 'pipeline-error-deep-seek-429-exceeded-quota' | 'pipeline-error-deep-seek-500-server-error' | 'pipeline-error-deep-seek-503-server-overloaded-error' | 'pipeline-error-deep-seek-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deep-seek-401-unauthorized' | 'call.in-progress.error-vapifault-deep-seek-403-model-access-denied' | 'call.in-progress.error-vapifault-deep-seek-429-exceeded-quota' | 'call.in-progress.error-providerfault-deep-seek-500-server-error' | 'call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error' | 'pipeline-error-groq-400-bad-request-validation-failed' | 'pipeline-error-groq-401-unauthorized' | 'pipeline-error-groq-403-model-access-denied' | 'pipeline-error-groq-429-exceeded-quota' | 'pipeline-error-groq-500-server-error' | 'pipeline-error-groq-503-server-overloaded-error' | 'pipeline-error-groq-llm-failed' | 'call.in-progress.error-vapifault-groq-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-groq-401-unauthorized' | 'call.in-progress.error-vapifault-groq-403-model-access-denied' | 'call.in-progress.error-vapifault-groq-429-exceeded-quota' | 'call.in-progress.error-providerfault-groq-500-server-error' | 'call.in-progress.error-providerfault-groq-503-server-overloaded-error' | 'pipeline-error-cerebras-400-bad-request-validation-failed' | 'pipeline-error-cerebras-401-unauthorized' | 'pipeline-error-cerebras-403-model-access-denied' | 'pipeline-error-cerebras-429-exceeded-quota' | 'pipeline-error-cerebras-500-server-error' | 'pipeline-error-cerebras-503-server-overloaded-error' | 'pipeline-error-cerebras-llm-failed' | 'call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-cerebras-401-unauthorized' | 'call.in-progress.error-vapifault-cerebras-403-model-access-denied' | 'call.in-progress.error-vapifault-cerebras-429-exceeded-quota' | 'call.in-progress.error-providerfault-cerebras-500-server-error' | 'call.in-progress.error-providerfault-cerebras-503-server-overloaded-error' | 'pipeline-error-anthropic-400-bad-request-validation-failed' | 'pipeline-error-anthropic-401-unauthorized' | 'pipeline-error-anthropic-403-model-access-denied' | 'pipeline-error-anthropic-429-exceeded-quota' | 'pipeline-error-anthropic-500-server-error' | 'pipeline-error-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-500-server-error' | 'call.in-progress.error-providerfault-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-400-bad-request-validation-failed' | 'pipeline-error-anthropic-bedrock-401-unauthorized' | 'pipeline-error-anthropic-bedrock-403-model-access-denied' | 'pipeline-error-anthropic-bedrock-429-exceeded-quota' | 'pipeline-error-anthropic-bedrock-500-server-error' | 'pipeline-error-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-bedrock-500-server-error' | 'call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-400-bad-request-validation-failed' | 'pipeline-error-anthropic-vertex-401-unauthorized' | 'pipeline-error-anthropic-vertex-403-model-access-denied' | 'pipeline-error-anthropic-vertex-429-exceeded-quota' | 'pipeline-error-anthropic-vertex-500-server-error' | 'pipeline-error-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-vertex-500-server-error' | 'call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-together-ai-400-bad-request-validation-failed' | 'pipeline-error-together-ai-401-unauthorized' | 'pipeline-error-together-ai-403-model-access-denied' | 'pipeline-error-together-ai-429-exceeded-quota' | 'pipeline-error-together-ai-500-server-error' | 'pipeline-error-together-ai-503-server-overloaded-error' | 'pipeline-error-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-together-ai-401-unauthorized' | 'call.in-progress.error-vapifault-together-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-together-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-together-ai-500-server-error' | 'call.in-progress.error-providerfault-together-ai-503-server-overloaded-error' | 'pipeline-error-anyscale-400-bad-request-validation-failed' | 'pipeline-error-anyscale-401-unauthorized' | 'pipeline-error-anyscale-403-model-access-denied' | 'pipeline-error-anyscale-429-exceeded-quota' | 'pipeline-error-anyscale-500-server-error' | 'pipeline-error-anyscale-503-server-overloaded-error' | 'pipeline-error-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anyscale-401-unauthorized' | 'call.in-progress.error-vapifault-anyscale-403-model-access-denied' | 'call.in-progress.error-vapifault-anyscale-429-exceeded-quota' | 'call.in-progress.error-providerfault-anyscale-500-server-error' | 'call.in-progress.error-providerfault-anyscale-503-server-overloaded-error' | 'pipeline-error-openrouter-400-bad-request-validation-failed' | 'pipeline-error-openrouter-401-unauthorized' | 'pipeline-error-openrouter-403-model-access-denied' | 'pipeline-error-openrouter-429-exceeded-quota' | 'pipeline-error-openrouter-500-server-error' | 'pipeline-error-openrouter-503-server-overloaded-error' | 'pipeline-error-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openrouter-401-unauthorized' | 'call.in-progress.error-vapifault-openrouter-403-model-access-denied' | 'call.in-progress.error-vapifault-openrouter-429-exceeded-quota' | 'call.in-progress.error-providerfault-openrouter-500-server-error' | 'call.in-progress.error-providerfault-openrouter-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-400-bad-request-validation-failed' | 'pipeline-error-perplexity-ai-401-unauthorized' | 'pipeline-error-perplexity-ai-403-model-access-denied' | 'pipeline-error-perplexity-ai-429-exceeded-quota' | 'pipeline-error-perplexity-ai-500-server-error' | 'pipeline-error-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-perplexity-ai-401-unauthorized' | 'call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-perplexity-ai-500-server-error' | 'call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-deepinfra-400-bad-request-validation-failed' | 'pipeline-error-deepinfra-401-unauthorized' | 'pipeline-error-deepinfra-403-model-access-denied' | 'pipeline-error-deepinfra-429-exceeded-quota' | 'pipeline-error-deepinfra-500-server-error' | 'pipeline-error-deepinfra-503-server-overloaded-error' | 'pipeline-error-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deepinfra-401-unauthorized' | 'call.in-progress.error-vapifault-deepinfra-403-model-access-denied' | 'call.in-progress.error-vapifault-deepinfra-429-exceeded-quota' | 'call.in-progress.error-providerfault-deepinfra-500-server-error' | 'call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error' | 'pipeline-error-runpod-400-bad-request-validation-failed' | 'pipeline-error-runpod-401-unauthorized' | 'pipeline-error-runpod-403-model-access-denied' | 'pipeline-error-runpod-429-exceeded-quota' | 'pipeline-error-runpod-500-server-error' | 'pipeline-error-runpod-503-server-overloaded-error' | 'pipeline-error-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-runpod-401-unauthorized' | 'call.in-progress.error-vapifault-runpod-403-model-access-denied' | 'call.in-progress.error-vapifault-runpod-429-exceeded-quota' | 'call.in-progress.error-providerfault-runpod-500-server-error' | 'call.in-progress.error-providerfault-runpod-503-server-overloaded-error' | 'pipeline-error-custom-llm-400-bad-request-validation-failed' | 'pipeline-error-custom-llm-401-unauthorized' | 'pipeline-error-custom-llm-403-model-access-denied' | 'pipeline-error-custom-llm-429-exceeded-quota' | 'pipeline-error-custom-llm-500-server-error' | 'pipeline-error-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-custom-llm-401-unauthorized' | 'call.in-progress.error-vapifault-custom-llm-403-model-access-denied' | 'call.in-progress.error-vapifault-custom-llm-429-exceeded-quota' | 'call.in-progress.error-providerfault-custom-llm-500-server-error' | 'call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-voice-failed' | 'pipeline-error-cartesia-socket-hang-up' | 'pipeline-error-cartesia-requested-payment' | 'pipeline-error-cartesia-500-server-error' | 'pipeline-error-cartesia-503-server-error' | 'pipeline-error-cartesia-522-server-error' | 'call.in-progress.error-vapifault-cartesia-socket-hang-up' | 'call.in-progress.error-vapifault-cartesia-requested-payment' | 'call.in-progress.error-providerfault-cartesia-500-server-error' | 'call.in-progress.error-providerfault-cartesia-503-server-error' | 'call.in-progress.error-providerfault-cartesia-522-server-error' | 'pipeline-error-eleven-labs-voice-not-found' | 'pipeline-error-eleven-labs-quota-exceeded' | 'pipeline-error-eleven-labs-unauthorized-access' | 'pipeline-error-eleven-labs-unauthorized-to-access-model' | 'pipeline-error-eleven-labs-professional-voices-only-for-creator-plus' | 'pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'pipeline-error-eleven-labs-system-busy-and-requested-upgrade' | 'pipeline-error-eleven-labs-voice-not-fine-tuned' | 'pipeline-error-eleven-labs-invalid-api-key' | 'pipeline-error-eleven-labs-invalid-voice-samples' | 'pipeline-error-eleven-labs-voice-disabled-by-owner' | 'pipeline-error-eleven-labs-blocked-account-in-probation' | 'pipeline-error-eleven-labs-blocked-content-against-their-policy' | 'pipeline-error-eleven-labs-missing-samples-for-voice-clone' | 'pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'pipeline-error-eleven-labs-voice-not-allowed-for-free-users' | 'pipeline-error-eleven-labs-max-character-limit-exceeded' | 'pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'pipeline-error-eleven-labs-500-server-error' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-found' | 'call.in-progress.error-vapifault-eleven-labs-quota-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-access' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model' | 'call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus' | 'call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned' | 'call.in-progress.error-vapifault-eleven-labs-invalid-api-key' | 'call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples' | 'call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner' | 'call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation' | 'call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy' | 'call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users' | 'call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'call.in-progress.error-providerfault-eleven-labs-500-server-error' | 'pipeline-error-playht-request-timed-out' | 'pipeline-error-playht-invalid-voice' | 'pipeline-error-playht-unexpected-error' | 'pipeline-error-playht-out-of-credits' | 'pipeline-error-playht-invalid-emotion' | 'pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri' | 'pipeline-error-playht-401-unauthorized' | 'pipeline-error-playht-403-forbidden-out-of-characters' | 'pipeline-error-playht-403-forbidden-api-access-not-available' | 'pipeline-error-playht-429-exceeded-quota' | 'pipeline-error-playht-502-gateway-error' | 'pipeline-error-playht-504-gateway-error' | 'call.in-progress.error-vapifault-playht-request-timed-out' | 'call.in-progress.error-vapifault-playht-invalid-voice' | 'call.in-progress.error-vapifault-playht-unexpected-error' | 'call.in-progress.error-vapifault-playht-out-of-credits' | 'call.in-progress.error-vapifault-playht-invalid-emotion' | 'call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri' | 'call.in-progress.error-vapifault-playht-401-unauthorized' | 'call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters' | 'call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available' | 'call.in-progress.error-vapifault-playht-429-exceeded-quota' | 'call.in-progress.error-providerfault-playht-502-gateway-error' | 'call.in-progress.error-providerfault-playht-504-gateway-error' | 'pipeline-error-custom-transcriber-failed' | 'call.in-progress.error-vapifault-custom-transcriber-failed' | 'pipeline-error-eleven-labs-transcriber-failed' | 'call.in-progress.error-vapifault-eleven-labs-transcriber-failed' | 'pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination' | 'pipeline-error-deepgram-returning-401-invalid-credentials' | 'pipeline-error-deepgram-returning-403-model-access-denied' | 'pipeline-error-deepgram-returning-404-not-found' | 'pipeline-error-deepgram-returning-500-invalid-json' | 'pipeline-error-deepgram-returning-502-network-error' | 'pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach' | 'call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination' | 'call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-deepgram-returning-404-not-found' | 'call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied' | 'call.in-progress.error-providerfault-deepgram-returning-500-invalid-json' | 'call.in-progress.error-providerfault-deepgram-returning-502-network-error' | 'call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach' | 'pipeline-error-google-transcriber-failed' | 'call.in-progress.error-vapifault-google-transcriber-failed' | 'pipeline-error-openai-transcriber-failed' | 'call.in-progress.error-vapifault-openai-transcriber-failed' | 'assistant-ended-call' | 'assistant-said-end-call-phrase' | 'assistant-ended-call-with-hangup-task' | 'assistant-ended-call-after-message-spoken' | 'assistant-forwarded-call' | 'assistant-join-timed-out' | 'call.in-progress.error-assistant-did-not-receive-customer-audio' | 'customer-busy' | 'customer-ended-call' | 'customer-did-not-answer' | 'customer-did-not-give-microphone-permission' | 'exceeded-max-duration' | 'manually-canceled' | 'phone-call-provider-closed-websocket' | 'call.forwarding.operator-busy' | 'silence-timed-out' | 'call.in-progress.error-sip-telephony-provider-failed-to-connect-call' | 'call.ringing.hook-executed-say' | 'call.ringing.hook-executed-transfer' | 'twilio-failed-to-connect-call' | 'twilio-reported-customer-misdialed' | 'vonage-rejected' | 'voicemail';
14521
+ endedReason: 'call-start-error-neither-assistant-nor-server-set' | 'assistant-request-failed' | 'assistant-request-returned-error' | 'assistant-request-returned-unspeakable-error' | 'assistant-request-returned-invalid-assistant' | 'assistant-request-returned-no-assistant' | 'assistant-request-returned-forwarding-phone-number' | 'call.start.error-get-org' | 'call.start.error-get-subscription' | 'call.start.error-get-assistant' | 'call.start.error-get-phone-number' | 'call.start.error-get-customer' | 'call.start.error-get-resources-validation' | 'call.start.error-vapi-number-international' | 'call.start.error-vapi-number-outbound-daily-limit' | 'call.start.error-get-transport' | 'assistant-not-valid' | 'database-error' | 'assistant-not-found' | 'pipeline-error-openai-voice-failed' | 'pipeline-error-cartesia-voice-failed' | 'pipeline-error-deepgram-voice-failed' | 'pipeline-error-eleven-labs-voice-failed' | 'pipeline-error-playht-voice-failed' | 'pipeline-error-lmnt-voice-failed' | 'pipeline-error-azure-voice-failed' | 'pipeline-error-rime-ai-voice-failed' | 'pipeline-error-smallest-ai-voice-failed' | 'pipeline-error-neuphonic-voice-failed' | 'pipeline-error-hume-voice-failed' | 'pipeline-error-sesame-voice-failed' | 'pipeline-error-tavus-video-failed' | 'call.in-progress.error-vapifault-openai-voice-failed' | 'call.in-progress.error-vapifault-cartesia-voice-failed' | 'call.in-progress.error-vapifault-deepgram-voice-failed' | 'call.in-progress.error-vapifault-eleven-labs-voice-failed' | 'call.in-progress.error-vapifault-playht-voice-failed' | 'call.in-progress.error-vapifault-lmnt-voice-failed' | 'call.in-progress.error-vapifault-azure-voice-failed' | 'call.in-progress.error-vapifault-rime-ai-voice-failed' | 'call.in-progress.error-vapifault-smallest-ai-voice-failed' | 'call.in-progress.error-vapifault-neuphonic-voice-failed' | 'call.in-progress.error-vapifault-hume-voice-failed' | 'call.in-progress.error-vapifault-sesame-voice-failed' | 'call.in-progress.error-vapifault-tavus-video-failed' | 'pipeline-error-vapi-llm-failed' | 'pipeline-error-vapi-400-bad-request-validation-failed' | 'pipeline-error-vapi-401-unauthorized' | 'pipeline-error-vapi-403-model-access-denied' | 'pipeline-error-vapi-429-exceeded-quota' | 'pipeline-error-vapi-500-server-error' | 'pipeline-error-vapi-503-server-overloaded-error' | 'call.in-progress.error-vapifault-vapi-llm-failed' | 'call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-vapi-401-unauthorized' | 'call.in-progress.error-vapifault-vapi-403-model-access-denied' | 'call.in-progress.error-vapifault-vapi-429-exceeded-quota' | 'call.in-progress.error-providerfault-vapi-500-server-error' | 'call.in-progress.error-providerfault-vapi-503-server-overloaded-error' | 'pipeline-error-deepgram-transcriber-failed' | 'call.in-progress.error-vapifault-deepgram-transcriber-failed' | 'pipeline-error-gladia-transcriber-failed' | 'call.in-progress.error-vapifault-gladia-transcriber-failed' | 'pipeline-error-speechmatics-transcriber-failed' | 'call.in-progress.error-vapifault-speechmatics-transcriber-failed' | 'pipeline-error-assembly-ai-transcriber-failed' | 'pipeline-error-assembly-ai-returning-400-insufficent-funds' | 'pipeline-error-assembly-ai-returning-400-paid-only-feature' | 'pipeline-error-assembly-ai-returning-401-invalid-credentials' | 'pipeline-error-assembly-ai-returning-500-invalid-schema' | 'pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed' | 'call.in-progress.error-vapifault-assembly-ai-transcriber-failed' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature' | 'call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed' | 'pipeline-error-talkscriber-transcriber-failed' | 'call.in-progress.error-vapifault-talkscriber-transcriber-failed' | 'pipeline-error-azure-speech-transcriber-failed' | 'call.in-progress.error-vapifault-azure-speech-transcriber-failed' | 'call.in-progress.error-pipeline-no-available-llm-model' | 'worker-shutdown' | 'unknown-error' | 'vonage-disconnected' | 'vonage-failed-to-connect-call' | 'vonage-completed' | 'phone-call-provider-bypass-enabled-but-no-call-received' | 'call.in-progress.error-providerfault-transport-never-connected' | 'call.in-progress.error-vapifault-worker-not-available' | 'call.in-progress.error-vapifault-transport-never-connected' | 'call.in-progress.error-vapifault-transport-connected-but-call-not-active' | 'call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing' | 'call.in-progress.error-vapifault-worker-died' | 'call.in-progress.error-vapifault-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-groq-llm-failed' | 'call.in-progress.error-vapifault-google-llm-failed' | 'call.in-progress.error-vapifault-xai-llm-failed' | 'call.in-progress.error-vapifault-mistral-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-cerebras-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-llm-failed' | 'pipeline-error-openai-400-bad-request-validation-failed' | 'pipeline-error-openai-401-unauthorized' | 'pipeline-error-openai-401-incorrect-api-key' | 'pipeline-error-openai-401-account-not-in-organization' | 'pipeline-error-openai-403-model-access-denied' | 'pipeline-error-openai-429-exceeded-quota' | 'pipeline-error-openai-429-rate-limit-reached' | 'pipeline-error-openai-500-server-error' | 'pipeline-error-openai-503-server-overloaded-error' | 'pipeline-error-openai-llm-failed' | 'call.in-progress.error-vapifault-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openai-401-unauthorized' | 'call.in-progress.error-vapifault-openai-401-incorrect-api-key' | 'call.in-progress.error-vapifault-openai-401-account-not-in-organization' | 'call.in-progress.error-vapifault-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-openai-429-exceeded-quota' | 'call.in-progress.error-vapifault-openai-429-rate-limit-reached' | 'call.in-progress.error-providerfault-openai-500-server-error' | 'call.in-progress.error-providerfault-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-400-bad-request-validation-failed' | 'pipeline-error-azure-openai-401-unauthorized' | 'pipeline-error-azure-openai-403-model-access-denied' | 'pipeline-error-azure-openai-429-exceeded-quota' | 'pipeline-error-azure-openai-500-server-error' | 'pipeline-error-azure-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-azure-openai-401-unauthorized' | 'call.in-progress.error-vapifault-azure-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-azure-openai-429-exceeded-quota' | 'call.in-progress.error-providerfault-azure-openai-500-server-error' | 'call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error' | 'pipeline-error-google-400-bad-request-validation-failed' | 'pipeline-error-google-401-unauthorized' | 'pipeline-error-google-403-model-access-denied' | 'pipeline-error-google-429-exceeded-quota' | 'pipeline-error-google-500-server-error' | 'pipeline-error-google-503-server-overloaded-error' | 'pipeline-error-google-llm-failed' | 'call.in-progress.error-vapifault-google-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-google-401-unauthorized' | 'call.in-progress.error-vapifault-google-403-model-access-denied' | 'call.in-progress.error-vapifault-google-429-exceeded-quota' | 'call.in-progress.error-providerfault-google-500-server-error' | 'call.in-progress.error-providerfault-google-503-server-overloaded-error' | 'pipeline-error-xai-400-bad-request-validation-failed' | 'pipeline-error-xai-401-unauthorized' | 'pipeline-error-xai-403-model-access-denied' | 'pipeline-error-xai-429-exceeded-quota' | 'pipeline-error-xai-500-server-error' | 'pipeline-error-xai-503-server-overloaded-error' | 'pipeline-error-xai-llm-failed' | 'call.in-progress.error-vapifault-xai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-xai-401-unauthorized' | 'call.in-progress.error-vapifault-xai-403-model-access-denied' | 'call.in-progress.error-vapifault-xai-429-exceeded-quota' | 'call.in-progress.error-providerfault-xai-500-server-error' | 'call.in-progress.error-providerfault-xai-503-server-overloaded-error' | 'pipeline-error-mistral-400-bad-request-validation-failed' | 'pipeline-error-mistral-401-unauthorized' | 'pipeline-error-mistral-403-model-access-denied' | 'pipeline-error-mistral-429-exceeded-quota' | 'pipeline-error-mistral-500-server-error' | 'pipeline-error-mistral-503-server-overloaded-error' | 'pipeline-error-mistral-llm-failed' | 'call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-mistral-401-unauthorized' | 'call.in-progress.error-vapifault-mistral-403-model-access-denied' | 'call.in-progress.error-vapifault-mistral-429-exceeded-quota' | 'call.in-progress.error-providerfault-mistral-500-server-error' | 'call.in-progress.error-providerfault-mistral-503-server-overloaded-error' | 'pipeline-error-inflection-ai-400-bad-request-validation-failed' | 'pipeline-error-inflection-ai-401-unauthorized' | 'pipeline-error-inflection-ai-403-model-access-denied' | 'pipeline-error-inflection-ai-429-exceeded-quota' | 'pipeline-error-inflection-ai-500-server-error' | 'pipeline-error-inflection-ai-503-server-overloaded-error' | 'pipeline-error-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-inflection-ai-401-unauthorized' | 'call.in-progress.error-vapifault-inflection-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-inflection-ai-500-server-error' | 'call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error' | 'pipeline-error-deep-seek-400-bad-request-validation-failed' | 'pipeline-error-deep-seek-401-unauthorized' | 'pipeline-error-deep-seek-403-model-access-denied' | 'pipeline-error-deep-seek-429-exceeded-quota' | 'pipeline-error-deep-seek-500-server-error' | 'pipeline-error-deep-seek-503-server-overloaded-error' | 'pipeline-error-deep-seek-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deep-seek-401-unauthorized' | 'call.in-progress.error-vapifault-deep-seek-403-model-access-denied' | 'call.in-progress.error-vapifault-deep-seek-429-exceeded-quota' | 'call.in-progress.error-providerfault-deep-seek-500-server-error' | 'call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error' | 'pipeline-error-groq-400-bad-request-validation-failed' | 'pipeline-error-groq-401-unauthorized' | 'pipeline-error-groq-403-model-access-denied' | 'pipeline-error-groq-429-exceeded-quota' | 'pipeline-error-groq-500-server-error' | 'pipeline-error-groq-503-server-overloaded-error' | 'pipeline-error-groq-llm-failed' | 'call.in-progress.error-vapifault-groq-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-groq-401-unauthorized' | 'call.in-progress.error-vapifault-groq-403-model-access-denied' | 'call.in-progress.error-vapifault-groq-429-exceeded-quota' | 'call.in-progress.error-providerfault-groq-500-server-error' | 'call.in-progress.error-providerfault-groq-503-server-overloaded-error' | 'pipeline-error-cerebras-400-bad-request-validation-failed' | 'pipeline-error-cerebras-401-unauthorized' | 'pipeline-error-cerebras-403-model-access-denied' | 'pipeline-error-cerebras-429-exceeded-quota' | 'pipeline-error-cerebras-500-server-error' | 'pipeline-error-cerebras-503-server-overloaded-error' | 'pipeline-error-cerebras-llm-failed' | 'call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-cerebras-401-unauthorized' | 'call.in-progress.error-vapifault-cerebras-403-model-access-denied' | 'call.in-progress.error-vapifault-cerebras-429-exceeded-quota' | 'call.in-progress.error-providerfault-cerebras-500-server-error' | 'call.in-progress.error-providerfault-cerebras-503-server-overloaded-error' | 'pipeline-error-anthropic-400-bad-request-validation-failed' | 'pipeline-error-anthropic-401-unauthorized' | 'pipeline-error-anthropic-403-model-access-denied' | 'pipeline-error-anthropic-429-exceeded-quota' | 'pipeline-error-anthropic-500-server-error' | 'pipeline-error-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-500-server-error' | 'call.in-progress.error-providerfault-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-400-bad-request-validation-failed' | 'pipeline-error-anthropic-bedrock-401-unauthorized' | 'pipeline-error-anthropic-bedrock-403-model-access-denied' | 'pipeline-error-anthropic-bedrock-429-exceeded-quota' | 'pipeline-error-anthropic-bedrock-500-server-error' | 'pipeline-error-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-bedrock-500-server-error' | 'call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-400-bad-request-validation-failed' | 'pipeline-error-anthropic-vertex-401-unauthorized' | 'pipeline-error-anthropic-vertex-403-model-access-denied' | 'pipeline-error-anthropic-vertex-429-exceeded-quota' | 'pipeline-error-anthropic-vertex-500-server-error' | 'pipeline-error-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-vertex-500-server-error' | 'call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-together-ai-400-bad-request-validation-failed' | 'pipeline-error-together-ai-401-unauthorized' | 'pipeline-error-together-ai-403-model-access-denied' | 'pipeline-error-together-ai-429-exceeded-quota' | 'pipeline-error-together-ai-500-server-error' | 'pipeline-error-together-ai-503-server-overloaded-error' | 'pipeline-error-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-together-ai-401-unauthorized' | 'call.in-progress.error-vapifault-together-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-together-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-together-ai-500-server-error' | 'call.in-progress.error-providerfault-together-ai-503-server-overloaded-error' | 'pipeline-error-anyscale-400-bad-request-validation-failed' | 'pipeline-error-anyscale-401-unauthorized' | 'pipeline-error-anyscale-403-model-access-denied' | 'pipeline-error-anyscale-429-exceeded-quota' | 'pipeline-error-anyscale-500-server-error' | 'pipeline-error-anyscale-503-server-overloaded-error' | 'pipeline-error-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anyscale-401-unauthorized' | 'call.in-progress.error-vapifault-anyscale-403-model-access-denied' | 'call.in-progress.error-vapifault-anyscale-429-exceeded-quota' | 'call.in-progress.error-providerfault-anyscale-500-server-error' | 'call.in-progress.error-providerfault-anyscale-503-server-overloaded-error' | 'pipeline-error-openrouter-400-bad-request-validation-failed' | 'pipeline-error-openrouter-401-unauthorized' | 'pipeline-error-openrouter-403-model-access-denied' | 'pipeline-error-openrouter-429-exceeded-quota' | 'pipeline-error-openrouter-500-server-error' | 'pipeline-error-openrouter-503-server-overloaded-error' | 'pipeline-error-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openrouter-401-unauthorized' | 'call.in-progress.error-vapifault-openrouter-403-model-access-denied' | 'call.in-progress.error-vapifault-openrouter-429-exceeded-quota' | 'call.in-progress.error-providerfault-openrouter-500-server-error' | 'call.in-progress.error-providerfault-openrouter-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-400-bad-request-validation-failed' | 'pipeline-error-perplexity-ai-401-unauthorized' | 'pipeline-error-perplexity-ai-403-model-access-denied' | 'pipeline-error-perplexity-ai-429-exceeded-quota' | 'pipeline-error-perplexity-ai-500-server-error' | 'pipeline-error-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-perplexity-ai-401-unauthorized' | 'call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-perplexity-ai-500-server-error' | 'call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-deepinfra-400-bad-request-validation-failed' | 'pipeline-error-deepinfra-401-unauthorized' | 'pipeline-error-deepinfra-403-model-access-denied' | 'pipeline-error-deepinfra-429-exceeded-quota' | 'pipeline-error-deepinfra-500-server-error' | 'pipeline-error-deepinfra-503-server-overloaded-error' | 'pipeline-error-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deepinfra-401-unauthorized' | 'call.in-progress.error-vapifault-deepinfra-403-model-access-denied' | 'call.in-progress.error-vapifault-deepinfra-429-exceeded-quota' | 'call.in-progress.error-providerfault-deepinfra-500-server-error' | 'call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error' | 'pipeline-error-runpod-400-bad-request-validation-failed' | 'pipeline-error-runpod-401-unauthorized' | 'pipeline-error-runpod-403-model-access-denied' | 'pipeline-error-runpod-429-exceeded-quota' | 'pipeline-error-runpod-500-server-error' | 'pipeline-error-runpod-503-server-overloaded-error' | 'pipeline-error-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-runpod-401-unauthorized' | 'call.in-progress.error-vapifault-runpod-403-model-access-denied' | 'call.in-progress.error-vapifault-runpod-429-exceeded-quota' | 'call.in-progress.error-providerfault-runpod-500-server-error' | 'call.in-progress.error-providerfault-runpod-503-server-overloaded-error' | 'pipeline-error-custom-llm-400-bad-request-validation-failed' | 'pipeline-error-custom-llm-401-unauthorized' | 'pipeline-error-custom-llm-403-model-access-denied' | 'pipeline-error-custom-llm-429-exceeded-quota' | 'pipeline-error-custom-llm-500-server-error' | 'pipeline-error-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-custom-llm-401-unauthorized' | 'call.in-progress.error-vapifault-custom-llm-403-model-access-denied' | 'call.in-progress.error-vapifault-custom-llm-429-exceeded-quota' | 'call.in-progress.error-providerfault-custom-llm-500-server-error' | 'call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-voice-failed' | 'pipeline-error-cartesia-socket-hang-up' | 'pipeline-error-cartesia-requested-payment' | 'pipeline-error-cartesia-500-server-error' | 'pipeline-error-cartesia-503-server-error' | 'pipeline-error-cartesia-522-server-error' | 'call.in-progress.error-vapifault-cartesia-socket-hang-up' | 'call.in-progress.error-vapifault-cartesia-requested-payment' | 'call.in-progress.error-providerfault-cartesia-500-server-error' | 'call.in-progress.error-providerfault-cartesia-503-server-error' | 'call.in-progress.error-providerfault-cartesia-522-server-error' | 'pipeline-error-eleven-labs-voice-not-found' | 'pipeline-error-eleven-labs-quota-exceeded' | 'pipeline-error-eleven-labs-unauthorized-access' | 'pipeline-error-eleven-labs-unauthorized-to-access-model' | 'pipeline-error-eleven-labs-professional-voices-only-for-creator-plus' | 'pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'pipeline-error-eleven-labs-system-busy-and-requested-upgrade' | 'pipeline-error-eleven-labs-voice-not-fine-tuned' | 'pipeline-error-eleven-labs-invalid-api-key' | 'pipeline-error-eleven-labs-invalid-voice-samples' | 'pipeline-error-eleven-labs-voice-disabled-by-owner' | 'pipeline-error-eleven-labs-blocked-account-in-probation' | 'pipeline-error-eleven-labs-blocked-content-against-their-policy' | 'pipeline-error-eleven-labs-missing-samples-for-voice-clone' | 'pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'pipeline-error-eleven-labs-voice-not-allowed-for-free-users' | 'pipeline-error-eleven-labs-max-character-limit-exceeded' | 'pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'pipeline-error-eleven-labs-500-server-error' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-found' | 'call.in-progress.error-vapifault-eleven-labs-quota-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-access' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model' | 'call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus' | 'call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned' | 'call.in-progress.error-vapifault-eleven-labs-invalid-api-key' | 'call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples' | 'call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner' | 'call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation' | 'call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy' | 'call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users' | 'call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'call.in-progress.error-providerfault-eleven-labs-500-server-error' | 'pipeline-error-playht-request-timed-out' | 'pipeline-error-playht-invalid-voice' | 'pipeline-error-playht-unexpected-error' | 'pipeline-error-playht-out-of-credits' | 'pipeline-error-playht-invalid-emotion' | 'pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri' | 'pipeline-error-playht-401-unauthorized' | 'pipeline-error-playht-403-forbidden-out-of-characters' | 'pipeline-error-playht-403-forbidden-api-access-not-available' | 'pipeline-error-playht-429-exceeded-quota' | 'pipeline-error-playht-502-gateway-error' | 'pipeline-error-playht-504-gateway-error' | 'call.in-progress.error-vapifault-playht-request-timed-out' | 'call.in-progress.error-vapifault-playht-invalid-voice' | 'call.in-progress.error-vapifault-playht-unexpected-error' | 'call.in-progress.error-vapifault-playht-out-of-credits' | 'call.in-progress.error-vapifault-playht-invalid-emotion' | 'call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri' | 'call.in-progress.error-vapifault-playht-401-unauthorized' | 'call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters' | 'call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available' | 'call.in-progress.error-vapifault-playht-429-exceeded-quota' | 'call.in-progress.error-providerfault-playht-502-gateway-error' | 'call.in-progress.error-providerfault-playht-504-gateway-error' | 'pipeline-error-custom-transcriber-failed' | 'call.in-progress.error-vapifault-custom-transcriber-failed' | 'pipeline-error-eleven-labs-transcriber-failed' | 'call.in-progress.error-vapifault-eleven-labs-transcriber-failed' | 'pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination' | 'pipeline-error-deepgram-returning-401-invalid-credentials' | 'pipeline-error-deepgram-returning-403-model-access-denied' | 'pipeline-error-deepgram-returning-404-not-found' | 'pipeline-error-deepgram-returning-500-invalid-json' | 'pipeline-error-deepgram-returning-502-network-error' | 'pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach' | 'call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination' | 'call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-deepgram-returning-404-not-found' | 'call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied' | 'call.in-progress.error-providerfault-deepgram-returning-500-invalid-json' | 'call.in-progress.error-providerfault-deepgram-returning-502-network-error' | 'call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach' | 'pipeline-error-google-transcriber-failed' | 'call.in-progress.error-vapifault-google-transcriber-failed' | 'pipeline-error-openai-transcriber-failed' | 'call.in-progress.error-vapifault-openai-transcriber-failed' | 'assistant-ended-call' | 'assistant-said-end-call-phrase' | 'assistant-ended-call-with-hangup-task' | 'assistant-ended-call-after-message-spoken' | 'assistant-forwarded-call' | 'assistant-join-timed-out' | 'call.in-progress.error-assistant-did-not-receive-customer-audio' | 'customer-busy' | 'customer-ended-call' | 'customer-did-not-answer' | 'customer-did-not-give-microphone-permission' | 'exceeded-max-duration' | 'manually-canceled' | 'phone-call-provider-closed-websocket' | 'call.forwarding.operator-busy' | 'silence-timed-out' | 'call.in-progress.error-sip-inbound-call-failed-to-connect' | 'call.in-progress.error-providerfault-outbound-sip-403-forbidden' | 'call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required' | 'call.in-progress.error-providerfault-outbound-sip-503-service-unavailable' | 'call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable' | 'call.in-progress.error-sip-outbound-call-failed-to-connect' | 'call.ringing.hook-executed-say' | 'call.ringing.hook-executed-transfer' | 'twilio-failed-to-connect-call' | 'twilio-reported-customer-misdialed' | 'vonage-rejected' | 'voicemail';
15217
14522
  /** This is the cost of the call in USD. This can also be found at `call.cost` on GET /call/:id. */
15218
14523
  cost?: number;
15219
14524
  /** These are the costs of individual components of the call in USD. This can also be found at `call.costs` on GET /call/:id. */
@@ -15375,7 +14680,7 @@ export interface ServerMessageStatusUpdate {
15375
14680
  /** This is the status of the call. */
15376
14681
  status: 'scheduled' | 'queued' | 'ringing' | 'in-progress' | 'forwarding' | 'ended';
15377
14682
  /** This is the reason the call ended. This is only sent if the status is "ended". */
15378
- endedReason?: 'call-start-error-neither-assistant-nor-server-set' | 'assistant-request-failed' | 'assistant-request-returned-error' | 'assistant-request-returned-unspeakable-error' | 'assistant-request-returned-invalid-assistant' | 'assistant-request-returned-no-assistant' | 'assistant-request-returned-forwarding-phone-number' | 'call.start.error-get-org' | 'call.start.error-get-subscription' | 'call.start.error-get-assistant' | 'call.start.error-get-phone-number' | 'call.start.error-get-customer' | 'call.start.error-get-resources-validation' | 'call.start.error-vapi-number-international' | 'call.start.error-vapi-number-outbound-daily-limit' | 'call.start.error-get-transport' | 'assistant-not-valid' | 'database-error' | 'assistant-not-found' | 'pipeline-error-openai-voice-failed' | 'pipeline-error-cartesia-voice-failed' | 'pipeline-error-deepgram-voice-failed' | 'pipeline-error-eleven-labs-voice-failed' | 'pipeline-error-playht-voice-failed' | 'pipeline-error-lmnt-voice-failed' | 'pipeline-error-azure-voice-failed' | 'pipeline-error-rime-ai-voice-failed' | 'pipeline-error-smallest-ai-voice-failed' | 'pipeline-error-neuphonic-voice-failed' | 'pipeline-error-hume-voice-failed' | 'pipeline-error-sesame-voice-failed' | 'pipeline-error-tavus-video-failed' | 'call.in-progress.error-vapifault-openai-voice-failed' | 'call.in-progress.error-vapifault-cartesia-voice-failed' | 'call.in-progress.error-vapifault-deepgram-voice-failed' | 'call.in-progress.error-vapifault-eleven-labs-voice-failed' | 'call.in-progress.error-vapifault-playht-voice-failed' | 'call.in-progress.error-vapifault-lmnt-voice-failed' | 'call.in-progress.error-vapifault-azure-voice-failed' | 'call.in-progress.error-vapifault-rime-ai-voice-failed' | 'call.in-progress.error-vapifault-smallest-ai-voice-failed' | 'call.in-progress.error-vapifault-neuphonic-voice-failed' | 'call.in-progress.error-vapifault-hume-voice-failed' | 'call.in-progress.error-vapifault-sesame-voice-failed' | 'call.in-progress.error-vapifault-tavus-video-failed' | 'pipeline-error-vapi-llm-failed' | 'pipeline-error-vapi-400-bad-request-validation-failed' | 'pipeline-error-vapi-401-unauthorized' | 'pipeline-error-vapi-403-model-access-denied' | 'pipeline-error-vapi-429-exceeded-quota' | 'pipeline-error-vapi-500-server-error' | 'pipeline-error-vapi-503-server-overloaded-error' | 'call.in-progress.error-vapifault-vapi-llm-failed' | 'call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-vapi-401-unauthorized' | 'call.in-progress.error-vapifault-vapi-403-model-access-denied' | 'call.in-progress.error-vapifault-vapi-429-exceeded-quota' | 'call.in-progress.error-providerfault-vapi-500-server-error' | 'call.in-progress.error-providerfault-vapi-503-server-overloaded-error' | 'pipeline-error-deepgram-transcriber-failed' | 'call.in-progress.error-vapifault-deepgram-transcriber-failed' | 'pipeline-error-gladia-transcriber-failed' | 'call.in-progress.error-vapifault-gladia-transcriber-failed' | 'pipeline-error-speechmatics-transcriber-failed' | 'call.in-progress.error-vapifault-speechmatics-transcriber-failed' | 'pipeline-error-assembly-ai-transcriber-failed' | 'pipeline-error-assembly-ai-returning-400-insufficent-funds' | 'pipeline-error-assembly-ai-returning-400-paid-only-feature' | 'pipeline-error-assembly-ai-returning-401-invalid-credentials' | 'pipeline-error-assembly-ai-returning-500-invalid-schema' | 'pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed' | 'call.in-progress.error-vapifault-assembly-ai-transcriber-failed' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature' | 'call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed' | 'pipeline-error-talkscriber-transcriber-failed' | 'call.in-progress.error-vapifault-talkscriber-transcriber-failed' | 'pipeline-error-azure-speech-transcriber-failed' | 'call.in-progress.error-vapifault-azure-speech-transcriber-failed' | 'call.in-progress.error-pipeline-no-available-llm-model' | 'worker-shutdown' | 'unknown-error' | 'vonage-disconnected' | 'vonage-failed-to-connect-call' | 'vonage-completed' | 'phone-call-provider-bypass-enabled-but-no-call-received' | 'call.in-progress.error-providerfault-transport-never-connected' | 'call.in-progress.error-vapifault-worker-not-available' | 'call.in-progress.error-vapifault-transport-never-connected' | 'call.in-progress.error-vapifault-transport-connected-but-call-not-active' | 'call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing' | 'call.in-progress.error-vapifault-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-groq-llm-failed' | 'call.in-progress.error-vapifault-google-llm-failed' | 'call.in-progress.error-vapifault-xai-llm-failed' | 'call.in-progress.error-vapifault-mistral-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-cerebras-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-llm-failed' | 'pipeline-error-openai-400-bad-request-validation-failed' | 'pipeline-error-openai-401-unauthorized' | 'pipeline-error-openai-401-incorrect-api-key' | 'pipeline-error-openai-401-account-not-in-organization' | 'pipeline-error-openai-403-model-access-denied' | 'pipeline-error-openai-429-exceeded-quota' | 'pipeline-error-openai-429-rate-limit-reached' | 'pipeline-error-openai-500-server-error' | 'pipeline-error-openai-503-server-overloaded-error' | 'pipeline-error-openai-llm-failed' | 'call.in-progress.error-vapifault-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openai-401-unauthorized' | 'call.in-progress.error-vapifault-openai-401-incorrect-api-key' | 'call.in-progress.error-vapifault-openai-401-account-not-in-organization' | 'call.in-progress.error-vapifault-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-openai-429-exceeded-quota' | 'call.in-progress.error-vapifault-openai-429-rate-limit-reached' | 'call.in-progress.error-providerfault-openai-500-server-error' | 'call.in-progress.error-providerfault-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-400-bad-request-validation-failed' | 'pipeline-error-azure-openai-401-unauthorized' | 'pipeline-error-azure-openai-403-model-access-denied' | 'pipeline-error-azure-openai-429-exceeded-quota' | 'pipeline-error-azure-openai-500-server-error' | 'pipeline-error-azure-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-azure-openai-401-unauthorized' | 'call.in-progress.error-vapifault-azure-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-azure-openai-429-exceeded-quota' | 'call.in-progress.error-providerfault-azure-openai-500-server-error' | 'call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error' | 'pipeline-error-google-400-bad-request-validation-failed' | 'pipeline-error-google-401-unauthorized' | 'pipeline-error-google-403-model-access-denied' | 'pipeline-error-google-429-exceeded-quota' | 'pipeline-error-google-500-server-error' | 'pipeline-error-google-503-server-overloaded-error' | 'pipeline-error-google-llm-failed' | 'call.in-progress.error-vapifault-google-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-google-401-unauthorized' | 'call.in-progress.error-vapifault-google-403-model-access-denied' | 'call.in-progress.error-vapifault-google-429-exceeded-quota' | 'call.in-progress.error-providerfault-google-500-server-error' | 'call.in-progress.error-providerfault-google-503-server-overloaded-error' | 'pipeline-error-xai-400-bad-request-validation-failed' | 'pipeline-error-xai-401-unauthorized' | 'pipeline-error-xai-403-model-access-denied' | 'pipeline-error-xai-429-exceeded-quota' | 'pipeline-error-xai-500-server-error' | 'pipeline-error-xai-503-server-overloaded-error' | 'pipeline-error-xai-llm-failed' | 'call.in-progress.error-vapifault-xai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-xai-401-unauthorized' | 'call.in-progress.error-vapifault-xai-403-model-access-denied' | 'call.in-progress.error-vapifault-xai-429-exceeded-quota' | 'call.in-progress.error-providerfault-xai-500-server-error' | 'call.in-progress.error-providerfault-xai-503-server-overloaded-error' | 'pipeline-error-mistral-400-bad-request-validation-failed' | 'pipeline-error-mistral-401-unauthorized' | 'pipeline-error-mistral-403-model-access-denied' | 'pipeline-error-mistral-429-exceeded-quota' | 'pipeline-error-mistral-500-server-error' | 'pipeline-error-mistral-503-server-overloaded-error' | 'pipeline-error-mistral-llm-failed' | 'call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-mistral-401-unauthorized' | 'call.in-progress.error-vapifault-mistral-403-model-access-denied' | 'call.in-progress.error-vapifault-mistral-429-exceeded-quota' | 'call.in-progress.error-providerfault-mistral-500-server-error' | 'call.in-progress.error-providerfault-mistral-503-server-overloaded-error' | 'pipeline-error-inflection-ai-400-bad-request-validation-failed' | 'pipeline-error-inflection-ai-401-unauthorized' | 'pipeline-error-inflection-ai-403-model-access-denied' | 'pipeline-error-inflection-ai-429-exceeded-quota' | 'pipeline-error-inflection-ai-500-server-error' | 'pipeline-error-inflection-ai-503-server-overloaded-error' | 'pipeline-error-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-inflection-ai-401-unauthorized' | 'call.in-progress.error-vapifault-inflection-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-inflection-ai-500-server-error' | 'call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error' | 'pipeline-error-deep-seek-400-bad-request-validation-failed' | 'pipeline-error-deep-seek-401-unauthorized' | 'pipeline-error-deep-seek-403-model-access-denied' | 'pipeline-error-deep-seek-429-exceeded-quota' | 'pipeline-error-deep-seek-500-server-error' | 'pipeline-error-deep-seek-503-server-overloaded-error' | 'pipeline-error-deep-seek-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deep-seek-401-unauthorized' | 'call.in-progress.error-vapifault-deep-seek-403-model-access-denied' | 'call.in-progress.error-vapifault-deep-seek-429-exceeded-quota' | 'call.in-progress.error-providerfault-deep-seek-500-server-error' | 'call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error' | 'pipeline-error-groq-400-bad-request-validation-failed' | 'pipeline-error-groq-401-unauthorized' | 'pipeline-error-groq-403-model-access-denied' | 'pipeline-error-groq-429-exceeded-quota' | 'pipeline-error-groq-500-server-error' | 'pipeline-error-groq-503-server-overloaded-error' | 'pipeline-error-groq-llm-failed' | 'call.in-progress.error-vapifault-groq-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-groq-401-unauthorized' | 'call.in-progress.error-vapifault-groq-403-model-access-denied' | 'call.in-progress.error-vapifault-groq-429-exceeded-quota' | 'call.in-progress.error-providerfault-groq-500-server-error' | 'call.in-progress.error-providerfault-groq-503-server-overloaded-error' | 'pipeline-error-cerebras-400-bad-request-validation-failed' | 'pipeline-error-cerebras-401-unauthorized' | 'pipeline-error-cerebras-403-model-access-denied' | 'pipeline-error-cerebras-429-exceeded-quota' | 'pipeline-error-cerebras-500-server-error' | 'pipeline-error-cerebras-503-server-overloaded-error' | 'pipeline-error-cerebras-llm-failed' | 'call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-cerebras-401-unauthorized' | 'call.in-progress.error-vapifault-cerebras-403-model-access-denied' | 'call.in-progress.error-vapifault-cerebras-429-exceeded-quota' | 'call.in-progress.error-providerfault-cerebras-500-server-error' | 'call.in-progress.error-providerfault-cerebras-503-server-overloaded-error' | 'pipeline-error-anthropic-400-bad-request-validation-failed' | 'pipeline-error-anthropic-401-unauthorized' | 'pipeline-error-anthropic-403-model-access-denied' | 'pipeline-error-anthropic-429-exceeded-quota' | 'pipeline-error-anthropic-500-server-error' | 'pipeline-error-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-500-server-error' | 'call.in-progress.error-providerfault-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-400-bad-request-validation-failed' | 'pipeline-error-anthropic-bedrock-401-unauthorized' | 'pipeline-error-anthropic-bedrock-403-model-access-denied' | 'pipeline-error-anthropic-bedrock-429-exceeded-quota' | 'pipeline-error-anthropic-bedrock-500-server-error' | 'pipeline-error-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-bedrock-500-server-error' | 'call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-400-bad-request-validation-failed' | 'pipeline-error-anthropic-vertex-401-unauthorized' | 'pipeline-error-anthropic-vertex-403-model-access-denied' | 'pipeline-error-anthropic-vertex-429-exceeded-quota' | 'pipeline-error-anthropic-vertex-500-server-error' | 'pipeline-error-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-vertex-500-server-error' | 'call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-together-ai-400-bad-request-validation-failed' | 'pipeline-error-together-ai-401-unauthorized' | 'pipeline-error-together-ai-403-model-access-denied' | 'pipeline-error-together-ai-429-exceeded-quota' | 'pipeline-error-together-ai-500-server-error' | 'pipeline-error-together-ai-503-server-overloaded-error' | 'pipeline-error-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-together-ai-401-unauthorized' | 'call.in-progress.error-vapifault-together-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-together-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-together-ai-500-server-error' | 'call.in-progress.error-providerfault-together-ai-503-server-overloaded-error' | 'pipeline-error-anyscale-400-bad-request-validation-failed' | 'pipeline-error-anyscale-401-unauthorized' | 'pipeline-error-anyscale-403-model-access-denied' | 'pipeline-error-anyscale-429-exceeded-quota' | 'pipeline-error-anyscale-500-server-error' | 'pipeline-error-anyscale-503-server-overloaded-error' | 'pipeline-error-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anyscale-401-unauthorized' | 'call.in-progress.error-vapifault-anyscale-403-model-access-denied' | 'call.in-progress.error-vapifault-anyscale-429-exceeded-quota' | 'call.in-progress.error-providerfault-anyscale-500-server-error' | 'call.in-progress.error-providerfault-anyscale-503-server-overloaded-error' | 'pipeline-error-openrouter-400-bad-request-validation-failed' | 'pipeline-error-openrouter-401-unauthorized' | 'pipeline-error-openrouter-403-model-access-denied' | 'pipeline-error-openrouter-429-exceeded-quota' | 'pipeline-error-openrouter-500-server-error' | 'pipeline-error-openrouter-503-server-overloaded-error' | 'pipeline-error-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openrouter-401-unauthorized' | 'call.in-progress.error-vapifault-openrouter-403-model-access-denied' | 'call.in-progress.error-vapifault-openrouter-429-exceeded-quota' | 'call.in-progress.error-providerfault-openrouter-500-server-error' | 'call.in-progress.error-providerfault-openrouter-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-400-bad-request-validation-failed' | 'pipeline-error-perplexity-ai-401-unauthorized' | 'pipeline-error-perplexity-ai-403-model-access-denied' | 'pipeline-error-perplexity-ai-429-exceeded-quota' | 'pipeline-error-perplexity-ai-500-server-error' | 'pipeline-error-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-perplexity-ai-401-unauthorized' | 'call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-perplexity-ai-500-server-error' | 'call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-deepinfra-400-bad-request-validation-failed' | 'pipeline-error-deepinfra-401-unauthorized' | 'pipeline-error-deepinfra-403-model-access-denied' | 'pipeline-error-deepinfra-429-exceeded-quota' | 'pipeline-error-deepinfra-500-server-error' | 'pipeline-error-deepinfra-503-server-overloaded-error' | 'pipeline-error-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deepinfra-401-unauthorized' | 'call.in-progress.error-vapifault-deepinfra-403-model-access-denied' | 'call.in-progress.error-vapifault-deepinfra-429-exceeded-quota' | 'call.in-progress.error-providerfault-deepinfra-500-server-error' | 'call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error' | 'pipeline-error-runpod-400-bad-request-validation-failed' | 'pipeline-error-runpod-401-unauthorized' | 'pipeline-error-runpod-403-model-access-denied' | 'pipeline-error-runpod-429-exceeded-quota' | 'pipeline-error-runpod-500-server-error' | 'pipeline-error-runpod-503-server-overloaded-error' | 'pipeline-error-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-runpod-401-unauthorized' | 'call.in-progress.error-vapifault-runpod-403-model-access-denied' | 'call.in-progress.error-vapifault-runpod-429-exceeded-quota' | 'call.in-progress.error-providerfault-runpod-500-server-error' | 'call.in-progress.error-providerfault-runpod-503-server-overloaded-error' | 'pipeline-error-custom-llm-400-bad-request-validation-failed' | 'pipeline-error-custom-llm-401-unauthorized' | 'pipeline-error-custom-llm-403-model-access-denied' | 'pipeline-error-custom-llm-429-exceeded-quota' | 'pipeline-error-custom-llm-500-server-error' | 'pipeline-error-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-custom-llm-401-unauthorized' | 'call.in-progress.error-vapifault-custom-llm-403-model-access-denied' | 'call.in-progress.error-vapifault-custom-llm-429-exceeded-quota' | 'call.in-progress.error-providerfault-custom-llm-500-server-error' | 'call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-voice-failed' | 'pipeline-error-cartesia-socket-hang-up' | 'pipeline-error-cartesia-requested-payment' | 'pipeline-error-cartesia-500-server-error' | 'pipeline-error-cartesia-503-server-error' | 'pipeline-error-cartesia-522-server-error' | 'call.in-progress.error-vapifault-cartesia-socket-hang-up' | 'call.in-progress.error-vapifault-cartesia-requested-payment' | 'call.in-progress.error-providerfault-cartesia-500-server-error' | 'call.in-progress.error-providerfault-cartesia-503-server-error' | 'call.in-progress.error-providerfault-cartesia-522-server-error' | 'pipeline-error-eleven-labs-voice-not-found' | 'pipeline-error-eleven-labs-quota-exceeded' | 'pipeline-error-eleven-labs-unauthorized-access' | 'pipeline-error-eleven-labs-unauthorized-to-access-model' | 'pipeline-error-eleven-labs-professional-voices-only-for-creator-plus' | 'pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'pipeline-error-eleven-labs-system-busy-and-requested-upgrade' | 'pipeline-error-eleven-labs-voice-not-fine-tuned' | 'pipeline-error-eleven-labs-invalid-api-key' | 'pipeline-error-eleven-labs-invalid-voice-samples' | 'pipeline-error-eleven-labs-voice-disabled-by-owner' | 'pipeline-error-eleven-labs-blocked-account-in-probation' | 'pipeline-error-eleven-labs-blocked-content-against-their-policy' | 'pipeline-error-eleven-labs-missing-samples-for-voice-clone' | 'pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'pipeline-error-eleven-labs-voice-not-allowed-for-free-users' | 'pipeline-error-eleven-labs-max-character-limit-exceeded' | 'pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'pipeline-error-eleven-labs-500-server-error' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-found' | 'call.in-progress.error-vapifault-eleven-labs-quota-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-access' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model' | 'call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus' | 'call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned' | 'call.in-progress.error-vapifault-eleven-labs-invalid-api-key' | 'call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples' | 'call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner' | 'call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation' | 'call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy' | 'call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users' | 'call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'call.in-progress.error-providerfault-eleven-labs-500-server-error' | 'pipeline-error-playht-request-timed-out' | 'pipeline-error-playht-invalid-voice' | 'pipeline-error-playht-unexpected-error' | 'pipeline-error-playht-out-of-credits' | 'pipeline-error-playht-invalid-emotion' | 'pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri' | 'pipeline-error-playht-401-unauthorized' | 'pipeline-error-playht-403-forbidden-out-of-characters' | 'pipeline-error-playht-403-forbidden-api-access-not-available' | 'pipeline-error-playht-429-exceeded-quota' | 'pipeline-error-playht-502-gateway-error' | 'pipeline-error-playht-504-gateway-error' | 'call.in-progress.error-vapifault-playht-request-timed-out' | 'call.in-progress.error-vapifault-playht-invalid-voice' | 'call.in-progress.error-vapifault-playht-unexpected-error' | 'call.in-progress.error-vapifault-playht-out-of-credits' | 'call.in-progress.error-vapifault-playht-invalid-emotion' | 'call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri' | 'call.in-progress.error-vapifault-playht-401-unauthorized' | 'call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters' | 'call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available' | 'call.in-progress.error-vapifault-playht-429-exceeded-quota' | 'call.in-progress.error-providerfault-playht-502-gateway-error' | 'call.in-progress.error-providerfault-playht-504-gateway-error' | 'pipeline-error-custom-transcriber-failed' | 'call.in-progress.error-vapifault-custom-transcriber-failed' | 'pipeline-error-eleven-labs-transcriber-failed' | 'call.in-progress.error-vapifault-eleven-labs-transcriber-failed' | 'pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination' | 'pipeline-error-deepgram-returning-401-invalid-credentials' | 'pipeline-error-deepgram-returning-403-model-access-denied' | 'pipeline-error-deepgram-returning-404-not-found' | 'pipeline-error-deepgram-returning-500-invalid-json' | 'pipeline-error-deepgram-returning-502-network-error' | 'pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach' | 'call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination' | 'call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-deepgram-returning-404-not-found' | 'call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied' | 'call.in-progress.error-providerfault-deepgram-returning-500-invalid-json' | 'call.in-progress.error-providerfault-deepgram-returning-502-network-error' | 'call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach' | 'pipeline-error-google-transcriber-failed' | 'call.in-progress.error-vapifault-google-transcriber-failed' | 'pipeline-error-openai-transcriber-failed' | 'call.in-progress.error-vapifault-openai-transcriber-failed' | 'assistant-ended-call' | 'assistant-said-end-call-phrase' | 'assistant-ended-call-with-hangup-task' | 'assistant-ended-call-after-message-spoken' | 'assistant-forwarded-call' | 'assistant-join-timed-out' | 'call.in-progress.error-assistant-did-not-receive-customer-audio' | 'customer-busy' | 'customer-ended-call' | 'customer-did-not-answer' | 'customer-did-not-give-microphone-permission' | 'exceeded-max-duration' | 'manually-canceled' | 'phone-call-provider-closed-websocket' | 'call.forwarding.operator-busy' | 'silence-timed-out' | 'call.in-progress.error-sip-telephony-provider-failed-to-connect-call' | 'call.ringing.hook-executed-say' | 'call.ringing.hook-executed-transfer' | 'twilio-failed-to-connect-call' | 'twilio-reported-customer-misdialed' | 'vonage-rejected' | 'voicemail';
14683
+ endedReason?: 'call-start-error-neither-assistant-nor-server-set' | 'assistant-request-failed' | 'assistant-request-returned-error' | 'assistant-request-returned-unspeakable-error' | 'assistant-request-returned-invalid-assistant' | 'assistant-request-returned-no-assistant' | 'assistant-request-returned-forwarding-phone-number' | 'call.start.error-get-org' | 'call.start.error-get-subscription' | 'call.start.error-get-assistant' | 'call.start.error-get-phone-number' | 'call.start.error-get-customer' | 'call.start.error-get-resources-validation' | 'call.start.error-vapi-number-international' | 'call.start.error-vapi-number-outbound-daily-limit' | 'call.start.error-get-transport' | 'assistant-not-valid' | 'database-error' | 'assistant-not-found' | 'pipeline-error-openai-voice-failed' | 'pipeline-error-cartesia-voice-failed' | 'pipeline-error-deepgram-voice-failed' | 'pipeline-error-eleven-labs-voice-failed' | 'pipeline-error-playht-voice-failed' | 'pipeline-error-lmnt-voice-failed' | 'pipeline-error-azure-voice-failed' | 'pipeline-error-rime-ai-voice-failed' | 'pipeline-error-smallest-ai-voice-failed' | 'pipeline-error-neuphonic-voice-failed' | 'pipeline-error-hume-voice-failed' | 'pipeline-error-sesame-voice-failed' | 'pipeline-error-tavus-video-failed' | 'call.in-progress.error-vapifault-openai-voice-failed' | 'call.in-progress.error-vapifault-cartesia-voice-failed' | 'call.in-progress.error-vapifault-deepgram-voice-failed' | 'call.in-progress.error-vapifault-eleven-labs-voice-failed' | 'call.in-progress.error-vapifault-playht-voice-failed' | 'call.in-progress.error-vapifault-lmnt-voice-failed' | 'call.in-progress.error-vapifault-azure-voice-failed' | 'call.in-progress.error-vapifault-rime-ai-voice-failed' | 'call.in-progress.error-vapifault-smallest-ai-voice-failed' | 'call.in-progress.error-vapifault-neuphonic-voice-failed' | 'call.in-progress.error-vapifault-hume-voice-failed' | 'call.in-progress.error-vapifault-sesame-voice-failed' | 'call.in-progress.error-vapifault-tavus-video-failed' | 'pipeline-error-vapi-llm-failed' | 'pipeline-error-vapi-400-bad-request-validation-failed' | 'pipeline-error-vapi-401-unauthorized' | 'pipeline-error-vapi-403-model-access-denied' | 'pipeline-error-vapi-429-exceeded-quota' | 'pipeline-error-vapi-500-server-error' | 'pipeline-error-vapi-503-server-overloaded-error' | 'call.in-progress.error-vapifault-vapi-llm-failed' | 'call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-vapi-401-unauthorized' | 'call.in-progress.error-vapifault-vapi-403-model-access-denied' | 'call.in-progress.error-vapifault-vapi-429-exceeded-quota' | 'call.in-progress.error-providerfault-vapi-500-server-error' | 'call.in-progress.error-providerfault-vapi-503-server-overloaded-error' | 'pipeline-error-deepgram-transcriber-failed' | 'call.in-progress.error-vapifault-deepgram-transcriber-failed' | 'pipeline-error-gladia-transcriber-failed' | 'call.in-progress.error-vapifault-gladia-transcriber-failed' | 'pipeline-error-speechmatics-transcriber-failed' | 'call.in-progress.error-vapifault-speechmatics-transcriber-failed' | 'pipeline-error-assembly-ai-transcriber-failed' | 'pipeline-error-assembly-ai-returning-400-insufficent-funds' | 'pipeline-error-assembly-ai-returning-400-paid-only-feature' | 'pipeline-error-assembly-ai-returning-401-invalid-credentials' | 'pipeline-error-assembly-ai-returning-500-invalid-schema' | 'pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed' | 'call.in-progress.error-vapifault-assembly-ai-transcriber-failed' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature' | 'call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed' | 'pipeline-error-talkscriber-transcriber-failed' | 'call.in-progress.error-vapifault-talkscriber-transcriber-failed' | 'pipeline-error-azure-speech-transcriber-failed' | 'call.in-progress.error-vapifault-azure-speech-transcriber-failed' | 'call.in-progress.error-pipeline-no-available-llm-model' | 'worker-shutdown' | 'unknown-error' | 'vonage-disconnected' | 'vonage-failed-to-connect-call' | 'vonage-completed' | 'phone-call-provider-bypass-enabled-but-no-call-received' | 'call.in-progress.error-providerfault-transport-never-connected' | 'call.in-progress.error-vapifault-worker-not-available' | 'call.in-progress.error-vapifault-transport-never-connected' | 'call.in-progress.error-vapifault-transport-connected-but-call-not-active' | 'call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing' | 'call.in-progress.error-vapifault-worker-died' | 'call.in-progress.error-vapifault-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-groq-llm-failed' | 'call.in-progress.error-vapifault-google-llm-failed' | 'call.in-progress.error-vapifault-xai-llm-failed' | 'call.in-progress.error-vapifault-mistral-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-cerebras-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-llm-failed' | 'pipeline-error-openai-400-bad-request-validation-failed' | 'pipeline-error-openai-401-unauthorized' | 'pipeline-error-openai-401-incorrect-api-key' | 'pipeline-error-openai-401-account-not-in-organization' | 'pipeline-error-openai-403-model-access-denied' | 'pipeline-error-openai-429-exceeded-quota' | 'pipeline-error-openai-429-rate-limit-reached' | 'pipeline-error-openai-500-server-error' | 'pipeline-error-openai-503-server-overloaded-error' | 'pipeline-error-openai-llm-failed' | 'call.in-progress.error-vapifault-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openai-401-unauthorized' | 'call.in-progress.error-vapifault-openai-401-incorrect-api-key' | 'call.in-progress.error-vapifault-openai-401-account-not-in-organization' | 'call.in-progress.error-vapifault-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-openai-429-exceeded-quota' | 'call.in-progress.error-vapifault-openai-429-rate-limit-reached' | 'call.in-progress.error-providerfault-openai-500-server-error' | 'call.in-progress.error-providerfault-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-400-bad-request-validation-failed' | 'pipeline-error-azure-openai-401-unauthorized' | 'pipeline-error-azure-openai-403-model-access-denied' | 'pipeline-error-azure-openai-429-exceeded-quota' | 'pipeline-error-azure-openai-500-server-error' | 'pipeline-error-azure-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-azure-openai-401-unauthorized' | 'call.in-progress.error-vapifault-azure-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-azure-openai-429-exceeded-quota' | 'call.in-progress.error-providerfault-azure-openai-500-server-error' | 'call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error' | 'pipeline-error-google-400-bad-request-validation-failed' | 'pipeline-error-google-401-unauthorized' | 'pipeline-error-google-403-model-access-denied' | 'pipeline-error-google-429-exceeded-quota' | 'pipeline-error-google-500-server-error' | 'pipeline-error-google-503-server-overloaded-error' | 'pipeline-error-google-llm-failed' | 'call.in-progress.error-vapifault-google-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-google-401-unauthorized' | 'call.in-progress.error-vapifault-google-403-model-access-denied' | 'call.in-progress.error-vapifault-google-429-exceeded-quota' | 'call.in-progress.error-providerfault-google-500-server-error' | 'call.in-progress.error-providerfault-google-503-server-overloaded-error' | 'pipeline-error-xai-400-bad-request-validation-failed' | 'pipeline-error-xai-401-unauthorized' | 'pipeline-error-xai-403-model-access-denied' | 'pipeline-error-xai-429-exceeded-quota' | 'pipeline-error-xai-500-server-error' | 'pipeline-error-xai-503-server-overloaded-error' | 'pipeline-error-xai-llm-failed' | 'call.in-progress.error-vapifault-xai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-xai-401-unauthorized' | 'call.in-progress.error-vapifault-xai-403-model-access-denied' | 'call.in-progress.error-vapifault-xai-429-exceeded-quota' | 'call.in-progress.error-providerfault-xai-500-server-error' | 'call.in-progress.error-providerfault-xai-503-server-overloaded-error' | 'pipeline-error-mistral-400-bad-request-validation-failed' | 'pipeline-error-mistral-401-unauthorized' | 'pipeline-error-mistral-403-model-access-denied' | 'pipeline-error-mistral-429-exceeded-quota' | 'pipeline-error-mistral-500-server-error' | 'pipeline-error-mistral-503-server-overloaded-error' | 'pipeline-error-mistral-llm-failed' | 'call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-mistral-401-unauthorized' | 'call.in-progress.error-vapifault-mistral-403-model-access-denied' | 'call.in-progress.error-vapifault-mistral-429-exceeded-quota' | 'call.in-progress.error-providerfault-mistral-500-server-error' | 'call.in-progress.error-providerfault-mistral-503-server-overloaded-error' | 'pipeline-error-inflection-ai-400-bad-request-validation-failed' | 'pipeline-error-inflection-ai-401-unauthorized' | 'pipeline-error-inflection-ai-403-model-access-denied' | 'pipeline-error-inflection-ai-429-exceeded-quota' | 'pipeline-error-inflection-ai-500-server-error' | 'pipeline-error-inflection-ai-503-server-overloaded-error' | 'pipeline-error-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-inflection-ai-401-unauthorized' | 'call.in-progress.error-vapifault-inflection-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-inflection-ai-500-server-error' | 'call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error' | 'pipeline-error-deep-seek-400-bad-request-validation-failed' | 'pipeline-error-deep-seek-401-unauthorized' | 'pipeline-error-deep-seek-403-model-access-denied' | 'pipeline-error-deep-seek-429-exceeded-quota' | 'pipeline-error-deep-seek-500-server-error' | 'pipeline-error-deep-seek-503-server-overloaded-error' | 'pipeline-error-deep-seek-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deep-seek-401-unauthorized' | 'call.in-progress.error-vapifault-deep-seek-403-model-access-denied' | 'call.in-progress.error-vapifault-deep-seek-429-exceeded-quota' | 'call.in-progress.error-providerfault-deep-seek-500-server-error' | 'call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error' | 'pipeline-error-groq-400-bad-request-validation-failed' | 'pipeline-error-groq-401-unauthorized' | 'pipeline-error-groq-403-model-access-denied' | 'pipeline-error-groq-429-exceeded-quota' | 'pipeline-error-groq-500-server-error' | 'pipeline-error-groq-503-server-overloaded-error' | 'pipeline-error-groq-llm-failed' | 'call.in-progress.error-vapifault-groq-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-groq-401-unauthorized' | 'call.in-progress.error-vapifault-groq-403-model-access-denied' | 'call.in-progress.error-vapifault-groq-429-exceeded-quota' | 'call.in-progress.error-providerfault-groq-500-server-error' | 'call.in-progress.error-providerfault-groq-503-server-overloaded-error' | 'pipeline-error-cerebras-400-bad-request-validation-failed' | 'pipeline-error-cerebras-401-unauthorized' | 'pipeline-error-cerebras-403-model-access-denied' | 'pipeline-error-cerebras-429-exceeded-quota' | 'pipeline-error-cerebras-500-server-error' | 'pipeline-error-cerebras-503-server-overloaded-error' | 'pipeline-error-cerebras-llm-failed' | 'call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-cerebras-401-unauthorized' | 'call.in-progress.error-vapifault-cerebras-403-model-access-denied' | 'call.in-progress.error-vapifault-cerebras-429-exceeded-quota' | 'call.in-progress.error-providerfault-cerebras-500-server-error' | 'call.in-progress.error-providerfault-cerebras-503-server-overloaded-error' | 'pipeline-error-anthropic-400-bad-request-validation-failed' | 'pipeline-error-anthropic-401-unauthorized' | 'pipeline-error-anthropic-403-model-access-denied' | 'pipeline-error-anthropic-429-exceeded-quota' | 'pipeline-error-anthropic-500-server-error' | 'pipeline-error-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-500-server-error' | 'call.in-progress.error-providerfault-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-400-bad-request-validation-failed' | 'pipeline-error-anthropic-bedrock-401-unauthorized' | 'pipeline-error-anthropic-bedrock-403-model-access-denied' | 'pipeline-error-anthropic-bedrock-429-exceeded-quota' | 'pipeline-error-anthropic-bedrock-500-server-error' | 'pipeline-error-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-bedrock-500-server-error' | 'call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-400-bad-request-validation-failed' | 'pipeline-error-anthropic-vertex-401-unauthorized' | 'pipeline-error-anthropic-vertex-403-model-access-denied' | 'pipeline-error-anthropic-vertex-429-exceeded-quota' | 'pipeline-error-anthropic-vertex-500-server-error' | 'pipeline-error-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-vertex-500-server-error' | 'call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-together-ai-400-bad-request-validation-failed' | 'pipeline-error-together-ai-401-unauthorized' | 'pipeline-error-together-ai-403-model-access-denied' | 'pipeline-error-together-ai-429-exceeded-quota' | 'pipeline-error-together-ai-500-server-error' | 'pipeline-error-together-ai-503-server-overloaded-error' | 'pipeline-error-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-together-ai-401-unauthorized' | 'call.in-progress.error-vapifault-together-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-together-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-together-ai-500-server-error' | 'call.in-progress.error-providerfault-together-ai-503-server-overloaded-error' | 'pipeline-error-anyscale-400-bad-request-validation-failed' | 'pipeline-error-anyscale-401-unauthorized' | 'pipeline-error-anyscale-403-model-access-denied' | 'pipeline-error-anyscale-429-exceeded-quota' | 'pipeline-error-anyscale-500-server-error' | 'pipeline-error-anyscale-503-server-overloaded-error' | 'pipeline-error-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anyscale-401-unauthorized' | 'call.in-progress.error-vapifault-anyscale-403-model-access-denied' | 'call.in-progress.error-vapifault-anyscale-429-exceeded-quota' | 'call.in-progress.error-providerfault-anyscale-500-server-error' | 'call.in-progress.error-providerfault-anyscale-503-server-overloaded-error' | 'pipeline-error-openrouter-400-bad-request-validation-failed' | 'pipeline-error-openrouter-401-unauthorized' | 'pipeline-error-openrouter-403-model-access-denied' | 'pipeline-error-openrouter-429-exceeded-quota' | 'pipeline-error-openrouter-500-server-error' | 'pipeline-error-openrouter-503-server-overloaded-error' | 'pipeline-error-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openrouter-401-unauthorized' | 'call.in-progress.error-vapifault-openrouter-403-model-access-denied' | 'call.in-progress.error-vapifault-openrouter-429-exceeded-quota' | 'call.in-progress.error-providerfault-openrouter-500-server-error' | 'call.in-progress.error-providerfault-openrouter-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-400-bad-request-validation-failed' | 'pipeline-error-perplexity-ai-401-unauthorized' | 'pipeline-error-perplexity-ai-403-model-access-denied' | 'pipeline-error-perplexity-ai-429-exceeded-quota' | 'pipeline-error-perplexity-ai-500-server-error' | 'pipeline-error-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-perplexity-ai-401-unauthorized' | 'call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-perplexity-ai-500-server-error' | 'call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-deepinfra-400-bad-request-validation-failed' | 'pipeline-error-deepinfra-401-unauthorized' | 'pipeline-error-deepinfra-403-model-access-denied' | 'pipeline-error-deepinfra-429-exceeded-quota' | 'pipeline-error-deepinfra-500-server-error' | 'pipeline-error-deepinfra-503-server-overloaded-error' | 'pipeline-error-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deepinfra-401-unauthorized' | 'call.in-progress.error-vapifault-deepinfra-403-model-access-denied' | 'call.in-progress.error-vapifault-deepinfra-429-exceeded-quota' | 'call.in-progress.error-providerfault-deepinfra-500-server-error' | 'call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error' | 'pipeline-error-runpod-400-bad-request-validation-failed' | 'pipeline-error-runpod-401-unauthorized' | 'pipeline-error-runpod-403-model-access-denied' | 'pipeline-error-runpod-429-exceeded-quota' | 'pipeline-error-runpod-500-server-error' | 'pipeline-error-runpod-503-server-overloaded-error' | 'pipeline-error-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-runpod-401-unauthorized' | 'call.in-progress.error-vapifault-runpod-403-model-access-denied' | 'call.in-progress.error-vapifault-runpod-429-exceeded-quota' | 'call.in-progress.error-providerfault-runpod-500-server-error' | 'call.in-progress.error-providerfault-runpod-503-server-overloaded-error' | 'pipeline-error-custom-llm-400-bad-request-validation-failed' | 'pipeline-error-custom-llm-401-unauthorized' | 'pipeline-error-custom-llm-403-model-access-denied' | 'pipeline-error-custom-llm-429-exceeded-quota' | 'pipeline-error-custom-llm-500-server-error' | 'pipeline-error-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-custom-llm-401-unauthorized' | 'call.in-progress.error-vapifault-custom-llm-403-model-access-denied' | 'call.in-progress.error-vapifault-custom-llm-429-exceeded-quota' | 'call.in-progress.error-providerfault-custom-llm-500-server-error' | 'call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-voice-failed' | 'pipeline-error-cartesia-socket-hang-up' | 'pipeline-error-cartesia-requested-payment' | 'pipeline-error-cartesia-500-server-error' | 'pipeline-error-cartesia-503-server-error' | 'pipeline-error-cartesia-522-server-error' | 'call.in-progress.error-vapifault-cartesia-socket-hang-up' | 'call.in-progress.error-vapifault-cartesia-requested-payment' | 'call.in-progress.error-providerfault-cartesia-500-server-error' | 'call.in-progress.error-providerfault-cartesia-503-server-error' | 'call.in-progress.error-providerfault-cartesia-522-server-error' | 'pipeline-error-eleven-labs-voice-not-found' | 'pipeline-error-eleven-labs-quota-exceeded' | 'pipeline-error-eleven-labs-unauthorized-access' | 'pipeline-error-eleven-labs-unauthorized-to-access-model' | 'pipeline-error-eleven-labs-professional-voices-only-for-creator-plus' | 'pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'pipeline-error-eleven-labs-system-busy-and-requested-upgrade' | 'pipeline-error-eleven-labs-voice-not-fine-tuned' | 'pipeline-error-eleven-labs-invalid-api-key' | 'pipeline-error-eleven-labs-invalid-voice-samples' | 'pipeline-error-eleven-labs-voice-disabled-by-owner' | 'pipeline-error-eleven-labs-blocked-account-in-probation' | 'pipeline-error-eleven-labs-blocked-content-against-their-policy' | 'pipeline-error-eleven-labs-missing-samples-for-voice-clone' | 'pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'pipeline-error-eleven-labs-voice-not-allowed-for-free-users' | 'pipeline-error-eleven-labs-max-character-limit-exceeded' | 'pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'pipeline-error-eleven-labs-500-server-error' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-found' | 'call.in-progress.error-vapifault-eleven-labs-quota-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-access' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model' | 'call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus' | 'call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned' | 'call.in-progress.error-vapifault-eleven-labs-invalid-api-key' | 'call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples' | 'call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner' | 'call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation' | 'call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy' | 'call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users' | 'call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'call.in-progress.error-providerfault-eleven-labs-500-server-error' | 'pipeline-error-playht-request-timed-out' | 'pipeline-error-playht-invalid-voice' | 'pipeline-error-playht-unexpected-error' | 'pipeline-error-playht-out-of-credits' | 'pipeline-error-playht-invalid-emotion' | 'pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri' | 'pipeline-error-playht-401-unauthorized' | 'pipeline-error-playht-403-forbidden-out-of-characters' | 'pipeline-error-playht-403-forbidden-api-access-not-available' | 'pipeline-error-playht-429-exceeded-quota' | 'pipeline-error-playht-502-gateway-error' | 'pipeline-error-playht-504-gateway-error' | 'call.in-progress.error-vapifault-playht-request-timed-out' | 'call.in-progress.error-vapifault-playht-invalid-voice' | 'call.in-progress.error-vapifault-playht-unexpected-error' | 'call.in-progress.error-vapifault-playht-out-of-credits' | 'call.in-progress.error-vapifault-playht-invalid-emotion' | 'call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri' | 'call.in-progress.error-vapifault-playht-401-unauthorized' | 'call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters' | 'call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available' | 'call.in-progress.error-vapifault-playht-429-exceeded-quota' | 'call.in-progress.error-providerfault-playht-502-gateway-error' | 'call.in-progress.error-providerfault-playht-504-gateway-error' | 'pipeline-error-custom-transcriber-failed' | 'call.in-progress.error-vapifault-custom-transcriber-failed' | 'pipeline-error-eleven-labs-transcriber-failed' | 'call.in-progress.error-vapifault-eleven-labs-transcriber-failed' | 'pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination' | 'pipeline-error-deepgram-returning-401-invalid-credentials' | 'pipeline-error-deepgram-returning-403-model-access-denied' | 'pipeline-error-deepgram-returning-404-not-found' | 'pipeline-error-deepgram-returning-500-invalid-json' | 'pipeline-error-deepgram-returning-502-network-error' | 'pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach' | 'call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination' | 'call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-deepgram-returning-404-not-found' | 'call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied' | 'call.in-progress.error-providerfault-deepgram-returning-500-invalid-json' | 'call.in-progress.error-providerfault-deepgram-returning-502-network-error' | 'call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach' | 'pipeline-error-google-transcriber-failed' | 'call.in-progress.error-vapifault-google-transcriber-failed' | 'pipeline-error-openai-transcriber-failed' | 'call.in-progress.error-vapifault-openai-transcriber-failed' | 'assistant-ended-call' | 'assistant-said-end-call-phrase' | 'assistant-ended-call-with-hangup-task' | 'assistant-ended-call-after-message-spoken' | 'assistant-forwarded-call' | 'assistant-join-timed-out' | 'call.in-progress.error-assistant-did-not-receive-customer-audio' | 'customer-busy' | 'customer-ended-call' | 'customer-did-not-answer' | 'customer-did-not-give-microphone-permission' | 'exceeded-max-duration' | 'manually-canceled' | 'phone-call-provider-closed-websocket' | 'call.forwarding.operator-busy' | 'silence-timed-out' | 'call.in-progress.error-sip-inbound-call-failed-to-connect' | 'call.in-progress.error-providerfault-outbound-sip-403-forbidden' | 'call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required' | 'call.in-progress.error-providerfault-outbound-sip-503-service-unavailable' | 'call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable' | 'call.in-progress.error-sip-outbound-call-failed-to-connect' | 'call.ringing.hook-executed-say' | 'call.ringing.hook-executed-transfer' | 'twilio-failed-to-connect-call' | 'twilio-reported-customer-misdialed' | 'vonage-rejected' | 'voicemail';
15379
14684
  /** These are the conversation messages of the call. This is only sent if the status is "forwarding". */
15380
14685
  messages?: (UserMessage | SystemMessage | BotMessage | ToolCallMessage | ToolCallResultMessage)[];
15381
14686
  /** These are the conversation messages of the call. This is only sent if the status is "forwarding". */
@@ -15677,8 +14982,6 @@ export interface ServerMessageResponseAssistantRequest {
15677
14982
  */
15678
14983
  squad?: CreateSquadDTO;
15679
14984
  /**
15680
- * [BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.
15681
- *
15682
14985
  * This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.
15683
14986
  *
15684
14987
  * To start a call with:
@@ -15688,8 +14991,6 @@ export interface ServerMessageResponseAssistantRequest {
15688
14991
  */
15689
14992
  workflowId?: string;
15690
14993
  /**
15691
- * [BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.
15692
- *
15693
14994
  * This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.
15694
14995
  *
15695
14996
  * To start a call with:
@@ -15698,6 +14999,8 @@ export interface ServerMessageResponseAssistantRequest {
15698
14999
  * - Workflow, use `workflow` or `workflowId`
15699
15000
  */
15700
15001
  workflow?: CreateWorkflowDTO;
15002
+ /** These are the overrides for the `workflow` or `workflowId`'s settings and template variables. */
15003
+ workflowOverrides?: WorkflowOverrides;
15701
15004
  /**
15702
15005
  * This is the error if the call shouldn't be accepted. This is spoken to the customer.
15703
15006
  *
@@ -16024,25 +15327,37 @@ export interface KnowledgeBaseCost {
16024
15327
  cost: number;
16025
15328
  }
16026
15329
  export interface FunctionToolWithToolCall {
15330
+ /**
15331
+ * These are the messages that will be spoken to the user as the tool is running.
15332
+ *
15333
+ * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.
15334
+ */
15335
+ messages?: (ToolMessageStart | ToolMessageComplete | ToolMessageFailed | ToolMessageDelayed)[];
15336
+ /** The type of tool. "function" for Function tool. */
15337
+ type: 'function';
16027
15338
  /**
16028
15339
  * This determines if the tool is async.
16029
15340
  *
16030
- * 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.
15341
+ * 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.
16031
15342
  *
16032
- * 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.
15343
+ * 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.
16033
15344
  *
16034
- * Defaults to synchronous (`false`).
15345
+ * Defaults to synchronous (`false`).
16035
15346
  * @example false
16036
15347
  */
16037
15348
  async?: boolean;
16038
15349
  /**
16039
- * These are the messages that will be spoken to the user as the tool is running.
16040
15350
  *
16041
- * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.
15351
+ * This is the server where a `tool-calls` webhook will be sent.
15352
+ *
15353
+ * Notes:
15354
+ * - Webhook is sent to this server when a tool call is made.
15355
+ * - Webhook contains the call, assistant, and phone number objects.
15356
+ * - Webhook contains the variables set on the assistant.
15357
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
15358
+ * - Webhook expects a response with tool call result.
16042
15359
  */
16043
- messages?: (ToolMessageStart | ToolMessageComplete | ToolMessageFailed | ToolMessageDelayed)[];
16044
- /** The type of tool. "function" for Function tool. */
16045
- type: 'function';
15360
+ server?: Server;
16046
15361
  toolCall: ToolCall;
16047
15362
  /**
16048
15363
  * This is the function definition of the tool.
@@ -16052,27 +15367,8 @@ export interface FunctionToolWithToolCall {
16052
15367
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
16053
15368
  */
16054
15369
  function?: OpenAIFunction;
16055
- /**
16056
- * This is the server that will be hit when this tool is requested by the model.
16057
- *
16058
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
16059
- *
16060
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
16061
- */
16062
- server?: Server;
16063
15370
  }
16064
15371
  export interface GhlToolWithToolCall {
16065
- /**
16066
- * This determines if the tool is async.
16067
- *
16068
- * 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.
16069
- *
16070
- * 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.
16071
- *
16072
- * Defaults to synchronous (`false`).
16073
- * @example false
16074
- */
16075
- async?: boolean;
16076
15372
  /**
16077
15373
  * These are the messages that will be spoken to the user as the tool is running.
16078
15374
  *
@@ -16091,27 +15387,8 @@ export interface GhlToolWithToolCall {
16091
15387
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
16092
15388
  */
16093
15389
  function?: OpenAIFunction;
16094
- /**
16095
- * This is the server that will be hit when this tool is requested by the model.
16096
- *
16097
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
16098
- *
16099
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
16100
- */
16101
- server?: Server;
16102
15390
  }
16103
15391
  export interface MakeToolWithToolCall {
16104
- /**
16105
- * This determines if the tool is async.
16106
- *
16107
- * 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.
16108
- *
16109
- * 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.
16110
- *
16111
- * Defaults to synchronous (`false`).
16112
- * @example false
16113
- */
16114
- async?: boolean;
16115
15392
  /**
16116
15393
  * These are the messages that will be spoken to the user as the tool is running.
16117
15394
  *
@@ -16130,27 +15407,8 @@ export interface MakeToolWithToolCall {
16130
15407
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
16131
15408
  */
16132
15409
  function?: OpenAIFunction;
16133
- /**
16134
- * This is the server that will be hit when this tool is requested by the model.
16135
- *
16136
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
16137
- *
16138
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
16139
- */
16140
- server?: Server;
16141
15410
  }
16142
15411
  export interface BashToolWithToolCall {
16143
- /**
16144
- * This determines if the tool is async.
16145
- *
16146
- * 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.
16147
- *
16148
- * 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.
16149
- *
16150
- * Defaults to synchronous (`false`).
16151
- * @example false
16152
- */
16153
- async?: boolean;
16154
15412
  /**
16155
15413
  * These are the messages that will be spoken to the user as the tool is running.
16156
15414
  *
@@ -16161,6 +15419,18 @@ export interface BashToolWithToolCall {
16161
15419
  type: 'bash';
16162
15420
  /** The sub type of tool. */
16163
15421
  subType: 'bash_20241022';
15422
+ /**
15423
+ *
15424
+ * This is the server where a `tool-calls` webhook will be sent.
15425
+ *
15426
+ * Notes:
15427
+ * - Webhook is sent to this server when a tool call is made.
15428
+ * - Webhook contains the call, assistant, and phone number objects.
15429
+ * - Webhook contains the variables set on the assistant.
15430
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
15431
+ * - Webhook expects a response with tool call result.
15432
+ */
15433
+ server?: Server;
16164
15434
  toolCall: ToolCall;
16165
15435
  /**
16166
15436
  * The name of the tool, fixed to 'bash'
@@ -16175,27 +15445,8 @@ export interface BashToolWithToolCall {
16175
15445
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
16176
15446
  */
16177
15447
  function?: OpenAIFunction;
16178
- /**
16179
- * This is the server that will be hit when this tool is requested by the model.
16180
- *
16181
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
16182
- *
16183
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
16184
- */
16185
- server?: Server;
16186
15448
  }
16187
15449
  export interface ComputerToolWithToolCall {
16188
- /**
16189
- * This determines if the tool is async.
16190
- *
16191
- * 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.
16192
- *
16193
- * 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.
16194
- *
16195
- * Defaults to synchronous (`false`).
16196
- * @example false
16197
- */
16198
- async?: boolean;
16199
15450
  /**
16200
15451
  * These are the messages that will be spoken to the user as the tool is running.
16201
15452
  *
@@ -16206,6 +15457,18 @@ export interface ComputerToolWithToolCall {
16206
15457
  type: 'computer';
16207
15458
  /** The sub type of tool. */
16208
15459
  subType: 'computer_20241022';
15460
+ /**
15461
+ *
15462
+ * This is the server where a `tool-calls` webhook will be sent.
15463
+ *
15464
+ * Notes:
15465
+ * - Webhook is sent to this server when a tool call is made.
15466
+ * - Webhook contains the call, assistant, and phone number objects.
15467
+ * - Webhook contains the variables set on the assistant.
15468
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
15469
+ * - Webhook expects a response with tool call result.
15470
+ */
15471
+ server?: Server;
16209
15472
  toolCall: ToolCall;
16210
15473
  /**
16211
15474
  * The name of the tool, fixed to 'computer'
@@ -16226,27 +15489,8 @@ export interface ComputerToolWithToolCall {
16226
15489
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
16227
15490
  */
16228
15491
  function?: OpenAIFunction;
16229
- /**
16230
- * This is the server that will be hit when this tool is requested by the model.
16231
- *
16232
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
16233
- *
16234
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
16235
- */
16236
- server?: Server;
16237
15492
  }
16238
15493
  export interface TextEditorToolWithToolCall {
16239
- /**
16240
- * This determines if the tool is async.
16241
- *
16242
- * 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.
16243
- *
16244
- * 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.
16245
- *
16246
- * Defaults to synchronous (`false`).
16247
- * @example false
16248
- */
16249
- async?: boolean;
16250
15494
  /**
16251
15495
  * These are the messages that will be spoken to the user as the tool is running.
16252
15496
  *
@@ -16257,6 +15501,18 @@ export interface TextEditorToolWithToolCall {
16257
15501
  type: 'textEditor';
16258
15502
  /** The sub type of tool. */
16259
15503
  subType: 'text_editor_20241022';
15504
+ /**
15505
+ *
15506
+ * This is the server where a `tool-calls` webhook will be sent.
15507
+ *
15508
+ * Notes:
15509
+ * - Webhook is sent to this server when a tool call is made.
15510
+ * - Webhook contains the call, assistant, and phone number objects.
15511
+ * - Webhook contains the variables set on the assistant.
15512
+ * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
15513
+ * - Webhook expects a response with tool call result.
15514
+ */
15515
+ server?: Server;
16260
15516
  toolCall: ToolCall;
16261
15517
  /**
16262
15518
  * The name of the tool, fixed to 'str_replace_editor'
@@ -16271,27 +15527,8 @@ export interface TextEditorToolWithToolCall {
16271
15527
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
16272
15528
  */
16273
15529
  function?: OpenAIFunction;
16274
- /**
16275
- * This is the server that will be hit when this tool is requested by the model.
16276
- *
16277
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
16278
- *
16279
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
16280
- */
16281
- server?: Server;
16282
15530
  }
16283
15531
  export interface GoogleCalendarCreateEventToolWithToolCall {
16284
- /**
16285
- * This determines if the tool is async.
16286
- *
16287
- * 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.
16288
- *
16289
- * 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.
16290
- *
16291
- * Defaults to synchronous (`false`).
16292
- * @example false
16293
- */
16294
- async?: boolean;
16295
15532
  /**
16296
15533
  * These are the messages that will be spoken to the user as the tool is running.
16297
15534
  *
@@ -16309,27 +15546,8 @@ export interface GoogleCalendarCreateEventToolWithToolCall {
16309
15546
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
16310
15547
  */
16311
15548
  function?: OpenAIFunction;
16312
- /**
16313
- * This is the server that will be hit when this tool is requested by the model.
16314
- *
16315
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
16316
- *
16317
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
16318
- */
16319
- server?: Server;
16320
15549
  }
16321
15550
  export interface GoogleSheetsRowAppendToolWithToolCall {
16322
- /**
16323
- * This determines if the tool is async.
16324
- *
16325
- * 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.
16326
- *
16327
- * 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.
16328
- *
16329
- * Defaults to synchronous (`false`).
16330
- * @example false
16331
- */
16332
- async?: boolean;
16333
15551
  /**
16334
15552
  * These are the messages that will be spoken to the user as the tool is running.
16335
15553
  *
@@ -16347,27 +15565,8 @@ export interface GoogleSheetsRowAppendToolWithToolCall {
16347
15565
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
16348
15566
  */
16349
15567
  function?: OpenAIFunction;
16350
- /**
16351
- * This is the server that will be hit when this tool is requested by the model.
16352
- *
16353
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
16354
- *
16355
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
16356
- */
16357
- server?: Server;
16358
15568
  }
16359
15569
  export interface GoHighLevelCalendarAvailabilityToolWithToolCall {
16360
- /**
16361
- * This determines if the tool is async.
16362
- *
16363
- * 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.
16364
- *
16365
- * 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.
16366
- *
16367
- * Defaults to synchronous (`false`).
16368
- * @example false
16369
- */
16370
- async?: boolean;
16371
15570
  /**
16372
15571
  * These are the messages that will be spoken to the user as the tool is running.
16373
15572
  *
@@ -16385,27 +15584,8 @@ export interface GoHighLevelCalendarAvailabilityToolWithToolCall {
16385
15584
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
16386
15585
  */
16387
15586
  function?: OpenAIFunction;
16388
- /**
16389
- * This is the server that will be hit when this tool is requested by the model.
16390
- *
16391
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
16392
- *
16393
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
16394
- */
16395
- server?: Server;
16396
15587
  }
16397
15588
  export interface GoHighLevelCalendarEventCreateToolWithToolCall {
16398
- /**
16399
- * This determines if the tool is async.
16400
- *
16401
- * 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.
16402
- *
16403
- * 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.
16404
- *
16405
- * Defaults to synchronous (`false`).
16406
- * @example false
16407
- */
16408
- async?: boolean;
16409
15589
  /**
16410
15590
  * These are the messages that will be spoken to the user as the tool is running.
16411
15591
  *
@@ -16423,27 +15603,8 @@ export interface GoHighLevelCalendarEventCreateToolWithToolCall {
16423
15603
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
16424
15604
  */
16425
15605
  function?: OpenAIFunction;
16426
- /**
16427
- * This is the server that will be hit when this tool is requested by the model.
16428
- *
16429
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
16430
- *
16431
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
16432
- */
16433
- server?: Server;
16434
15606
  }
16435
15607
  export interface GoHighLevelContactCreateToolWithToolCall {
16436
- /**
16437
- * This determines if the tool is async.
16438
- *
16439
- * 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.
16440
- *
16441
- * 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.
16442
- *
16443
- * Defaults to synchronous (`false`).
16444
- * @example false
16445
- */
16446
- async?: boolean;
16447
15608
  /**
16448
15609
  * These are the messages that will be spoken to the user as the tool is running.
16449
15610
  *
@@ -16461,27 +15622,8 @@ export interface GoHighLevelContactCreateToolWithToolCall {
16461
15622
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
16462
15623
  */
16463
15624
  function?: OpenAIFunction;
16464
- /**
16465
- * This is the server that will be hit when this tool is requested by the model.
16466
- *
16467
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
16468
- *
16469
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
16470
- */
16471
- server?: Server;
16472
15625
  }
16473
15626
  export interface GoHighLevelContactGetToolWithToolCall {
16474
- /**
16475
- * This determines if the tool is async.
16476
- *
16477
- * 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.
16478
- *
16479
- * 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.
16480
- *
16481
- * Defaults to synchronous (`false`).
16482
- * @example false
16483
- */
16484
- async?: boolean;
16485
15627
  /**
16486
15628
  * These are the messages that will be spoken to the user as the tool is running.
16487
15629
  *
@@ -16499,14 +15641,6 @@ export interface GoHighLevelContactGetToolWithToolCall {
16499
15641
  * An example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument "reason". Then, in `messages` array, you can have many "request-complete" messages. One of these messages will be triggered if the `messages[].conditions` matches the "reason" argument.
16500
15642
  */
16501
15643
  function?: OpenAIFunction;
16502
- /**
16503
- * This is the server that will be hit when this tool is requested by the model.
16504
- *
16505
- * All requests will be sent with the call object among other things. You can find more details in the Server URL documentation.
16506
- *
16507
- * This overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.
16508
- */
16509
- server?: Server;
16510
15644
  }
16511
15645
  export type QueryParamsType = Record<string | number, any>;
16512
15646
  export type ResponseFormat = keyof Omit<Body, 'body' | 'bodyUsed'>;
@@ -17102,9 +16236,9 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
17102
16236
  /**
17103
16237
  * No description
17104
16238
  *
17105
- * @tags Chat
16239
+ * @tags Chats
17106
16240
  * @name ChatControllerListChats
17107
- * @summary List chats
16241
+ * @summary List Chats
17108
16242
  * @request GET:/chat
17109
16243
  * @secure
17110
16244
  */
@@ -17172,19 +16306,19 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
17172
16306
  /**
17173
16307
  * @description Creates a new chat. Requires at least one of: assistantId/assistant, sessionId, or previousChatId. Note: sessionId and previousChatId are mutually exclusive.
17174
16308
  *
17175
- * @tags Chat
16309
+ * @tags Chats
17176
16310
  * @name ChatControllerCreateChat
17177
- * @summary Create chat
16311
+ * @summary Create Chat
17178
16312
  * @request POST:/chat
17179
16313
  * @secure
17180
16314
  */
17181
- chatControllerCreateChat: (data: CreateChatDTO, params?: RequestParams) => Promise<HttpResponse<CreateChatStreamResponse | Chat, any>>;
16315
+ chatControllerCreateChat: (data: CreateChatDTO, params?: RequestParams) => Promise<HttpResponse<Chat | CreateChatStreamResponse, any>>;
17182
16316
  /**
17183
16317
  * No description
17184
16318
  *
17185
- * @tags Chat
16319
+ * @tags Chats
17186
16320
  * @name ChatControllerGetChat
17187
- * @summary Get a specific chat by ID
16321
+ * @summary Get Chat
17188
16322
  * @request GET:/chat/{id}
17189
16323
  * @secure
17190
16324
  */
@@ -17192,9 +16326,9 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
17192
16326
  /**
17193
16327
  * No description
17194
16328
  *
17195
- * @tags Chat
16329
+ * @tags Chats
17196
16330
  * @name ChatControllerDeleteChat
17197
- * @summary Delete chat
16331
+ * @summary Delete Chat
17198
16332
  * @request DELETE:/chat/{id}
17199
16333
  * @secure
17200
16334
  */
@@ -17202,13 +16336,13 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
17202
16336
  /**
17203
16337
  * No description
17204
16338
  *
17205
- * @tags Chat
16339
+ * @tags Chats
17206
16340
  * @name ChatControllerCreateOpenAiChat
17207
- * @summary Create chat using OpenAI Responses API format
16341
+ * @summary Create Chat (OpenAI Compatible)
17208
16342
  * @request POST:/chat/responses
17209
16343
  * @secure
17210
16344
  */
17211
- chatControllerCreateOpenAiChat: (data: OpenAIResponsesRequest, params?: RequestParams) => Promise<HttpResponse<any, any>>;
16345
+ chatControllerCreateOpenAiChat: (data: OpenAIResponsesRequest, params?: RequestParams) => Promise<HttpResponse<ResponseObject | ResponseTextDeltaEvent | ResponseTextDoneEvent | ResponseCompletedEvent | ResponseErrorEvent, any>>;
17212
16346
  };
17213
16347
  session: {
17214
16348
  /**
@@ -18245,7 +17379,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
18245
17379
  *
18246
17380
  * @tags Workflow
18247
17381
  * @name WorkflowControllerFindAll
18248
- * @summary [BETA] Get Workflows
17382
+ * @summary Get Workflows
18249
17383
  * @request GET:/workflow
18250
17384
  * @secure
18251
17385
  */
@@ -18255,7 +17389,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
18255
17389
  *
18256
17390
  * @tags Workflow
18257
17391
  * @name WorkflowControllerCreate
18258
- * @summary [BETA] Create Workflow
17392
+ * @summary Create Workflow
18259
17393
  * @request POST:/workflow
18260
17394
  * @secure
18261
17395
  */
@@ -18265,7 +17399,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
18265
17399
  *
18266
17400
  * @tags Workflow
18267
17401
  * @name WorkflowControllerFindOne
18268
- * @summary [BETA] Get Workflow
17402
+ * @summary Get Workflow
18269
17403
  * @request GET:/workflow/{id}
18270
17404
  * @secure
18271
17405
  */
@@ -18275,7 +17409,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
18275
17409
  *
18276
17410
  * @tags Workflow
18277
17411
  * @name WorkflowControllerDelete
18278
- * @summary [BETA] Delete Workflow
17412
+ * @summary Delete Workflow
18279
17413
  * @request DELETE:/workflow/{id}
18280
17414
  * @secure
18281
17415
  */
@@ -18285,7 +17419,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
18285
17419
  *
18286
17420
  * @tags Workflow
18287
17421
  * @name WorkflowControllerUpdate
18288
- * @summary [BETA] Update Workflow
17422
+ * @summary Update Workflow
18289
17423
  * @request PATCH:/workflow/{id}
18290
17424
  * @secure
18291
17425
  */
@@ -18728,39 +17862,6 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
18728
17862
  */
18729
17863
  testSuiteRunControllerRemove: (testSuiteId: string, id: string, params?: RequestParams) => Promise<HttpResponse<TestSuiteRun, any>>;
18730
17864
  };
18731
- metrics: {
18732
- /**
18733
- * @description Use GET /metric instead
18734
- *
18735
- * @tags Analytics
18736
- * @name AnalyticsControllerFindAllDeprecated
18737
- * @summary List Billing Metrics
18738
- * @request GET:/metrics
18739
- * @deprecated
18740
- * @secure
18741
- */
18742
- analyticsControllerFindAllDeprecated: (query?: {
18743
- /**
18744
- * Convert date & and time to provided timezone. https://popsql.com/learn-sql/postgresql/how-to-convert-utc-to-local-time-zone-in-postgresql
18745
- * @example "PST"
18746
- */
18747
- timezone?: string;
18748
- /**
18749
- * This will include calls with a createdAt timestamp greater than or equal to the specified value.
18750
- *
18751
- * If not provided, defaults to the org's current period start.
18752
- * @format date-time
18753
- */
18754
- rangeStart?: string;
18755
- /**
18756
- * This will include calls with a createdAt timestamp less than the specified value.
18757
- *
18758
- * If not provided, the default value will be the current timestamp.
18759
- * @format date-time
18760
- */
18761
- rangeEnd?: string;
18762
- }, params?: RequestParams) => Promise<HttpResponse<Metrics[], any>>;
18763
- };
18764
17865
  analytics: {
18765
17866
  /**
18766
17867
  * No description